Dropout nasıl çalışır? Eğitim ve inference sırasında davranışı neden farklıdır?
Cevap
Dropout, eğitim sırasında her forward pass'te nöronların rastgele bir kısmını (oran p, örneğin 0.1–0.5) sıfırlayan bir regularization tekniğidir. Ağ tek bir nörona aşırı güvenemez ve daha dağıtık, sağlam temsiller öğrenir. Bu, örtük olarak birçok alt ağın ensemble'ını eğitmeye benzetilir.
Eğitim ve inference farkı
- Eğitimde: Nöronlar
polasılıkla sıfırlanır. Kalanlar1/(1-p)ile ölçeklenir (inverted dropout). Böylece aktivasyonların beklenen değeri değişmez. - Inference'ta: Dropout kapatılır, tüm nöronlar kullanılır. Ölçekleme eğitimde yapıldığı için ek işlem gerekmez.
PyTorch'ta bu geçişi model.train() ve model.eval() yönetir. eval() çağrılmazsa her tahmin rastgele değişir.
import torch, torch.nn as nn
drop = nn.Dropout(p=0.5)
x = torch.ones(8)
drop.train(); print(drop(x)) # bazı değerler 0, diğerleri 2.0
drop.eval(); print(drop(x)) # hepsi 1.0Pratik notlar
- Büyük veriyle eğitilen modern LLM'lerin pretraining aşamasında dropout genelde 0 veya çok düşüktür. Veri bol olduğu için overfitting asıl sorun değildir.
- Fine-tuning'de (örneğin LoRA dropout) ve küçük veri setlerinde hâlâ faydalıdır.
- CNN'lerde genelde BatchNorm + data augmentation tercih edilir, dropout daha çok sondaki fully connected katmanlarda kullanılır.
- MC Dropout: Inference'ta dropout açık bırakılıp birden çok tahmin alınarak belirsizlik (uncertainty) tahmini yapılabilir.
İlgili Derin Öğrenme soruları
- NumPy ile sayısal olarak kararlı (numerically stable) softmax ve cross-entropy loss yazın. Logit'lere göre gradyanı nedir?
- PyTorch ile bir sınıflandırma modeli için eksiksiz bir training loop yazın. Hangi adımlar sık unutulur?
- Transfer learning nedir? Önceden eğitilmiş bir modeli küçük bir veri setine nasıl fine-tune edersiniz?
- Embedding nedir? One-hot encoding'e göre avantajı nedir ve nerelerde kullanılır?
- Transformer mimarisini anlatın. Encoder-only, decoder-only ve encoder-decoder modeller arasındaki fark nedir?
- Self-attention nasıl çalışır? Scaled dot-product attention'ı NumPy ile yazın ve neden sqrt(d_k) ile bölündüğünü açıklayın.
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.