Czy sieci neuronowe zwykle „zapuszczają” się podczas treningu?

11

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.

wprowadź opis zdjęcia tutaj

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!

Karnivaurus
źródło
Chyba jestem trochę spóźniony na przyjęcie. Ale może nadal mogę dodać trochę wartości do rozmowy. Soo ... dla mnie to brzmi jak funkcja aktywacji sigmoidalnej. Ponieważ pochodna esicy jest niewielka dla bardzo małych lub bardzo dużych wartości, trening może być powolny dla „nasyconych neuronów”. Niestety nie mogę dokładnie powiedzieć, jaki jest twój CNN na podstawie podanego opisu.
Nima Mousavi

Odpowiedzi:

7

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.

Cliff AB
źródło