Rozumiem, że stochastyczne zejście gradientu może być wykorzystane do optymalizacji sieci neuronowej z wykorzystaniem propagacji wstecznej poprzez aktualizację każdej iteracji inną próbką zestawu danych szkoleniowych. Jak duży powinien być rozmiar partii?
49
Odpowiedzi:
„Wielkość próbki” mówisz jest określany jako wielkości partii , . Parametr wielkości partii jest tylko jednym z hiperparametrów, które będziesz dostrajać, gdy trenujesz sieć neuronową przy użyciu mini-partii Stochastic Gradient Descent (SGD) i jest zależny od danych. Najbardziej podstawową metodą wyszukiwania hiperparametrowego jest przeszukiwanie siatki na podstawie szybkości uczenia się i wielkości partii w celu znalezienia pary, która powoduje, że sieć się zbiega.b
Aby zrozumieć, jaki powinien być rozmiar partii, ważne jest, aby zobaczyć związek między spadkiem gradientu partii, SGD online i SGD mini-partii. Oto ogólna formuła kroku aktualizacji wagi w SGD mini-partii, który jest uogólnieniem wszystkich trzech typów. [ 2 ]
Zauważ, że przy 1 funkcja straty nie jest już zmienną losową i nie jest przybliżeniem stochastycznym.
SGD zbiega się szybciej niż normalne opadanie gradientu „partii”, ponieważ aktualizuje wagi po spojrzeniu na losowo wybrany podzbiór zestawu treningowego. Niech będzie naszym zestawem treningowym i niech m ⊂ x . Wielkość partii B to po prostu liczność m : B = | m | .x m ⊂ x b m B = | m |
Opadanie gradientu wsadowego aktualizuje wagi przy użyciu gradientów całego zestawu danych x ; podczas gdy SGD aktualizuje wagi przy użyciu średniej gradientów dla mini-partii m . (Użycie średniej zamiast sumy uniemożliwia algorytmowi podejmowanie zbyt dużych kroków, jeśli zbiór danych jest bardzo duży. W przeciwnym razie konieczne byłoby dostosowanie szybkości uczenia się w oparciu o rozmiar zbioru danych.) Oczekiwana wartość tego stochastyczne przybliżenie gradientu stosowanego w SGD jest równe gradientowi deterministycznemu stosowanemu przy opadaniu gradientu okresowego. E [ ∇ L S G D ( θ , m ) ] = ∇θ x m .E [∇ LS.G D( θ , m ) ] = ∇ L ( θ , x )
Za każdym razem, gdy pobieramy próbkę i aktualizujemy nasze wagi, nazywa się to mini-partią . Za każdym razem, gdy przeglądamy cały zestaw danych, nazywa się to epoką .
Powiedzmy, że mamy jakiś wektor danych , początkowy wektor ciężaru, który parametryzuje naszą sieć neuronową, θ 0 : R S , oraz funkcję straty L ( θ , x ) : R S → R D → R S , którą próbują zminimalizować. Jeśli mamy przykłady treningu T i wielkość partii B , możemy podzielić te przykłady treningu na mini-partie C:x : Rre θ0: RS. L (θ, x ): RS.→ Rre→ RS. T. b
Dla uproszczenia możemy założyć, że T jest równomiernie podzielne przez B. Chociaż, gdy tak nie jest, jak to często bywa, nie należy przypisywać odpowiedniej masy każdej mini-partii w zależności od jej wielkości.
Algorytm iteracyjny dla SGD z epokami podano poniżej:M.
Uwaga: w prawdziwym życiu odczytujemy te przykładowe dane treningowe z pamięci i, ze względu na wstępne pobieranie pamięci podręcznej i inne sztuczki pamięci wykonywane przez komputer, algorytm będzie działał szybciej, jeśli dostęp do pamięci zostanie połączony , tj. Podczas odczytu pamięci w kolejności i nie skacz losowo. Dlatego większość implementacji SGD przetasowuje zestaw danych, a następnie ładuje przykłady do pamięci w kolejności, w której zostaną odczytane.
Główne parametry opisane powyżej SGD waniliowego (bez pędu) to:
Lubię myśleć o epsilon jako funkcji od liczby epok do szybkości uczenia się. Ta funkcja nazywa się harmonogramem uczenia się .
Jeśli chcesz ustawić stałą naukę, po prostu zdefiniuj epsilon jako funkcję stałą.
Rozmiar partii określa, ile przykładów obejrzysz przed wykonaniem aktualizacji wagi. Im jest niższy, tym głośniejszy będzie sygnał treningowy, im wyższy, tym dłużej potrwa obliczanie gradientu dla każdego kroku.
Cytaty i dalsze czytanie:
źródło
For simplicity we can assume that D is evenly divisible by B
. Czy nie masz na myśli, że T powinien być równo podzielny przez B?B is typically chosen between 1 and a few hundreds, e.g. B = 32 is a good default value, with values above 10 taking advantage of the speed-up of matrix-matrix products over matrix-vector products.
(z artykułu Bengio z 2012 r.)