Derin Öğrenme Uygulamalarında Başarım İyileştirme Yöntemleri (Regularization)

Necmettin Çarkacı
11 min readOct 20, 2017

--

Her hangi bir problemi makine öğrenmesi yöntemi ile çözmeye çalıştığımızda elimizdeki veri setinin iyi bir model oluşturmak için yeterli olup olmadığını hakkında başlangıçta net bir bilgimiz yoktur; oluşturacağımız modelin bizi overfitting’e mi yoksa underfitting’e mi götüreceğini tam olarak bilemeyiz. Bununla birlikte belli başlı iyileştirme yöntemlerinin uygulanmasıyla modelin başarımının arttırılabileceğine dair ön bilgiye sahibiz. Bu nedenle başarım iyileştirme yöntemlerini modelden bağımsız, modelin başarımını artıran harici bir parametre olarak düşünebiliriz.

Şekil 1: Perseptron Hesaplama Akışı[10]

Şekil 1'de basit yapay sinir ağı modelinde de görüleceği üzere başarım iyileştirme/regülasyon (Regularization) işlemi, modelin başarımının ölçüldüğü y=f(x.w)+b şeklindeki maliyet (cost) fonksiyonuna bağımsız bir parametre daha eklenerek modeldeki “w” ağırlıklarını (weight) problemi daha uygun çözecek şekilde hesaplanma işlemi olarak tanımlanabilir. Bu anlamda regularization aslında hata(loss) fonksiyonuna eklenen bağımsız bir parametredir denebilir.

y=f(x.w)+b cost fonksiyonuna uygulanan, regülasyon işlemlerinden sadece “w” ağırlıkları (weight) etkilenmekte, “b” bias değerlerine yönelik regülasyon işlemi yapılmamaktadır.

Regularization teknikleri genelde tasarlanan modelde ezberleme (overfitting) önleyerek başarımı artırmak için kullanılmaktadır. Buna ek olarak başarımı düşürmeden modelin karmaşıklığını (complexity) azaltmak için de kullanıldığı durumlar vardır. Aynı başarım oranını devam ettirerek daha basit, boyutu küçük model tasarlanması, genelde mobil ortamlar gibi kaynakların (işlemci gücü, bellek vb.) sınırlı olduğu yerlerde önemli olmaktadır. Eğer geliştirdiğiniz model mobil ortamda çalışacaksa desktop veya web ortamına göre mutlaka bazı iyileştirmeler yapmanız gerekiyor. Mobil ortamlardaki pil, bellek, işlemci gibi kaynak kısıtları hepimizn malumu.

Derin öğrenme mimarilerinde en sık kullanılan regülasyon teknikleri aşağıdaki gibidir;

Veri Setinin Boyutunu Artırma (Dataset Augmentation)

Elimizde ne kadar fazla sayıda veri olursa model o kadar iyi öğrenecektir; bu bilinen bir gerçek. İyi öğrenme beraberinde yüksek başarımı da getirecektir. Verinin fazla olması model başarımı artımının yanı sıra ezberlemeyi (overfitting) de önleyecektir. Verinin boyutunun az olduğu durumlarda veri setini artırmak için kullanılan yöntemler arasında ilk sırada sentetik veri üretilmesi gelmektedir.

Sentetik Veri Üretmek :

Sentetik veri üretmek veya veri setinin boyutunu artırmak için herkesin üzerinde hem fikir olduğu genel geçer bir yöntem yok. Bununla birlikte bu konuda takip edilen genel bir prensip var;

“Ellimizdeki veri seti problemin gerçek dünyadaki karmaşıklığını olabildiğince yansıtsın.”

Verisetini bu prensibe ne kadar uydurabilirsek, başarım da o oranda artacaktır. Bu anlamda verinin farklı versiyonlarının verisetinde bulunması, verisetinin prensibe uygunluğunu artıracaktır. Bu nedenle verinin farklı varyasyonlarını, farklı boyuttaki görünümleri verisetine dahil edilerek verisetinin boyutu başarımı artıracak şekilde büyütülür. Sentetik veri üretme özellikle resim ve ses tanıma problemlerinde sıkça kullanılmakta ve başarımı arttırdığı bilinmektedir. Resim tanıma problemlerinde Şekil 2'de örnek kedi resminde uygulaması görülen resmi çevirme, yeniden boyutlandırma, belli bir kısmını alma, resmi rastgele kesme, resme gürültü (Gaussian noise vb.) ekleme vb. gibi sentetik veri üretme teknikleri sıkça kullanılmaktadır.

Şekil 2 : Sentetik Veri Üretme Örneği[4]

Sentetik veri ile veri setinin boyutunun artırılması belli oranda overfitting’i önlese bile, genelde yetersiz kalmaktadır. Çünkü oluşturulan sentetik veriler, belli miktarda farklılaşma olsa bile mevcut veri seti ile korelasyonunu korumaya devam edecektir. Bu nedenle veri seti artırma yöntemi genelde diğer regülasyon yöntemleri ile birlikte kullanılmaktadır.

Gürültü Ekleme İşlemi

Gürültü ekleyerek modelin başarımı artırma işlemi dört şekilde yapılmaktadır;

Modelin girdilerine, yani öğrenme için elimizde olan verisetine gürültü ekleme.

Mevcut veri setinde bulunan veriler üzerinde oynamalar yapılarak, filtrelerden geçirilerek gürültülü veriler oluşturulur. Oluşturulan bu yeni veriler, veri setine katılarak modelin eğitilmesinde kullanılır. Böylece veri setinin boyutu artırılarak başarım göreceli olarak artırılır. Bu yöntem bir önceki bölümde açıklanan dataset augmentation’a da örnektir.

Modelin gizli katmanlarına gürültü ekleme.

Modelin gizli katmanlarına gürültü ekleme işlemi ilerleyen bölümlerde açıklanacak dropout yöntemi ile yapılmaktadır. Gizli katmana (hidden layer) eklenen gürültü benzer şekilde modelin başarımını artırarak overfittig’i engellemektedir. Gizli katmana gürültü eklenmesi, modelin başarımı açısından gizli katmanların manipulasyonu sağlayan bir diğer yöntem olan parametre paylaşımı (parameter sharing) yönteminden daha etkili olduğu bilinmektedir.

Modelin ağırlık parametrelerine gürültü ekleme

Modeldeki ağırlıklara (weight) gürültü eklenerek modelin başarımında iyileştirmeler yapılabilmektedır. Bu teknik genelde Recurrent Neural Network (RNN)’de kullanılmaktadır.

Loss fonksiyonuna, gürültüyü parametre olarak ekleme

Veri setinde yanlış etiketlenmiş verilerin olması doğal bir durumdur. Çoğu veri kümesinin y etiketlerinde bir miktar hata vardır. Bu durum y’nin yanlış olduğu durumlarda hatayı hesaplayan log p(y | x) fonksiyonunu maksimize edecektir. Doğal olarak model bu durumdan etkilenecektir. Bunu önlemenin yollarından biri etiketler üzerindeki gürültüyü model üzerinde tanımlamaktır. Örneğin, küçük bir e sabiti için, eğitim setinin 1-e olasılık değeri ile doğru olduğunu ve diğer olası etiketlerin herhangi birinin de doğru olabileceğini varsayabiliriz. Bu varsayım, açıkça gürültü örnekleri çizmek yerine gürültüyü analitik olarak maliyet fonksiyonuna dahil etmek demektir.

Düğüm Seyreltme (Dropout Layer)

İlk olarak 2014 yılındaki Dropout: A Simple Way to Prevent Neural Networks from Overfitting isimli makalede ortaya atılmıştır. Özetle hidden ya da input layerdan belli kuralla göre (eşik değeri kullanarak ya da rastgele) belli nodelar kaldırılması tekniğidir. Örneğin Şekil 3'de görüleceği üzere eşik değeri (treshold) olarak 0.5 belirlendiği bir ağ modelinde dropout uygulandığında dropout uygulanan gizli katmandaki node sayısı bir sonraki katmanda yarıya düşürülmüştür.

Şekil 3 : Dropout ile nöron azaltma örneği: dropout değeri 0.5 [2]

Dropout tekniği genelde tam bağlı katmanlarda (fully-connected layer) sonra kullanılır. Dropout kullanılarak fully-connected layerlardaki bağlar koparılır. Böylece node’lar birbiri hakkında daha az bilgiye sahip olur ve bunun doğal sonucu olarak node’lar birbirlerinin ağırlık değişimlerinden daha az etkilenirler. Bu nedenle dropout yöntemi ile daha tutarlı (robust) modeller oluşturulabilmektedir. Aynı zamanda her bir katmanda farklı hidden unit kombinasyonları birbiriyle çalıştığı için daha iyi bir öğrenme gerçekleşecektir. Bu anlamda dropout kullanıldığında gizli katmanların random forest gibi ensemble çalıştığı düşünülebilir. Bu durum da model için hem zamandan hemde başarım açısından daha iyi performans sağlayacaktır. Şekil 4'de dropout kullanılan ve kullanılmayan durumlara ait örnek başarım grafiğinde de görüleceği üzere dropout sonrasında overfitting azalarak modelin başarımı artmıştır. Dropout yöntemi derin öğrenme yöntemlerinde en sık kullanılan iyileştirme (regularization) yöntemlerinden biridir.

Şekil 4 : Dropout uygulandığı ve uygulanmadığı durumlarda başarım değişim örneği[3]

Dropout çalışma mantığı bir binayı inşaa etmeye çalışan bir grup işçi analojisiyle daha kolay anlatılabilir. Bir grup işçinin bir binayı inşa etmek için çalıştığını ve her birinin bir iş için uzmanlaştığını ve sadece o işi yaptığını düşünelim. Böyle bir durumda işçilerden biri yanlış yaptığında veya hastalanıp işe gelmediğinde diğer işçilerin onun yerini doldurması zor olacaktır ve durum işin ilerleyişini büyük oranda etkileyecektir. Bunun yerine iş veren her hafta işçilerden bir kaçına izin vererek (dropout) diğer işçilerden onların yerini doldurmalarını bekleyerek, her işçiden diğer işçilerin yerini doldurabilecek asgari bilgileri öğrenmesini sağlayabilir. Böylece herhangi bir işçi yanlış yaptığında ya da yokluğunda, onun yerini doldurabilecek, sistemin aksamasını engelleyecek bir sistem inşaa edilmiş olacaktır.

Yoğun-Seyrek-Yoğun Ağ ile Eğitim (Dense-Sparse-Dense Training)

2016 yılında DSD: Regularizing Deep Neural Networks with Dense-Sparse-Dense Training Flow isimli makalede ortaya atıldı. NLP, vision gibi farklı alanlardaki problemler üzerinde test edildi ve iyi sonuçlar verdiği gözlendi. Tek bir fully connected katmanda yapılan işlemi yoğun -> seyrek -> yoğun şeklinde üç katmana bölerek yapmaktadır. Böylece ağırlıkların birbirine etkisi başta azaltıllmakta sonra tekrar aralarında bağ kurularak yeni bilgiler öğrenmesi sağlanmaktadır. Bu durumda ayrıntılı öğrenmeden kaynaklanan overfittig problemini engellemektedir. Ağ yapısının başlarında sparse sonlara doğru fully connected kullanılması daha verimli sonuçlar vermektedir. Seyrek (Sparse) ağlarda hafıza daha az kullanıldığı için matrix çarpım işlemleri daha hızlı yapılacaktır. Bu anlamda Dense-Sparse-Dense ağlar hem hız hem performans açısından modelin iyileştirilmesinde kullanılmaktadır.

Şekil 5 : Yoğun-seyrek-yoğun yöntemi sembolik gösterim[5]

Algoritma :

  1. Yoğun (Dense) : Dense olarak öğren. Amaç hangi weightlerin önemli olduğunu tespit etmek, final weightlere ulaşmak değil.
  2. Seyrek (Sparse) : Dropout ile belli treshold altındaki weightleri sil ve modeli sparse hale getir. Modeli tekrar train et. Böylece önemli bağlantıları öğren.
  3. Yoğun (Dense) : Küçük learning rate ile modeli tekrar train et ve ağı tekrar dense hale getir. Yeni bilgiler öğren.

Ezberlemeden Önce Durdurma (Early Stoping)

Şekil 6 : Test ve Validasyon veri seti gösterimi[6]

Validation Dataset : Validation set, test veri setinin öğrenme sırasındaki temsili halidir. Training set içerisinden seçilir fakat optimizasyon sırasında kullanılmaz. Backprobagation ile parametrlerin güncellenmesinde kullanılır. Bu nedenle öğrenme sürecini doğrudan etki eder. Her iterasyon sonunda (epoch) validation set ve test set ile modelin başarımı ayrı ayrı ölçülür. Validation set ile elde edilen sonuç backprobagation işleminde kullanılırken, test veri setinin sonucu öğrenme işleminin hiç bir basamağında kullanılmaz. Test veri seti, öğrenme sürecinde adım adım modelin başarımını ölçen tamamen bağımsız bir test kümesidir. Buna karşı validation set her bir iterasyonda traninig setin farklı bir parçası olacak şekilde yenilenir ve modelin öğrenme sürecine doğrudan katkı sağlar

Early Stopping : Öğrenme sırasında validation loss ile test loss arasındaki fark açılmaya başladığı durumda model ezberliyor (overfitting) ya da gürültüyü öğreniyor (noisy) demektir. Bu durumda validation error artmaya başladığında eğitim durdurulur ve bir önceki adıma geri dönülür. Bir önceki adıma geri dönebilmek için eğitim esnasında her bir öğrenme adımında (epoch) bir önceki adımın verileri saklanmış olmalıdır. Şekil 7'deki grafikte görüleceği üzere öğrenmenin başlarında training error ve test error her ikisi birlikte azalmaktadır. Bununla birlikte örnekte kesikli çizgiyle belirtilen adımdan sonra test error arttığını görmekteyiz bu noktada ezberleme olmuştur ve bu adımın öncesinde öğrenme durdurulmalıdır. Overfitting işleminden sonra ağırlıklar üzerindeki değişiklikler modeli olumsuz etkileyecektir.

Şekil 7 : Early stopping: Test hatası > eğitim hatası [7]

Ezberleme (Overfitting) : Test loss ve training loss arasındaki farkın artması yani ezberlemenin olması (overfitting); modelin eğitim için kullandığı verileri ayrıntılı ve gereğinden fazla öğrendiği anlamı gelir. Eğitim verisetindeki verileri detaylı öğrenmenin dezavantajı öğrenme işleminin her bir adımında eğitim verisi içinden seçilen validation verileri için çok iyi daha iyi tahmin yapması, buna karşı daha önce hiç görmediği test verisetindeki veriler için gittikçe daha yanlış tahminler üretmesi anlamına gelmektedir. Şekil 8'de mavi çizginin eğitim veriseti, kırmızı çizginin de test veriseti için yanlış tahmin etme oranını verdiği örnek başarım grafiğine bakıldığında test ve training hata oranın gittikçe düştüğü, yani model başarımının gittikçe arttığı, bununla birlikte kesikli çizgiden sonra eğitim veriseti için hata tahmin oranın azalmaya devam ettiği buna karşı test veriseti için bu oranın arttığı görülmektedir. İşte bu ayrımın yaşandığı yerde model eğitim veriseti ezberlemeye başlamış (overfitting) demektir, bu noktada modelin eğitim durdurulmalıdır (early stopping).

Şekil 8 : Ezberleme[9]

Parameter Norm (Weight) Penalty L1 ve L2

Model içerisinde farklı ağırlık vektörleri aynı başarımı verebilmektedir. Örneğin f = x.w + b şeklinde tanımlı cost fonksiyonu olan bir modelde x = [1,1,1,1] matrisinin girdi vektörümüz olduğunu varsayalım. w1 = [1,0,0,0], w2 = [0.25,0.25,0.25,0.25] şeklide iki adette de ağırlık vektörümüz olsun . Bu durumda f1 = w1.x = 1 ve f2 = w2.x = 1 olarak hesaplanır ve her iki matris çarpımlarının sonucu aynı olur. Yani x girdi değeri için aynı cost değeri üreten birbirinden farklı birden fazla ağırlık vektörü olabilir. Bu durumda hangi ağırlık vektörü tercih edilmelidir? Model iyileştirmede çalışma mantığı küçük ağırlıklı değerlere (weight) sahip modelin büyük ağırlıklara sahip modele göre daha basit, yorumlanabilir olduğu varsayımına dayanır. Bu nedenle büyük değer üreten ağırlıklar yerine düşük değerli ağırlıkları tercih etmek başarımı artıracak, ezberlemeyi önleyecektir. Bunun içinde cezalandırma (penalth) fonksiyonları kullanılarak modelin ağırlıkları sıfır veya sıfıra yakın değerlerde tutulmaya çalışılır. Cezalandırma (penalthy) işlemi için yaygın olarak L1 ve L2 fonksiyonları kullanılır.

Yukarıdaki maliyet (cost) fonksiyonuna L2 uyguladığımızda f1 = w1.x = 1.0 ve f2 = w2.x = 0.25 değerini verecektir. L2'ya göre w2 vektörü daha düşük loss değeri ürettiği için tercih edilecektir. Burada w2'nin daha düşük L2 değerine sahip olması; w2'nin w1'e göre daha küçük değere sahip ağırlıklardan oluşması ve bu ağırlıkların vektör içinde normal dağılıma sahip olmasından kaynaklanmaktadır. Şekil 9'da grafikte ağırlıkların değer histogramı verilen şekilde görüleceği üzere Şekil 11'de L2 uygulandığı durumda normal dağılıma sahip ağırlıklar Şekil 10'da L1 uygulandığı duruma göre varlığını korumaya devam etmektedir.

Şekil 9 : Regülasyon uygulanmamış ağırlık histogramı[2]
Şekil 10 : L1 uygulanmış ağırlık histogramı[2]
Şekil 11 : L2 uygulanmış ağırlık histogramı[3]

L1 ve L2 genelde modelin loss fonksiyonu olarak kullanılmaktadır. Bu anlamda L1 veya L2 kullanılması en bilindik ve standart reguralization yöntemlerinden biridir. Bununla birlikte model için SVM, Softmax gibi farklı loss fonksiyonları kullanılabilir.

L1 Manhatten Distance:

Şekil 12 : L1 formülü

Bu yöntemde cezalandırma (penalty) weight’in absolute değerine göre yapılmaktadır. Bu yöntem bazı değerleri sıfır yapma eğilimindedir. Bu nedenle modelde budama yapmaya / sparcity üretmeye yatkındır. Aynı zamanda bazı değerlerin büyük kalmasına da izin verir. L1 şekil 12'de verilen formülü kullarak ilgili değer dönüşümlerini sağlar.

L2 Eucledean Distance:

Şekil 13 : L2 Formül

Bu yöntemde cezanlandırma işlemi ağırlık (weight) değerinin karesine göre yapılır. Tüm ağırlıkları daha küçük, sıfıra yakın değerlere götürme eğilimindedir. L2 şekil 13'de verilen formülü kullarak ilgili değer dönüşümlerini sağlar.

Transfer Learning

Çoklu Öğrenme (Multi-tasking Learning)

Verilen input’dan aynı temel ağ yapısını paylaşarak birden fazla şey öğrenen sistemlere çoklu öğrenen (multi-tasking learning) sistemler denir. Multi-task sistemlerde model iki veya daha fazla şeyi aynı anda öğrenmektedir. Model öğrenme esnasında ikinci bir bilgi daha öğreneceği için başarım doğal olarak artacaktır.

Uyarı : Multi-tasking uygulanabilmesi için task’lar arasında ortak bir durum olması gerekiyor. Örneğin : Resimdeki kişinin bir task’da insan, diğerinde kız olarak etiketlenebilmesi gibi.

Şekil 14 : Çoklu öğrenme örnek diyagramı[8]

Örneğin şekil 14'de temsil edilen model de, model veri seti üzerinden iki şeyi öğrenmeye çalışmaktadır; birincisi verilen fotoğrafın köpek mi, insan mı olduğu, ikinci verilen fotoğrafın kız mı, erkek mi olduğu. Normalde iki farklı amaç için çalışan bu iki modeli birleştirdiğimiz de model normalden de daha fazla bilgi öğreneceği için başarım artacaktır. Multi-tasking’de model her iki task’ı açıklamaya çalışacağı için daha genel bir model oluşturmaya çalışacak. Bu durumda bizi veri setine bağımlılıktan biraz daha uzaklaştıracak böylece overfitting engellenmiş olacaktır.

Model Uyarlama (Finetuning)

Bir veri seti için eğitilen model, daha sonra farklı bir veri seti için biraz daha eğitip kullanılan durumlar finetuning olarak adlandırılmaktadır. Bu yöntemde amaç; belli konuyu iyi öğrenmiş belirli bir seviyede ki modellerin üzerine yeni model inşa ederek önceki modelin bilgisinden yararlanmaktır. Örneğin tıbbi çalışma yapanlar, ellerinde az görüntü olduğu için ImageNet üzerinde çalışan networklerin üst kısımlarından kendi network’ünü başlatarak iyileştirme yapmaktadırlar. Finetuning en sık kullanılan iyileştirme yöntemlerindendir. Modelin parametreleri rastgele başlatmaktansa benzer domaindeki bir problemin ağırlıklarıyla başlatmak modelin başarımını arttırmaktadır. Hatta rastgele başlatmak yerine bir birinden bağımsız networklerin ağırlıklarıyla başlatıp başarım arttırdığı söyleyen çalışmalarda var.

Diğer Yöntemler

Regularization için sık kullanılan diğer yöntemler arasında;

  • Öğretimli öğrenme (Semi-Supervised Learning)
  • Bagging (boostrap aggration)
  • Ensemble models teknikleri sıralanabilir.

Kaynaklar :

[1] Yakup Genç, GTU Derin Öğrenme Ders Notları

[2] Cristina Scheau, “Regularization in deep learning

[3] Martin Gorner, TensorFlow and deep learning, without a PhD

[4] Francois Chollet, “Building powerful image classification models using very little data

[5] Song Han, Huizi Mao, Enhao Gong, Shijian Tang, William J. Dally, “ DSD: Regularizing Deep Neural Networks with Dense-Sparse-Dense Training Flow

[6]Rahul Dave, Why do we need validation?

[7] Early stopping

[8] Multitask Learning / Domain Adaptation

[9] deeplearning4j, “Early Stopping

[10] Resmin orijinal kaynağını bulamadım.

Originally published at https://www.linkedin.com on October 20, 2017.

--

--