Evrişimsel Sinir Ağında Niçin Dropout Kullanmamalısınız

Tuncer Ergin
4 min readOct 2, 2018

--

Dropout katmanı ne iş yapar?

Derin öğrenme algoritmalarında hangi katman ne iş yapar veya o işlemi nasıl yapar? Bu sorunun cevabını bütün deep learning kurslarında bulabilirsiniz fakat iş modelin algoritmasını yazmaya geldiğinde birçok sıkıntı yaşarsınız. Çünkü önce hangi katmanı yazacağınızı veya hangi katmanları hangi sıra ile yazacağınızı tam anlamıyla bilemeyebilirsiniz.

Bu yazıda Evrişimsel sinir ağlarında dropout katmanını niçin kullanmamanız gerektiğinden bahsetmeye çalışacağım.

Dropout

Bu yazıda dropout katmanının ne olduğu ve nasıl çalıştığını bildiğiniz varsayılmıştır. Eğer bilmiyorsanız bu makaleyi okuyarak öğrenebilirsiniz. Kısaca özetlemek gerekirse eğitim sırasında aşırı öğrenmeyi(overfitting) engellemek için bazı nöronları unutmak için kullanılanılır diyebiliriz.
Eğer ağınız çok büyükse, çok uzun süre eğitim yapıyorsanız veya veri sayınız çok az ise aşırı öğrenme riski taşıdığınızı unutmamanız gerekir.

Dropout’un çalışma şekli

Not: Tabiki evrişimsel sinir ağınızın son katmanları olan Fully Connected katmanlarından sonra dropout kullanabilirsiniz.

Keras’ta kullanım şekli

keras.layers.Dropout(rate, noise_shape=None, seed=None)

Dropout’ 0.5 ten başlayarak model maksimum performansa ulaşıncaya kadar sayıyı azaltabilirsiniz. (Fine Tuning)

Örnek:

model=keras.models.Sequential()
model.add(keras.layers.Dense(150, activation="relu"))
model.add(keras.layers.Dropout(0.5))

Unutmayın Dropout evrişimsel sinir ağında sadece Fully Connected katmanlarında kullanılabilir fakat diğer bölgelerinde kullanmayın. Bunun yerine evrişim katmanınlarında batch normalization kullanabilirsiniz. Bu modelinizi daha düzenli ve eğitim sırasında daha stabil olmasını sağlayacaktır.

Batch Normalization

Batch normalization evrişimsel sinir ağını daha düzenli hale getirmek için kullanılan başka bir yöntemdir.
Düzenleyici bir etkinin yanı sıra, batch norm aynı zamanda evrişimsel sinir ağının eğitim sırasında yok olma gradyanına bir direnç de verir. Bu da eğitim süresini azaltabilir ve modelin daha iyi performans göstermesini sağlayabilir.

Normalizasyon işleminin gösterimi

Keras’ta kullanım şekli

Keras kütüphanesinde Batch Norm’u kullanmak için aşağıdaki kodu kullanabilirsiniz. Daha detaylı bilgi için kerasın kendi sayfasına bakabilirsiniz.

keras.layers.BatchNormalization()

Batch norm ile evrişimsel sinir ağı mimarisi oluştururken;

Ayrıca, aktivasyon fonksiyonundan sonra batch norm’u ekleyebilirsiniz ancak yapılan çalışmalardaher iki yönteminde benzer performans gösterdiği gözlemlenmiştir.

Örnek:

model.add(Conv2D(60,3, padding = "same"))
model.add(BatchNormalization())
model.add(Activation("relu"))

Batch Norm ve Dropout​

Eğer modelinizin aşırı öğrenme konusunda bir sıkıntı yaşamayacağından emin olsanız bile Batc norm kullanmnın diğer yararlarından faydalanabilirsiniz. Batch norm’un düzenleyici etkisinden ötürü modern Evrişimsel sinir ağı mimarilerinde Dropout katmanının yerini almıştır.

“We presented an algorithm for constructing, training, and performing inference with batch-normalized networks. The resulting networks can be trained with saturating nonlinearities, are more tolerant to increased training rates, and often do not require Dropout for regularization.” Sergey Ioffe - Google Inc.

Dropout’un niçin son uygulamalarda uygulamanın yararına çalışmadığını soracak olursanız ,
lk olarak, dropout genellikle konvolüsyon katmanlarını düzenlerken daha az etkilidir.
Neden mi? Konvolüsyon katmanlar çok az parametreye sahip olduklarından, başlangıçta daha az düzenli hale gelmeye ihtiyaç duyarlar.
Dahası, özellik haritalarında kodlanmış uzamsal ilişkiler nedeniyle, aktivasyonlar yüksek derecede ilişkili olabilir. Buda dropoutu etkisiz hale getirir. (kaynak)

İkinci olarak dropoutun iyi olduğu yanlar artık tarihe karışmaktadır. Vgg16 gibi kültleşmiş modellerin sonunda Fully Connected denilen katmanlar bulunur. Bu modellerde aşırı öğrenmeyi(overfitting) önlemek için fully connected katmanların arasına dropout eklenmiştir.

Vgg16 mimarisi

Ne yazık ki, yeni mimariler bu fully connected katmanından uzaklaşmaya başladılar. Dense katmanlarını avg pooling katmanları ile değiştirerek hem modelin boyutu düşürülmüş hemde performansta önemli bir gelişme sağlanmıştır.

Gelin bunu bir örnekle açıklayalım

Batch norm’un, konvolüsyon katmanları arasına yerleştirildiğinde genelleme hatasını azalttığını test etmek için bir deneme oluşturuldu.

5 tane aynı yapıda model oluşturuldu ve her bir modelde konvolüsyon katmanları arasına sırası ile dropout, batch norm ve hiç birşey eklenmeyecek şekilde (control) ayarlandı.

Her bir modeli Cifar100 veri seti eğiterek, aşağıdaki sonuçları elde edildi.

Yukarıdaki grafikte de olduğu gibi batch norm kullanılan mimari daha yüksek bir performans göstermiştir.
Tekrar etmek gerekirse konvolüsyon katmanları arasında kullanılan dropout, modelin performansını kötü yönde etkileme eğiliminde olduğu için bu katmanı kullanmamaya özen gösterin.

Özet

Örnek Cnn Mimarisi

Özet olarak yukarıdaki gibi bir cnn mimarisinde Feature Learning katmanlarında Dropout yerine Batch Norm’u tercih edin. Classification katmanlarında ise Dropout kullanmaktan çekinmeyin.

--

--