Degrade iniş, önerdiğiniz şekilde çalışmaz, ancak benzer bir sorun ortaya çıkabilir.
Toplu işten ortalama kaybı hesaplamıyoruz, kayıp fonksiyonunun ortalama gradyanlarını hesaplıyoruz. Degradeler, ağırlığa göre kaybın türevidir ve bir nöral ağda bir ağırlık için gradyan, bu spesifik örneğin girişlerine bağlıdır ve aynı zamanda modeldeki diğer birçok ağırlığa da bağlıdır.
Modelinizde 5 ağırlık varsa ve mini parti boyutu 2 ise, bunu alabilirsiniz:
Örnek 1. Kayıp = 2,gradyanlar = ( 1.5 , - 2.0 , 1.1 , 0.4 , - 0.9 )
Örnek 2. Kayıp = 3,gradyanlar = ( 1.2 , 2.3 , - 1.1 , - 0.8 , - 0.7 )
Bu mini partideki degradelerin ortalaması hesaplanır, bunlar( 1.35 , 0.15 , 0 , - 0.2 , - 0.8 )
Birkaç örnek üzerinde ortalama almanın yararı, gradyandaki varyasyonun daha düşük olmasıdır, böylece öğrenme daha tutarlı ve bir örneğin özelliklerine daha az bağımlıdır. Üçüncü ağırlık için ortalama gradyanın olduğuna dikkat edin , bu ağırlık bu ağırlık güncellemesini değiştirmeyecektir, ancak seçilen farklı örneklerle hesaplanan sonraki örnekler için muhtemelen sıfır olmayacaktır.0
yorumlara yanıt olarak düzenle:
Yukarıdaki örneğimde, degradelerin ortalaması hesaplanmıştır. Her örnek için kaybını hesapladığımız küçük bir parti büyüklüğü için ve ağırlığına göre kaybın ortalama derecesini elde etmeyi .L i w jkLbenwj
yazdığım şekliyle her gradyanı ortaladım:∂L∂wj= 1kΣki = 1∂Lben∂wj
Yorumlarda bağlandığınız öğretici kod, ortalama kaybı en aza indirmek için Tensorflow'u kullanır.
Tensorflow L_i'yi en aza indirmeyi hedefliyor1kΣki = 1Lben
Bunu en aza indirmek için, her bir ağırlığa göre ortalama kaybın gradyanlarını hesaplar ve ağırlıkları güncellemek için degrade iniş kullanır:
∂L∂wj= ∂∂wj1kΣki = 1Lben
Farklılaşma toplamın içine getirilebilir, böylece benim örneğimdeki yaklaşımdan ifade ile aynıdır.
∂∂wj1kΣki = 1Lben= 1kΣki = 1∂Lben∂wj