Próbuję wytrenować głęboką sieć neuronową do klasyfikacji, wykorzystując propagację wsteczną. W szczególności używam splotowej sieci neuronowej do klasyfikacji obrazów, korzystając z biblioteki Tensor Flow. Podczas treningu doświadczam dziwnego zachowania i zastanawiam się, czy jest to typowe, czy też robię coś złego.
Tak więc moja splotowa sieć neuronowa ma 8 warstw (5 splotowych, 3 w pełni połączone). Wszystkie wagi i odchylenia są inicjowane małymi liczbami losowymi. Następnie ustawiam rozmiar kroku i kontynuuję trening z mini-partiami, używając Adama Optimizer Tensor Flow.
Dziwne zachowanie, o którym mówię, polega na tym, że przez około 10 pierwszych pętli w moich danych treningowych utrata treningu ogólnie nie maleje. Wagi są aktualizowane, ale strata treningowa pozostaje w przybliżeniu na tej samej wartości, czasem rośnie, a czasem spada między mini partiami. Tak jest przez jakiś czas i zawsze mam wrażenie, że strata nigdy się nie zmniejszy.
Nagle utrata treningu dramatycznie spada. Na przykład w obrębie około 10 pętli danych treningowych dokładność treningu wynosi od około 20% do około 80%. Od tego momentu wszystko kończy się ładnie. To samo dzieje się za każdym razem, gdy uruchamiam rurociąg szkoleniowy od zera, a poniżej znajduje się wykres ilustrujący jeden przykładowy przebieg.
Zastanawiam się więc, czy jest to normalne zachowanie podczas treningu głębokich sieci neuronowych, przy czym „uruchomienie” zajmuje trochę czasu. Czy jest prawdopodobne, że coś robię źle, co powoduje to opóźnienie?
Dziękuję bardzo!
Odpowiedzi:
Fakt, że algorytm potrzebował trochę czasu na „uruchomienie”, nie jest szczególnie zaskakujący.
Zasadniczo funkcja celu, która ma być zoptymalizowana za sieciami neuronowymi, jest wysoce multimodalna. Jako taki, chyba że masz jakiś sprytny zestaw wartości początkowych dla twojego problemu, nie ma powodu, aby sądzić, że zaczniesz od stromego zejścia. W związku z tym algorytm optymalizacji będzie prawie losowo błąkał się, dopóki nie znajdzie dość stromej doliny, na którą można zacząć schodzić. Po znalezieniu tego należy oczekiwać, że większość algorytmów opartych na gradiencie natychmiast zacznie zawężać się do określonego trybu, który jest najbliżej.
źródło