Toplu ve bireysel güncellemeler arasında MLP'de normalleştirme farklılıkları var mı?


9

Aşırı uyumu kontrol etmeye yönelik bir yaklaşım olarak düzenlileşmeyi öğrendim ve bu fikri, bir araya getirdiğim geri yayılım ve Çok Katmanlı algılayıcının (MLP) basit bir uygulamasına dahil etmek istiyorum .

Şu anda aşırı uydurmayı önlemek için, çapraz doğrulama yapıyorum ve doğrulama setinde şu ana kadar en iyi skoru içeren ağı koruyorum. Bu iyi çalışıyor, ancak düzenlileştirme eklemek, düzenlileştirme algoritması ve parametresinin doğru seçiminde ağımın overfit olmayan bir modelde daha sistematik bir şekilde birleşmesini sağlayacaktır.

Güncelleme terimi için (Coursera ML dersinden) aldığım formül, örneğin her ağırlık için bir toplu güncelleme olarak belirtilir, hata yayılımından tüm eğitim seti için geçerli tüm deltalar toplandıktan sonra lambda * current_weight, kombine edilmeden önce bir ayarlama eklenir. delta, lambdanormalleştirme parametresi olan partinin sonunda çıkarılır .

Geri çoğaltma uygulamam, öğe başına ağırlık güncellemelerini kullanıyor. Bana göre sezgisel olarak iyi görünse de, sadece toplu yaklaşımı kopyalayamayacağımdan endişeliyim. Öğe başına daha küçük bir düzenleme süresi de işe yarıyor mu?

Örneğin lambda * current_weight / NN'nin eğitim setinin boyutu olduğu yerlerde - ilk bakışta bu makul görünmektedir. Konuyla ilgili hiçbir şey bulamadım ve bunun düzenli bir öğe başına güncelleme ile de işe yaramadığından, hatta farklı bir ad veya değiştirilmiş formülün altına girip girmediğini merak ediyorum.

Yanıtlar:


2

Düzenleme madde başına öğrenme ile de ilgilidir. İster toplu ister madde başına öğrenme yapıyor olun, lambda'yı bulmak için temel bir doğrulama yaklaşımıyla başlamayı öneririm. Bu en kolay ve en güvenli yaklaşımdır. Birkaç farklı değerle manuel olarak deneyin. örneğin 0.001. 0,003, 0,01, 0,03, 0,1 vb. Ve doğrulama kümenizin nasıl davrandığını görün. Daha sonra bu işlemi doğrusal veya yerel bir arama yöntemi kullanarak otomatikleştirebilirsiniz.

Bir yan not olarak, lambda değerinin, eğitim seti boyutundan ziyade parametre vektörünün güncellemeleri ile ilgili olarak düşünülmesi gerektiğine inanıyorum. Toplu eğitim için, veri kümesi geçişi başına bir parametre güncellemeniz olurken, örnek başına çevrimiçi bir güncelleme için (eğitim seti boyutundan bağımsız olarak).

Son zamanlarda sizinkine oldukça benzeyen bu Çapraz Değerli Soru üzerine tökezledim . Bazı ilgili içeriğe sahip yeni bir SGD algoritması hakkında bir makaleye bağlantı vardır . Bir göz atmanız yararlı olabilir (özellikle sayfa 1742-1743).


Evet, hala aşırı uydurma olup olmadığını kontrol etmek için çapraz doğrulamayı planlıyorum, sorum daha temel - MLP'de madde başına ağırlık ayarlaması ile düzenli kullanım kullanmak için herhangi bir referans bulamıyorum ve iyi bir şey olduğundan endişe duyuyorum bunun nedeni - örneğin, o öğrenme modunda çalışmıyor veya ayarlanması gerekiyor. Crossvalidated soru ise olsa çok benzer ve bana daha fazla güven veriyor, teşekkür ederim. SGD algoritma sayfasının, benim için biraz gelişmiş olabilecek, normalleştirmeyi tanıtmak için farklı, stokastik bir yöntemi var gibi görünüyor, ancak tam olarak aradığım şey bu.
Neil Slater

Düzenleme madde başına öğrenme ile de ilgilidir. Yine de lambda'yı bulmak için temel bir doğrulama yaklaşımı ile başlamayı öneririm. Bu en kolay ve en güvenli yaklaşımdır. Birkaç farklı değerle manuel olarak deneyin. örneğin 0.001. 0,003, 0,01, 0,03, 0,1 vb. Ve doğrulama kümenizin nasıl davrandığını görün. Daha sonra bu işlemi doğrusal veya yerel bir arama yöntemi kullanarak otomatikleştirebilirsiniz.
insys

Yukarıdaki yorumunuz düzenlenmişse ve cevabınızdaki ilk cümleyi / soruyu değiştirdiyse, bunu kabul edebileceğimi düşünüyorum.
Neil Slater

İşaret ettiğiniz için teşekkürler, katılıyorum. Düzenledi. Umarım daha açıktır.
insys

2

Insys'in söylediklerini tamamlamak için :

MLP'nizdeki tüm ağırlıklar için geri yayılım hesaplanırken düzenlileştirme kullanılır. Bu nedenle, degradeyi eğitim setinin ( batch) tüm girdilerine göre hesaplamak yerine yalnızca bazı / bir öğe ( stochastic or semi-stochastic) kullanırsınız. Güncellemenin bir sonucunu, her şey yerine tek bir öğe için de sınırlandıracaksınız.

Ayrıca, doğru hatırlarsam, Andrew NG kullanılır L2-regularization. /Nİçinde lambda * current_weight / Nsadece giriş rescaling yardımcı olur, zorunlu değildir. Ancak bunu kullanmamayı seçerseniz, (çoğu durumda) için başka bir değer seçmeniz gerekir lambda.

Ayrıca, Grid arama algoritmasını kullanarak en iyi değeri seçebilirsiniz lambda( hyperparameter => seçmek zorunda olduğunuz parametre ).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.