TakéUčení modelu, Trénink modelu, TrainingPokročilý

Definice

Trénování modelu je proces, při kterém algoritmus strojového učení opakovaně upravuje vnitřní parametry (váhy) tak, aby jeho předpovědi na trénovacích datech co nejméně chybovaly. Chybu měří ztrátová funkce, směr úpravy určuje gradient. Výsledkem je model, který se naučené vzory dokáže aplikovat i na data, jež nikdy neviděl.

Kategorie: Strojové učeníAktualizováno

Co se během trénování mění

Model je před trénováním jen prázdná struktura s náhodně inicializovanými parametry. Trénování tuto strukturu naplní obsahem: každý průchod dávkou dat vyprodukuje předpověď, ztrátová funkce ji porovná se správnou odpovědí a algoritmus zpětného šíření chyby spočítá, jak moc se na chybě podílel každý jednotlivý parametr. Optimalizátor (typicky varianta gradientního sestupu, například SGD nebo Adam) pak parametry posune malým krokem opačným směrem, než roste chyba. Velikost kroku určuje learning rate.

Jedno kompletní projití celé trénovací sady se nazývá epocha. Modely se trénují po dávkách (batch), protože počítat gradient z celého datasetu najednou je paměťově neúnosné a po jednom vzorku zase příliš zašuměné.

Proč se data dělí na tři části

Trénovací sada slouží k úpravě vah. Validační sada se do úprav vah nezapojuje: měří se na ní, jestli model zobecňuje, a podle ní se ladí hyperparametry jako learning rate, počet vrstev nebo síla regularizace. Testovací sada se sáhne až úplně nakonec, ideálně jednou, aby výsledné číslo nebylo zkreslené opakovaným nakukováním.

Rozdíl mezi trénovací a validační chybou je nejrychlejší diagnostika. Když obě klesají, trénování běží dobře. Když trénovací klesá a validační roste, model si zapamatovává konkrétní vzorky místo obecných vzorů, tedy dochází k přeučení. Když neklesá ani jedna, model je pro danou úlohu příliš jednoduchý nebo jsou trénovací data nepoužitelná.

Trénování od nuly versus doladění

Trénovat velký model od náhodné inicializace si dnes může dovolit málokdo: vyžaduje to obrovské datové sady a týdny GPU času. Běžnější postup je transfer learning, kdy se vezme předtrénovaný model a doladí se (fine-tuning) na malé doménové sadě. U jazykových modelů se rozlišuje předtrénování na surovém textu, instrukční doladění a fázi učení z lidských preferencí.

Kdy trénování zastavit

Delší trénování neznamená lepší model. Standardní technikou je early stopping: sleduje se validační metrika a běh se ukončí, když se několik epoch po sobě nezlepší. Uloží se přitom kontrolní bod (checkpoint) s nejlepším dosaženým stavem, ne ten poslední. Proti přeučení pomáhá také dropout, weight decay nebo augmentace dat.

Časté praktické brzdy

  • Únik informace z testovací sady do trénovací (data leakage) nafoukne metriky a v produkci se model zhroutí.
  • Nevyvážené třídy: model se naučí předpovídat většinovou třídu a má vysokou přesnost bez užitku.
  • Příliš vysoký learning rate způsobí divergenci ztráty, příliš nízký zase mrtvé trénování.
  • Nereprodukovatelnost: bez fixovaného seedu a verzí dat nelze výsledek zopakovat.

Co se sleduje během běhu

Kromě ztráty se logují metriky odpovídající úloze (přesnost, F1, MAE), norma gradientů, využití GPU a čas na epochu. Nástroje pro sledování experimentů zaznamenávají i hyperparametry a hash datasetu, aby šel každý model zpětně dohledat.

Příklady z praxe

  1. Klasifikace produktových fotek v e-shopu

    E-shop má 12 000 nafocených produktů a chce je automaticky zařazovat do kategorií. Místo trénování konvoluční sítě od nuly se vezme model předtrénovaný na ImageNetu, poslední vrstva se nahradí a doladí se na vlastních datech. Trénovací přesnost vyskočí na 99 %, ale validační se zasekne na 84 %: model se naučil rozeznávat pozadí konkrétního fotoateliéru, ne produkt. Pomůže augmentace (výřezy, otočení, změna jasu) a rozšíření sady o fotky z jiného osvětlení.

  2. Trénovací smyčka v PyTorchi

    Minimální smyčka ukazuje čtyři kroky, které se opakují u každé dávky: vynulování gradientů, dopředný průchod, výpočet ztráty a krok optimalizátoru. Bez volání zero_grad() se gradienty sčítají napříč dávkami a trénování se rozpadne. Validace běží v režimu bez počítání gradientů, protože se při ní žádné váhy nemění.

    for epoch in range(epochs):
        model.train()
        for x, y in train_loader:
            optimizer.zero_grad()
            loss = criterion(model(x), y)
            loss.backward()
            optimizer.step()
    
        model.eval()
        with torch.no_grad():
            val_loss = sum(criterion(model(x), y) for x, y in val_loader)

Časté omyly

MýtusČím déle model trénuju, tím bude lepší.
Ve skutečnostiPo určitém bodě začne validační chyba růst, i když trénovací dál klesá. Model si zapamatovává jednotlivé vzorky včetně šumu. Proto se používá early stopping a ukládá se checkpoint s nejlepší validační metrikou, ne poslední stav.
MýtusTrénování modelu a jeho použití je totéž, jen se to jinak jmenuje.
Ve skutečnostiTrénování mění parametry modelu a je řádově dražší a pomalejší. Inference (použití natrénovaného modelu) parametry nemění a probíhá jediným dopředným průchodem. Model se typicky trénuje jednou za čas a inferuje milionkrát denně.
MýtusPřesnost 98 % na testu znamená, že model je připravený do produkce.
Ve skutečnostiVysoké číslo často znamená nevyvážené třídy nebo únik informace z testovací sady do trénovací. U dat, kde 98 % vzorků patří do jedné třídy, dosáhne stejné přesnosti i model, který vždy hádá většinovou odpověď.

Časté dotazy

Kolik dat je potřeba na trénování modelu?
Množství dat pro trénování modelu závisí na složitosti úlohy a na tom, jestli se trénuje od nuly nebo se dolaďuje předtrénovaný model. Doladění klasifikátoru obrázků může fungovat od několika set označených vzorků na třídu, instrukční doladění jazykového modelu od nižších tisíců příkladů. Trénování velkého modelu od náhodné inicializace vyžaduje miliardy tokenů nebo miliony obrázků. Praktické vodítko: postavte křivku učení, tedy graf validační metriky proti velikosti trénovací sady. Pokud metrika s přibývajícími daty stále roste, sběr dalších dat se vyplatí; pokud se vyrovnala, problém je v modelu nebo ve značkování.
Proč ztráta při trénování skáče nebo roste do nekonečna?
Rostoucí nebo oscilující ztráta při trénování modelu má nejčastěji na svědomí příliš vysoký learning rate: kroky optimalizátoru přestřelí minimum a model diverguje. Dalšími podezřelými jsou nenormalizované vstupy, chybějící vynulování gradientů mezi dávkami, nevhodná kombinace aktivační funkce a ztrátové funkce nebo NaN hodnoty v datech. Postup nápravy: snižte learning rate na desetinu, zapněte ořezávání gradientů (gradient clipping), zkontrolujte statistiky vstupů a zkuste přetrénovat model na deseti vzorcích. Pokud model neumí přeučit ani deset vzorků, chyba je v kódu, ne v datech.
Potřebuji na trénování modelu GPU?
GPU není nutné pro klasické modely nad tabulkovými daty, kde gradient boosting nebo lineární modely na CPU doběhnou v řádu minut. Trénování neuronových sítí ale spočívá v maticovém násobení, které GPU zvládá o dva až tři řády rychleji než CPU, takže od velikosti běžné konvoluční sítě výš je akcelerátor prakticky podmínkou. Pro doladění malých modelů stačí jedna pronajatá GPU v cloudu na pár hodin. Trénování velkých jazykových modelů od nuly vyžaduje clustery desítek až tisíců akcelerátorů propojených rychlou sítí.
Jak poznám, že je model natrénovaný dost a můžu skončit?
Trénování modelu se ukončuje podle validační metriky, ne podle počtu epoch. Pokud se sledovaná metrika nezlepší po několik epoch za sebou (trpělivost early stoppingu), běh se zastaví a použije se uložený checkpoint s nejlepším výsledkem. Kromě toho je rozumné mít předem stanovenou cílovou hodnotu odvozenou od byznysu: model, který nepřekoná stávající pravidlové řešení nebo lidského anotátora, nemá smysl nasazovat, i kdyby se ztráta dál zlepšovala. Poslední kontrolou je jediné vyhodnocení na testovací sadě, do které se během ladění nesahalo.

Zdroje

  1. PyTorch Documentation(otevře se v novém okně)PyTorch
  2. TensorFlow Guide(otevře se v novém okně)TensorFlow
  3. Transformers Documentation(otevře se v novém okně)Hugging Face
  4. Machine learning(otevře se v novém okně)Wikipedia

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.