Pokrętła treningu: krok uczenia, epoki, wsad
🎯 Po co Ci to?
Dwie osoby biorą tę samą architekturę sieci, te same dane i ten sam algorytm uczenia. Po treningu pierwsza ma model z trafnością 98%, druga — model, którego strata po trzech minutach zamieniła się w „nieliczbę" i trening się rozsypał. Różnica nie leży w matematyce z poprzednich jednostek, bo była identyczna. Leży w kilku liczbach ustawionych przed treningiem: jak duży krok robić, ile przykładów obejrzeć przed każdą korektą, ile razy przejść przez zbiór danych. To właśnie pokrętła treningu. W tej jednostce dowiesz się, co robi każde z nich i dlaczego strojenie modelu bywa najbardziej „rzemieślniczą" częścią pracy z uczeniem maszynowym.
✅ Czego się nauczysz
Po tej lekcji potrafisz:
- odróżnić parametry modelu (uczy się ich sieć) od hiperparametrów (ustawia je człowiek);
- wyjaśnić rolę kroku uczenia i opisać, co się dzieje, gdy jest za duży i gdy za mały;
- wyjaśnić, czym jest wsad (batch) i dlaczego niemal nikt nie liczy gradientu z całego zbioru naraz;
- policzyć, ile korekt wag przypada na jedną epokę przy zadanej wielkości wsadu;
- powiedzieć, po co powstały optymalizatory sprytniejsze niż zwykły spadek gradientu (pęd, Adam);
- opisać uczciwą procedurę dobierania hiperparametrów — i wskazać, dlaczego nie wolno robić tego na zbiorze testowym.
🔁 Przypomnij sobie
Z Jednostki 11.2 masz wzór na korektę pojedynczej wagi: nowa waga = stara waga − η · gradient, gdzie η to krok uczenia. Nazwaliśmy go wtedy „długością kroku na zboczu" i odłożyliśmy pytanie, jak go dobrać. Z Jednostki 9.3 masz pojęcie hiperparametru oraz podział danych na zbiór treningowy, walidacyjny i testowy — i to on będzie tu narzędziem pracy. Z Jednostki 11.3 wiesz, że korektę wykonuje optymalizator; teraz zobaczymy, że optymalizatory bywają różne.
📘 Dwa rodzaje pokręteł
W sieci neuronowej są dwa zupełnie różne zestawy liczb do ustawienia — i mylenie ich to jedno z najczęstszych nieporozumień.
Parametry to wagi i obciążenia neuronów. Ich są miliony (a w dużych modelach językowych miliardy) i nikt ich nie ustawia ręcznie — właśnie po to jest cała maszyneria z Jednostek 11.1–11.3. Sieć dostraja je sama, krok po kroku, przykład po przykładzie.
Metafora, która to dobrze oddaje: gitarzystka szukająca brzmienia. Każde pokrętło efektu — gain, tone, time, feedback — zmienia dźwięk o włos; ustawienie ich wszystkich razem daje brzmienie, którego szukała. Nie ma wzoru „gain = 70%"; jest długie kręcenie i słuchanie, czy zabrzmiało lepiej.

Ta metafora ma jeszcze jedno, historyczne dno. Pierwsza samoucząca się sieć neuronowa, SNARC Minsky'ego z 1951 roku (Jednostka 8.3), miała w każdym ze swoich czterdziestu neuronów fizyczny potencjometr — pokręcając nim, zwiększało się albo zmniejszało wagę sygnału. To, co dziś jest liczbą w pamięci komputera i co koryguje optymalizator, było wtedy bolcem, który trzeba było przekręcić.
Hiperparametry to zupełnie inny zestaw: liczby, które ustawia człowiek przed treningiem i których sieć nie zmienia. Ich jest kilka albo kilkanaście: liczba warstw, liczba neuronów w warstwie, krok uczenia, wielkość wsadu, liczba epok, siła regularyzacji. Wracając do metafory: parametry to pokrętła, którymi kręci sieć; hiperparametry to decyzja, jak mocno wolno przekręcić pokrętło za jednym razem, ile razy posłuchać przed korektą i jak długo w ogóle próbować.
📐 DEFINICJA — hiperparametr: liczba (lub decyzja) ustalana przez człowieka przed treningiem i niezmieniana przez algorytm uczenia; sterują nie tym, co model wie, ale tym, jak przebiega jego uczenie. Przykłady: krok uczenia, wielkość wsadu, liczba epok, liczba warstw, siła regularyzacji.
Po ludzku: parametry to wiedza modelu, hiperparametry to warunki, w jakich tę wiedzę zdobywa.
📘 Krok uczenia: najważniejsze pokrętło
Krok uczenia (ang. learning rate, oznaczany zwykle η) mówi, jaką część wskazanej przez gradient poprawki faktycznie wykonujemy. Jest bezlitosny w obie strony.
Za duży krok. Zamiast zejść w dół doliny, przeskakujesz na drugie zbocze — i to wyżej, niż byłeś. Następny krok wyrzuca cię jeszcze wyżej. Strata nie maleje, ale rośnie, często wykładniczo, aż liczby przekraczają zakres reprezentacji i w miejscu straty pojawia się NaN (ang. not a number, „nie-liczba"). Trening jest wtedy nie do uratowania: wagi zawierają nieliczby, więc każda dalsza operacja też da nieliczbę. Trzeba zacząć od nowa z mniejszym krokiem.
Za mały krok. Uczenie działa, ale w tempie, które unieważnia projekt. Model, który przy dobrym kroku uczy się dwie godziny, przy kroku sto razy mniejszym potrzebuje ich dwustu — i może utknąć na płaskim fragmencie zbocza, z którego przy większym kroku by się wyrwał.
Typowe wartości to 0,1 do 0,0001, zależnie od optymalizatora i skali zadania. Praktyka jest prosta i brutalna: próbuje się kilku wartości i patrzy na krzywą straty. Jeśli strata skacze albo rośnie — krok za duży. Jeśli spada, ale ledwo widocznie — za mały. Jeśli spada szybko, a potem gładko zwalnia — jest dobrze.
W poważnych treningach kroku nie trzyma się stałego. Stosuje się harmonogram: na początku krok duży (żeby szybko zjechać z wysokiego zbocza), potem stopniowo malejący (żeby na dnie doliny nie przeskakiwać minimum, a delikatnie do niego dojść). Bywa też odwrotnie na samym starcie — rozgrzewka: pierwsze kilkaset kroków wykonuje się bardzo małym η, bo świeżo zainicjowana losowo sieć produkuje ogromne gradienty, które przy pełnym kroku rozsypałyby trening w pierwszej minucie.
📘 Ile przykładów przed jedną korektą: wsad
Pytanie brzmi: po ilu obejrzanych przykładach optymalizator powinien poprawić wagi? Są trzy odpowiedzi i wszystkie mają swoje imiona.
Cały zbiór naraz (spadek gradientu pełnowsadowy): policz stratę dla wszystkich 60 000 obrazków, uśrednij gradienty, zrób jeden krok. Kierunek jest wtedy najdokładniejszy, jaki się da — i to jedyna zaleta. Wady są zabójcze: jedna korekta wymaga przeliczenia całego zbioru, więc uczenie jest koszmarnie wolne, a przy zbiorach, które nie mieszczą się w pamięci, wręcz niewykonalne.
Jeden przykład na raz (spadek gradientu stochastyczny, ang. stochastic gradient descent, SGD): po każdym obrazku natychmiastowa korekta. Korekt jest dużo, więc postęp bywa szybki, ale kierunek każdej z nich jest „hałaśliwy" — wyznaczony na podstawie jednego, może nietypowego przykładu. Ścieżka schodzenia przypomina wtedy nie spacer w dół, a zbieganie zygzakiem.
Kilkadziesiąt naraz (wsad, ang. mini-batch) — i to jest odpowiedź stosowana praktycznie zawsze. Bierzemy porcję, na przykład 32, 64 albo 256 przykładów, liczymy dla niej średni gradient i wykonujemy jeden krok. Trzy powody, dla których to wygrywa:
- Kompromis dokładność–tempo: średnia z 64 przykładów wskazuje kierunek znacznie stabilniej niż jeden przykład, a kosztuje ułamek tego, co cały zbiór.
- Sprzęt: karta graficzna liczy tysiące działań równolegle (Jednostka 13.1). Podanie jej 64 obrazków naraz to niemal ten sam czas co jednego — pojedynczy przykład po prostu marnuje sprzęt.
- Szum bywa pożyteczny: drobna losowość kierunku pomaga wyrwać się z płaskich miejsc i słabych minimów lokalnych (Jednostka 11.2). Trening idealnie „gładki" wcale nie jest najlepszy.
Ograniczeniem z góry jest pamięć karty graficznej: wszystkie przykłady wsadu muszą się w niej zmieścić razem z aktywacjami wszystkich warstw. Dlatego przy dużych modelach wsad bywa mały nie z wyboru, a z konieczności.
Epoka to jedno przejście przez cały zbiór treningowy. Przy 60 000 obrazków i wsadzie 64 jedna epoka to około 938 korekt wag — i zwykle trenuje się od kilku do kilkuset epok, za każdym razem w innej, losowej kolejności przykładów. Ile dokładnie? Do momentu, w którym błąd na zbiorze walidacyjnym przestaje spadać. To dokładnie wczesne zatrzymanie z Jednostki 9.3.
💭 Pomyśl
💭 Pomyśl: Trenujesz sieć i widzisz w logach, że strata w kolejnych krokach wynosi: 2,31 → 2,29 → 2,30 → 2,28 → 2,31 → 2,29. Po pięciu epokach nadal krąży wokół 2,3 i nie chce zejść niżej. Jakie dwie różne hipotezy warto sprawdzić w pierwszej kolejności — i jak każdą z nich rozpoznać?
Sprawdź odpowiedź
Hipoteza pierwsza: krok uczenia za duży. Strata „drga" wokół jednej wartości, bo każdy krok przeskakuje minimum i ląduje po drugiej stronie doliny — model nie potrafi się zbliżyć do dna. Rozpoznanie: zmniejsz krok dziesięciokrotnie; jeśli strata zacznie spadać, to była ta przyczyna. (Warto zauważyć, że 2,3 to podejrzana liczba dla dziesięciu klas: ln 10 ≈ 2,30 to entropia krzyżowa modelu zgadującego całkowicie na oślep — czyli sieć na razie nie nauczyła się niczego.)
Hipoteza druga: sygnał uczący nie dochodzi. Może gradient zanika po drodze (Jednostka 11.5), może w kodzie jest błąd — na przykład etykiety nie są przypisane do właściwych przykładów, dane wejściowe nie zostały znormalizowane albo wagi zamarły przy złej inicjalizacji. Rozpoznanie: klasyczny test to spróbować przeuczyć model na dwudziestu przykładach. Sprawna sieć powinna zapamiętać dwadzieścia obrazków do zera straty w kilkadziesiąt kroków. Jeśli tego nie potrafi, problemem nie są hiperparametry, lecz sam trening — i szukanie należy zacząć od danych i kodu, nie od kręcenia pokrętłami.
📘 Optymalizatory sprytniejsze niż zwykły spadek
Zwykły spadek gradientu traktuje każdą wagę jednakowo: ten sam krok dla wszystkich, przy każdej korekcie, bez pamięci o tym, co było wcześniej. Dwa ulepszenia okazały się na tyle skuteczne, że dziś nikt nie trenuje bez nich.
Pęd (ang. momentum): do bieżącego kroku dodaje się ułamek kroku poprzedniego, tak jak kula tocząca się w dół zbocza zachowuje rozpęd. Efekt: w kierunku, w którym gradient konsekwentnie wskazuje to samo, ruch przyspiesza; kierunki, w których gradient co krok zmienia znak, wzajemnie się wygaszają. Zygzakowanie maleje, zbieżność przyspiesza.
Adam (2015, od adaptive moment estimation): utrzymuje osobny, adaptowany krok dla każdego parametru — na podstawie historii gradientów tego konkretnego parametru. Wagi, których gradient jest stale mały, dostają większy krok; wagi rozhuśtane — mniejszy. Dzięki temu Adam działa przyzwoicie przy szerokim zakresie ustawień początkowych i jest domyślnym wyborem w większości bibliotek. To on zwykle stoi za słowem „optymalizator" w Jednostce 11.3.
Warto trzymać w głowie, że żaden z tych mechanizmów nie zmienia ani funkcji straty, ani sposobu liczenia gradientów. Cel i informacja o kierunku pozostają te same; inaczej wygląda tylko sposób poruszania się.
📘 Jak dobiera się hiperparametry (i czego nie wolno robić)
Nie istnieje wzór, z którego wyliczysz krok uczenia. Hiperparametry dobiera się eksperymentalnie: uruchamiasz kilka treningów z różnymi ustawieniami i porównujesz wyniki. Robi się to na kilka sposobów — od przeszukiwania siatki wartości, przez losowanie zestawów (co przy wielu hiperparametrach bywa skuteczniejsze niż siatka), po metody automatyczne.
Kluczowa jest zasada, na czym porównujesz: wyłącznie na zbiorze walidacyjnym. Zbiór testowy zostaje nietknięty do samego końca. Jeśli wybierzesz krok uczenia „bo na teście wyszło najlepiej", właśnie przeciekła do modelu informacja z testu — i wynik testowy przestał być uczciwą oceną tego, jak model poradzi sobie z nowymi danymi. To ten sam błąd, o którym mówi Jednostka 9.3, tylko popełniony jedno piętro wyżej: nie na parametrach, a na hiperparametrach.
⚠️ Uwaga, pułapka
Najczęstszy mit brzmi: „więcej epok = lepszy model". Nie. Po pewnym momencie dalszy trening już nie odkrywa reguły, a dopasowuje model do przypadkowych szczegółów zbioru treningowego — strata treningowa dalej maleje, a błąd na walidacji rośnie. To przeuczenie (Jednostka 9.3) i tylko krzywa walidacyjna mówi, kiedy przestać.
Drugi mit: „sieć sama sobie dobierze krok uczenia". Nie dobierze. Sieć uczy się wag; krok uczenia jest częścią procedury, która te wagi zmienia. Adam adaptuje krok dla poszczególnych parametrów, ale robi to wokół wartości bazowej, którą wciąż podaje człowiek — i przy złym rzędzie wielkości tej wartości też nic nie uratuje.
Trzeci, subtelniejszy: „jak coś nie działa, kręćmy pokrętłami". Zanim zaczniesz stroić hiperparametry, sprawdź dane i kod. Zamienione etykiety, brak normalizacji wejść albo przeciek między zbiorami dają objawy podobne do złych hiperparametrów, a żadne kręcenie tego nie naprawi.
🌍 Powiązania
Hiperparametry z Jednostki 9.3 dostają tu konkretną treść — teraz wiesz, co robi każde pokrętło i jak rozpoznać, że jest przekręcone. Wielkość wsadu wiąże trening z fizycznym sprzętem (pamięć i równoległość karty graficznej, Jednostka 13.1), a to jeden z powodów, dla których uczenie głębokie musiało czekać na odpowiednie procesory graficzne. Regularyzacja, o której tu tylko wspomnieliśmy jako o jednym z pokręteł, to temat następnej jednostki. A gdy dojdziemy do dużych modeli językowych (Część V), zobaczysz te same trzy pokrętła w skali, w której jeden trening pochłania miesiące pracy tysięcy kart graficznych — i w której pomyłka w kroku uczenia kosztuje miliony.
📐 Definicje tej lekcji
- Hiperparametr — liczba ustalana przez człowieka przed treningiem, niezmieniana przez algorytm uczenia (krok uczenia, wielkość wsadu, liczba epok, liczba warstw, siła regularyzacji).
- Krok uczenia (η, learning rate) — jaką część poprawki wskazanej przez gradient faktycznie wykonujemy w jednej korekcie.
- Harmonogram kroku uczenia — zaplanowana zmiana η w trakcie treningu (zwykle malejąca, często z rozgrzewką na starcie).
- Wsad (mini-batch) — porcja przykładów, dla której liczy się średni gradient przed jedną korektą wag.
- Spadek gradientu stochastyczny (SGD) — wariant, w którym korekta następuje po pojedynczym przykładzie (albo po małym wsadzie).
- Epoka — jedno pełne przejście przez cały zbiór treningowy.
- Pęd (momentum) — dodanie do bieżącego kroku ułamka kroku poprzedniego; wygasza zygzakowanie.
- Adam — optymalizator utrzymujący osobny, adaptowany krok dla każdego parametru; dziś domyślny wybór.
📌 Najważniejsze w pigułce
- Parametry (wagi, obciążenia) uczy się sieć; hiperparametry ustawia człowiek przed treningiem.
- Krok uczenia jest najważniejszym pokrętłem: za duży rozsypuje trening (strata rośnie, potem
NaN), za mały czyni go bezsensownie wolnym. - Kroku zwykle nie trzyma się stałego: rozgrzewka na starcie, potem malejący harmonogram.
- Prawie nikt nie liczy gradientu z całego zbioru; standardem jest wsad kilkudziesięciu przykładów — kompromis między dokładnością kierunku, tempem i możliwościami karty graficznej.
- Epoka = jedno przejście przez zbiór; przy 60 000 przykładów i wsadzie 64 to ok. 938 korekt wag.
- Pęd i Adam zmieniają sposób poruszania się, nie cel ani gradienty.
- Hiperparametry dobiera się eksperymentalnie i porównuje na walidacji — nigdy na zbiorze testowym.
- Strata krążąca wokół ln(liczba klas) znaczy, że model nie nauczył się niczego; wtedy szukaj błędu w danych i kodzie, nie kręć pokrętłami.
🎒 Zadania
Zadanie 11.4.1. Zbiór treningowy ma 50 000 przykładów, wsad ustawiono na 100, trening ma trwać 30 epok. Policz: (a) ile korekt wag przypada na jedną epokę, (b) ile korekt wykona się w całym treningu, (c) ile razy każdy pojedynczy przykład zostanie obejrzany przez sieć.
Pokaż rozwiązanie
(a) 50 000 : 100 = 500 korekt na epokę. (b) 500 · 30 = 15 000 korekt w całym treningu. (c) Każdy przykład jest obejrzany raz na epokę, więc 30 razy — za każdym razem przez sieć o innych już wagach, w innym losowym towarzystwie wsadu i z innym wnioskiem dla optymalizatora. Warto zauważyć asymetrię tych liczb: obejrzeń jest 1,5 miliona (30 · 50 000), a korekt tylko 15 000 — bo jedna korekta powstaje ze średniej ze stu przykładów.
Zadanie 11.4.2. Dwie osoby trenują tę samą sieć. U pierwszej strata spada: 2,30 → 1,84 → 1,51 → 1,29 → 1,15. U drugiej: 2,30 → 4,71 → 18,3 → 512 →
NaN. Zdiagnozuj, co ustawiła źle druga osoba, wyjaśnij mechanizm powstaniaNaNi wskaż, dlaczego treningu drugiej osoby nie da się „uratować" zmniejszeniem kroku w połowie.
Pokaż rozwiązanie
Druga osoba ustawiła za duży krok uczenia. Mechanizm: każdy krok przerzuca punkt na przeciwległe zbocze doliny, ale dalej od dna niż punkt wyjścia — więc gradient w nowym miejscu jest większy, następny krok jeszcze dłuższy i tak dalej. Strata rośnie wykładniczo (widać to w ciągu 4,71 → 18,3 → 512), aż wartości przekroczą zakres liczb zmiennoprzecinkowych: pojawia się nieskończoność, a operacje w rodzaju „nieskończoność minus nieskończoność" dają NaN.
Dlaczego nie da się uratować: NaN zaraża. Gdy choć jedna waga stanie się nieliczbą, każde następne mnożenie i dodawanie z jej udziałem też da nieliczbę — więc cała sieć jest już nieodwracalnie zepsuta, niezależnie od tego, co potem zrobisz z krokiem. Trzeba zacząć trening od nowa (od świeżej inicjalizacji wag) z mniejszym η, ewentualnie dodając rozgrzewkę albo obcinanie gradientów (Jednostka 11.5).
Zadanie 11.4.3. Kolega chwali się: „przetestowałem 40 kombinacji kroku uczenia i liczby warstw, wybrałem tę, która dała najlepszy wynik na zbiorze testowym — 96,4%. Tyle właśnie zgłaszam jako trafność modelu". Wyjaśnij, co jest z tym nie tak, i opisz, jak powinien był postąpić.
Pokaż rozwiązanie
Kolega użył zbioru testowego jako zbioru walidacyjnego i przez to zniszczył jego jedyną funkcję. Zbiór testowy jest uczciwą oceną tylko wtedy, gdy model nie miał z nim żadnego kontaktu — ani przez wagi, ani przez decyzje człowieka. Tutaj testu użyto 40 razy do wyboru najlepszego ustawienia, więc wynik 96,4% jest zawyżony: opisuje między innymi to, jak dobrze wybrane ustawienie pasuje do tych konkretnych przykładów testowych. Na nowych danych model prawdopodobnie wypadnie gorzej. Zjawisko ma nawet swoją nazwę — przeuczenie do zbioru testowego przez wielokrotny wybór na nim.
Poprawna procedura: podzielić dane na trzy części, wszystkie 40 kombinacji porównać na walidacji, wybrać najlepszą, ewentualnie dotrenować model na połączonym zbiorze treningowym i walidacyjnym, a zbiór testowy uruchomić raz, na końcu, wyłącznie po to, by podać liczbę do raportu. Jeśli danych jest mało i szkoda ich na osobną walidację, stosuje się walidację krzyżową — ale nadal na danych innych niż testowe.
🔍 Sprawdź, czy umiesz
- [ ] Odróżnić parametry od hiperparametrów i podać po dwa przykłady każdego.
- [ ] Opisać objawy zbyt dużego i zbyt małego kroku uczenia na podstawie krzywej straty.
- [ ] Podać trzy powody, dla których trenuje się wsadami, a nie na całym zbiorze ani po jednym przykładzie.
- [ ] Policzyć liczbę korekt wag na epokę i w całym treningu.
- [ ] Wyjaśnić, co dodaje pęd, a co Adam — i czego oba nie zmieniają.
- [ ] Wskazać, dlaczego hiperparametrów nie wolno dobierać na zbiorze testowym.