Aşırı öğrenme, regularization ve bias-variance dengesi
Önce bunlara göz at
30 saniyede özet · Ne öğreneceksin
Overfitting, modelin eğitim verisini o kadar iyi öğrenmesi ki test verisinde başarısız olmasıdır. Model kuralları öğrenmek yerine gürültüyü ezberler. Bu, ML'in en temel zorluklarından biridir.
📖Sınav Sorusu Ezberlemek
Bir öğrenci geçmiş sınav sorularının cevaplarını ezberler ama konuyu kavramaz. Yeni sorular geldiğinde başarısız olur. Overfitting tam da budur: modelin 'anlamaması', sadece ezberlemesi.
Yüksek Bias (Underfitting): Model çok basit, hem eğitim hem test hatası yüksek.
L2 (Ridge): Büyük ağırlıkları penalize eder. Ağırlıkları sıfıra yaklaştırır ama tam sıfır …
💡En iyi overfitting önlemi daha fazla veridir. Regularization ve erken durdurma (early stopping) ikinci sıradadır. Veri artırma (augmentation), sınırlı veriden daha fazlasını elde etmenin pratik yoludur.
✦ Quiz
Modelinizin eğitim doğruluğu %98, test doğruluğu %72. Ne yapmalısınız?
PyTorch'ta L2 regularization + Dropout ile overfitting'i önlemek
| 1 | import torch.nn as nn |
| 2 | import torch.optim as optim |
| 3 | |
| 4 | model = nn.Sequential( |
| 5 | nn.Linear(128, 64), |
| 6 | nn.ReLU(), |
| 7 | nn.Dropout(p=0.4), # %40 nöron rastgele kapatılır |
| 8 | nn.Linear(64, 32), |
| 9 | nn.ReLU(), |
| 10 | nn.Dropout(p=0.3), |
| 11 | nn.Linear(32, 10) |
| 12 | ) |
| 13 | |
| 14 | # weight_decay = L2 regularization katsayısı (λ) |
| 15 | optimizer = optim.Adam( |
| 16 | model.parameters(), |
| 17 | lr=1e-3, |
| 18 | weight_decay=1e-4 # λ = 0.0001, büyük ağırlıkları penalize eder |
| 19 | ) |
| 20 | |
| 21 | # Early stopping için validation kaybını izle: |
| 22 | best_val_loss = float("inf") |
| 23 | patience, counter = 5, 0 |
| 24 | |
| 25 | for epoch in range(100): |
| 26 | train_loss = train_one_epoch(model, train_loader) |
| 27 | val_loss = evaluate(model, val_loader) |
| 28 | if val_loss < best_val_loss: |
| 29 | best_val_loss = val_loss |
| 30 | counter = 0 |
| 31 | torch.save(model.state_dict(), "best_model.pt") |
| 32 | else: |
| 33 | counter += 1 |
| 34 | if counter >= patience: |
| 35 | print("Early stopping!") |
| 36 | break |
⚠️weight_decay değerini çok büyük seçmek underfitting'e yol açar. Tipik aralık 1e-5 ile 1e-3 arasıdır. Aynı zamanda model.eval() çağrısını unutmayın — Dropout eğitimde açık, değerlendirmede kapalı olmalı. Bu geçişi atlarsanız test doğruluğunuz gerçekten düşük çıkar.
✦ Quiz
Early stopping hangi veriye göre yapılmalıdır?
Daha derinlemesine