ML Atlas

06 · Sieci · 4 min czytania · Interaktywne · aktualizacja

Czym jest epoka w treningu sieci neuronowej i ile epok potrzeba?

W skrócie

Epoka to jedno pełne przejście algorytmu uczącego przez cały zbiór treningowy. Trening składa się z wielu epok, bo jeden krok zmienia wagi tylko trochę.

Co to jest

Epoka to jedno pełne przejście treningu przez wszystkie przykłady zbioru treningowego. W treningu mini-batchowym epoka składa się z N/B kroków (N przykładów, B — wielkość batcha); w treningu pełnym (batch gradient descent) epoka to jeden krok.

Pojęcie dotyczy każdej metody iteracyjnej: sieci neuronowych, regresji logistycznej uczonej SGD, dużych modeli językowych. W boostingu odpowiednikiem jest liczba drzew (iteracji), a nie epoka.

Intuicja: czytanie podręcznika przed egzaminem. Jedno przeczytanie od deski do deski to jedna epoka. Po pierwszym wiesz trochę, po piątym dużo, po pięćdziesiątym znasz na pamięć przypisy i literówki — co na egzaminie już nie pomaga.

Mechanizm — dlaczego tak działa

Jeden krok gradientu przesuwa wagi o learning rate × gradient, czyli zwykle niewiele. Po jednym przejściu przez dane część przykładów nadal wypada źle, więc trzeba przejść przez nie ponownie — każda epoka poprawia kolejne pomyłki. Liczba epok razem z learning rate i wielkością batcha wyznacza łączną liczbę kroków: to ona, a nie sama liczba epok, decyduje o postępie.

Dla perceptronu zachowanie jest ostre: jeśli dane da się rozdzielić liniowo, liczba pomyłek w kolejnych epokach spada do zera i algorytm się zatrzymuje (twierdzenie Novikoffa gwarantuje skończoną liczbę poprawek). Jeśli dane są nieseparowalne — choćby przez jeden przykład z etykietą sprzeczną z resztą — perceptron nigdy się nie uspokaja i wagi cyklują. Dla sieci uczonych gładką stratą takiej granicy nie ma: strata treningowa maleje asymptotycznie.

Za mało epok to niedouczenie: strata na treningu i walidacji jeszcze spada. Za dużo epok na małych danych to przeuczenie: strata treningowa dalej spada, bo sieć zapamiętuje pojedyncze przykłady razem z ich szumem, a walidacyjna zaczyna rosnąć. Dołek krzywej walidacyjnej wyznacza właściwy moment zatrzymania (early stopping).

Zastrzeżenie: w każdej epoce warto tasować kolejność przykładów. Stała kolejność daje gradientom systematyczne obciążenie i może spowalniać zbieżność; teoria SGD zakłada losowe próbkowanie.

Na przykładzie

Na Digits 8×8 (1347 obrazów treningowych, 450 testowych, random_state=0) trenowałem MLPClassifier z 64 neuronami ukrytymi (SGD, learning rate 0,01, momentum 0,9, batch 64, czyli 22 kroki na epokę) i mierzyłem wynik po kolejnych epokach. Po 1 epoce trafność testowa wynosi 34,4%, po 5 — 91,6%, po 10 — 95,8%, po 50 — 97,6%. Dalej trafność testowa stoi, choć treningowa rośnie do 100% po 300 epokach, a strata treningowa spada z 2,02 do 0,011.

Przeuczenie przez epoki widać lepiej na małych danych. Ta sama procedura na 150 obrazach treningowych (256 neuronów, Adam, lr = 0,01) daje 100% na treningu już po 10 epokach. Strata testowa jest wtedy najniższa (0,325), a potem rośnie: 0,350 po 50 epokach, 0,411 po 300 — przy trafności testowej stojącej w miejscu (około 92%). Kolejne epoki nie uczyły już niczego nowego, tylko zwiększały pewność modelu w tych samych pomyłkach.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: sieć 64→32→10 uczy się rozpoznawać ręcznie pisane cyfry 8×8 w przeglądarce; po 10 epokach trafia w około 95% cyfr testowych, a macierz pomyłek pokazuje, które cyfry myli.

Dane: Digits (ręcznie pisane cyfry 8×8)

W praktyce

  • scikit-learn: w MLPClassifier parametr max_iter dla solverów adam i sgd liczy epoki, nie kroki. Ostrzeżenie ConvergenceWarning oznacza, że epoki się skończyły przed zbieżnością.
  • PyTorch: pętla for epoch in range(E): for xb, yb in DataLoader(..., shuffle=True). Brak shuffle=True to częste przeoczenie.
  • Typowe wartości: dziesiątki–setki epok dla małych zbiorów tabelarycznych; obrazy 30–300; LLM często mniej niż jedną epokę nad korpusem, bo danych jest więcej niż budżetu obliczeń.
  • Zamiast ustalać liczbę epok z góry, stosuj early stopping na walidacji (early_stopping=True, n_iter_no_change=10 w MLPClassifier).
  • Typowy błąd: porównywanie modeli po tej samej liczbie epok przy różnych wielkościach batcha — liczba kroków jest wtedy różna.

Najczęstsze pytania

Ile epok potrzeba do wytrenowania sieci?
Nie ma stałej liczby: zależy od learning rate, wielkości batcha i trudności danych. Trenuj, obserwując stratę na walidacji, i zatrzymaj się, gdy przestaje spadać przez kilka–kilkanaście epok (early stopping). Dla małych zbiorów to zwykle dziesiątki–setki epok.
Czym różni się epoka od iteracji i batcha?
Batch to porcja przykładów użyta do jednego kroku; iteracja (krok) to jedna aktualizacja wag na jednym batchu; epoka to tyle iteracji, ile trzeba, by przejść przez wszystkie przykłady raz. Przy 1000 przykładach i batchu 100 epoka ma 10 iteracji.
Czy więcej epok zawsze poprawia model?
Nie. Strata treningowa zwykle spada dalej, ale po pewnym momencie model zaczyna zapamiętywać szum i wynik na nowych danych się pogarsza. To przeuczenie; chronią przed nim walidacja, early stopping i regularyzacja.

Źródła

Zobacz też