Dlaczego rozmiar mini partii jest lepszy niż jedna „partia” ze wszystkimi danymi treningowymi?

40

Często czytam, że w przypadku modeli Deep Learning zwykłą praktyką jest stosowanie mini-partii (zazwyczaj małej, 32/64) w kilku epokach treningowych. Naprawdę nie mogę pojąć przyczyny tego.

O ile się nie mylę, wielkość partii to liczba instancji treningowych widocznych przez model podczas iteracji treningu; a epoka jest pełną turą, gdy model widzi każdą z instancji treningowych. Jeśli tak, nie widzę przewagi iteracji nad prawie nieznacznym podzbiorem instancji treningowych kilka razy, w przeciwieństwie do zastosowania „maksymalnej partii” poprzez udostępnienie modelu wszystkich dostępnych instancji treningowych w każdej turze (zakładając, oczywiście, wystarczającą ilość pamięć). Jaka jest zaleta tego podejścia?

Hendrik
źródło

Odpowiedzi:

46

Kluczowa zaleta korzystania z minibatcha w przeciwieństwie do pełnego zestawu danych sięga fundamentalnej idei stochastycznego spadku 1 .

W gradiencie wsadowym obliczasz gradient w całym zbiorze danych, uśredniając potencjalnie ogromną ilość informacji. Aby to zrobić, potrzeba dużo pamięci. Ale prawdziwym utrudnieniem jest trajektoria gradientu partii, która ląduje w złym miejscu (punkt siodłowy).

Z drugiej strony w czystym SGD aktualizujesz parametry, dodając (znak minus) gradient obliczony na pojedynczej instancji zestawu danych. Ponieważ jest oparty na jednym losowym punkcie danych, jest bardzo głośny i może odejść w kierunku dalekim od gradientu partii. Jednak hałas jest dokładnie tym, czego chcesz w optymalizacji niewypukłej, ponieważ pomaga ci uciec od punktów siodłowych lub lokalnych minimów (Twierdzenie 6 w [2]). Wadą jest to, że jest wyjątkowo nieefektywne i trzeba znaleźć wiele zestawów danych w pętli, aby znaleźć dobre rozwiązanie.

Metodologia minibatch jest kompromisem, który wprowadza wystarczającą ilość hałasu do każdej aktualizacji gradientu, jednocześnie osiągając względnie szybką zbieżność.

1 Bottou, L. (2010). Uczenie maszynowe na dużą skalę ze stochastycznym spadkiem gradientu. W Proceedings of COMPSTAT'2010 (s. 177-186). Physica-Verlag HD.

[2] Ge, R., Huang, F., Jin, C. i Yuan, Y. (2015, June). Ucieczka od punktów siodłowych - stochastyczny gradient online dla rozkładu tensora. W COLT (str. 797-842).

EDYTOWAĆ :

Właśnie widziałem ten komentarz na Facebooku Yanna LeCuna, który daje świeże spojrzenie na to pytanie (przepraszam, nie wiem jak połączyć z fb.)

Trening z dużymi minibatchem jest szkodliwy dla zdrowia. Co ważniejsze, źle wpływa na błąd testu. Znajomi nie pozwalają przyjaciołom na używanie minibatchów większych niż 32. Spójrzmy prawdzie w oczy: jedynymi osobami, które przeszły na rozmiary minibatchów większe niż jeden od 2012 roku, są to, że procesory graficzne są nieefektywne w przypadku partii mniejszych niż 32. To okropny powód. To po prostu oznacza, że ​​nasz sprzęt jest do bani.

Zacytował ten artykuł, który właśnie został opublikowany na arXiv kilka dni temu (kwiecień 2018 r.), Który warto przeczytać,

Dominic Masters, Carlo Luschi, Ponowne szkolenie dla małych partii dla głębokich sieci neuronowych , arXiv: 1804.07612v1

Z abstrakcji

Podczas gdy stosowanie dużych mini-partii zwiększa dostępną równoległość obliczeniową, wykazano, że szkolenie małych partii zapewnia lepszą wydajność uogólnienia ...

Najwyższą wydajność uzyskano konsekwentnie dla rozmiarów mini-partii od m = 2 do m = 32, co kontrastuje z ostatnimi pracami zalecającymi stosowanie mini-partii w tysiącach.

horaceT
źródło
2
Dlaczego zejście z gradientu mini-partii ma większe prawdopodobieństwo uniknięcia złych lokalnych minimów niż zejście gradientu z partii? Czy masz coś na poparcie tego roszczenia?
Martin Thoma,
@MartinThoma Patrz Twierdzenie 6 w [2], najnowszym artykule na temat JMLR.
horaceT
2
ϕ(w,X)
2
@MartinThoma Biorąc pod uwagę, że istnieje jeden globalny minim dla zbioru danych, który otrzymaliśmy, dokładna ścieżka do tych globalnych minimów zależy od różnych rzeczy dla każdej metody GD. W przypadku partii jedynym aspektem stochastycznym są wagi przy inicjalizacji. Ścieżka gradientu będzie taka sama, jeśli ponownie wyszkolisz NN z tymi samymi początkowymi wagami i zestawem danych. W przypadku mini-partii i SGD ścieżka będzie miała pewne stochastyczne aspekty między każdym krokiem od stochastycznego próbkowania punktów danych do treningu na każdym kroku. Dzięki temu mini-partia i SGD mogą uniknąć lokalnych optymów, jeśli są w drodze.
Wesley,
8

Pamięć nie jest tak naprawdę powodem tego, ponieważ można po prostu gromadzić gradienty podczas iteracji zestawu danych i stosować je na końcu, ale nadal w SGD stosuje się je na każdym etapie.

Powody, dla których SGD jest tak szeroko stosowane, to:

1) Wydajność. Zazwyczaj, szczególnie na początku szkolenia, gradienty parametrów dla różnych podzbiorów danych będą miały tendencję do wskazywania w tym samym kierunku. Tak więc gradienty oceniane na 1/100 danych będą z grubsza wskazywać w tym samym ogólnym kierunku, co w pełnym zbiorze danych, ale wymagają tylko 1/100 obliczeń. Ponieważ konwergencja w wysoce nieliniowej głębokiej sieci zwykle wymaga tysięcy lub milionów iteracji bez względu na to, jak dobre są twoje gradienty, sensowne jest wykonanie wielu aktualizacji na podstawie tanich oszacowań gradientu, a nie kilku aktualizacji na podstawie tych dobrych.

2) Optymalizacja: hałaśliwe aktualizacje mogą pozwolić ci odskoczyć od złych lokalnych optymów (chociaż nie mam źródła, które pokazuje, że to ma znaczenie w praktyce).

3) Uogólnienie. Wydaje się (patrz Zhang i in .: Teoria głębokiego uczenia się III: Właściwości uogólniające SGD ), że SGD faktycznie pomaga uogólnieniu, znajdując „płaskie” minima na zestawie szkoleniowym, które częściej są również minima na zestawie testowym. Intuicyjnie możemy myśleć o SGD jako o rodzaju workowania - obliczając nasze parametry w oparciu o wiele minibatch danych, wzmacniamy reguły uogólniające się w minibatchach i anulujemy reguły, które tego nie robią, przez co jesteśmy mniej podatni na nadmierne dopasowanie do zestaw treningowy.

Piotr
źródło
3

O ile się nie mylę, wielkość partii to liczba instancji treningowych widocznych przez model podczas iteracji treningu

Prawidłowo (chociaż nazwałbym to „krokiem aktualizacji wagi”)

a epoka jest pełną turą, gdy model widzi każdą z instancji treningowych

Poprawny

Jeśli tak, nie widzę przewagi iteracji nad prawie nieznacznym podzbiorem instancji treningowych kilka razy, w przeciwieństwie do zastosowania „maksymalnej partii” poprzez udostępnienie modelu wszystkich dostępnych instancji treningowych w każdej turze (zakładając, oczywiście, wystarczającą ilość pamięć). Jaka jest zaleta tego podejścia?

Cóż, właściwie to. Zwykle nie masz wystarczającej ilości pamięci. Powiedzmy, że mówimy o klasyfikacji obrazów. ImageNet to niezwykle popularny zestaw danych. Przez długi czas VGG-16D był jednym z najpopularniejszych modeli. Wymaga obliczenia 15 245 800 liczb zmiennoprzecinkowych (na mapach obiektów) dla jednego obrazu 224 x 224. Oznacza to około 61 MB na obraz. Jest to tylko przybliżona dolna granica ilości pamięci potrzebnej podczas treningu dla każdego obrazu. ImageNet zawiera kilka tysięcy (około 1,2 miliona?) Obrazów. Chociaż możesz mieć tak dużo pamięci głównej, na pewno nie masz tyle pamięci GPU. Widziałem, jak GPU przyspiesza rzeczy do około 21x. Więc na pewno chcesz użyć GPU.

Ponadto: czas na jedną mini-partię jest znacznie krótszy. Pytanie brzmi zatem: czy wolałbyś raczej robić n aktualizacji z mini-partią na godzinę na GPU lub m kroków aktualizacji z partią bez GPU, gdzie n >> m.

Martin Thoma
źródło
To naprawdę nie jest kwestia ograniczonej pamięci. Zawsze można obliczyć gradient w zbiorze danych w kilku partiach ze stałymi parametrami modelu (funkcjonalnie równoważne obliczeniu gradientu w pojedynczej wielkiej partii). Praktycznie chodzi bardziej o właściwości uogólnione spowodowane stochastycznością / hałaśliwością SGD / MBGD oraz faktem, że aby osiągnąć zbieżność, potrzeba mniej epok w zbiorze danych. Aktualizacja parametrów modelu w obrębie jednej epoki prowadzi do lepszych parametrów pośrednich, co sprawia, że ​​dalsze obliczenia gradientu w epoce są bardziej pouczające.
Madison,
1

Oprócz innych odpowiedzi uważam, że warto zauważyć, że istnieją dwie wielkości, które są różne, ale często połączone:

  1. Liczba danych wejściowych użytych do obliczenia gradientu parametrów na każdym etapie.

Jak zauważyli inni, gradient względem minibatchu jest przybliżeniem prawdziwego gradientu. Im większy minibatch, tym lepsze zbliżenie.

  1. Liczba danych wejściowych zebranych w tablicy i obliczonych „w tym samym czasie”

Kompromis dotyczy wyłącznie wydajności (pamięci / cykli).

Ilości te są zwykle takie same, tzn. Wielkość minibatchów, ale w zasadzie można je oddzielić.

zenna
źródło