Jak wielkość partii wpływa na konwergencję SGD i dlaczego?

18

Widziałem podobny wniosek z wielu dyskusji, że wraz ze wzrostem rozmiaru mini-partii konwergencja SGD faktycznie staje się trudniejsza / gorsza, na przykład ten artykuł i ta odpowiedź . Słyszałem także o ludziach stosujących sztuczki, takie jak małe stawki uczenia się lub wielkości partii na wczesnym etapie, aby rozwiązać ten problem w przypadku dużych partii.

Wydaje się to jednak sprzeczne z intuicją, ponieważ średnią stratę minibatchu można traktować jako przybliżenie oczekiwanej straty w dystrybucji danych, im większy rozmiar partii, tym dokładniejsza powinna być. Dlaczego w praktyce tak nie jest?

1|X|xXl(x,w)mixprezatza[l(x,w)]


Oto niektóre z moich (prawdopodobnie błędnych) myśli, które próbują wyjaśnić.

Parametry modelu w dużym stopniu zależą od siebie, gdy partia staje się zbyt duża, wpłynie to na zbyt wiele parametrów naraz, tak że trudno jest osiągnąć stabilną zależność parametrów? (jak wewnętrzny problem przesunięcia współzmiennej wspomniany w dokumencie normalizacyjnym partii )

Czy kiedy prawie wszystkie parametry są odpowiedzialne w każdej iteracji, będą mieli tendencję do uczenia się zbędnych wzorców niejawnych, a tym samym zmniejszają pojemność modelu? (Mam na myśli powiedzmy, że w przypadku problemów z klasyfikacją cyfr niektóre wzory powinny być odpowiedzialne za kropki, niektóre za krawędzie, ale kiedy tak się dzieje, każdy wzór próbuje być odpowiedzialny za wszystkie kształty).

A może dlatego, że kiedy wielkość partii zbliża się do skali zestawu treningowego, minibatche nie mogą być już postrzegane jako takie same z rozkładu danych, ponieważ istnieje duże prawdopodobieństwo skorelowanych minibatek?


Aktualizacja
Jak wskazano w odpowiedzi Benoit Sanchez, jednym ważnym powodem jest to, że duże minibatche wymagają więcej obliczeń, aby ukończyć jedną aktualizację, a większość analiz używa do porównania stałej liczby epok treningowych.

Jednak ten artykuł (Wilson i Martinez, 2003) pokazuje, że większy rozmiar partii jest nadal nieco niekorzystny, nawet przy wystarczającej ilości epok treningowych. Czy tak jest ogólnie? wprowadź opis zdjęcia tutaj

dontloo
źródło

Odpowiedzi:

12

N.

  • 27N.
  • 8343×N.200000,47N.

Widać, że przy większych partiach potrzebujesz znacznie mniej aktualizacji dla tej samej dokładności.

Ale nie można tego porównać, ponieważ nie przetwarza takiej samej ilości danych. Cytuję pierwszy artykuł:

kbjot1jotkbjot

Tutaj chodzi o przetwarzanie tej samej ilości danych i chociaż istnieje niewielki narzut dla wielu mini-partii, wymaga to porównywalnych zasobów przetwarzania.

Istnieje kilka sposobów, aby zrozumieć, dlaczego kilka aktualizacji jest lepszych (dla tej samej ilości odczytywanych danych). Jest to kluczowa idea stochastycznego spadku gradientu vs. spadek gradientu. Zamiast czytać wszystko, a następnie poprawiać się na końcu, poprawiasz siebie na drodze, dzięki czemu kolejne odczyty są bardziej przydatne, ponieważ poprawiasz się na podstawie lepszego przypuszczenia. Geometrycznie kilka aktualizacji jest lepszych, ponieważ rysujesz kilka segmentów, każdy w kierunku (przybliżonego) gradientu na początku każdego segmentu. podczas gdy pojedyncza duża aktualizacja to pojedynczy segment od samego początku w kierunku (dokładnego) gradientu. Lepiej kilkakrotnie zmienić kierunek, nawet jeśli kierunek jest mniej precyzyjny.

Rozmiar mini-partii jest zasadniczo częstotliwością aktualizacji: im mniejsze minibatche, tym więcej aktualizacji. Na jednym krańcu (minibatch = zestaw danych) masz spadek gradientu. Z drugiej strony (minibatch = jedna linia) masz pełną wartość SGD na linię. SGD na linię i tak jest lepszy, ale większe minibatche nadają się do wydajniejszej równoległości.

Pod koniec procesu konwergencji SGD staje się mniej precyzyjne niż (partia) GD. Ale w tym momencie rzeczy stają się (zwykle) rodzajem niepotrzebnie precyzyjnego dopasowania. Chociaż na zestawie treningowym masz nieco mniejszą funkcję straty, nie zyskujesz prawdziwej mocy predykcyjnej. Szukasz tylko bardzo precyzyjnego optimum, ale to nie pomaga. Jeśli funkcja utraty jest poprawnie uregulowana (co zapobiega nadmiernemu dopasowaniu), to nie do końca dopasowujesz, po prostu bezużytecznie dopasowujesz. Wskazuje to na nieistotną zmianę dokładności zestawu testowego.

Benoit Sanchez
źródło
1
dzięki, to ma sens. Więc w zasadzie, jeśli wykonujesz tę samą liczbę aktualizacji, to większy rozmiar partii będzie co najmniej tak samo dobry, prawda?
dontloo,
czy zdarzyło Ci się znać jakieś opublikowane eksperymenty na ten temat (porównanie różnych wielkości partii ze stałą liczbą aktualizacji)?
dontloo,
Tak, przy tej samej liczbie aktualizacji, większe partie są zawsze lepsze. Nie znam publikacji, jeśli ją znajdę, opublikuję ją.
Benoit Sanchez,
Przeczytałem resztę twojego pytania (tabela). Co ciekawe, pokazuje wyniki na zestawie testowym, podczas gdy celem gradientu przyzwoitego jest optymalizacja na zestawie treningowym. Możliwe jest, że małe partie unikają pewnego rodzaju drobnych przeregulowań poprzez losowe optymalne. To subtelna rzecz, o której nie mam intuicyjnego haczyka.
Benoit Sanchez,
Według artykułu różnica w dokładności nie jest znacząca. Chcą tylko wskazać, że dokładność jest zasadniczo taka sama. Chcą przede wszystkim podkreślić, że SGD z małymi partiami jest znacznie szybszy.
Benoit Sanchez,
4

Aby dodać do odpowiedzi Curtis White (i dodać więcej referencji):

Tak SGD działa jako rodzaj regularyzacji. Jest to ważne, ponieważ w przeciwnym razie trudno jest wyjaśnić, dlaczego nazwy DNN nie zawsze są zbyt duże, ponieważ mogą .

Rozumiem, że SGD powoduje „przeskakiwanie” w przestrzeni parametrów, więc podczas treningu parametry nie mogą pozostać w wąskim minimum, tylko w (lub blisko) szerszych. A te szersze najwyraźniej [1] uogólniają się lepiej (inaczej mniej przeregulowane).

Więcej referencji:

  • Oto [2] kolejny artykuł, który to formalizuje (lub próbuje, nie podążałem za tym wszystkim, sprawdź sam!)
  • Ten artykuł [3] twierdzi, że istnieje faza, do "stochastic relaxation, or random diffusion"której prowadzi stochastyczność związana z SGD "maximiz[ation of] the conditional entropy of the layer".

Oba mówią, że SGD odpowiada terminowi regulującemu entropię.

Zdecydowanie mogą istnieć inne sposoby wpływu wielkości partii na konwergencję; to ten, o którym wiem.


[1] Przykład: „Bayesowska perspektywa uogólnienia i stochastycznego spadku gradientu”, Smith, Le, 2018. Ze streszczenia: "We propose that the noise introduced by small mini-batches drives the parameters towards minima whose evidence is large."

[2] „Stochastyczne zejście gradientu dokonuje wnioskowania wariacyjnego, zbiega się w celu ograniczenia cykli dla sieci głębokich”, Chaudhari, Soatto 2017

[3] „Otwieranie czarnej skrzynki Deep Neural Networks via Information” Schwartz-Ziv, Tishby, 2017

[4] „Zrozumienie głębokiego uczenia się wymaga ponownego przemyślenia uogólnienia”, C. Zhang itp. 2016

dasWesen
źródło
(+1) Dobre referencje. btw, pierwszym autorem w [4] jest C. Zhang
użytkownik20160
Masz rację! Edytowałem to, dzięki za korektę.
dasWesen
0

Zbyt duży rozmiar partii może zapobiec zbieżności przynajmniej podczas korzystania z SGD i szkolenia MLP przy użyciu Keras. Dlatego nie jestem w 100% pewien, czy ma to związek z uśrednianiem gradientów, czy też mniejsze aktualizacje zapewniają większe prawdopodobieństwo uniknięcia lokalnych minimów.

Zobacz tutaj .

Curtis White
źródło