W większości kodów Tensorflow widziałem, że Adam Optimizer jest używany ze stałą szybkością uczenia się 1e-4
(tj. 0,0001). Kod zwykle wygląda następująco:
...build the model...
# Add the optimizer
train_op = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
# Add the ops to initialize variables. These will include
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()
# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
sess.run(train_op)
Zastanawiam się, czy warto użyć rozkładu wykładniczego podczas korzystania z optymalizatora Adama, tj. Użyć następującego kodu:
...build the model...
# Add the optimizer
step = tf.Variable(0, trainable=False)
rate = tf.train.exponential_decay(0.15, step, 1, 0.9999)
optimizer = tf.train.AdamOptimizer(rate).minimize(cross_entropy, global_step=step)
# Add the ops to initialize variables. These will include
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()
# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
sess.run(train_op)
Zwykle ludzie używają pewnego rodzaju spadku szybkości uczenia się, dla Adama wydaje się to rzadkie. Czy ma to jakiś teoretyczny powód? Czy przydatne może być połączenie optymalizatora Adama z rozpadem?
global_step
parametruminimize
. Zobacz edycję.1e-4
=0.0001
nie0.0004
.Odpowiedzi:
Empirycznie: zdecydowanie wypróbuj to, możesz znaleźć bardzo przydatną heurystykę treningową, w takim przypadku proszę podziel się!
Nie widziałem wystarczającej liczby osób korzystających z optymalizatora ADAM, aby stwierdzić, czy to prawda, czy nie. Jeśli to prawda, być może dlatego, że ADAM jest stosunkowo nowy, a „najlepsze praktyki” dotyczące zaniku kursów nie zostały jeszcze ustalone.
Chciałbym jednak zauważyć, że spadek szybkości uczenia się jest w rzeczywistości częścią teoretycznej gwarancji dla ADAM. W szczególności w Twierdzeniu 4.1 w artykule ICLR jedną z ich hipotez jest to, że szybkość uczenia się ma rozkład pierwiastkowy, . Ponadto w swoich eksperymentach z regresją logistyczną wykorzystują również rozkład pierwiastkowy.αt=α/t√
Mówiąc wprost: nie sądzę, aby cokolwiek w teorii zniechęciło do korzystania z reguł obniżania szybkości uczenia się w programie ADAM. Widziałem ludzi zgłaszających dobre wyniki za pomocą ADAM, a znalezienie dobrej heurystyki treningowej byłoby niezwykle cenne.
źródło
Powodem, dla którego większość ludzi nie stosuje spadku szybkości uczenia się w przypadku Adama, jest to, że sam algorytm powoduje spadek prędkości uczenia się w następujący sposób:
gdzie
t0
jest początkowym znacznikiem czasu ilr_t
jest używana nowa szybkość uczenia się.źródło
sqrt(1 - beta2^t) / (1 - beta1^t)
nie ulega rozkładowi. Wydaje się, że rekompensuje to inicjalizację szacunków pierwszego i drugiego momentu.Adam stosuje początkową szybkość uczenia się lub wielkość kroku zgodnie z terminologią oryginalnego dokumentu, jednocześnie dostosowując obliczenia aktualizacji. Rozmiar kroku daje również przybliżone ograniczenie dla aktualizacji. W związku z tym uważam, że dobrym pomysłem jest zmniejszenie wielkości kroku pod koniec szkolenia. Potwierdza to także ostatnia praca NIPS 2017: krańcowa wartość adaptacyjnych metod gradientowych w uczeniu maszynowym .
Ostatni wiersz w sekcji 4: Eksperymenty głębokiego uczenia się mówi
Wreszcie artykuł sugeruje, że i tak korzystamy z SGD.
źródło
Zgadzam się z opinią @Indie AI, tutaj podaję kilka innych informacji:
Z CS231n :
A także z artykułu Przemyślenie architektury początkowej dla wizji komputerowej, sekcja 8:
źródło
Przeszkoliłem zbiór danych z naprawdę łatwymi danymi, jeśli dana osoba jest uważana za grubą czy nie, wzrost i waga - tworzenie danych obliczających bmi, a jeśli ponad 27, osoba jest gruba. Tak bardzo proste podstawowe dane. Gdy używam Adama jako optymalizatora, a szybkość uczenia się wynosi 0,001, dokładność da mi tylko około 85% dla 5 epoków, osiągając maksimum 90% przy ponad 100 testowanych epokach.
Ale przy ponownym wczytywaniu na poziomie może 85% i przy współczynniku uczenia się 0,0001 dokładność powyżej 3 epoków wynosi 95%, a 10 kolejnych epoków to około 98-99%. Nie jestem pewien, czy szybkość uczenia się może spaść poniżej 4 cyfr 0,0001, ale przy ponownym ładowaniu modelu i korzystaniu z 0,00001, accucary zawiśnie około 99,20 - 100% i nie spadnie poniżej. Ponownie, nie jestem pewien, czy współczynnik uczenia się będzie uważany za 0, ale i tak to mam ...
Wszystko to przy użyciu categorical_crossentropy, ale mean_square sprawia, że 99-100% też robi tę metodę. AdaDelta, AdaGrad, Nesterov nie mogły uzyskać dokładności powyżej 65%, tylko dla notatki.
źródło
Spadek szybkości uczenia się w Adamie jest taki sam jak w RSMProp (jak widać z tej odpowiedzi ), i jest to w pewnym sensie oparte głównie na wielkości poprzednich gradientów, aby zrzucić oscylacje . Tak więc rozkład wykładniczy (dla malejącego wskaźnika uczenia się w trakcie procesu szkolenia) może być przyjęty w tym samym czasie. Wszystkie one obniżają współczynnik uczenia się, ale do różnych celów .
źródło