Jestem zaznajomiony z podstawowymi algorytmami spadku gradientu do szkolenia sieci neuronowych. Czytałem artykuł proponujący Adam: ADAM: METODA OPTYMALIZACJI STOCHASTYCZNEJ .
Chociaż zdecydowanie mam pewne spostrzeżenia (przynajmniej), papier wydaje się być dla mnie ogólnie za wysoki. Na przykład funkcja kosztu jest często sumą wielu różnych funkcji, dlatego w celu zoptymalizowania jej wartości należy wykonać wiele obliczeń; stochastyczne spadki gradientu - o ile rozumiem ten temat - oblicz optymalizację tylko dla podzbioru tych funkcji. Dla mnie nie jest jasne, w jaki sposób Adam to robi i dlaczego powoduje to zmniejszenie błędu treningowego dla całej .
Myślę, że Adam aktualizuje swój gradient, biorąc pod uwagę poprzedni gradient. Nazywają to czymś w rodzaju wykorzystania pędu? Czym dokładnie jest ten impet? Zgodnie z algorytmem na stronie drugiej w artykule jest to pewnego rodzaju średnia ruchoma, jak niektóre szacunki pierwszego i drugiego momentu „regularnego” gradientu?
Praktycznie podejrzewałbym, że Adam umożliwia użycie większych efektywnych wielkości kroków w celu zmniejszenia gradientu, a zatem błędu treningu w połączeniu z aproksymacją stochastyczną. Tak więc powstały wektor aktualizacji powinien „przeskakiwać” bardziej w wymiarach przestrzennych, raczej opisując niektóre krzywa, jak zrobiłyby to algorytmy normalnego spadku gradientu.
Czy ktoś może de-mistyfikować działanie Adama? Zwłaszcza, jak się zbiega, a konkretnie dlaczego metoda Adama działa i jakie dokładnie korzyści?
źródło
Odpowiedzi:
W dokumencie Adama napisano: „... wiele funkcji obiektywnych składa się z sumy podfunkcji ocenianych przy różnych podgrupach danych; w tym przypadku optymalizację można usprawnić, wykonując kroki gradientu w stosunku do poszczególnych podfunkcji ...” Tutaj po prostu oznacza, że funkcja celu jest sumą błędów w porównaniu z przykładami treningów, a trening może być przeprowadzany na indywidualnych przykładach lub minibatach. Jest to to samo, co w stochastycznym spadku gradientu (SGD), który jest bardziej wydajny w przypadku problemów na dużą skalę niż trening partii, ponieważ aktualizacje parametrów są częstsze.
Jeśli chodzi o to, dlaczego Adam działa, wykorzystuje kilka sztuczek.
Jedną z tych sztuczek jest pęd, który może zapewnić szybszą konwergencję. Wyobraź sobie funkcję celu w kształcie długiego, wąskiego kanionu, który stopniowo obniża się do minimum. Powiedzmy, że chcemy zminimalizować tę funkcję za pomocą spadku gradientu. Jeśli zaczniemy od jakiegoś punktu na ścianie kanionu, ujemny gradient będzie wskazywał w kierunku najbardziej stromego zejścia, tj. Głównie w kierunku dna kanionu. Wynika to z faktu, że ściany kanionu są znacznie bardziej strome niż stopniowe nachylenie kanionu w kierunku minimum. Jeśli szybkość uczenia się (tj. Wielkość kroku) jest niewielka, możemy zejść na dno kanionu, a następnie podążać za nią w kierunku minimum. Ale postęp byłby powolny. Moglibyśmy zwiększyć tempo uczenia się, ale nie zmieniłoby to kierunku kroków. W takim przypadku przekroczymy dno kanionu i wylądujemy na przeciwległej ścianie. Powtarzalibyśmy ten wzór, oscylując od ściany do ściany, robiąc powolny postęp w kierunku minimum. Pęd może pomóc w tej sytuacji.
Pęd oznacza po prostu, że pewna część poprzedniej aktualizacji jest dodawana do bieżącej aktualizacji, tak że powtarzane aktualizacje w określonym kierunku są złożone; zwiększamy rozpęd, poruszając się coraz szybciej w tym kierunku. W przypadku kanionu zwiększamy rozpęd w kierunku minimum, ponieważ wszystkie aktualizacje mają komponent w tym kierunku. Natomiast poruszanie się w przód iw tył po ścianach kanionu wymaga ciągłego odwracania kierunku, więc pęd pomógłby wytłumić oscylacje w tych kierunkach.
Kolejną sztuczką, której używa Adam, jest adaptacyjne wybranie osobnej częstotliwości uczenia się dla każdego parametru. Parametry, które zwykle otrzymywałyby mniejsze lub rzadsze aktualizacje, otrzymywały większe aktualizacje z Adamem (odwrotna sytuacja jest również prawdą). Przyspiesza to naukę w przypadkach, gdy odpowiednie wskaźniki uczenia się różnią się w zależności od parametrów. Na przykład w głębokich sieciach gradienty mogą stać się małe na wczesnych warstwach i sensowne jest zwiększenie szybkości uczenia się dla odpowiednich parametrów. Inną zaletą tego podejścia jest to, że ponieważ współczynniki uczenia się są regulowane automatycznie, strojenie ręczne staje się mniej ważne. Standardowy SGD wymaga starannego dostrojenia (i ewentualnie dostosowania online) wskaźników uczenia się, ale jest to mniej prawdziwe w przypadku Adama i powiązanych metod. Nadal konieczne jest wybranie hiperparametrów,
Powiązane metody :
Momentum jest często używane ze standardowym SGD. Ulepszona wersja nazywa się pędem Niestierowa lub gradientem przyspieszonym Niestierowa. Inne metody wykorzystujące automatycznie dostrojone szybkości uczenia się dla każdego parametru to: Adagrad, RMSprop i Adadelta. RMSprop i Adadelta rozwiązują problem z programem Adagrad, który może powodować zatrzymanie nauki. Adam jest podobny do RMSprop z pędem. Nadam modyfikuje Adama, aby używał pędu Nesterowa zamiast pędu klasycznego.
Referencje :
Kingma and Ba (2014) . Adam: Metoda optymalizacji stochastycznej.
Goodfellow i in. (2016) . Głębokie uczenie się, rozdział 8.
Slajdy z kursu Geoffa Hintona
Dozat (2016) . Włączenie rozpędu Nesterowa do Adama.
źródło