Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

8. ünite / 10

Aşırı öğrenme ve düzenlileştirme

Yanlılık–varyans, aşırı öğrenme belirtileri; dropout, ağırlık sönümü (L2 / AdamW), erken durdurma, veri artırma, BatchNorm.

Bu ünitenin sonunda

  • Kayıp eğrilerinden aşırı ve yetersiz öğrenmeyi ayırt etmek
  • Dropout'un eğitim ve çıkarımda nasıl farklı çalıştığını açıklamak
  • Ağırlık sönümünü ve erken durdurmayı uygulayıp etkisini ölçmek
  • Veri artırma ve daha çok verinin neden en güçlü düzenlileştirme olduğunu tartışmak

Ders notları

Az ve gürültülü veride büyük bir ağ, genel deseni değil tek tek örnekleri (gürültü dahil) ezberler: eğitim kaybı sıfıra iner, doğrulama kaybı bir noktadan sonra yükselir. Aradaki açık genelleme hatasıdır. Düzenlileştirme, modelin ezberleme kapasitesini kısıtlayan her yöntemdir.

Yöntemler

  • Dropout(p): eğitimde her ileri geçişte nöronların p oranını rastgele sıfırlar, kalanları 1/(1 − p) ile ölçekler. Ağ tek bir nörona güvenemez. model.eval()'da kapalıdır.
  • Ağırlık sönümü: her adımda ağırlıkları sıfıra doğru biraz çeker (L2 cezası). Adam ile AdamW'nun ayrık sönümü tercih edilir.
  • Erken durdurma: doğrulama kaybı belirli bir sabır süresince iyileşmezse dur ve en iyi ağırlıklara dön.
  • Veri artırma: döndürme, kırpma, renk oynatma; model aynı nesnenin çeşitlemelerini görür.
  • BatchNorm: ara aktivasyonları normalleştirir; eğitimi hızlandırır, hafif düzenlileştirici etkisi vardır.
Ltoplam = Lveri + λ · Σ w²

En güçlü düzenlileştirme daha çok ve daha çeşitli veridir. Düzenlileştirme fazla olursa model yetersiz öğrenir: iki eğri de yüksek kalır.

Görselleştirici

Aşırı öğrenme ve düzenlileştirme deneyi

Az ve gürültülü veride büyük bir ağ ezberler: eğitim kaybı düşer, doğrulama kaybı yükselir. Dropout, ağırlık sönümü (weight decay) ve erken durdurmayı aç; aynı tohumla iki eğrinin arasındaki farkın nasıl kapandığını gör.

Kendin dene

Düzenlileştirme deneyinde önce hiçbir şey açmadan eğit: doğrulama kaybı hangi turdan sonra yükselmeye başladı? Sonra yalnız dropout 0,3, sonra yalnız ağırlık sönümü 0,01, sonra yalnız erken durdurma ile tekrar et; her birinde son doğrulama kaybını ve eğitim–doğrulama açığını tabloya yaz. Eğitim örneğini 40'tan 200'e çıkar: düzenlileştirmesiz açık ne oldu?

Kod

Python: dropout, ağırlık sönümü ve erken durdurma
import copy
import torch
from torch import nn

model = nn.Sequential(nn.Linear(2, 64), nn.ReLU(), nn.Dropout(0.3),       # eğitimde nöronların %30'u sıfırlanır
                      nn.Linear(64, 64), nn.ReLU(), nn.Dropout(0.3),
                      nn.Linear(64, 1))
opt = torch.optim.AdamW(model.parameters(), lr=0.01, weight_decay=0.01)  # ayrık ağırlık sönümü

def egit_bir_tur(): ...                                  # 5. ünitedeki döngü
def dogrula() -> float: ...

best, best_state, sabir, bekle = float('inf'), None, 15, 0
for epoch in range(500):
    egit_bir_tur()
    va = dogrula()
    if va < best - 1e-4:
        best, best_state, bekle = va, copy.deepcopy(model.state_dict()), 0
    else:
        bekle += 1
        if bekle >= sabir:                               # 15 turdur iyileşme yok: dur
            print('erken durdurma, tur', epoch)
            break
model.load_state_dict(best_state)                        # en iyi doğrulama kaybındaki ağırlıklara dön

Colab defteri

PyTorch tarayıcıda çalışmaz; gerçek kodu Google Colab'da (ücretsiz GPU ile) çalıştır. Defteri indir, colab.research.google.com adresinde "Dosya → Not defteri yükle" ile aç, "Çalışma zamanı → Çalışma zamanı türünü değiştir → T4 GPU" seç ve hücreleri sırayla çalıştır.

Defteri indir (.ipynb)

Sık yapılan hatalar

  • Dropout'u çıkarımda açık bırakmak (model.eval() unutulur): her tahmin farklı çıkar.
  • Erken durdurmada son ağırlıkları kullanmak: en iyi turdaki ağırlıklara (state_dict kopyası) dönülmeli.
  • Adam ile weight_decay'i L2 sanmak: Adam'da uyarlamalı ölçekle karışır; ayrık sönüm için AdamW kullan.
  • Aşırı öğrenmeyi yalnız eğitim doğruluğuna bakarak değerlendirmek: doğrulama eğrisi olmadan görülmez.

Yazılım mühendisliği bağlantısı

Düzenlileştirme denemeleri birer kontrollü deneydir: her seferinde tek bir şeyi değiştir.

  • Aynı tohum ve aynı veri ayrımıyla karşılaştır (bu sayfadaki deney gibi); farkın gürültü olmadığından emin olmak için birkaç tohumla tekrarla.
  • Sonuçları ablasyon tablosu olarak raporla: temel, +dropout, +sönüm, +erken durdurma.

Kendini sına

  1. Dropout(0,5) çıkarımda (model.eval()) ne yapar?

  2. Erken durdurma neye bakarak durur?

  3. Eğitim ve doğrulama kaybının ikisi de yüksek kalıyorsa ne yapılmalı?

  4. Ağırlık sönümü (L2) ağırlıklara ne yapar?

Bu üniteden sonra bitirme projesinde

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç