Dlaczego szybkość uczenia się powoduje, że waga mojej sieci neuronowej gwałtownie rośnie?


9

Używam tensorflow do pisania prostych sieci neuronowych w celu trochę badań i miałem wiele problemów z wagami „nan” podczas treningu. Próbowałem wielu różnych rozwiązań, takich jak zmiana optymalizatora, zmiana utraty, rozmiaru danych itp., Ale bezskutecznie. Wreszcie zauważyłem, że zmiana współczynnika uczenia się spowodowała niewiarygodną różnicę w moich wagach.

Przy zastosowaniu współczynnika uczenia się wynoszącego 0,001 (który uważałem za dość konserwatywny) funkcja minimalizacji faktycznie wykładniczo zwiększyłaby stratę. Po jednej epoce strata mogła wzrosnąć z liczby w tysiącach do trylionów, a następnie do nieskończoności („nan”). Kiedy obniżyłem wskaźnik uczenia się do 0,0001, wszystko działało dobrze.

1) Dlaczego pojedynczy rząd wielkości ma taki efekt?

2) Dlaczego funkcja minimalizacji dosłownie wykonuje przeciwieństwo swojej funkcji i maksymalizuje straty? Wydaje mi się, że to nie powinno się zdarzyć, bez względu na tempo uczenia się.


Czy możesz powiedzieć, jak zainicjowałeś swoje ciężary?
Himanshu Rai,

Sugeruję wypróbowanie rozwiązania Adam. Wygląda na to, że lepiej się zachowuje i jest lepszy domyślny, i możesz być w stanie użyć do tego domyślnych wskaźników uczenia się.
DW

Odpowiedzi:


9

Pomocny może okazać się rozdział 8 głębokiego uczenia się . W nim autorzy omawiają szkolenie modeli sieci neuronowych. To bardzo skomplikowane, więc nie dziwię się, że masz trudności.

Jedną z możliwości (oprócz błędu użytkownika) jest to, że twój problem jest wysoce nieuzasadniony. Metody zejścia gradientu używają tylko pierwszej pochodnej (gradientu) informacji podczas obliczania aktualizacji. Może to powodować problemy, gdy druga pochodna (Hesjan) jest źle uwarunkowana.

Cytowanie autorów:

Niektóre wyzwania pojawiają się nawet przy optymalizacji funkcji wypukłych. Spośród nich najbardziej widoczne jest złe uwarunkowanie matrycy HeskiejH.. Jest to bardzo ogólny problem w większości optymalizacji numerycznych, wypukłych lub innych, i jest opisany bardziej szczegółowo w sekcji 4.3.1.

Uważa się, że problem złej kondycji występuje w problemach związanych z uczeniem sieci neuronowej. Nieprawidłowe uwarunkowanie może objawiać się przez „utknięcie” SGD w tym sensie, że nawet bardzo małe kroki zwiększają funkcję kosztów. [moje podkreślenie dodane]

Autorzy przedstawiają proste wyprowadzenie, aby pokazać, że tak może być. Korzystając z opadania gradientu, funkcja kosztu powinna się zmienić (w drugim rzędzie) o

ε2)2)solT.H.sol-εsolT.sol

gdzie sol jest gradientem, H. jest Hesjan i εto współczynnik uczenia się. Oczywiście, jeśli drugie instrumenty pochodne są duże, pierwszy okres może zastąpić drugi, a funkcja kosztu wzrośnie, a nie zmniejszy. Ponieważ pierwszy i drugi termin różnią się skalą zε, jednym ze sposobów rozwiązania tego problemu jest ograniczenie ε(chociaż oczywiście może to skutkować zbyt wolnym uczeniem się).


2
Wydaje mi się, że ta odpowiedź quora oferuje dość intuicyjne wyjaśnienie złego uwarunkowania Hesji.
Oren Milman,

3

1) Dlaczego pojedynczy rząd wielkości ma taki efekt?

2) Dlaczego funkcja minimalizacji dosłownie wykonuje przeciwieństwo swojej funkcji i maksymalizuje straty? Wydaje mi się, że to nie powinno się zdarzyć, bez względu na tempo uczenia się.

Są dwa główne powody. Po pierwsze, nie używasz tych samych danych w pierwszym kroku niż w drugim. Jeśli w pierwszym kroku model pozna te wartości i spadnie do lokalnego minimum, istnieje duże prawdopodobieństwo, że przyniesie większe straty dla nowych wartości.

Drugim powodem jest kształt funkcji kosztu. Próbujesz zminimalizować wartość małymi krokami, długość tych kroków jest podana przez dwa czynniki: gradient i szybkość uczenia się. Obraz twojej funkcji jest jak x ^ 2. Jeśli twoje wartości są bliskie 0, gradient będzie mały, niż gdyby dalej, ale jeśli twoja szybkość uczenia się jest duża, zamiast zbliżyć się do 0, faktycznie zwiększasz błąd, ponieważ twój nowy punkt oparty na gradacji i wskaźnik uczenia się jest wyższy od 0 niż w poprzednim kroku. I może się to zdarzyć kilka razy.

Spójrz na ten link: http://www.statisticsviews.com/details/feature/5722691/Getting-to-the-Bottom-of-Regression-with-Gradient-Descent.html

Jeśli zobaczysz cyfry z alfa 0,01 i alfa 0,12, zobaczysz, jak na pierwszej cyfrze szybkość uczenia się jest mała, a więc gradient zbliża się do minimum, ale w drugim przypadku szybkość uczenia się jest tak duża, że ​​gradient się przesuwa dalej na każdym kroku.


1
W odniesieniu do drugiego powodu - ta odpowiedź pokazuje (przy użyciu prostych funkcji), kiedy opadanie gradientu może się różnić. Ta odpowiedź ma również kod Python, dzięki czemu możesz eksperymentować i zobaczyć, jak zachowuje się spadek gradientu w różnych scenariuszach.
Oren Milman,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.