06 · Sieci · 4 min czytania · aktualizacja
Dlaczego trafność na treningu czasem spada po kolejnej epoce?
W skrócie
Trafność treningowa nie musi rosnąć monotonicznie: krok gradientu obniża stratę średnio, ale może zepsuć pojedyncze przykłady, bo wszystkie dzielą te same wagi.
Co to jest
Niemonotoniczność treningu to zjawisko, w którym po kolejnej porcji treningu wynik na zbiorze treningowym — trafność, a czasem i strata — jest gorszy niż przed nią, choć trening ogólnie zmierza w dobrą stronę. To normalna własność spadku gradientu, zwłaszcza stochastycznego.
Widać ją w sieciach neuronowych i w regresji logistycznej uczonej SGD; w boostingu drzew odpowiednikiem są wahania metryki walidacyjnej między iteracjami.
Intuicja: przesuwasz meble w pokoju, żeby wszystkim było wygodniej. Przestawienie kanapy pomaga trzem osobom, ale jednej zasłania telewizor. Średnio jest lepiej, a jedna osoba właśnie zmieniła zdanie z „dobrze” na „źle”.
Mechanizm — dlaczego tak działa
Krok gradientu minimalizuje stratę uśrednioną po przykładach, nie trafność i nie wynik każdego przykładu z osobna. Wszystkie przykłady dzielą te same wagi, więc krok, który poprawia większość, może pogorszyć mniejszość: przesunięcie granicy decyzji, które przyjmie trzy przykłady z jednej strony, wypchnie jeden z drugiej. Strata średnia spadła, ale trafność — licząca tylko, po której stronie jest każdy punkt — mogła spaść, jeśli ten jeden przykład był tuż przy granicy, a trzy już wcześniej były po dobrej stronie.
Trzy czynniki wzmacniają efekt. Po pierwsze, kręta granica: przy regułach nieliniowych (np. typu XOR) granica składa się z fragmentów zależnych od różnych neuronów ukrytych, a poprawianie jednego fragmentu porusza inne. Po drugie, mały zbiór: przy kilkunastu przykładach jeden to kilka punktów procentowych trafności, więc pojedyncza zmiana strony wygląda jak „cofnięcie”. Po trzecie, mini-batch i duży learning rate: gradient z próbki nie jest gradientem całości, więc krok może iść lekko w bok, a przy dużym kroku przeskakiwać dno.
Dla straty — gładkiej i średniej — teoria mówi, że przy dostatecznie małym learning rate pełny spadek gradientu zmniejsza ją w każdym kroku (rozwinięcie Taylora). Dla trafności takiej gwarancji nie ma nigdy: jest funkcją schodkową i nie jest tym, co optymalizujemy. Przy SGD nawet strata może chwilowo wzrosnąć.
Zastrzeżenie: krótkie cofnięcie o kilka przykładów, znikające po kolejnych epokach, to szum treningu. Systematyczny spadek trafności treningowej przez wiele epok oznacza za duży learning rate lub niestabilność numeryczną.
Na przykładzie
Na Digits 8×8 (1347 obrazów treningowych, random_state=0) trenowałem MLPClassifier z 64 neuronami ukrytymi przez 60 epok: SGD, learning rate 0,2, momentum 0,9, batch 32. Po każdej epoce mierzyłem trafność na zbiorze treningowym i sprawdzałem, które przykłady zmieniły stan. Trafność spadła w 6 z 59 przejść między epokami, najmocniej po epoce 7: o 1,2 punktu procentowego, bo 29 obrazów przeszło z „dobrze” na „źle”, a tylko 13 odwrotnie. Mimo to trening skończył się na 100% trafności treningowej.
Nawet gdy trafność rosła, przykłady się wymieniały: w 11 z 14 epok wzrostu część obrazów i tak traciła poprawną klasę (np. w epoce 6: 14 straconych, 21 zyskanych). Przy learning rate 10 razy mniejszym (0,02) spadek zdarzył się tylko raz i wyniósł 0,07 punktu procentowego.
Dane: Digits (ręcznie pisane cyfry 8×8)
W praktyce
- Oceniaj trend na wielu epokach lub uśredniaj krzywą (średnia krocząca), zamiast reagować na pojedynczy spadek.
- Krzywa straty jest gładsza niż krzywa trafności — do diagnozy treningu patrz na stratę, do oceny jakości na metrykę.
- Jeśli cofnięcia są duże i częste: zmniejsz learning rate, zwiększ batch lub włącz momentum albo Adama, które uśredniają kierunek.
- W early stoppingu używaj cierpliwości (
patience, w scikit-learnn_iter_no_change) właśnie dlatego, że pojedyncze pogorszenie nic nie znaczy. - Typowy błąd: przerwanie treningu lub zmiana hiperparametrów po jednej epoce „w dół”.
Najczęstsze pytania
- Dlaczego trafność treningowa spada po kolejnej epoce?
- Bo gradient minimalizuje średnią stratę, nie trafność. Krok poprawiający większość przykładów może przesunąć kilka przykładów tuż przy granicy na złą stronę. Przy małym zbiorze to kilka punktów procentowych. Jeśli spadek znika po następnych epokach, to szum, nie problem.
- Czy strata treningowa może rosnąć podczas treningu?
- Przy SGD na mini-batchach — tak, chwilowo, bo gradient z próbki różni się od pełnego. Przy pełnym gradiencie i małym learning rate nie powinna. Systematyczny wzrost oznacza za duży learning rate lub problem numeryczny.
- Jak odróżnić szum treningu od prawdziwego problemu?
- Szum: pojedyncze, małe cofnięcia, a trend na 10 i więcej epokach wciąż korzystny. Problem: strata rośnie kilka epok z rzędu, oscyluje coraz mocniej lub staje się NaN — wtedy zmniejsz learning rate. Pomaga wykres straty w skali logarytmicznej.
Źródła
- Goodfellow, Bengio, Courville (2016). Deep Learning, rozdz. 8.1.3 "Batch and minibatch algorithms", 8.3.1 "Stochastic gradient descent". https://www.deeplearningbook.org/contents/optimization.html
- Bottou, L., Curtis, F., Nocedal, J. (2018). "Optimization methods for large-scale machine learning". SIAM Review 60(2), 223–311. arXiv:1606.04838
- Bishop (2006). Pattern Recognition and Machine Learning, rozdz. 5.2.4 "Gradient descent optimization".