Jaki jest rozmiar wsadu w sieci neuronowej?

Używam Python Keras package dla sieci neuronowej. To jest link . Czy batch_size to liczba próbek testowych? Z Wikipedii mamy to informacje:

Jednak w innych przypadkach ocena gradientu sumy może wymagać kosztownych ocen gradientów ze wszystkich funkcji sumy. Gdy zbiór uczący jest ogromny i nie ma prostych wzorów, obliczanie sum gradientów staje się bardzo kosztowne, ponieważ ocena gradientu wymaga oceny wszystkich gradientów funkcji sumy. Aby zaoszczędzić na kosztach obliczeniowych w każdej iteracji, stochastyczne zejście gradientowe próbkuje podzbiór funkcji sumy na każdym kroku. Jest to bardzo skuteczne w przypadku problemów z uczeniem maszynowym na dużą skalę.

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

Komentarze

Odpowiedź

rozmiar partii określa liczbę próbek, które będą propagowane w sieci.

Na przykład , powiedzmy, że masz 1050 próbek treningowych i chcesz ustawić batch_size równe 100. Algorytm pobiera pierwsze 100 próbek (od 1 do 100) ze szkoleniowego zbioru danych i uczy sieć. Następnie pobiera kolejne 100 próbek (od 101 do 200) i ponownie szkoli sieć. Możemy kontynuować tę procedurę, dopóki nie rozpropagujemy wszystkich próbek w sieci. P roblem może się zdarzyć z ostatnim zestawem próbek. W naszym przykładzie użyliśmy 1050, które nie jest podzielne przez 100 bez reszty. Najprostszym rozwiązaniem jest po prostu pobranie ostatnich 50 próbek i przeszkolenie sieci.

Zalety używania rozmiaru partii < liczba wszystkich próbek:

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

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

Wady stosowania rozmiaru 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-wsadu (kolor zielony) zmienia się znacznie bardziej w porównaniu z kierunkiem gradientu pełnego wsadu (kolor niebieski).

Kierunki gradientu dla różnych konfiguracji wsadowych

Stochastic to po prostu mini-partia z batch_size równe 1. W takim przypadku gradient zmienia swój kierunek nawet częściej niż gradient mini-wsadowy.

Komentarze

  • Nie, nie ' t. Jest to popularna technika w sieciach neuronowych i tę terminologię można spotkać 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 uczeniu?
  • Sieć również łączy się szybciej, ponieważ liczba aktualizacji jest znacznie wyższa. Ustawienie rozmiaru mini-partii to swego rodzaju sztuka, zbyt mała 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 nadal zajmie wieki.
  • Czy to oznacza, że batch_size=<size of dataset> są uznawane za uczenie się online, czy raczej batch_size=1? I czy to wszystko pozostaje prawdą również dla sieci RNN? Kiedy używasz batch_size w RNN, czy partia jest uważana za rodzaj wirtualnego kroku czasowego , w którym wszystkie wystąpienia w tej partii zostaną obliczone tak, jakby wystąpiły naraz ?
  • Zazwyczaj kiedy ludzie mówią o uczeniu się online, mają 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 ' jest wspólne dla podzielenia sekwencji treningowej na okno o ustalonym rozmiarze (np. 10 słów). W tym przypadku włączenie 100 takich okien podczas szkolenia oznacza, że masz batch_size=100.
  • @Oleg Melnikov, jeśli ostatnia partia ma znacznie mniejszy rozmiar (niech ' mówią, że będzie to 1 zamiast 50), wtedy oszacowanie gradientu będzie mniej dokładne i może trochę zepsuć twoje wagi. Na powyższym obrazku wyobraź sobie, że wykonujesz 10 aktualizacji za pomocą mini partii 100 (zielone linie) i jedną za pomocą mini partii 1 (czerwona linia). Co oznacza, że w następnej epoce kilka pierwszych iteracji może rozpocząć rozwiązywanie problemu z ostatnią aktualizacją mini partii 1 z poprzedniej epoki.

Odpowiedź

W terminologii sieci neuronowej:

  • jedna epoka = jedno przejście do przodu i jedno przejście do tyłu wszystkich przykładów szkoleniowych
  • wielkość partii = liczba przykładów treningowych w jednym przebiegu do przodu / do tyłu. Im większy rozmiar wsadu, tym więcej miejsca w pamięci „będziesz potrzebować.
  • liczba iteracji = liczba przebiegów, każdy przebieg przy użyciu [wielkość partii] liczba przykładów. Aby 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 dwóch różnych przebiegów).

Przykład: jeśli masz 1000 przykładów treningowych, a wielkość partii to 500, to ukończenie 1 epoki zajmie 2 iteracje.

Do Twojej wiadomości: Kompromis między rozmiarem partii a liczbą iteracji w celu trenowania sieci neuronowej

Komentarze

  • Ale jaka jest różnica między używając numerów przykładów [rozmiar wsadu] i trenuj sieć w każdym przykładzie i przejdź do następnych przykładów numerów [rozmiar pakietu]. Ponieważ przekazujesz jeden przykład przez sieć i zastosujesz SGD, a następnie weźmiesz następny przykład i tak dalej, nie różnica czy wielkość partii to 10, 1000 czy 100000. Po [batc h rozmiar] liczba przykładów jest wykonywana w następnym przykładzie kolejnej partii. Ma to znaczenie tylko wtedy, gdy liczby [rozmiaru partii] w przykładzie przekażą [liczba iteracji] razy sieć, a następnie przejdą do następnych przykładów dotyczących [rozmiaru partii].
  • Ważną różnicą jest to, że krok uczenia się (jeden krok) jest stosowany raz dla każdej partii, podczas gdy musisz przejść przez wszystkie partie, aby utworzyć jedną epokę. Więc różnica jest również algorytmiczna nie tylko w pamięci: większe partie oznaczają, że uśredniasz gradient dla większej liczby próbek.
  • Jaka ' jest różnica między epoką a iteracjami ?
  • @Goldname 1 epoka zawiera wszystkie przykłady uczące, podczas gdy 1 iteracja obejmuje tylko [rozmiar partii] liczbę przykładów uczących.
  • Więc: Jeśli liczba epok jest stała, a my ' wykreślając ponownie wykres zbieżności z każdym punktem reprezentującym wynik po każdej epoce, możemy oczekiwać, że wynikowy wykres będzie ' gładszy ' (a trening wolniejszy), gdy zmniejszamy batch_size?

Odpowiedź

Podczas rozwiązywania problemu optymalizacji za pomocą procesora lub procesora graficznego należy iteracyjnie zastosować algorytm do niektórych danych wejściowych. W każdej z tych iteracji zazwyczaj aktualizujesz Metrykę swojego problemu, wykonując obliczenia na danych. Teraz, gdy rozmiar danych jest duży, ukończenie każdej iteracji może zająć dużo czasu i może pochłonąć dużo zasobów. Czasami więc decydujesz się na zastosowanie tych iteracyjnych obliczeń do części danych, aby zaoszczędzić czas i zasoby obliczeniowe. Ta część to batch_size, a proces nazywa się (w żargonie sieci neuronowej) wsadowym przetwarzaniem danych. Kiedy stosujesz obliczenia do wszystkich swoich danych, przetwarzasz dane online. Myślę, że terminologia pochodzi z lat 60., a nawet wcześniej. Czy ktoś pamięta pliki .bat DOS? Ale oczywiście koncepcja wcielona oznaczała wątek lub część danych do wykorzystania.

Odpowiedź

Dokumentację Keras na temat rozmiaru partii można znaleźć pod fit na stronie Modele (funkcjonalny interfejs API)

batch_size: liczba całkowita lub brak. Liczba próbek na aktualizację gradientu. Jeśli nie zostanie określony, rozmiar_batchu będzie miał wartość domyślną 32.

Jeśli masz mały zbiór danych, najlepiej byłoby ustawić rozmiar partii równy rozmiarowi dane treningowe. Najpierw spróbuj z małą partią, a następnie zwiększ, aby zaoszczędzić czas. Jak wspomniano w itdxer , istnieje kompromis między dokładnością a szybkością.

Odpowiedź

Rozmiar wsadu to hiperparametr określający liczbę próbek, które mają zostać przetworzone przed aktualizacją parametrów modelu wewnętrznego.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *