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.
Dane: Digits (ręcznie pisane cyfry 8×8)
W praktyce
- scikit-learn: w
MLPClassifierparametrmax_iterdla solverówadamisgdliczy epoki, nie kroki. OstrzeżenieConvergenceWarningoznacza, ż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). Brakshuffle=Trueto 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=10wMLPClassifier). - 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
- Goodfellow, Bengio, Courville (2016). Deep Learning, rozdz. 8.1.3 "Batch and minibatch algorithms", 7.8 "Early stopping". https://www.deeplearningbook.org/contents/optimization.html
- Géron, A. (2022). Hands-On Machine Learning, 3rd ed., rozdz. 4 "Gradient descent".
- Bishop (2006). Pattern Recognition and Machine Learning, rozdz. 4.1.7 "The perceptron algorithm".
- Zhang i in. Dive into Deep Learning, rozdz. 12.5 "Minibatch stochastic gradient descent". https://d2l.ai/chapter_optimization/minibatch-sgd.html