Öğrenme hızı neden sinir ağımın ağırlıklarının hızla artmasına neden oluyor?


9

Tensorflow'u biraz araştırma için basit sinir ağları yazmak için kullanıyorum ve antrenman yaparken 'nan' ağırlıkları ile ilgili birçok sorun yaşadım. Optimize ediciyi değiştirme, kaybı, veri boyutunu vb. Değiştirme gibi birçok farklı çözüm denedim, ancak boşuna. Son olarak, öğrenme oranındaki bir değişikliğin ağırlıklarımda inanılmaz bir fark yarattığını fark ettim.

.001 (oldukça muhafazakar olduğunu düşündüğüm) bir öğrenme oranı kullanarak, en aza indirme işlevi aslında üssel olarak kaybı artıracaktır. Bir dönemin ardından kayıp binlerce kişiden bir trilyona, sonra da sonsuza ('nan') atlayabilir. Öğrenme oranını .0001'e düşürdüğümde her şey yolunda gitti.

1) Tek bir büyüklük sırasının neden böyle bir etkisi var?

2) Simge durumuna küçültme işlevi neden işlevinin tam tersini gerçekleştirir ve kaybı en üst düzeye çıkarır? Bana öyle geliyor ki, öğrenme oranı ne olursa olsun gerçekleşmemeli.


Lütfen ağırlıklarınızı nasıl başlattığınızı söyleyebilir misiniz?
Himanshu Rai

Adam çözücüyü denemenizi öneririm. Daha iyi ve daha iyi bir varsayılan gibi görünüyor ve bunun için varsayılan öğrenme oranlarını kullanabilirsiniz.
DW

Yanıtlar:


9

Derin Öğrenme'nin 8. Bölümü'nü yararlı bulabilirsiniz. İçinde yazarlar sinir ağı modellerinin eğitimini tartışıyorlar. Çok karmaşık, bu yüzden zorlandığınıza şaşırmadım.

Bir olasılık (kullanıcı hatasının yanı sıra), probleminizin son derece kötü durumda olmasıdır. Degrade iniş yöntemleri, bir güncelleştirme hesaplanırken yalnızca ilk türev (degrade) bilgilerini kullanır. Bu, ikinci türev (Hessian) koşulsuz olduğunda sorunlara neden olabilir.

Yazarlardan alıntı:

Dışbükey fonksiyonları optimize ederken bile bazı zorluklar ortaya çıkar. Bunlardan en belirgin olanı Hessian matrisinin kötü koşullandırılmasıdır . Bu, çoğu sayısal optimizasyonda, dışbükey veya başka bir şekilde çok genel bir sorundur ve bölüm 4.3.1'de daha ayrıntılı olarak açıklanmaktadır.H

Kötü koşullandırma sorununun genellikle sinir ağı eğitim problemlerinde mevcut olduğuna inanılmaktadır. Kötü koşullandırma, SGD'nin çok küçük adımların bile maliyet fonksiyonunu arttırması anlamında “sıkışmasına” neden olarak ortaya çıkabilir . [vurgularım eklendi]

Yazarlar durumun böyle olabileceğini göstermek için basit bir türetme sağlarlar. Degrade iniş kullanıldığında, maliyet işlevi (ikinci sıraya) şu şekilde değişmelidir:

ε22gTHgεgTg

burada gradyan, ve öğrenme oranıdır. Açıkçası, ikinci türevler büyükse, ilk terim ikinciyi değiştirebilir ve maliyet fonksiyonu azalmaz, artar. Birinci ve ikinci terimler ile farklı ölçeklendiğinden , bu sorunu hafifletmenin bir yolu azaltmaktır (tabii ki bu çok yavaş öğrenmeye neden olabilir ).gHεεε


2
Bana öyle geliyor ki bu quora cevabı Hessian'ın kötü şartlanmasına oldukça sezgisel bir açıklama getiriyor.
Oren Milman

3

1) Tek bir büyüklük sırasının neden böyle bir etkisi var?

2) Simge durumuna küçültme işlevi neden işlevinin tam tersini gerçekleştirir ve kaybı en üst düzeye çıkarır? Bana öyle geliyor ki, öğrenme oranı ne olursa olsun gerçekleşmemeli.

Bunun iki ana nedeni var. Birincisi, ilk adımda aynı verileri ikinci adımdan daha fazla kullanmıyorsunuz. İlk adımda model bu değerleri öğrenir ve yerel bir minimuma düşerse, yeni değerler için daha büyük bir kayıp verme olasılığı yüksektir.

İkinci neden maliyet fonksiyonunun şeklidir. Değeri küçük adımlarla en aza indirmeye çalışırsınız, bu adımların uzunluğu iki faktörle verilir: gradyan ve öğrenme oranı. Resim işleviniz x ^ 2 gibidir. Değerleriniz 0'a yakınsa, degrade daha fazla olduğundan daha küçük olacaktır, ancak öğrenme oranınız büyükse, 0'a yaklaşmak yerine, hatayı arttırırsınız çünkü notlandırma ve öğrenme oranı bir önceki adımınızdan daha fazladır. Ve bu birkaç kez olabilir.

Bu bağlantıya bir göz atın: http://www.statisticsviews.com/details/feature/5722691/Bottom-of-Regression-with-Gradient-Descent.html

Alfa 0.01 ve alfa 0.12 rakamlarını görürseniz, ilk şekilde öğrenme hızının ne kadar küçük olduğunu ve degradenin minimum seviyeye yaklaştığını, ancak ikinci durumda öğrenme hızının degradenin hareket edeceği kadar büyük olduğunu göreceksiniz. her adımda.


1
İkinci nedenden dolayı - bu cevap , gradyan inişinin ne zaman ayrılabileceğini (basit fonksiyonlar kullanarak) gösterir. Bu cevabın Python kodu da var, bu yüzden degrade inişin farklı senaryolarda nasıl davrandığını deneyebilir ve görebilirsiniz ..
Oren Milman
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.