React Flow mini map
🧠 ML Temelleriorta8 dk

Overfitting: Ezberlemek mi, Öğrenmek mi?

Aşırı öğrenme, regularization ve bias-variance dengesi

Önce bunlara göz at

🎯

30 saniyede özet · Ne öğreneceksin

  • Overfitting ve underfitting'i görsel olarak tanımak
  • Bias-variance tradeoff'u matematiksel olarak açıklamak
  • L1/L2 regularization ve Dropout'u karşılaştırmak
8 dk okuma·orta

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

Python
1import torch.nn as nn
2import torch.optim as optim
3
4model = 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ı (λ)
15optimizer = 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:
22best_val_loss = float("inf")
23patience, counter = 5, 0
24
25for 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