KERAS İLE OVERFITTING ÖNLEME

Keras modelinde overfitting göstergesi: train ve validation loss eğrilerinin ayrışması

Eğittiğiniz Keras modeli train setinde %99 doğruluk üretiyor, ama test setine geçtiğinizde rakam birden %62'ye düşüyor. Bu klasik bir overfitting senaryosu: model eğitim verisini öğrenmek yerine ezberlemiş durumda. Sorun yalnızca metrikte değil, modelin canlı veride güvenilmez davranmasında. Bu yazıda dropout, L2 regularization ve early stopping üçlüsünü tek bir çözüm akışında nasıl birleştireceğinizi göreceksiniz.

Overfitting Neden Ortaya Çıkar?

Overfitting, modelin kapasitesi veri setinin taşıyabileceğinden büyük olduğunda ortaya çıkar. Ağ, sinyal yerine gürültüyü öğrenir: eğitim örneklerindeki rastgele dalgalanmalar, etiket hataları, dengesiz örneklem dağılımları model parametrelerine kazınır. Sonuçta train loss düşmeye devam ederken validation loss yükselmeye başlar — iki eğri arasındaki açılma, overfitting'in en net göstergesidir.

Pratikte birkaç tipik tetikleyici vardır:

  • Veri seti çok küçük, ama ağ derin ve geniş.
  • Çok fazla epoch boyunca, durdurma kriteri olmadan eğitim.
  • Düzenleme (regularization) tekniği hiç kullanılmamış.
  • Eğitim ve test dağılımı arasında sızıntı veya farklılık var.

Tanı: Train ve Validation Eğrilerini Okuyun

%99'a karşı %62 farkı tek başına bir şey söyler, ama nereye müdahale edeceğinizi history nesnesindeki eğriler söyler. Eğitim sırasında validation_split=0.2 ile bir doğrulama kümesi ayırın ve her epoch sonunda loss ve val_loss değerlerini çizdirin. Eğer val_loss belli bir epoch'tan sonra yükseliyorsa, modelin durması gereken nokta o eğrinin minimumudur.

Sinir ağında dropout etkisi: rastgele devre dışı bırakılan nöronlar ve bozulan bağlantı yolları

Dropout Katmanı: Rastgele Sönümleme

Dropout, her ileri geçişte nöronların belirli bir oranını rastgele sıfırlayarak ağı tek bir yola bağımlı olmaktan korur. Bu, ensemble benzeri bir etki üretir ve ezberlemeyi zorlaştırır. Yoğun (Dense) katmanlardan sonra Dropout(0.3) ile Dropout(0.5) arasında bir oran tipik başlangıçtır.

Pratik bir kalıp:

  • Dense(128) sonrası Dropout(0.4)
  • Dense(64) sonrası Dropout(0.3)
  • Çıkış katmanından hemen önce dropout KULLANMAYIN.

Dropout oranını arttırdıkça model daha az ezberler, ama çok yüksek değerler (0.7+) underfitting'e yol açabilir. Validation eğrisini izleyerek kademeli ayarlama yapın.

L2 Regularization: Ağırlıkları Cezalandırın

L2 (weight decay), büyük ağırlık değerlerini loss fonksiyonuna ek bir maliyet olarak yansıtır. Böylece model, az sayıda nöron üzerine aşırı yüklenmek yerine sinyali daha dağıtık öğrenir. Keras'ta katman bazında uygulanır:

Dense(128, activation='relu', kernel_regularizer=regularizers.l2(0.001))

Lambda değeri (0.001 gibi) küçük başlanmalı. Eğer train ve val loss birlikte yükseliyorsa lambda fazla, ikisi arası açıklık hâlâ büyükse lambda az demektir. L2'yi dropout ile birlikte kullanmak çoğu zaman tek başına kullanmaktan daha iyi sonuç verir; çünkü farklı mekanizmalar üzerinden düzenleme yaparlar. Katman seçenekleri ve parametre detayları için resmi API dokümantasyonuna başvurabilirsiniz.

Early Stopping: Doğru Anda Durun

Early stopping, val_loss artmaya başladığında eğitimi otomatik durduran bir callback'tir. En değerli özelliği restore_best_weights=True: model, validation kaybının minimum olduğu epoch'taki ağırlıklara geri döner.

Tipik konfigürasyon:

  1. monitor='val_loss' — izlenecek metrik.
  2. patience=10 — kaç epoch boyunca iyileşme beklenecek.
  3. restore_best_weights=True — en iyi ağırlıkları geri yükle.
  4. min_delta=0.001 — anlamlı iyileşme eşiği.

Patience değeri çok düşük olursa model henüz öğrenmeden durur; çok yüksek olursa overfitting'e zaman tanırsınız. 5-15 arası başlangıç için makuldür.

Çözüm Akışı: Üçünü Birlikte Uygulamak

Tek bir tekniği denemek yerine kademeli bir akış izleyin. Önce baseline modeli kaydedin (regülarizasyon yok), train/val eğrilerini görün. Ardından sırayla:

  1. Dense katmanlarına L2(0.001) ekleyin, val_loss'u tekrar ölçün.
  2. Dropout(0.3-0.5) katmanları ekleyin, açılmanın daraldığını gözlemleyin.
  3. EarlyStopping callback'ini fit() çağrısına geçin.
  4. Hâlâ açılma varsa veri artırma (data augmentation) veya daha küçük model deneyin.

Her adımdan sonra yalnızca bir parametreyi değiştirin — aksi halde hangi müdahalenin işe yaradığını ayıramazsınız. Bu disiplinli yaklaşım için Keras model geliştirme sürecinin tamamını derli toplu görmek isterseniz deep learning Keras eğitimi içeriğinden yararlanabilirsiniz.

Sık Yapılan Hatalar

Early stopping callback işaretçisi: en düşük validation loss epok noktasının grafik üzerinde gösterimi

Pek çok ekip dropout oranını çok yüksek tutarak modeli underfit hale getirir, sonra "regularization işe yaramıyor" sonucuna varır. Bir başka yaygın hata, dropout'u test sırasında manuel devre dışı bırakmaya çalışmaktır — Keras bunu zaten model.predict() sırasında otomatik yapar. L2 lambda değerini de büyük seçenlerin train loss'u bir türlü düşmez; bu da regülarizasyonun değil, kapasitenin eksik kullanıldığının işaretidir.

Son olarak validation seti sızıntısına dikkat edin: eğitim verisindeki normalizasyon istatistiklerini (mean/std) tüm veriden değil, sadece train kısmından hesaplayın. Aksi takdirde val_loss yapay olarak düşük çıkar ve overfitting'i fark etmezsiniz.

Üç tekniği birlikte uygulayan ve eğrileri her adımda izleyen bir akışla, %99/%62 farkını genellikle %92/%87 gibi sağlıklı bir aralığa indirebilirsiniz. Hedef mükemmel train doğruluğu değil, görmediği veride güvenilir tahmin yapan bir modeldir. Daha kapsamlı uygulama örnekleri için Keras eğitim materyallerini inceleyebilirsiniz.