Wymień wielkość partii a liczbę iteracji w celu wyszkolenia sieci neuronowej

221

Kiedy trenujesz sieć neuronową, jaką różnicę ma ustawienie:

  • Wielkość partii z i liczby iteracjibzab
  • w porównaniu do wielkości partii do i liczby iteracji doddore

gdziezab=dore ?

Innymi słowy, zakładając, że trenujemy sieć neuronową z taką samą liczbą przykładów szkoleniowych, jak ustawić optymalny rozmiar partii i liczbę iteracji? (gdzie wielkość partii * liczba iteracji = liczba przykładów treningu pokazanych sieci neuronowej, przy czym ten sam przykład szkolenia potencjalnie pokazano kilka razy)

Zdaję sobie sprawę, że im większy rozmiar partii, tym więcej potrzebnej pamięci, co często przyspiesza obliczenia. Ale jaka to różnica pod względem wydajności wyszkolonej sieci?

Franck Dernoncourt
źródło
1
Sprawdź tego bloga, który opisuje, jak wybrać odpowiedni rozmiar partii, porównując wpływ różnych wielkości partii na dokładność zestawu danych Cifar-10.
Teja Sreenivas

Odpowiedzi:

207

Od Nitish Shirish Keskar, Dheevatsa Mudigere, Jorge Nocedal, Mikhail Smelyanskiy, Ping Tak Peter Tang. Szkolenie dla dużych partii w zakresie głębokiego uczenia się: luka uogólniająca i ostre minima. https://arxiv.org/abs/1609.04836 :

Stochastyczna metoda opadania gradientu i jej warianty są algorytmami z wyboru dla wielu zadań Deep Learning. Metody te działają w reżimie małych partii, w którym część danych treningowych, zwykle 32-512 punktów danych, jest próbkowana w celu obliczenia aproksymacji gradientu. W praktyce zaobserwowano, że przy stosowaniu większej partii występuje znaczny spadek jakości modelu, mierzony jego zdolnością do generalizacji.Próbowano zbadać przyczynę tego spadku uogólnienia w reżimie dużych partii, jednak dokładna odpowiedź na to zjawisko jest dotychczas nieznana. W tym artykule przedstawiamy liczne dowody liczbowe, które potwierdzają pogląd, że metody dużych partii mają tendencję do zbieżności z ostrymi minimalizatorami funkcji szkoleniowych i testowych - i że ostre minima prowadzą do gorszego uogólnienia. W przeciwieństwie do tego, metody małych partii konsekwentnie są zbieżne z płaskimi minimalizatorami, a nasze eksperymenty potwierdzają powszechnie przyjęty pogląd, że jest to spowodowane nieodłącznym szumem w oszacowaniu gradientu. Omawiamy również kilka strategii empirycznych, które pomagają metodom wielkoseryjnym eliminować lukę uogólniającą i kończą zestawem przyszłych pomysłów badawczych i otwartych pytań.

[…]

2)fa(x)2)fa(x) . Zauważyliśmy, że krajobraz funkcji utraty głębokich sieci neuronowych jest taki, że metody dużych partii są prawie niezmiennie przyciągane do regionów o ostrych minimach i że, w przeciwieństwie do metod małych partii, nie są w stanie uciec z basenów tych minimizatorów.

[…]

wprowadź opis zdjęcia tutaj

Ponadto, kilka dobrych spostrzeżeń od Iana Goodfellow'a, odpowiadających na pytanie, dlaczego nie używać całego zestawu treningowego do obliczania gradientu? na Quora:

Wielkość współczynnika uczenia się jest ograniczona głównie czynnikami, takimi jak zakrzywienie funkcji kosztu. Możesz pomyśleć o spadku gradientu jako o liniowym przybliżeniu do funkcji kosztu, a następnie przemieszczaniu się w dół wzdłuż tego przybliżonego kosztu. Jeśli funkcja kosztu jest wysoce nieliniowa (mocno zakrzywiona), przybliżenie nie będzie bardzo dobre na bardzo daleko, więc bezpieczne są tylko małe stopnie. Możesz przeczytać więcej na ten temat w rozdziale 4 podręcznika dogłębnego uczenia się, na temat obliczeń numerycznych: http://www.deeplearningbook.org/contents/numerical.html

Umieszczając m przykładów w mini-partii, musisz wykonać obliczenia O (m) i użyć pamięci O (m), ale zmniejszasz niepewność gradientu tylko o współczynnik O (sqrt (m)). Innymi słowy, maleją marginalne zyski z umieszczenia większej liczby przykładów w mini-partii. Więcej informacji na ten temat można znaleźć w rozdziale 8 podręcznika dogłębnego uczenia się na temat algorytmów optymalizacji do głębokiego uczenia się: http://www.deeplearningbook.org/contents/optimization.html

Ponadto, jeśli się nad tym zastanowić, nawet użycie całego zestawu treningowego nie daje prawdziwego gradientu. Prawdziwy gradient byłby gradientem oczekiwanym z oczekiwaniami wziętymi na wszystkie możliwe przykłady, ważonymi rozkładem generującym dane. Korzystanie z całego zestawu szkoleniowego polega na użyciu bardzo dużego rozmiaru minibatchu, przy czym rozmiar tego minibatchu jest ograniczony przez kwotę, którą wydajesz na zbieranie danych, a nie przez kwotę, którą wydajesz na obliczenia.

Powiązane: Opadanie gradientem wsadowym a stochastyczne obniżanie gradientu

Franck Dernoncourt
źródło
Skoro batch_size dzieli tylko zestaw danych treningowych na partie, czy miałoby sens przestawienie zestawu danych (nieczasowe), aby uzyskać jednolitą wariancję we wszystkich partiach? Może to zmniejszyć potrzebę optymalizacji wielkości partii, co jest dobre jedynie w celu znalezienia szybszej konwergencji. jeśli tak, to jak by to zrobić? Myślałem, że może nie zapewniać bardziej płaskich minimów. Doceniłbym szczegółowe wytyczne.
user12348,
@ user12348 Jak zmienisz układ danych? Jak mógłbyś oszacować, że dany wymiar danych wytworzy określony wektor cech po treningu?
Cloud Cho
46

Zakładam, że mówisz o zmniejszeniu wielkości partii w algorytmie stochastycznego gradientu mini wsadu i porównaniu go do większych partii, wymagających mniejszej liczby iteracji.

Andrew Ng. zapewnia dobrą dyskusję na temat tego i niektórych elementów wizualnych w swojej klasie online na temat ML i sieci neuronowych. Tak więc reszta tego postu jest głównie regurgitacją jego nauk z tej klasy.

Weźmy dwie skrajności, z jednej strony każdy krok spadku gradientu wykorzystuje cały zestaw danych. Obliczasz gradienty dla każdej próbki. W takim przypadku znasz dokładnie to, co najlepsze bezpośrednio w lokalnym minimum. Nie marnujesz czasu na pójście w złym kierunku. Jeśli chodzi o liczby stopni spadku gradientu, dostaniesz się tam jak najmniej.

Oczywiście obliczanie gradientu dla całego zestawu danych jest kosztowne. Teraz przechodzimy do drugiej skrajności. Wielkość partii to zaledwie 1 próbka. W takim przypadku gradient tej próbki może poprowadzić Cię całkowicie w złym kierunku. Ale hej, koszt obliczenia jednego gradientu był dość trywialny. Gdy robisz kroki w odniesieniu do tylko jednej próbki, „wędrujesz” trochę, ale średnio zmierzasz w kierunku równie rozsądnego lokalnego minimum, jak przy pełnym opadaniu gradientu partii.

To może być chwila, by wskazać, że widziałem literaturę sugerującą, że być może to podskakiwanie wokół tego 1-próbnego stochastycznego spadku gradientu może pomóc ci odbić się od lokalnych minimów, których nie można uniknąć w trybie pełnego wsadu, ale jest to dyskusyjne. Niektóre inne dobre odpowiedzi tutaj odnoszą się do tego pytania bardziej bezpośrednio niż ja.

Jeśli chodzi o moc obliczeniową, podczas gdy stochastyczny proces GD z pojedynczą próbką wymaga o wiele więcej iteracji, ostatecznie dostajesz się tam za mniej niż koszt pełnego trybu wsadowego, „zwykle”. Tak to ujmuje Andrew Ng.

Teraz znajdźmy środek, o który pytałeś. Możemy zdać sobie sprawę, że współczesne biblioteki BLAS sprawiają, że matematyka obliczeniowa jest dość wydajna, więc obliczenie 10 lub 100 próbek jednocześnie, zakładając, że poprawnie wektoryzowałeś swój kod, będzie niewiele więcej pracy niż obliczenie 1 próbki (zyskujesz wydajność połączeń pamięciowych, a także sztuczki obliczeniowe wbudowane w najbardziej wydajne biblioteki matematyczne). Uśrednienie dla partii 10, 100, 1000 próbek da gradient, który jest bardziej rozsądnym przybliżeniem prawdziwego gradientu pełnego trybu wsadowego. Dlatego nasze kroki są teraz dokładniejsze, co oznacza, że ​​potrzebujemy mniejszej ich liczby, a ich koszt jest tylko nieznacznie wyższy niż GD dla pojedynczej próbki.

Zoptymalizowanie dokładnego rozmiaru mini-partii, której należy użyć, zasadniczo należy do próby i błędu. Przeprowadź kilka testów na próbce zestawu danych o liczbach od powiedzmy dziesiątek do kilku tysięcy i sprawdź, które zbiegają się najszybciej, a następnie przejdź do tego. Rozmiary partii w tych przedziałach wydają się dość powszechne w literaturze. A jeśli twoje dane naprawdę są IID, to centralne twierdzenie graniczne dotyczące zmienności procesów losowych sugerowałoby również, że te zakresy są rozsądnym przybliżeniem pełnego gradientu.

Decyzja o tym, kiedy zatrzymać iterację, jest zwykle podejmowana przez monitorowanie błędu generalizacji w stosunku do nieprzeszkolonego zestawu walidacyjnego i wybranie punktu, w którym błąd walidacji znajduje się w najniższym punkcie. Trening dla zbyt wielu iteracji ostatecznie doprowadzi do przeregulowania, w którym to momencie twój błąd w zestawie sprawdzania poprawności zacznie się wznosić. Gdy zobaczysz, że dzieje się to, wykonaj kopię zapasową i zatrzymaj się w optymalnym punkcie.

David Parks
źródło
22

TL; DR: Zbyt duży rozmiar mini-partii zwykle prowadzi do niższej dokładności!

Dla zainteresowanych, oto wyjaśnienie.

Istnieją dwa pojęcia prędkości:

  • Szybkość obliczeniowa
  • Szybkość zbieżności algorytmu

Szybkość obliczeniowa to po prostu szybkość wykonywania obliczeń numerycznych w sprzęcie. Jak powiedziałeś, zwykle jest większy przy większym rozmiarze mini-partii. Jest tak, ponieważ biblioteki algebry liniowej używają wektoryzacji dla operacji wektorowych i macierzowych, aby je przyspieszyć, kosztem wykorzystania większej ilości pamięci. Zyski mogą być znaczące do pewnego momentu. Z mojego doświadczenia wynika, że ​​istnieje pewien moment, w którym prędkość jest minimalna. Punkt zależy od zestawu danych, sprzętu i biblioteki używanej do obliczeń numerycznych (pod maską).

Ale nie zapominajmy, że istnieje również inne pojęcie prędkości, które mówi nam, jak szybko nasz algorytm się zbiega.

Po pierwsze, co to znaczy, że nasz algorytm jest zbieżny? Cóż, od nas zależy, czy zadecydujemy, kiedy jesteśmy zadowoleni z dokładności lub błędu, który otrzymujemy, obliczonego na podstawie zestawu sprawdzania poprawności. Możemy albo zdefiniować go z wyprzedzeniem i poczekać, aż algorytm dojdzie do tego punktu, lub możemy monitorować proces szkolenia i zdecydować o jego zatrzymaniu, gdy błąd sprawdzania poprawności zacznie znacznie rosnąć (model zaczyna przeważać nad zestawem danych). Naprawdę nie powinniśmy go od razu zatrzymywać, w pierwszej chwili błąd zaczyna rosnąć, jeśli pracujemy z mini partiami, ponieważ używamy Stochastic Gradient Descent, SGD. W przypadku (pełnej partii) opadania gradientu, po każdej epoce algorytm ustabilizuje się co najmniej, czy to lokalny, czy globalny. SGD nigdy tak naprawdę nie ustala się na minimum. Oscyluje wokół niego. To może trwać w nieskończoność,

Teraz, po całej tej teorii, istnieje „haczyk”, na który musimy zwrócić uwagę. Przy stosowaniu mniejszej wielkości partii obliczenie błędu powoduje większy hałas niż w przypadku użycia większej wielkości partii. Ktoś powiedziałby, że to źle, prawda? Chodzi o to, że szum może pomóc algorytmowi wyskoczyć ze złego lokalnego minimum i mieć większą szansę na znalezienie albo lepszego lokalnego minimum, albo, mam nadzieję, globalnego minimum.

Jeśli więc możemy szybciej znaleźć lepsze rozwiązanie, używając mniejszego partii zamiast większej, tylko dzięki „niechcianemu” hałasowi, możemy wyregulować całkowity czas potrzebny naszemu algorytmowi na znalezienie zadowalającego rozwiązanie i większa dokładność.

Chcę powiedzieć, że dla danej dokładności (lub błędu) mniejsza wielkość partii może prowadzić do krótszego całkowitego czasu szkolenia, nie dłużej, jak wielu uważa.

Lub, jeśli zdecydujemy się zachować taki sam czas treningu jak poprzednio, możemy uzyskać nieco wyższą dokładność przy mniejszym rozmiarze partii, i najprawdopodobniej zrobimy to, zwłaszcza jeśli odpowiednio wybraliśmy nasz wskaźnik uczenia się.

Jeśli masz czas, sprawdź ten artykuł: Systematyczna ocena postępów CNN w ImageNet Zwłaszcza sprawdź „3.7. Wielkość partii i szybkość uczenia się” oraz Rysunek 8. , że duże rozmiary mini-partii prowadzą do gorszej dokładności , nawet jeśli dostosujesz tempo uczenia się do heurystyki.

Zasadniczo wielkość partii 32 jest dobrym punktem wyjścia i powinieneś również spróbować 64, 128 i 256. Inne wartości (niższe lub wyższe) mogą być odpowiednie dla niektórych zestawów danych, ale podany zakres jest na ogół najlepszy do zacznij eksperymentować z. Jednak poniżej 32 roku życia może stać się zbyt wolny z powodu znacznie niższej prędkości obliczeniowej, z powodu niepełnego wykorzystania wektoryzacji. Jeśli pojawi się błąd „brak pamięci”, i tak spróbuj zmniejszyć rozmiar mini-partii.

Nie chodzi więc tylko o użycie największego możliwego rozmiaru mini-partii, który pasuje do pamięci.

Podsumowując i odpowiadając na twoje pytanie, mniejszy rozmiar mini-partii (niezbyt mały) zwykle prowadzi nie tylko do mniejszej liczby iteracji algorytmu szkoleniowego, niż do dużej wielkości partii, ale także do ogólnej wyższej dokładności, tj. sieć neuronowa, która działa lepiej, przy takim samym czasie szkolenia lub mniej.

Nie zapominaj, że wyższy hałas może pomóc mu wyskoczyć ze złego lokalnego minimum, zamiast pozostawić go w utknięciu.

ivanbgd
źródło
14

Dodaję inną odpowiedź do tego pytania, aby odnieść się do nowego (konferencyjnego) ICLR (2018) od Google, który prawie bezpośrednio odnosi się do tego pytania.

Tytuł: Nie zmniejszaj współczynnika uczenia się, zwiększ wielkość partii

https://arxiv.org/abs/1711.00489

Skopiowano streszczenie z powyższej pracy:

Powszechną praktyką jest obniżanie wskaźnika uczenia się. Tutaj pokazujemy, że zwykle można uzyskać tę samą krzywą uczenia się zarówno na zestawach treningowych, jak i testowych, zamiast tego zwiększając wielkość partii podczas treningu. Ta procedura jest skuteczna w przypadku stochastycznego spadku gradientu (SGD), SGD z pędem, pędu Nesterowa i Adama. Osiąga równoważne dokładności testu po tej samej liczbie epok treningu, ale z mniejszą liczbą aktualizacji parametrów, co prowadzi do większej równoległości i krótszych czasów treningu. Możemy dodatkowo zmniejszyć liczbę aktualizacji parametrów, zwiększając szybkość uczenia się ϵ i skalując rozmiar partii B∝ϵ. Wreszcie można zwiększyć współczynnik pędu mi skalę B∝1 / (1 − m), chociaż ma to tendencję do nieznacznego zmniejszania dokładności testu. Co najważniejsze, nasze techniki pozwalają nam zmienić przeznaczenie istniejących harmonogramów treningów na szkolenie dużych partii bez strojenia hiperparametrów. Szkolimy ResNet-50 na ImageNet do dokładności walidacji 76,1% w mniej niż 30 minut.

David Parks
źródło
1
Większe zapotrzebowanie na pamięć wydaje się złym kompromisem za po prostu uniknięcie zmniejszenia wartości. Również IMHO, które rośnie ślad pamięci podczas treningu, stanowi mniej, a nie więcej, skalowalny algorytm.
P-Gn
3

Pokazuję tutaj pewne doświadczenia empiryczne . Zrobiłem eksperyment z rozmiarem partii 4 i rozmiarem partii 4096. Rozmiar 4096 robi 1024 razy mniej propagacji wstecznych. Moją intuicją jest to, że większe partie wykonują mniej i bardziej zgrubne etapy poszukiwania optymalnego rozwiązania, a zatem mniej prawdopodobne jest, że dzięki konstruowaniu optymalne rozwiązanie będzie zbieżne.

Lars Ericson
źródło