Załóżmy, że mamy zestaw szkoleniowy $ (x _ {(i)}, y _ {(i)}) $ dla $ i = 1, \ dots, m $ . Przypuśćmy również, że na zbiorze uczącym uruchomiliśmy jakiś algorytm uczenia nadzorowanego. Hipotezy są przedstawiane jako $ h _ {\ theta} (x _ {(i)}) = \ theta_0 + \ theta_ {1} x _ {(i) 1} + \ cdots + \ theta_ { n} x _ {(i) n} $ . Musimy znaleźć parametry $ \ mathbf {\ theta} $ , które minimalizują „odległość” między $ y _ {(i )} $ i $ h _ {\ theta} (x _ {(i)}) $ . Niech $$ J (\ theta) = \ frac {1} {2} \ sum_ {i = 1} ^ {m} (y _ {(i)} – h _ {\ theta } (x _ {(i)}) ^ {2} $$
Następnie chcemy znaleźć $ \ theta $ , który minimalizuje $ J (\ theta) $ . W pochylaniu gradientowym inicjalizujemy każdy parametr i wykonujemy następującą aktualizację: $$ \ theta_j : = \ theta_j- \ alpha \ frac {\ części} {\ części \ theta_ {j}} J (\ theta) $$
Jaka jest kluczowa różnica między spadkiem gradientu wsadowego a opadaniem gradientu stochastycznego?
Obie używają powyższej reguły aktualizacji. Ale czy jedna jest lepsza od drugiej?
Odpowiedź
Możliwość zastosowania wsadowego lub stochastycznego zejścia gradientu naprawdę zależy od oczekiwanej liczby błędów.
Wsadowe zejście gradientu oblicza gradient przy użyciu całego zbioru danych. Jest to świetne rozwiązanie w przypadku wypukłych lub względnie gładkich rozmaitości błędów. W tym przypadku bezpośrednio w kierunku optymalnego rozwiązania, lokalnego lub globalnego. Dodatkowo, wsadowe zejście gradientu, biorąc pod uwagę wyższą szybkość uczenia się, ostatecznie znajdzie minimum znajdujące się w jego zbiorniku przyciągania.
Stochastyczne zejście gradientowe (SGD) oblicza gradient przy użyciu pojedynczej próbki. Większość zastosowań SGD faktycznie używa minibatchu kilku próbek, z powodów, które zostaną wyjaśnione nieco później. SGD działa dobrze (przypuszczam, że niezbyt dobrze, ale lepiej niż wsadowe zejście gradientowe) w przypadku kolektorów błędów, które mają wiele lokalnych maksimów / minimów. W tym W przypadku nieco głośniejszy gradient obliczony przy użyciu zmniejszonej liczby próbek ma tendencję do wyrywania modelu z lokalnych minimów do obszaru, który, miejmy nadzieję, jest bardziej optymalny. Pojedyncze próbki są naprawdę hałaśliwe, podczas gdy minibatche mają tendencję do uśredniania trochę hałasu. W ten sposób. , ilość szarpnięć jest zmniejszona podczas korzystania z minibatchów. Dobra równowaga jest osiągnięta, gdy rozmiar minibatchu jest wystarczająco mały, aby uniknąć niektórych słabych lokalnych minimów, ale wystarczająco duży, aby nie omijać globalnych minimów lub lepszych wyników l minima oczne. (Nawiasem mówiąc, zakłada się, że najlepsze minima mają większy i głębszy basen przyciągania i dlatego łatwiej się do nich dostać.)
Jedną z zalet SGD jest to, że obliczeniowo jest o wiele szybszy. Duży Zestawy danych często nie mogą być przechowywane w pamięci RAM, co sprawia, że wektoryzacja jest znacznie mniej wydajna. Zamiast tego każda próbka lub partia próbek musi zostać załadowana, przetworzona, zapisane wyniki i tak dalej. Z drugiej strony Minibatch SGD jest zwykle celowo dostatecznie mały, aby można go było obliczyć.
Zwykle tę przewagę obliczeniową wykorzystuje się wykonując o wiele więcej iteracji SGD, wykonując o wiele więcej kroków niż konwencjonalne zejście gradientu wsadowego . Zwykle prowadzi to do modelu, który jest bardzo zbliżony do tego, który można znaleźć za pomocą gradientu wsadowego lub lepszego.
Sposób, w jaki lubię myśleć o tym, jak działa SGD, polega na wyobrażaniu sobie, że mam jeden punkt, który reprezentuje mój rozkład danych wejściowych. Mój model próbuje nauczyć się tego rozkładu danych wejściowych. Wokół dystrybucji danych wejściowych znajduje się zacieniony obszar, który reprezentuje rozkłady danych wejściowych wszystkich możliwych minibatchów, które mogłem próbkować. Zwykle jest to słuszne założenie, że dystrybucje danych wejściowych w minibatchach są bliskie rzeczywistej dystrybucji danych wejściowych. Zejście gradientu wsadu, na wszystkich etapach, przebiega najbardziej stromą drogą do osiągnięcia prawdziwego rozkładu wejściowego. Z drugiej strony SGD wybiera losowy punkt w zacienionym obszarze i wybiera najbardziej stromą trasę do tego punktu. Jednak w każdej iteracji wybiera nowy punkt. Średnia z wszystkich tych kroków będzie przybliżeniem prawdziwego rozkładu danych wejściowych, zwykle całkiem dobrze.
Komentarze
- W praktyce nikt nie używa Batch Gradient Descent. Jest to ' zbyt kosztowne obliczeniowo jak na niewiele (zysk jest taki, że ' faktycznie obniżasz ” true ” gradient.) Kiedy masz wysoce nie wypukłą funkcję straty, wystarczy, że pójdziesz w odpowiednim kierunku i ostatecznie ' zbiegniesz n lokalne minimum. Tak więc minibatch SGD.
- @Jason_L_Bens czy masz jakieś referencje (artykuły lub teksty online), w których mogę przeczytać więcej na temat tych algorytmów?
- @ user110320 Nie mam na myśli, nie, chociaż ' to bardzo powszechne algorytmy, więc powinno być mnóstwo zasobów dostępnych na ten temat, wymagających odrobiny wyszukiwania. Jeśli ' szukasz ogólnego podejścia, ' d zalecam przeczytanie niektórych artykułów Yoshua Bengio ' s Learning Deep Architectures for AI. To ' to miejsce, w którym zacząłem.
Odpowiedź
Jak sugeruje inna odpowiedź, głównym powodem korzystania z SGD jest zmniejszenie kosztu obliczeń gradientu, przy jednoczesnym zachowaniu znacznego kierunku gradientu, gdy jest on uśredniany dla wielu mini-partii lub próbek – to z pewnością pomaga w osiągnięciu lokalnych minimów.
- Dlaczego minibatch działa .
Matematyka stojąca za tym jest że ” true ” gradient funkcji kosztu (gradient błędu uogólnienia lub zestawu nieskończenie dużych próbek) jest oczekiwaniem gradientu $ g $ nad rzeczywistą dystrybucją generującą dane $ p_ {data} $ ; rzeczywisty gradient $ \ hat {g} $ obliczony na partii próbek jest zawsze przybliżeniem do rzeczywistego gradientu z empirycznym rozkładem danych $ \ hat {p} _ {data} $ . $$ \ hat {g} = E _ {\ hat {p} _ {data}} ({\ częściowe J (\ theta) \ over \ części \ theta}) $$ Wsadowe zejście gradientu może przynieść możliwy ” optymalny ” gradient, biorąc pod uwagę wszystkie próbki danych, nie jest to ” true ” jednak gradient. Mniejsza partia (tj. Minibatch) prawdopodobnie nie jest tak optymalna jak pełna partia, ale oba są przybliżeniami – tak samo jest w przypadku pojedynczej próbki (SGD).
Zakładając, że nie ma zależności między $ m $ próbek w jednej minibatchu, obliczona $ \ hat {g} (m) $ jest bezstronną oszacowanie prawdziwego gradientu. (Kwadratowe) błędy standardowe oszacowań z różnymi rozmiarami minibatchów są odwrotnie proporcjonalne do rozmiarów minibatchów. To znaczy $$ {SE ({\ hat {g} (n)}) \ over SE ({\ hat {g} (m)})} = {\ sqrt { m \ over n}} $$ Tzn. redukcja błędu standardowego to pierwiastek kwadratowy ze zwiększenia rozmiaru próbki. Oznacza to, że jeśli rozmiar minibatchu jest mały, współczynnik uczenia się również musi być mały, aby osiągnąć stabilność przy dużej wariancji. Gdy próbki nie są niezależne, właściwość nieobciążonego oszacowania nie jest już zachowywana. Wymaga to przetasowania próbek przed treningiem, jeśli nie są one sekwencjonowane wystarczająco losowo.
- Dlaczego minibatch może działają lepiej .
Po pierwsze, minibatch sprawia, że niektóre problemy z nauką są trudne do rozwiązania technicznie ze względu na mniejsze zapotrzebowanie na obliczenia przy mniejszym rozmiarze wsadu.
Po drugie, zmniejszony rozmiar wsadu niekoniecznie oznacza zmniejszoną dokładność gradientu. W wielu próbkach treningowych występuje wiele szumów, wartości odstających lub uprzedzeń. Losowo próbkowana minibatch może lepiej (lub nie gorsza) odzwierciedlać prawdziwy rozkład generowania danych niż oryginalna pełna partia. Jeśli niektóre iteracje aktualizacji gradientu minibatchu dają lepsze oszacowanie, ogólnie uśredniony wynik jednej epoki może być lepszy niż gradient obliczony z pełnego wsadu.
Po trzecie, minibatch nie tylko pomaga radzić sobie z nieprzyjemnymi próbki danych, ale także pomagają radzić sobie z nieprzyjemną funkcją kosztów, która ma wiele lokalnych minimów. Jak wspomina Jason_L_Bens, czasami rozmaitości błędów mogą być łatwiejsze do uwięzienia regularnego gradientu w lokalnych minimach, podczas gdy trudniej jest uwięzić tymczasowo losowy gradient obliczony za pomocą minibatchu.
Wreszcie, przy spadku gradientu nie jesteś osiągnięcie globalnych minimów w jednym kroku, ale iteracja na wielu błędach. Gradient w dużej mierze podaje tylko kierunek iteracji. Dzięki minibatch możesz iterować znacznie szybciej. W wielu przypadkach im więcej iteracji, tym lepszy punkt można osiągnąć. Nie przejmujesz się przy każdej pogodzie, punkt jest optymalny globalnie, a nawet lokalnie. Chcesz tylko osiągnąć rozsądny model, który przynosi akceptowalny błąd uogólnienia. Minibatch ułatwia to.
Może się okazać, że książka ” Deep learning ” autorstwa Iana Goodfellow i wsp., ma całkiem niezłe dyskusje na ten temat, jeśli uważnie go przeczytasz.
Komentarze
- W przypadku problemów z optymalizacją wypukłą to, co powiedziałeś, jest w porządku.Ale aby użyć metod gradientowych na funkcjach niewypukłych, przegapiłeś bardzo krytyczny powód, dla którego SGD jest lepszy niż wsadowy GD. Zobacz moją odpowiedź datascience.stackexchange.com/questions/16807/…
- @horaceT Dzięki za komentarz. Ponieważ punkt, o którym wspomniałeś, został szczegółowo opisany przez Jason_L_Bens powyżej, nie zawracałem sobie głowy powtarzaniem, ale odesłałem jego odpowiedź w ostatnim trzecim akapicie, z należytym szacunkiem. W przypadku problemu optymalizacji zejścia gradientowego, nie wypukłość jest odzwierciedlona przez lokalne minima, w tym punkt siodełka (patrz ostatni trzeci akapit); i ze względu na opis, moja odpowiedź opisuje SGD jako minibatch, ale z wielkością partii 1 (patrz trzeci akapit).
- Dlaczego powiedziałeś praktycznie w * w końcu w jednej epoce, wirtualnie obliczasz średnia z gradientów na podstawie wszystkich podanych próbek. *? Nie ' Czy uważasz, że to twierdzenie jest błędne z powodu aktualizacji wag na każdym kroku?
- @Media Masz rację. Usunąłem ' ostatni akapit. Dzięki.
Odpowiedź
Dla mnie gradient wsadowy przypomina chudy gradient. W przypadku chudego gradientu wielkość partii dobiera się w taki sposób, aby każdy parametr, który ma być aktualizowany, był również zmieniany niezależnie, ale niekoniecznie ortogonalnie, w partii. Na przykład, jeśli partia zawiera 10 eksperymentów, 10 wierszy, możliwe jest utworzenie niezależnych kolumn o wartości 2 $ ^ {10-1} = 512 $. 10 wierszy umożliwia niezależną, ale nie ortogonalną aktualizację 512 parametrów.