Możliwość zastosowania okresowego lub stochastycznego spadku gradientu naprawdę zależy od oczekiwanego rozmaitości błędów.
Opadanie gradientu wsadowego oblicza gradient na podstawie całego zestawu danych. Jest to idealne rozwiązanie dla wypukłych lub względnie gładkich rozmaitości błędów. W tym przypadku przechodzimy nieco bezpośrednio w kierunku optymalnego rozwiązania, lokalnego lub globalnego. Dodatkowo, opadanie gradientu partii, przy wyższym współczynniku uczenia się, ostatecznie znajdzie minimum w swoim basenie z atrakcją.
Stochastyczne pochylenie gradientu (SGD) oblicza gradient za pomocą pojedynczej próbki. Większość aplikacji SGD faktycznie korzysta z minibatchu kilku próbek, z powodów, które zostaną wyjaśnione nieco później. SGD działa dobrze (chyba nie dobrze, ale lepiej niż opadanie gradientu wsadowego) dla rozmaitości błędów, które mają wiele lokalnych maksimów / minimów. W tym przypadku nieco głośniejszy gradient obliczony przy użyciu zmniejszonej liczby próbek ma tendencję do szarpnięcia modelu z lokalnych minimów do regionu, który, miejmy nadzieję, jest bardziej optymalny. Pojedyncze próbki są naprawdę hałaśliwe, podczas gdy minibatche mają tendencję do zmniejszania hałasu. W ten sposób ilość szarpnięcia jest zmniejszona podczas korzystania z minibatch. Utrzymuje się dobrą równowagę, gdy rozmiar minibatchu jest wystarczająco mały, aby uniknąć niektórych złych lokalnych minimów, ale wystarczająco duży, aby nie Unikaj globalnych minimów lub lokalnych minimów o lepszych parametrach. (Nawiasem mówiąc, zakłada to, że najlepsze minima mają większy i głębszy basen przyciągania i dlatego łatwiej do nich wpaść).
Jedną z zalet SGD jest to, że jest obliczeniowo dużo szybszy. Dużych zestawów danych często nie można przechowywać w pamięci RAM, co sprawia, że wektoryzacja jest znacznie mniej wydajna. Raczej każda próbka lub partia próbek musi zostać załadowana, poddana obróbce, przechowywać wyniki itd. Z drugiej strony Minibatch SGD jest zwykle celowo wystarczająco mały, aby był wykonalny obliczeniowo.
Zwykle tę przewagę obliczeniową wykorzystuje się, wykonując znacznie więcej iteracji SGD, wykonując znacznie więcej kroków niż konwencjonalne opadanie gradientem wsadowym. Zwykle powoduje to, że model jest bardzo zbliżony do modelu, który można znaleźć poprzez opadanie gradientu partii lub lepiej.
Sposób, w jaki lubię myśleć o tym, jak działa SGD, polega na wyobrażeniu sobie, że mam jeden punkt reprezentujący mój rozkład wejściowy. Mój model próbuje nauczyć się tego rozkładu wejściowego. Wokół rozkładu wejściowego jest zacieniony obszar, który reprezentuje rozkłady wejściowe wszystkich możliwych minibatchów, które mogłem próbkować. Zazwyczaj jest to słuszne założenie, że rozkłady wejściowe minibatch są zbliżone do prawdziwego rozkładu wejściowego. Opadanie gradientu wsadowego na wszystkich etapach prowadzi najostrzejszą drogą do osiągnięcia prawdziwego rozkładu wejściowego. Z drugiej strony SGD wybiera losowy punkt w zacienionym obszarze i wybiera najbardziej stromą drogę do tego punktu. Jednak przy każdej iteracji wybiera nowy punkt. Średnia wszystkich tych kroków przybliża prawdziwy rozkład danych wejściowych, zwykle całkiem dobrze.
Jak sugeruje inna odpowiedź, głównym powodem zastosowania SGD jest zmniejszenie kosztu obliczeń gradientu przy jednoczesnym utrzymaniu w dużej mierze kierunku gradientu, gdy uśrednia się go dla wielu mini-partii lub próbek - to z pewnością pomaga w osiągnięciu lokalnych minimów.
Po pierwsze, minibatch sprawia, że niektóre problemy z nauką stają się technicznie niemożliwe do rozwiązania ze względu na zmniejszone zapotrzebowanie na obliczenia przy mniejszym rozmiarze partii.
Po drugie, zmniejszony rozmiar partii niekoniecznie oznacza zmniejszoną dokładność gradientu. Próbki szkoleniowe mają wiele dźwięków, wartości odstających lub tendencyjnych. Losowo pobrana próbka minibatch może odzwierciedlać rzeczywisty rozkład generowania danych lepiej (lub nie gorzej) niż oryginalna pełna partia. Jeśli niektóre iteracje aktualizacji gradientu minibatch dają lepsze oszacowanie, ogólnie uśredniony wynik jednej epoki może być lepszy niż gradient obliczony z pełnej partii.
Po trzecie, minibatch nie tylko pomaga radzić sobie z nieprzyjemnymi próbkami danych, ale także pomaga radzić sobie z nieprzyjemną funkcją kosztów, która ma wiele lokalnych minimów. Jak wspomina Jason_L_Bens, czasem rozmaitości błędów mogą łatwiej wychwytywać regularne gradienty do lokalnych minimów, a trudniejsze do wychwytywania tymczasowo losowych gradientów obliczanych za pomocą minibatchów.
Wreszcie, z opadaniem gradientu, nie osiągasz globalnych minimów w jednym kroku, ale iterujesz na rozmaitości erro. Gradient w dużej mierze daje 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ąć. Tak naprawdę nie zależy ci na każdej pogodzie, punkt jest optymalny na całym świecie, a nawet lokalnie. Po prostu chcesz osiągnąć rozsądny model, który przynosi akceptowalny błąd uogólnienia. Minibatch ułatwia to.
Książka Ian Goodfellow i wsp. „Głębokie uczenie się” może znaleźć całkiem dobre dyskusje na ten temat, jeśli dokładnie ją przeczytacie.
źródło
źródło