Dropout Layer
Dropout katmanı, eğitim sırasında etkinleşimlerin bir bölümünü rastgele sıfırlar; böylece ağ tek birime dayanamaz ve aşırı öğrenme azalır.
Dropout katmanı, düzenlileştirme sağlayan bir sinir ağı bileşenidir; her eğitim adımında girdilerinin p oranındaki bir bölümünü rastgele sıfıra ayarlar ve çıkarım sırasında tüm değerleri değişmeden geçirir. Herhangi bir birim herhangi bir adımda devre dışı kalabildiğinden, ağ birkaç belirli nörona veya bunlar arasındaki kırılgan eş uyarlamalara bağımlı olamaz; bu nedenle daha iyi genelleyen yedekli özellikler öğrenir ve aşırı uyum eğilimini eğitim verileri üzerinde azaltır. Geoffrey Hinton ve çalışma arkadaşları bu tekniği 2012'de tanıttı; Srivastava, Hinton ve diğerleri ise 2014'te ayrıntılı biçimde açıkladı. Bu katman, PyTorch, TensorFlow ve diğer derin öğrenme çerçevelerinin çoğunda yerleşik olarak bulunur; tam bağlantılı sınıflandırıcı başlıklarından Transformer mimarilerine kadar uzanan mimarilerde kullanılır.
Dropout Nasıl Çalışır#
Eğitim sırasında katman, her ileri geçiş için yeni bir rastgele maske örnekler; her elemanı 1 − p olasılıkla tutar ve p olasılıkla sıfırlar. Böylece her adımda farklı, inceltilmiş bir alt ağ eğitilir. Test zamanında kullanılan tam ağ, ağırlıklarını paylaşan üstel sayıdaki alt ağın ortalamasını yaklaşık olarak hesaplar; bu nedenle dropout genellikle düşük maliyetli topluluk eğitimi olarak tanımlanır. Her iki aşamada da beklenen aktivasyonu aynı tutmak için modern çerçeveler ters dropout kullanır: eğitim sırasında hayatta kalan değerler 1 / (1 − p) ile çarpılır, böylece çıkarım sırasında katman hiçbir işlem yapmaz. PyTorch'taki nn.Dropout, modülün eğitim veya değerlendirme moduna göre çalışır:
import torch
from torch import nn
torch.manual_seed(0)
dropout = nn.Dropout(p=0.5)
x = torch.ones(10)
# Eğitim modu: değerlerin yaklaşık yarısı sıfırlanır, kalanlar 1 / (1 - p) = 2 ile ölçeklenir
dropout.train()
print("Train:", dropout(x))
# Değerlendirme modu: katman tüm değerleri değişiklik yapmadan geçirir
dropout.eval()
print("Eval: ", dropout(x))Eğitim modunda on değerden altısı elenir ve kalan dördü 2.0 olur; böylece beklenen değer 1.0 olarak korunur. Değerlendirme modunda ise on değerin tümü 1.0 olarak kalır.
Yaygın Dropout Türleri#
- Uzamsal Dropout: PyTorch'taki
nn.Dropout2d, tüm özellik haritası kanallarını sıfırlar. Bu yaklaşım evrişimli ağlara uygundur; çünkü bir kanalın komşu pikselleri yüksek oranda ilişkilidir ve tek tek pikselleri elemek onları pek düzenlileştirmez. - Stokastik Derinlik (DropPath): Tek tek aktivasyonlar yerine her örnek için tüm artık dallar rastgele atlanır; bu, Görsel Transformer'ları ve modern CNN'leri eğitmenin standart bileşenlerinden biridir.
- Monte Carlo Dropout: Dropout çıkarım sırasında etkin kalır ve model aynı girdi üzerinde birkaç ileri geçiş yapar. Tahminlerin dağılımı, güvenlik açısından kritik sistemlerde model belirsizliği için düşük maliyetli bir kestirim sağlar. Gal ve Ghahramani bu yöntemi yaklaşık Bayesçi çıkarım olarak yorumlamıştır.
- DropConnect: Aktivasyonlar yerine tek tek ağırlıklar rastgele sıfırlanır; böylece her bağlantı kendi maskesine sahip olur.
Uygulamada Dropout#
Dropout oranları diğer tüm hiperparametreler gibi ayarlanır. Srivastava ve diğerleri, gizli birimlerin 0.5 olasılıkla elenmesinin çok çeşitli ağ ve görevlerde iyi sonuç verdiğini; girdi birimleri içinse 1'e daha yakın bir koruma oranının daha iyi olduğunu buldu. İlk Transformer'da p = 0.1 kullanıldı. Oranın çok yüksek olması yakınsamayı yavaşlatır ve eksik öğrenmeye yol açabilir; dropout'u doğrudan yığın normalizasyonundan önce yerleştirmek de eğitim ile test arasındaki varyans kayması nedeniyle doğruluğu düşürebilir. Birçok evrişimli sinir ağı, esas olarak yığın normalizasyonuna, veri artırmaya ve ağırlık çürümesine dayanır; dropout'u sınıflandırıcı başlığına saklar. Ultralytics YOLO26 sınıflandırma modelleri de bu örüntüyü izler: havuzlanmış 1.280 kanallı özelliklerle son doğrusal sınıflandırıcı arasında bir dropout katmanı bulunur ve bu katmanın oranını dropout eğitim argümanı belirler (varsayılan değer 0.0).
from ultralytics import YOLO
# Başlığında dropout katmanı bulunan bir YOLO26 sınıflandırma modeli yükle
model = YOLO("yolo26n-cls.pt")
# Küçük bir MNIST alt kümesinde, sınıflandırma başlığında %10 dropout kullanarak eğit
results = model.train(data="mnist160", epochs=10, imgsz=64, dropout=0.1)Gerçek Dünya Uygulamaları#
- Tıbbi Görüntü Analizi: Etiketli taramalar pahalıdır; bu nedenle tanı sınıflandırıcıları genellikle birkaç bin görüntü üzerinde önceden eğitilmiş bir omurga ağından ince ayar yapılarak eğitilir. Sınıflandırıcı başlığındaki dropout, başlığın bu kadar küçük bir kümedeki tekil vakaları ezberlemesini sınırlar.
- Doğal Dil İşleme: BERT gibi Transformer kodlayıcıları, ön eğitim ve ince ayar sırasında dikkat ağırlıkları da dahil tüm katmanlarda 0.1 olasılıklı dropout uygular.
Dropout ve İlgili Teknikler#
- Yığın Normalizasyonu: Yığın normalizasyonu, eğitimi kararlı hâle getirmek için her katmanın girdilerini standartlaştırır ve hiçbir birimi kaldırmadan yalnızca yığın istatistiklerinden kaynaklanan hafif bir gürültü ekler.
- Etiket Yumuşatma: Etiket yumuşatma, one-hot etiketleri yumuşatarak eğitim hedeflerini düzenlileştirir ve tüm aktivasyonları olduğu gibi bırakır.
- Budama: Budama, modeli küçültmek için önemi düşük ağırlıkları kalıcı olarak kaldırırken dropout'un sıfırlaması tek bir eğitim adımı sürer ve parametre sayısını değiştirmez.










