ansámbl učeníTakéEnsemble metody, Kombinování modelů, EnsemblingPokročilý
Definice
Ensemble učení je postup ve strojovém učení, při kterém se predikce několika samostatně natrénovaných modelů spojí do jedné výsledné odpovědi, typicky hlasováním nebo průměrem. Kombinace zpravidla chybuje méně než jednotlivé modely, protože jejich chyby se částečně vyruší. Patří sem bagging, boosting, stacking a náhodné lesy.
Proč kombinace modelů chybuje méně
Ensemble učení stojí na jednoduché úvaze: pokud několik modelů dělá chyby na různých místech dat, jejich zprůměrovaná predikce bude přesnější než kterýkoli z nich sám. Podmínkou je rozmanitost. Deset identických stromů natrénovaných na stejných datech ve stejném pořadí nepřinese nic, protože se všechny mýlí stejně. Rozmanitost se proto vyrábí uměle: různými vzorky trénovacích dat, různými podmnožinami příznaků, jinou inicializací nebo úplně odlišnými typy algoritmů.
Chybu modelu lze rozložit na zkreslení (bias) a rozptyl (variance). Průměrování mnoha rozmanitých modelů srazí hlavně rozptyl, tedy citlivost na konkrétní trénovací vzorek. To vysvětluje, proč se ensemble tak dobře snáší s hlubokými rozhodovacími stromy, které samy o sobě snadno podléhají přeučení.
Tři rodiny ensemble metod
Bagging
Bagging trénuje modely paralelně, každý na náhodném výběru s opakováním (bootstrap) z původních dat. Výsledky se zprůměrují nebo se o nich hlasuje. Random Forest tuto myšlenku rozšiřuje o náhodný výběr příznaků v každém uzlu stromu, čímž stromy dále rozrůzňuje. Bagging je odolný, dobře paralelizovatelný a málokdy potřebuje pečlivé ladění.
Boosting
Boosting staví modely sekvenčně: každý další se soustředí na příklady, které předchozí soubor předpovídal špatně. Gradient boosting formuluje tento postup jako gradientní sestup ve funkčním prostoru a v implementacích typu XGBoost, LightGBM nebo CatBoost dodnes patří ke špičce na tabulkových datech. Cenou je vyšší citlivost na šum v datech a nutnost hlídat počet iterací a rychlost učení.
Stacking
Stacking nechá několik různorodých modelů (například lineární model, strom a neuronovou síť) vytvořit predikce a nad nimi natrénuje meta-model, který se naučí, komu kdy věřit. Klíčové je generovat vstupy pro meta-model z křížové validace, jinak si meta-model zapamatuje přeučené predikce základních modelů.
Kolik ensemble stojí v provozu
Ensemble zlepšuje přesnost za cenu prostředků. Deset modelů znamená přibližně desetinásobek času na inferenci, desetinásobek paměti a složitější nasazení i verzování. U aplikací s limitem latence v jednotkách milisekund bývá výhodnější destilovat ensemble do jednoho menšího modelu. Zhoršuje se také vysvětlitelnost: u jednoho stromu lze rozhodnutí přečíst, u pěti set stromů už je nutné sáhnout po metodách jako důležitost příznaků nebo SHAP.
Kdy ensemble nepomůže
Ensemble nespraví špatně definovaný cíl, únik informace z budoucnosti do příznaků ani systematicky vychýlená data. Pokud všechny modely sdílejí stejnou chybu v předzpracování, zprůměrují ji beze zbytku. Malý přínos přináší také tehdy, když jsou modely silně korelované, nebo když je datová sada tak malá, že se rozdíly mezi modely ztratí v šumu validace.
Příklady z praxe
Random Forest proti jednomu stromu na tabulkových datech
Model odhadující odchod zákazníka (churn) postavený na jediném rozhodovacím stromu dosahuje na trénovacích datech skvělých výsledků, ale na validaci propadá, protože si zapamatoval jednotlivé zákazníky. Random Forest se stovkou stromů, kde každý vidí jiný bootstrap vzorek a jinou podmnožinu příznaků, dá stabilnější výsledek a méně kolísá mezi jednotlivými běhy křížové validace.
from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import cross_val_score model = RandomForestClassifier(n_estimators=300, max_features="sqrt", random_state=0) print(cross_val_score(model, X, y, cv=5, scoring="roc_auc").mean())Stacking v soutěži i v produkci
Tým skládá predikce gradient boostingu, logistické regrese a malé neuronové sítě do meta-modelu, který se naučí váhy jednotlivých vstupů. Predikce základních modelů musí vzniknout z out-of-fold křížové validace, jinak meta-model dostane příliš optimistické vstupy a v produkci selže. Zisk bývá řádu desetin procenta metriky, což se vyplatí u scoringu úvěrů, ale ne u interního dashboardu.
from sklearn.ensemble import StackingClassifier from sklearn.linear_model import LogisticRegression stack = StackingClassifier( estimators=[("gb", gb_model), ("lr", lr_model)], final_estimator=LogisticRegression(), cv=5, )
Časté omyly
- MýtusČím víc modelů do ensemblu přidám, tím lepší výsledek dostanu.
- Ve skutečnostiPřínos roste jen do chvíle, kdy nové modely přinášejí novou rozmanitost. Přidávání téměř identických modelů zvyšuje náklady na inferenci, ale přesnost už prakticky nemění.
- MýtusEnsemble se nemůže přeučit, protože průměruje.
- Ve skutečnostiBagging přeučení skutečně tlumí, ale boosting se při příliš mnoha iteracích nebo vysoké rychlosti učení přeučí velmi ochotně, zvlášť na zašuměných datech. Počet iterací je proto potřeba hlídat validační sadou.
- MýtusEnsemble učení je zastaralé, dnes se všechno dělá hlubokými sítěmi.
- Ve skutečnostiNa strukturovaných tabulkových datech patří gradient boosting nadále mezi nejsilnější přístupy. Ensemble se navíc běžně používá i nad neuronovými sítěmi, například průměrováním více běhů s odlišnou inicializací.
Časté dotazy
- Jaký je rozdíl mezi baggingem a boostingem?
- Bagging trénuje modely nezávisle a paralelně, každý na jiném bootstrap vzorku dat, a výsledky průměruje. Snižuje hlavně rozptyl a je odolný vůči šumu. Boosting naopak staví modely sekvenčně, kdy každý další opravuje chyby dosavadního souboru, a snižuje především zkreslení. Boosting obvykle dosahuje vyšší přesnosti, ale je citlivější na šum, odlehlé hodnoty a nastavení hyperparametrů, zejména rychlosti učení a počtu iterací. Bagging lze snadno rozložit na více jader nebo strojů, boosting jen omezeně.
- Kdy se ensemble učení nevyplatí nasadit?
- Ensemble učení se nevyplatí, když je rozpočet na latenci nebo paměť napjatý a přínos v metrice se pohybuje v desetinách procenta. Nasazení několika modelů znamená delší inferenci, složitější verzování a horší vysvětlitelnost, což bývá problém v regulovaných oborech. Nevyplatí se ani u velmi malých datových sad, kde se rozdíl mezi modely ztratí v šumu validace, a v případech, kdy hlavní chyba pochází z kvality dat nebo špatně zvoleného cíle. Tam pomůže lepší příprava dat, ne další model.
- Jak zajistit, aby byly modely v ensemblu dostatečně rozmanité?
- Rozmanitost v ensemblu se vytváří několika způsoby: bootstrap vzorkováním trénovacích dat, náhodným výběrem podmnožiny příznaků, různými hodnotami hyperparametrů, odlišnými náhodnými seedy a hlavně kombinací zcela odlišných typů algoritmů. Užitečnou kontrolou je korelace chyb jednotlivých modelů na validační sadě: pokud se blíží jedné, modely se mýlí na stejných místech a ensemble nepřinese téměř nic. Naopak modely s podobnou přesností a nízkou korelací chyb dávají největší zisk při kombinaci.
- Lze ensemble učení použít i s neuronovými sítěmi?
- Ensemble učení se s neuronovými sítěmi používá běžně. Nejjednodušší varianta je natrénovat stejnou architekturu několikrát s různou inicializací a průměrovat výstupní pravděpodobnosti; této technice se říká deep ensemble a kromě přesnosti zlepšuje i kalibraci a odhad nejistoty. Levnější alternativou je snapshot ensemble, který ukládá modely z různých fází jednoho tréninku, nebo průměrování vah. Nevýhodou zůstávají násobné náklady na trénink i inferenci, které se v produkci často řeší destilací ensemblu do jediné menší sítě.
Zdroje
- Ensemble learning(otevře se v novém okně)
- Random Forests(otevře se v novém okně)
- XGBoost: A Scalable Tree Boosting System(otevře se v novém okně)
- Simple and Scalable Predictive Uncertainty Estimation using Deep Ensembles(otevře se v novém okně)