Sinirsel net ağırlık azalması ve öğrenme oranı arasındaki fark


Yanıtlar:


161

Öğrenme oranı, bir güncelleme adımının ağırlıkların mevcut değerini ne kadar etkilediğini belirleyen bir parametredir. Ağırlık azalması, ağırlık güncelleme kuralında ek bir terim olsa da, başka bir güncelleme planlanmadığında ağırlıkların üssel olarak azalmasına neden olur.

Diyelim ki en aza indirmek istediğimiz bir maliyet veya hata fonksiyonumuz . Gradyan iniş ağırlıkları değiştirmek için bize en dik iniş yönünde : nerede öğrenme oranıdır ve büyükse ağırlıklarında buna bağlı olarak büyük bir değişiklik (genel olarak çok büyük olmamalıdır, aksi takdirde maliyet fonksiyonunuzdaki yerel minimum ).E(w)wE

wiwiηEwi,
ηwi

Modelinizdeki serbest parametre sayısını etkin bir şekilde sınırlamak için aşırı uydurmayı önlemek amacıyla, maliyet işlevini düzenlemek mümkündür. Bunu yapmanın kolay bir yolu, ağırlıklardan önce sıfır ortalama bir Gaussian tanıtmaktır; bu, maliyet işlevini . Uygulamada bu, ağırlıkları cezalandırır ve modelinizdeki özgürlüğü etkili bir şekilde sınırlandırır. Düzenleme parametresi , orijinal maliyetini büyük ağırlıklar halinde nasıl ödeyeceğinizi belirler .E~(w)=E(w)+λ2w2λE

Degrade inişini bu yeni maliyet işlevine uygulayarak elde ederiz: Düzenlemeden gelen yeni terim , ağırlığın boyutuna oranla neden olur.

wiwiηEwiηλwi.
ηλwi

2
Yararlı açıklama için teşekkürler. Bir soru: "nnet" R paketinde "bozunma" adı verilen sinir ağının eğitiminde kullanılan bir parametre var. Çürüme lambda veya eta * lambda'ya denk geliyor mu, biliyor musunuz?
Andrea Ianni,

3
Ayrıca, kilo kaybının, ikinciye aşina olanlar için L2 düzenlenmesi ile aynı şey olduğunu da ekleyeceğim.
Sergei

2
@Sergei lütfen hayır, bu yanlış bilgiyi yaymayı bırak! Bu sadece çok özel vanilya SGD vakasında geçerlidir. Adam kağıdı için Sabitleme ağırlığı azalmasına bakınız .
LucasB,

Açıklığa kavuşturmak için: Yazma sırasında, Adam için PyTorch belgeleri, yazarların L2 düzenlemesi dediklerini düşündüğümüzü belirtmek için "kilo kaybı" (parantez içinde "L2 cezası" olarak adlandırılır) terimini kullanır. Eğer doğru anlarsam, bu cevap ikiye eşdeğer olan momentum olmadan SGD'yi belirtir.
Dylan F,

14

@ Mrig'in cevabına (+1) ek olarak, sinir ağlarının birçok pratik uygulaması için, Levenberg-Marquardt (küçük-orta ölçekli ağlar) veya ölçeklenmiş eşlenik gradyan inişi (orta-büyük ölçekli) gibi daha gelişmiş bir optimizasyon algoritması kullanmak daha iyidir. ağlar), çünkü bunlar çok daha hızlı olacak ve öğrenme hızını belirlemeye gerek kalmayacak (her iki algoritma da temel olarak eğriyi ve degradeyi kullanarak öğrenme hızını uyarlar). İyi bir sinir ağı paketi veya kütüphanesi, bu yöntemlerden birinin, muhtemelen eski olmayan bir paketin uygulamalarına sahip olacaktır. NETLAB kütüphanesini büyük bir kit parçası olan MATLAB için kullanıyorum.


Rprop tabanlı optimizasyon algosundan ne haber? Nasıl yığarlar?
güç

4
Bence çoğu insan RMSProp, adagrad, SGD + nesterov momentum gibi rprop + momentum varyantlarını kullanıyor. Cs231 sınıfına bakınız .
facuq

1
Tabii ki uygulamanıza bağlı. Ancak şu anda oldukça popüler olan büyük veri kümeleri / ağları için, insanların daha iyi bahsettiğim algoritmaları bulduğunu düşünüyorum.
facuq

6
@DikranMarsupial bunun nedeni, bugünlerde (cevabınızdan yaklaşık beş yıl sonra) insanların yerine Adam kullanma eğiliminde olmaları olabilir.
ComputerScientist

2
Aslında bu cevap çok eski. Bu algoritmalar günümüzde tipik olan model ve veri kümeleri ölçeğinde pratik değildir ve kesinlikle eski olmayan en yaygın kullanılan paketler bu algoritmalardan yoksundur.
LucasB

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.