Jaki jest rozmiar partii w sieci neuronowej?

174

Używam Python Keras packagedo sieci neuronowej. To jest link . Czy batch_sizejest równa liczbie próbek testowych? Z Wikipedii mamy informację:

Jednak w innych przypadkach ocena gradientu sumy może wymagać kosztownej oceny gradientów ze wszystkich funkcji sumowania. Gdy zestaw treningowy jest ogromny i nie istnieją proste formuły, ocena sum gradientów staje się bardzo kosztowna, ponieważ ocena gradientu wymaga oceny gradientów wszystkich funkcji sumowania. Aby zaoszczędzić na koszcie obliczeniowym przy każdej iteracji, gradient stochastyczny pobiera próbki podzbioru funkcji sumowania na każdym etapie. Jest to bardzo skuteczne w przypadku problemów z uczeniem maszynowym na dużą skalę.

Powyższe informacje opisują dane testowe? Czy to samo co batch_sizew keras (liczba próbek na aktualizację gradientu)?

użytkownik2991243
źródło
3
Dobrze jest zobaczyć kurs class.coursera.org/ml-005/lecture/preview , szczególnie dla Ciebie w tygodniu 4-6 + 10. Wikipedia może nie być tak cennym zasobem do nauki sieci neuronowych.
404pio

Odpowiedzi:

228

Rozmiar partii określa liczbę próbek, które będą propagowane przez sieć.

Załóżmy na przykład, że masz 1050 próbek treningowych i chcesz ustawić wartość batch_sizerówną 100. Algorytm pobiera pierwsze 100 próbek (od 1 do 100) ze zbioru danych szkoleniowych i trenuje sieć. Następnie pobiera drugie 100 próbek (od 101 do 200) i ponownie trenuje sieć. Możemy kontynuować tę procedurę, dopóki nie rozpowszechnimy wszystkich próbek w sieci. Problem może wystąpić z ostatnim zestawem próbek. W naszym przykładzie użyliśmy 1050, którego nie można podzielić przez 100 bez reszty. Najprostszym rozwiązaniem jest pobranie 50 ostatnich próbek i wyszkolenie sieci.

Zalety stosowania wielkości partii <liczba wszystkich próbek:

  • Wymaga mniej pamięci. Ponieważ trenujesz sieć przy użyciu mniejszej liczby próbek, ogólna procedura szkolenia wymaga mniej pamięci. Jest to szczególnie ważne, jeśli nie jesteś w stanie zmieścić całego zestawu danych w pamięci komputera.

  • Zazwyczaj sieci trenują szybciej dzięki mini-partiom. To dlatego, że aktualizujemy wagi po każdej propagacji. W naszym przykładzie rozpropagowaliśmy 11 partii (10 z nich miało 100 próbek, a 1 miał 50 próbek), a po każdej z nich zaktualizowaliśmy parametry naszej sieci. Gdybyśmy użyli wszystkich próbek podczas propagacji, dokonalibyśmy tylko 1 aktualizacji parametru sieci.

Wady korzystania z wielkości partii <liczba wszystkich próbek:

  • Im mniejsza partia, tym mniej dokładne będzie oszacowanie gradientu. Na poniższym rysunku widać, że kierunek gradientu mini-partii (kolor zielony) zmienia się znacznie bardziej w porównaniu z kierunkiem pełnego gradientu partii (kolor niebieski).

Kierunki gradientu dla różnych konfiguracji partii

Stochastic jest tylko mini-partią o wartości batch_sizerównej 1. W takim przypadku gradient zmienia kierunek nawet częściej niż gradient mini-partii.

itdxer
źródło
Dziękuję za odpowiedź. pan pracować Keras? w każdym razie, aby ustawić dane testowe w tym pakiecie?
user2991243
3
Nie, nie zrobiłem tego. Jest to popularna technika w sieciach neuronowych i tę terminologię można znaleźć w różnych bibliotekach, książkach i artykułach. Czy chcesz sprawdzić błąd danych testowych w każdej epoce, czy po prostu zweryfikować model po treningu?
itdxer
Tak. To prawda. Podobna struktura mamy, MATLABale znalazłem tu tylko zestawy danych dotyczące pociągu i sprawdzania poprawności. Myślę, że tutaj w tym zestawie zestaw danych do sprawdzania poprawności jest taki sam, jak dane testowe, ale nie ma wczesnego zatrzymywania, więc nie mamy żadnych prawdziwych danych do sprawdzania poprawności.
user2991243
1
Sieć zbiega się również szybciej, ponieważ liczba aktualizacji jest znacznie wyższa. Ustawienie mini partii jest rodzajem sztuki, zbyt małej i ryzykujesz, że nauka stanie się zbyt stochastyczna, szybsza, ale zbiegnie się w niewiarygodne modele, zbyt duża i nie będzie pasować do pamięci i wciąż potrwa wieki.
Ramalho
1
Zwykle ludzie mówią, że nauka online ma na myśli batch_size=1. Ideą uczenia się online jest aktualizacja modelu, gdy tylko zobaczysz przykład. Przy większym rozmiarze partii oznacza to, że najpierw przeglądasz wiele próbek przed wykonaniem aktualizacji. W RNN wielkość partii może mieć różne znaczenia. Zwykle dzielenie sekwencji treningowej na okno o stałym rozmiarze (np. 10 słów) jest powszechne. W tym przypadku uwzględnienie 100 takich okien podczas szkolenia oznacza, że ​​masz batch_size=100.
itdxer
151

W terminologii sieci neuronowej:

  • jedna epoka = jedno przejście do przodu i jedno przejście do tyłu wszystkich przykładów treningu
  • wielkość partii = liczba przykładów treningu w jednym przejściu do przodu / do tyłu. Im większy rozmiar partii, tym więcej miejsca w pamięci potrzebujesz.
  • liczba iteracji = liczba przebiegów, każde przejście z wykorzystaniem [wielkości partii] liczby przykładów. Żeby było jasne, jedno przejście = jedno przejście do przodu + jedno przejście do tyłu (nie liczymy przejścia do przodu i do tyłu jako dwa różne przejścia).

Przykład: jeśli masz 1000 przykładów treningu, a twoja partia to 500, to zajmie 2 iteracje, aby ukończyć 1 epokę.

FYI: Kompromis między wielkością partii a liczbą iteracji w celu trenowania sieci neuronowej

Franck Dernoncourt
źródło
Ale jaka jest różnica między używaniem liczby przykładów [wielkości partii] i trenowaniem sieci na każdym przykładzie i przejściem do następnych przykładów liczb [wielkości partii]. Ponieważ przekazujesz jeden przykład przez sieć i stosujesz SGD i bierzesz następny przykład, i tak dalej, nie będzie miało znaczenia, czy wielkość partii wynosi 10, 1000 czy 100000. Po [wielkości partii] liczby przykładów są robione następny przykład nastąpi kolejna partia. To robi różnicę tylko wtedy, gdy [wielkość partii] liczby przykładów przejdą [liczbę iteracji] razy przez sieć, a następnie przejdą do następnych przykładów [wielkości partii].
Erhard Dinhobl
Ważnym rozróżnieniem jest to, że etap uczenia się (jeden krok) jest stosowany raz dla każdej partii, podczas gdy trzeba przełączyć wszystkie partie, aby stworzyć jedną epokę. Różnica jest więc algorytmiczna nie tylko w pamięci: większe partie oznaczają, że oceniasz gradient na większej liczbie próbek.
meduz
Jaka jest różnica między epoką a iteracjami?
Goldname
1
@Goldname 1 epoka zawiera wszystkie przykłady szkolenia, podczas gdy 1 iteracja obejmuje tylko [wielkość partii] liczbę przykładów szkolenia.
Franck Dernoncourt
3

Podczas rozwiązywania problemu z procesorem przy optymalizacji procesora iteracyjnie stosuje się algorytm do niektórych danych wejściowych. W każdej z tych iteracji zwykle aktualizujesz Metrykę problemu, wykonując kilka obliczeń na danych. Teraz, gdy rozmiar twoich danych jest duży, ukończenie każdej iteracji może wymagać dużo czasu i może pochłonąć wiele zasobów. Czasami więc decydujesz się na zastosowanie tych iteracyjnych obliczeń na części danych, aby zaoszczędzić czas i zasoby obliczeniowe. Ta część jest wielkością partii i proces ten nazywany jest (w Neuron Network Lingo) przetwarzaniem danych wsadowych. Kiedy zastosujesz swoje obliczenia do wszystkich swoich danych, następnie wykonasz przetwarzanie danych online. Myślę, że terminologia pochodzi z lat 60., a nawet wcześniej. Czy ktoś pamięta. pliki bat DOS? Ale oczywiście wcielona koncepcja oznacza wątek lub część danych, które mają być użyte.

pebox 11
źródło
2

Dokumentacja na Kerastemat wielkości partii można znaleźć w fitfunkcji w modelach (funkcjonalny API) strona

batch_size: Liczba całkowita lub Brak. Liczba próbek na aktualizację gradientu. Jeśli nie zostanie określony, batch_size będzie domyślnie ustawiony na 32.

Jeśli masz mały zestaw danych, najlepiej byłoby, aby wielkość partii była równa wielkości danych szkolenia. Najpierw spróbuj małej partii, a następnie zwiększ, aby zaoszczędzić czas. Jak wspomniano itdxer , istnieje kompromis między dokładnością a prędkością.

otayeby
źródło