Aşırı Öğrenme(Overfitting) ve Az Öğrenme(Underfitting)

Makine öğrenmesi veya yapay sinir ağları modellerimizden her seferinde bir kerede istediğimiz performansı elde edemeyebiliriz. Hatta çoğu zaman modellerimizden tek seferde iyi bir başarı elde edemeyiz. Eğitim işlemimizi gerçekleştirdikten sonra bazı analizler yapmalıyız ve yaptığımız analizler doğrultusunda karşılaştığımız sorunlara çözümler üretmeliyiz. Eğer modelimiz istediğimiz başarıyı göstermiyorsa karşılaştığımız sorun ya aşırı öğrenme(overfitting) ya da az öğrenme(underfitting) durumudur. Bu yazımızda bu iki sorunun ne olduğundan ve bu sorunlara nasıl çözüm bulabileceğimizden bahsedeceğiz.

Aşırı Öğrenme ve Az Öğrenme Nedir?

Öncelikle kısaca bu iki sorunun tanımını yapalım. Bildiğimiz gibi modellerimizi eğitirken verilerimizi eğitim ve test kümeleri olacak şekilde ikiye ayırıyorduk. Aşır öğrenme durumunda modelimiz eğitim kümesinde çok iyi bir performans verirken, test kümesinde daha başarısız bir performans gösterir. Eğitim kümesinden elde ettiği bilgileri genelleyemez ve bunun sonucunda test kümesinde daha başarısız bir performans gösterir. Bu duruma örnek olarak bir öğrencinin sınava girmeden önce bilgileri çok iyi bir şekilde ezberleyip ama sınava girince farklı türde sorular ile karşılaşıp sınavda başarısız olmasını verebiliriz. Az öğrenme durumunda ise modelimiz hem eğitim hem de test verilerinde başarısız bir performans gösterir. Bu duruma bir öğrencinin sınava hiç çalışmadan girip sınavdan da doğal olarak kötü almasını örnek olarak verebiliriz.

Bu iki sorunu görsel olarak kafamızda daha iyi oturtabilmek için bir örnek inceleyelim. Aşağıdaki resimde gördüğümüz gibi iki adet sınıfımız olsun ve bu iki adet sınıfın iki tane bağımsız değişkeni olsun. İki boyutta sınıflarımız için örnekler şekildeki gibi dağılsın.

aşırı öğrenme
Sınıf Dağılımları

İşin yapay sinir ağları kısmına geçmeden önce klasik bir makine öğrenmesi algoritması olan lojistik regresyon ile sınıflandırma yapıp farklı durumlarda nasıl bir model elde edeceğimizi görselleştirelim. Eğer az öğrenme durumu ile karşı karşıya isek aşağıdaki gibi bir model elde edebiliriz.

aşırı öğrenme
Az Öğrenme

Modelimiz görüldüğü gibi eğitim kümesinde sınıflandırmada pek de başarılı sayılmaz. Görüldüğü gibi modelimiz sınıf 1′ e ait olan örnekleri sınıflandırmada sıkıntı çekiyor. Örnek olarak eğitim ve test kümelerindeki doğruluk(accuracy) değerleri sırası ile %61.5 ve %59.8 olabilir.

Eğer karşılaştığımız sorun aşırı öğrenme ise aşağıdaki gibi bir model elde etme şansımız çok yüksek. Burada modelimiz çok keskin dönüşler yaparak eğitim kümesini çok iyi bir şekilde öğreniyor fakat test verilerine geçtiğimizde düzgün bir şekilde sınıflandırma yapamayacaktır. Doğruluk değerlerine örnek olarak resimde yazan değerler verilebilir.

aşırı öğrenme
Aşırı Öğrenme

Elde etmek istediğimiz ideal model aşağıdaki gibidir. Bu modelimiz eğitim kümesinden öğrendiği bilgileri iyi bir şekilde genelleyebilecektir ve sonuç olarak hem eğitim hem de test kümesinde başarılı bir performans ortaya koyacaktır.  

aşırı öğrenme
İdeal Durum

Çözüm Yolları

İki sorunun ne olduğuna değindikten sonra işin yapay sinir ağları kısmında çözüm yollarına geçebiliriz. Her ne kadar yapay sinir ağları için konuşuyor olsak da değineceğimiz çoğu konu klasik makine öğrenme algoritmaları için de geçerlidir.

Az Öğrenme İçin Çözüm Yolları

Az öğrenme, aşırı öğrenmeye göre önüne geçilmesi daha kolay bir sorundur. Bu sorunu gidermek için modelimizin kapasitesini artırmamız gerekir. Modelimizin kapasitesini modelin yapısında değişikliklere giderek artırabiliriz. Örnek olarak katmanlardaki nöron sayılarını artırabiliriz veya katman sayısını artırabiliriz. Bu sayede modelimiz eğitim kümesindeki verileri daha iyi bir şekilde öğrenecektir, fakat abarttığımız takdirde aşırı öğrenme ile karşı karşıya kalabiliriz.

Aşırı Öğrenme İçin Çözüm Yolları

Bu probleme iki şekilde yaklaşabiliriz:

  • Modeli daha fazla veri üzerinde eğitmek
  • Modelin karmaşıklığını azaltmak

Modelimizin aşırı öğrenme sorunuyla karşılaşmasının sebebi veri seti üzerinde böyle bir kapasitesinin olmasından dolayıdır. Bu durumda ya veri setimizin kompleksliğini artırmalıyız ki bunu daha fazla veri toplayarak veya veri çoğaltma(data augmentation) ile başarabiliriz ya da modelimizin kompleksliğini azaltmalıyız. Genel olarak bu yöntemlerin hepsine regülarizasyon(regularization) teknikleri denir. Bu tekniklere bir göz atalım.

Veri Çoğaltma(Data Augmentation)

Daha fazla veri toplama işlemi her zaman yapılması kolay bir işlem değildir, fakat resim sınıflandırma veya nesne tespiti gibi bilgisayarla görme(computer vision) problemleri için oluşturulmuş veri setlerinde belirli yöntemler ile veri setlerimizi genişletebiliriz. Örnek olarak resimlerimizi yatay çevirme, tepe taklak çevirme, parlaklık azaltma veya artırma, resmi rastgele kesme, resimleri farklı açlarda döndürme, gürültü ekleme gibi işlemler üzerinden geçirerek yeni hallerini veri setimize ekleyerek daha geniş bir veri setine sahip olabiliriz.

aşırı öğrenme
Yatay ve Tepetaklak Çevirme
aşırı öğrenme
Rastgele Kesme
aşırı öğrenme
Farklı Açılarda Döndürme

L2 Regülarizasyonu

Bu regülarizasyonun amacı yapay sinir ağı parametrelerimizin(ağırlık) değerini küçük tutmaktır. Yüksek değere sahip ağırlıklar dengesiz bir modelin göstergesidir. Yüksek ağırlık değerleri nöronların fonksiyonları üzerinde keskin geçişlere sebep olur ve bu yüzden de girdi değerlerimizdeki çok ufak değişiklikler, çıktılar üzerinde çok büyük etkilere neden olur. O zaman bir şekilde ağırlık değerlerini küçük tutmalıyız. Bunu yitim fonksiyonlarımız üzerinde ufak oynamalar ile elde edebiliriz. Örnek olarak ortalama kare hatası yitim fonksiyonumuza aşağıdaki gibi bir değişiklikte bulunalım.

aşırı öğrenme
L2 Regülarizasyonu Ortalama Kare Hatası

Burada yitim fonksiyonumuza eklediğimiz terimde bütün ağırlıklarımızın karesini toplayıp  λ/2m değerine bölüyoruz. Bu sayede eğer ağırlıklarımızın değerleri çok büyük olursa yitim değerimiz de artacaktır. O zaman modelin optimizasyonu sırasında devamlı ağırlık değerlerimiz düşecektir çünkü yüksek ağırlık değerleri yitim fonksiyonumuzun artmasına sebep olacaktır.

L1 Regülarizasyonu

L2 regülarizasyonundan tek farkı ağırlıkların karesi yerine ağırlıkların mutlak değerleri toplanır. Bu regülarizasyonda ağırlık değerleri 0.0 değerini almaya daha yatkındır.  Genel olarak L2 regülarizasyonu daha çok tercih edilir.

aşırı öğrenme
L1 Regülarizasyonu Ortalama Kare Hatası

Bırakma(Dropout)

Bu teknikte modelimizin eğitimi sırasında her bir yinelemede(iterasyon) verilen olasılık değerine göre her bir katmandaki nöronlar rastgele bir şekilde görmezden gelinir. Bu sayede bazı nöronları elimine ederek nöron sayımızı azaltırız ve daha basit bir model elde ederiz. Başka bir açıdan bakacak olursak da her bir yinelemede farklı farklı nöronlar elendiği için bütün nöronların ağırlık değerleri birbirine yakın bir şekilde dağılıp ağırlık değerleri arasında dengesizlikler oluşmayacaktır. Aşağıdaki örnekte farklı yinelemelerde bırakma işleminin farklı bir sonuçlar vereceğini inceleyebilirsiniz.

aşırı öğrenme
Bırakma(Dropout)

Erken Durdurma(Early Stopping)

Modelimizi eğitirken eğitim ve test kümesindeki yitim değerlerinin grafiğini çizip anlık olarak her bir yineleme için gözlemlemek bizim için önemlidir. Bu durumda test kümesinin yitim değerinin artmaya başladığı nokta bizim aşırı öğrenme ile karşı karşıya kaldığımız durumdur. Bu noktada eğitimi sonlandırarak aşırı öğrenmenin önüne geçebiliriz. Aşağıdaki grafiği incelediğimizde 50. yinelemede eğitimi durdurup olası bir aşırı öğrenme sorununu önleyebiliriz.

aşırı öğrenme
Erken Durdurma