AI Atlas
Orta· ~2 dk okuma#dropout#regularization#neural-network

Dropout

Rastgele Düşürme

Eğitim sırasında her ileri geçişte nöronların belirli bir oranını rastgele 'kapatan' düzenlileştirme tekniği — sinir ağlarında aşırı öğrenmeyi azaltır.

DROPOUTTur 1Tur 2Her ileri geçişte rastgele nöronlar kapanır; aşırı öğrenme azalır.
Tanım

Dropout, bir gizli katmandaki nöronların rastgele bir oranını eğitim sırasında her ileri geçişte sıfırlar. Tipik dropout oranı 0.2–0.5 arası seçilir. Bu, modelin belirli nöronlara fazla bel bağlamasını engeller; her bir nöron, bağlı olduğu diğer nöronların 'orada olmayabileceğini' düşünerek daha sağlam ve genel temsiller öğrenmek zorunda kalır.

Eğitim ve inference arasında davranış farklıdır. Eğitimde nöronlar oran kadar düşürülür ve geri kalanlar ölçeklenir (1/(1-p) ile çarpılır). Inference'da hiç düşürme yapılmaz, tüm nöronlar aktif. Bu yüzden PyTorch'ta model.train() ve model.eval() ayrımı kritiktir.

Dropout, 2012'deki AlexNet'le birlikte derin öğrenmenin yaygın bir aracı oldu. Bugün modern transformer'larda hâlâ kullanılır ama yerini büyük ölçüde batch normalization ve weight decay aldı. Yine de küçük veriyle eğitilen FCN ve LSTM'lerde yardımcıdır; ayrıca Monte Carlo Dropout denilen teknikle inference'da da bırakılarak modelin belirsizliğini ölçmek için kullanılır.

Benzetme

Bir takımda her maç farklı oyuncuları sahaya almak gibi. Her oyuncu, takım arkadaşının her zaman olmayabileceğini bildiği için kendi oynayışını çeşitlendirir, başkasına aşırı bağımlı olmaz. Sonuçta takım, herhangi bir kombinasyonla iyi oynamayı öğrenir. Dropout, sinir ağına bu disiplini öğretir — her nöron 'ben tek başıma da yararlı olabilmeliyim' demek zorunda kalır.

Gerçek dünyadan örnek

Bir küçük kelime gömme + iki gizli katman ağı, 50.000 örnekli metin sınıflandırma görevine eğitiliyor. Dropout olmadan eğitim doğruluğu %98, validation %72 — ciddi aşırı öğrenme. Her gizli katmandan sonra Dropout(0.5) eklenince eğitim doğruluğu %88'e iniyor ama validation %81'e çıkıyor. Aradaki makas azaldı, model gerçekten genelleşti.

Modern bir transformer'da ise durum farklı. GPT'nin attention katmanları iç içe çok parametreli. Dropout=0.1 gibi düşük bir oran kullanılır; weight decay ve learning rate schedule daha büyük rol oynar. Modelin büyüklüğü ve veri çeşitliliği arttıkça dropout ihtiyacı azalır.

Kod örnekleri
PyTorch · dropout kullanımıPython
import torch
import torch.nn as nn

class Classifier(nn.Module):
    def __init__(self, in_dim, hidden, out_dim, p=0.3):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(in_dim, hidden),
            nn.ReLU(),
            nn.Dropout(p),         # gizli katman 1 sonrası
            nn.Linear(hidden, hidden),
            nn.ReLU(),
            nn.Dropout(p),         # gizli katman 2 sonrası
            nn.Linear(hidden, out_dim),
        )

    def forward(self, x):
        return self.net(x)

model = Classifier(100, 64, 10)

# Eğitimde dropout aktif
model.train()
out = model(torch.randn(32, 100))

# Inference'da kapalı, tüm nöronlar aktif
model.eval()
with torch.no_grad():
    preds = model(torch.randn(32, 100))
Monte Carlo Dropout · belirsizlik tahminiPython
# Inference'da bile dropout açık tutarak çoklu tahmin al
model.train()  # dropout aktif
n_samples = 50

with torch.no_grad():
    preds = torch.stack([model(x) for _ in range(n_samples)])

mean_pred = preds.mean(dim=0)        # ortalama tahmin
uncertainty = preds.std(dim=0)        # belirsizlik
Ne zaman kullan
  • Küçük-orta veri ile FCN, LSTM, basit CNN eğitimleri
  • Aşırı öğrenme görüldüğünde — eğitim/validation makası büyükse
  • Belirsizlik tahmini için Monte Carlo Dropout
  • Transformer'da küçük oranla (0.1) uygulanır, dengeleyici etki
Ne zaman kullanma
  • Çok büyük modeller + büyük veri — dropout yerine weight decay ve data augmentation öncelikli
  • Batch norm zaten kullanılıyorsa — ikisi birden eğitim dinamiğini bozabilir
  • Inference'da varsayılan olarak — sadece MC Dropout amacıyla kasıtlı bırak
Sık yapılan hatalar

Eval moduna geçmeyi unutmak

model.eval() çağırmazsan inference sırasında dropout açık kalır, tahminler her seferinde farklı olur. Klasik bug — canlıya sızar.

Çok yüksek dropout oranı

0.7-0.8 oranlar genellikle modeli yetersiz öğrenmeye iter. 0.2–0.5 standart, transformer'larda 0.1 yeterli.

Convolutional katmanlarda standart dropout

Conv katmanlardan sonra düz Dropout pek etkili değildir; SpatialDropout2D (kanal düzeyinde) ya da DropBlock daha iyi sonuç verir.