TakéHyperparametry, Hyper-parametr, Ladicí parametr modeluPokročilý
Definice
Hyperparametr je nastavení modelu strojového učení, které volí člověk nebo automatický vyhledávač před samotným trénováním a které se z dat neučí. Patří sem rychlost učení, počet vrstev, hloubka stromu, velikost dávky nebo síla regularizace. Hodnoty vah se naopak během trénování mění: to jsou parametry, nikoli hyperparametry.
Co hyperparametr určuje a co ne
Hyperparametr určuje pravidla hry, ne výsledek. Definuje tvar modelu (počet vrstev, počet neuronů, maximální hloubku rozhodovacího stromu) a průběh optimalizace (rychlost učení, velikost dávky, počet epoch, typ optimalizátoru, sílu regularizace). Samotné hodnoty vah nebo dělicí prahy ve stromech vzniknou až během trénování z dat: to jsou parametry modelu a s hyperparametry se nesmí zaměňovat.
Proč se hyperparametry nedají doučit gradientem
Trénování minimalizuje ztrátovou funkci vůči parametrům, protože ztráta je vůči nim spojitě diferencovatelná. Vůči hyperparametrům taková vazba obvykle chybí: počet vrstev je celé číslo, výběr optimalizátoru je kategorie a rychlost učení ovlivňuje celý průběh učení, nikoli jediný krok. Kvalitu volby proto lze změřit až po dotrénování, a to na validační sadě, nikoli na trénovací. Hledání hyperparametrů je tedy vnější smyčka nad trénováním, což je hlavní důvod, proč je drahé.
Jak se hodnoty hledají
- Grid search: projde všechny kombinace z předem dané mřížky. Předvídatelné, ale počet běhů roste exponenciálně s počtem hyperparametrů.
- Random search: losuje hodnoty z rozdělení. Při stejném rozpočtu obvykle najde lepší nastavení, protože neplýtvá běhy na dimenze, které na výsledek nemají vliv.
- Bayesovská optimalizace: staví náhradní model závislosti skóre na nastavení a další pokus volí tam, kde čeká největší přínos.
- Early stopping a successive halving (například Hyperband): špatně vypadající běhy ukončí brzy a rozpočet přesune na nadějné kandidáty.
Rozsahy se u některých hyperparametrů volí v logaritmickém měřítku. Rychlost učení se zkouší po řádech (0,1; 0,01; 0,001), protože rozdíl mezi 0,001 a 0,002 je zanedbatelný oproti rozdílu mezi 0,001 a 0,1.
Kde vzniká skryté přeučení
Opakované ladění proti jedné validační sadě znamená, že se do výběru nastavení postupně propíše i její šum. Model pak vypadá lépe, než ve skutečnosti je. Obranou je oddělená testovací sada, kterou během hledání nikdo nevidí, případně vnořená křížová validace: vnitřní smyčka ladí hyperparametry, vnější odhaduje výkon. U časových řad musí být dělení chronologické, jinak ladění probíhá na datech z budoucnosti.
Hyperparametry mimo trénování
Termín se používá i tam, kde se nic netrénuje. U velkých jazykových modelů se jako hyperparametry inference označují teplota, top-k, top-p nebo penalizace opakování: nastavují se při generování a chování modelu mění, aniž by se dotkly vah. Podobně mají hyperparametry i shlukovací metody (počet shluků u k-means) nebo vyhledávání ve vektorových databázích (počet sond, parametry HNSW indexu).
Kolik ladění se vyplatí
Přínos ladění je nerovnoměrný. U gradientního boostingu nebo neuronových sítí bývá rozdíl mezi výchozím a vyladěným nastavením velký, zatímco u dobře nastavené lineární regrese minimální. Praktické pořadí je obvykle: nejdřív kvalita a množství dat, pak volba architektury, teprve potom jemné doladění. Každý běh hledání je nutné logovat i s náhodným semínkem, jinak není výsledek reprodukovatelný.
Příklady z praxe
Rychlost učení rozhoduje, jestli síť vůbec konverguje
Při trénování klasifikátoru obrázků skončí s rychlostí učení 0,5 ztráta na NaN, protože kroky optimalizátoru přestřelují minimum. S hodnotou 0,001 síť konverguje, s 0,00001 se učí tak pomalu, že rozpočet epoch nestačí. Rychlost učení se proto zkouší po řádech, ne po setinách.
import torch model = MyNet() # hyperparametry: lr, weight_decay, batch_size, epochs optim = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.01) loader = torch.utils.data.DataLoader(train_ds, batch_size=64, shuffle=True) for epoch in range(20): for x, y in loader: loss = criterion(model(x), y) loss.backward() optim.step() optim.zero_grad()Náhodné prohledávání s křížovou validací u gradientního boostingu
U tabulkových dat se hloubka stromů, počet stromů a rychlost učení ladí společně, protože se navzájem ovlivňují: mělčí stromy potřebují jich víc. Padesát náhodně losovaných kombinací s pětinásobnou křížovou validací obvykle najde lepší model než ručně vybraná mřížka o stejném počtu běhů. Testovací sada zůstává celou dobu stranou.
from sklearn.model_selection import RandomizedSearchCV from scipy.stats import loguniform, randint space = { "learning_rate": loguniform(1e-3, 3e-1), "max_depth": randint(2, 9), "n_estimators": randint(100, 1000), } search = RandomizedSearchCV(model, space, n_iter=50, cv=5, scoring="roc_auc") search.fit(X_train, y_train) print(search.best_params_)
Časté omyly
- MýtusStačí najet grid search přes všechno a nechat to běžet přes noc.
- Ve skutečnostiPočet kombinací v mřížce roste exponenciálně s počtem hyperparametrů, takže i tři hyperparametry po pěti hodnotách znamenají 125 dotrénování. Náhodné prohledávání nebo bayesovská optimalizace dosáhnou při stejném rozpočtu obvykle lepšího výsledku.
- MýtusNejlepší hyperparametry poznám podle nejvyšší přesnosti na testovací sadě.
- Ve skutečnostiVýběr podle testovací sady z ní dělá další validační sadu a výsledné číslo přestává být nezaujatým odhadem výkonu. Ladit se má na validační sadě a testovací se otevírá až jednou, na konci.
- MýtusHyperparametry z blogového návodu budou fungovat i na mých datech.
- Ve skutečnostiOptimální nastavení závisí na velikosti datasetu, poměru tříd i předzpracování. Přejaté hodnoty jsou rozumný výchozí bod pro první běh, ne náhrada za vlastní hledání.
Časté dotazy
- Jaký je rozdíl mezi hyperparametrem a parametrem modelu?
- Hyperparametr nastavuje člověk nebo automatický vyhledávač před trénováním a algoritmus ho během učení nemění: patří sem rychlost učení, velikost dávky, hloubka stromu nebo síla regularizace. Parametry modelu, tedy váhy neuronové sítě, koeficienty regrese nebo dělicí prahy ve stromech, se naopak dopočítají z trénovacích dat optimalizačním algoritmem. Jednoduchá kontrola: co se ukládá do souboru s natrénovaným modelem a mění se každou epochu, jsou parametry. Co musíte zapsat do konfigurace, aby šlo trénování vůbec spustit, je hyperparametr.
- Které hyperparametry ladit jako první, když je málo času?
- U neuronových sítí má největší dopad rychlost učení, hned za ní velikost dávky, síla regularizace (weight decay, dropout) a počet epoch v kombinaci s early stoppingem. U gradientního boostingu na tabulkových datech rozhoduje trojice rychlost učení, počet stromů a maximální hloubka, které se ladí společně. Architekturní hyperparametry jako počet vrstev se řeší až potom, protože jejich změna je nákladná. Nejlevnějším zlepšením ale bývá čistší dataset a lepší příznaky, ne jemnější mřížka hodnot.
- Počítá se teplota u jazykového modelu jako hyperparametr?
- Teplota se běžně označuje jako hyperparametr inference, protože se nastavuje zvenčí a model se z ní neučí. Na rozdíl od trénovacích hyperparametrů se ale mění za běhu při každém požadavku a nevyžaduje přetrénování. Do stejné skupiny patří top-k, top-p, penalizace opakování a maximální délka odpovědi. Nízká teplota vede k předvídatelnějším a opakovanějším výstupům, vyšší k rozmanitějším, ale méně spolehlivým. Pro produkční nasazení se tyto hodnoty ladí proti sadě testovacích promptů podobně jako klasické hyperparametry.
- Jak poznat, že jsem se hyperparametry přeučil na validační sadu?
- Podezřelý je stav, kdy skóre na validační sadě po desítkách běhů dál pomalu roste, ale rozdíly mezi nejlepšími kandidáty jsou menší než šum měření. Kontrolou je odložená testovací sada, kterou během hledání nikdo neotevře: pokud na ní model spadne výrazně pod validační číslo, hledání si vybralo šum konkrétního rozdělení. Spolehlivější postup je vnořená křížová validace, kde vnitřní smyčka ladí hyperparametry a vnější odhaduje výkon na datech, která se ladění neúčastnila.
Zdroje
- torch.optim(otevře se v novém okně)
- Hyperparameter (machine learning)(otevře se v novém okně)
- Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization(otevře se v novém okně)