Widziałem wykresy błędu testu / treningu nagle spadające kilka razy w pewnej epoce (ach) podczas treningu sieci neuronowej i zastanawiam się, co powoduje te skoki wydajności:
To zdjęcie pochodzi z Kaiming Jest Githubem, ale podobne wątki pojawiają się w wielu artykułach.
conv-neural-network
libphy
źródło
źródło
Odpowiedzi:
Zmienili wskaźnik uczenia się. Zwróć uwagę, że spadek przypada dokładnie na 30 i 60 epok, oczywiście ustawiany ręcznie przez kogoś.
źródło
Pomyśl o „krajobrazie optymalizacji”. Na przykład, jeśli miałeś sieć z tylko dwoma obciążnikami, możesz wykreślić wszystkie kombinacje tych dwóch obciążników na powierzchni, gdzie wysokość w każdym punkcie reprezentuje ilość błędów, które zwraca twoja funkcja kosztów, jeśli ją wykorzystasz (x, y ) współrzędne jako twoje dwa ciężary. Próbujesz przejść do najniższego punktu na tej powierzchni, aby uzyskać najniższy poziom błędu.
Problem czasami polega na tym, że powierzchnia może być dość szalona, szczególnie w sieciach z milionami parametrów zamiast tylko dwóch. Możesz utknąć w punktach siodłowych, w których postęp jest spowolniony, a następnie nagle spada z powrotem na wzgórze.
Oto animacja, która pomaga to zwizualizować. Jak widać, bardziej podstawowe algorytmy zejścia gradientowego znacznie utknęły w tych pozycjach.
Przyczyny tego mogą być również inne, ale o tym najczęściej się słyszy. Możliwe, że sieć może mieć kilka jednostek otrzymujących nasycone aktywacje (lub w przypadku relu, jednostkę, która jest aktywowana tylko przez bardzo małą liczbę wejść szkoleniowych), a gdy jedna jednostka wyjdzie z nasycenia, uruchamia reakcję łańcuchową, która odciąga resztę od nasycenia, a ciężary nagle zwiększają przepływ gradientu? Nie szukałem czegoś takiego, ale byłbym zainteresowany, gdyby ktokolwiek miał inne powody, aby dodać.
źródło