Jak (systematycznie) dostrajać tempo uczenia się przy spadku gradientu jako optymalizatorze?


12

Osoba z zewnątrz w polu ML / DL; rozpoczął kurs głębokiego uczenia Udacity oparty na Tensorflow; wykonanie zadania 4 zadanie 4; próba dostrojenia szybkości uczenia się za pomocą następującej konfiguracji:

  • Wielkość partii 128
  • Liczba kroków: wystarczy, aby wypełnić 2 epoki
  • Rozmiary ukrytych warstw: 1024, 305, 75
  • Inicjalizacja wagi: normalnie obcięta ze standardowym. odchylenie sqrt (2 / n), gdzie n jest rozmiarem poprzedniej warstwy
  • Prawdopodobieństwo porzucenia: 0,75
  • Regularyzacja: nie dotyczy
  • Algorytm szybkości uczenia się: rozkład wykładniczy

bawił się parametrami szybkości uczenia się; w większości przypadków nie wydają się działać; kod tutaj ; wyniki:

Accuracy    learning_rate   decay_steps     decay_rate      staircase
93.7        .1              3000            .96             True
94.0        .3              3000            .86             False
94.0        .3              3000            .96             False
94.0        .3              3000            .96             True
94.0        .5              3000            .96             True
  • Jak powinienem systematycznie dostosowywać tempo uczenia się?
  • W jaki sposób współczynnik uczenia się jest powiązany z liczbą kroków?

1
tpot zapewnia automatyczne strojenie ML
denfromufa

Odpowiedzi:


4

Użyj optymalizatora spadku gradientu. To bardzo dobry przegląd.

Jeśli chodzi o kod, spójrz na ten samouczek . To i to kilka przykładów.

Osobiście sugeruję użycie ADAM lub RMSprop. Nadal jest kilka hiperparametrów do ustawienia, ale są też takie „standardowe”, które działają przez 99% czasu. W przypadku programu ADAM możesz obejrzeć jego artykuł, a w przypadku programu RMSprop na tych slajdach .

EDYTOWAĆ

Ok, już używasz optymalizatora gradientu. Następnie możesz przeprowadzić optymalizację hiperparametrów, aby wybrać najlepszą szybkość uczenia się. Ostatnio zaproponowano zautomatyzowane podejście . Ponadto Frank Hutter ma wiele obiecujących prac dotyczących automatycznego dostrajania hiperparametrów.

Mówiąc bardziej ogólnie, zapoznaj się z AutoML Challenge , w którym zespoły mogą również znaleźć kod źródłowy. W tym wyzwaniu celem jest zautomatyzowanie uczenia maszynowego, w tym dostrajanie hiperparametrów.

Na koniec ten artykuł LeCun i najnowszy samouczek DeepMin ( patrz rozdział 8) zawierają pewne spostrzeżenia, które mogą być przydatne w przypadku twojego pytania.

W każdym razie pamiętaj, że (szczególnie w przypadku łatwych problemów), normalne jest, że szybkość uczenia się nie wpływa zbytnio na naukę podczas korzystania z optymalizatora spadku gradientu. Zazwyczaj te optymalizatory są bardzo niezawodne i działają z różnymi parametrami.


Korzystam już z Optymalizatora spadku gradientu w kodzie. Dzięki za linki!
Thoran 20.04.2016

@Thoran Ok, nie przeczytałem kodu: D (a pytanie nie wspomina o optymalizatorze). Zredagowałem swoją odpowiedź, aby ci pomóc :)
Simon

Niezłe rozwiązania, ułatwiają pracę osobom postronnym, takim jak <. Czy wiesz, jak powiązana jest liczba kroków i szybkość uczenia się? Mój żołądek mówi mi, że jeśli jest więcej kroków, proces uczenia się powinien być wolniejszy.
Thoran

@Thoran Zazwyczaj tak, im większa liczba kroków, tym wolniejszy proces (ale także bardziej stabilny). Następnie zredagowałem swoją odpowiedź, dodając odniesienia do niektórych „sztuczek”, które mogą być przydatne do ręcznego dostrajania hiperparametrów.
Simon

bardzo fajne rzeczy, zajmie mi trochę czasu, aby to strawić: D
Thoran

1

Możesz zautomatyzować dostrajanie hiperparametrów w wielu algorytmach uczenia maszynowego lub samych hiperparametrach dla optymalizatora spadku gradientu, tj. Szybkości uczenia się.

Jedną z popularnych bibliotek do tego celu jest miętówka.

https://github.com/JasperSnoek/spearmint


1

Najnowszy automatyczny tuner szybkości uczenia się podano w Adaptacji szybkości uczenia się online z opcją hipergradientu

Ta metoda jest bardzo łatwa do wdrożenia, główny wynik SGD podano jako:

αt=αt1+βf(θt1)Tf(θt2)

βe.g.f(θt2)α

βα0


0

Aby dostroić hiperparametry (niezależnie od tego, czy jest to szybkość uczenia się, szybkość zanikania, regularyzacja lub cokolwiek innego), musisz ustanowić wstrzymany zestaw danych; ten zestaw danych jest niezależny od zestawu danych szkoleniowych. Po dostrojeniu kilku modeli o różnych konfiguracjach (gdzie konfiguracja = konkretny wybór każdego hiperparametru), wybierasz konfigurację, wybierając ten, który maksymalizuje trzymaną dokładność.


Czym różni się zestaw danych wstrzymanych od zestawu danych testowych lub walidacyjnych?
Thoran 22.04.16

Holdout to inna nazwa do sprawdzania poprawności. Zasadniczo masz trzy rozłączne zestawy danych: trenuj, wstrzymuj i testuj. Pociąg służy wyłącznie do nauki wag modeli (np. Przy użyciu opadania gradientu). Heldout służy do strojenia parametrów modelu. Test służy tylko do pomiaru wydajności uogólnienia (tj. Jak mogę oczekiwać, że mój model będzie działał na niewidzialnych danych)
Alireza

Dzięki @Alireza za poświęcenie czasu na wyjaśnienia. Korzystam już z zestawu danych sprawdzania poprawności. Bez testu nie można zmierzyć dokładności!
Thoran

Cóż, twoje pierwotne pytanie dotyczyło określenia szybkości uczenia się: jeśli pierwsza kolumna w twoim oryginalnym poście była niepoprawna (nie treningowa), możesz powiedzieć, że 0,5 jest lepsze niż 0,1 (choć powinieneś nadal próbować wartości> 0,5). [uwaga: jeśli ponownie przeprowadzisz eksperymenty, po prostu podziel dane na części, aby posłużyć jako test]
Alireza,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.