03 · Nadzorowane · 4 min czytania · Interaktywne · aktualizacja
Jak działa gradient boosting i dlaczego jest tak skuteczny?
W skrócie
Wzmacnianie gradientowe buduje model krok po kroku: każde nowe płytkie drzewo poprawia błędy dotychczasowej sumy drzew, idąc w kierunku spadku straty.
Co to jest
Wzmacnianie gradientowe (gradient boosting) to metoda zespołowa, w której model powstaje jako suma wielu prostych modeli — zwykle płytkich drzew decyzyjnych — dodawanych po kolei. Każde nowe drzewo uczy się przewidywać, o ile i w którą stronę trzeba poprawić dotychczasową sumę, żeby zmniejszyć funkcję straty. Ogólne sformułowanie podał Jerome Friedman (2001).
Dla regresji z błędem kwadratowym idea jest wyjątkowo prosta. Zaczynamy od średniej. Liczymy reszty: ile każdemu przykładowi brakuje do prawdy. Uczymy małe drzewo przewidywać te reszty i dodajemy jego (pomniejszone) przewidywania do modelu. Liczymy nowe reszty, kolejne drzewo — i tak setki razy.
Intuicja: golfista nie trafia do dołka jednym uderzeniem. Pierwsze uderzenie posyła piłkę w okolice celu, każde kolejne koryguje to, co zostało. Wzmacnianie gradientowe to dziś jedna z najskuteczniejszych metod dla danych tabelarycznych; jej szybkie implementacje to XGBoost, LightGBM i CatBoost.
Mechanizm — dlaczego tak działa
Dlaczego „gradientowe”? Reszta yᵢ − F(xᵢ) to dokładnie minus gradient straty kwadratowej ½(y − F)² względem przewidywania F. Dopasowanie drzewa do reszt to więc krok spadku gradientu — tyle że nie w przestrzeni wag, a w przestrzeni funkcji. Ta obserwacja pozwala użyć dowolnej różniczkowalnej straty: dla klasyfikacji drzewa dopasowuje się do gradientu entropii krzyżowej, dla regresji odpornej — straty Hubera lub wartości bezwzględnej. Uczenie pod konkretną miarę staje się kwestią wyboru funkcji straty.
Kluczowym parametrem jest współczynnik uczenia (shrinkage, ν): każde drzewo dodaje się z wagą ν, zwykle 0,01–0,1. Mniejsze kroki oznaczają, że model potrzebuje więcej drzew, ale też, że żadne pojedyncze drzewo nie przesądza o wyniku, a zespół łagodniej dochodzi do dobrej funkcji. Friedman zaobserwował, że małe ν prawie zawsze poprawia uogólnianie; ceną jest czas.
W odróżnieniu od lasu losowego boosting zmniejsza przede wszystkim obciążenie, a każde drzewo dokłada coś nowego. Dlatego dodawanie drzew w nieskończoność prowadzi do przeuczenia: po pewnym czasie model zaczyna dopasowywać szum. Liczbę drzew wybiera się wczesnym zatrzymaniem na danych walidacyjnych, a dodatkowo regularyzuje się przez płytkie drzewa (głębokość 3–8), minimalną liczbę przykładów w liściu i losowanie podpróbek w każdej rundzie (tzw. stochastic gradient boosting).
Głębokość drzew decyduje o rzędzie interakcji, jakie model uchwyci. Pniaki (głębokość 1) dają model addytywny — sumę osobnych funkcji każdej cechy. Drzewa głębokości 3 mogą modelować interakcje trzech cech naraz.
Zastrzeżenia: wiele hiperparametrów wpływających na siebie nawzajem, sekwencyjny (trudny do zrównoleglenia na poziomie drzew) trening i brak ekstrapolacji poza zakres danych. Przy małych zbiorach i zależnościach bliskich liniowym prosty model liniowy potrafi wygrać.
Na przykładzie
Zbiór Diabetes: 442 pacjentów, 10 cech, cel — postęp choroby po roku; trening na 331, test na 111 (podział 75/25, random_state=0). Model startuje od średniej treningowej 151,9 (RMSE 79,1). Pierwsze trzy drzewa głębokości 3 ze współczynnikiem 0,1 obniżają błąd treningowy do 74,6, 70,8 i 67,5. Przy współczynniku 1,0 model po 100 drzewach osiąga R² treningowe 1,00, a testowe −0,31 — wyuczył się szumu. Przy 0,1 najlepszy wynik testowy (0,29) pada już po 13 drzewach, a po 2000 spada do 0,09. Przy 0,01 optimum (0,30) przypada na 156 drzew i spadek po nim jest dużo łagodniejszy. Płytsze drzewa (głębokość 2) z 0,01 dają najlepsze 0,33 po 194 rundach; wczesne zatrzymanie na 20% danych treningowych samo zatrzymało się po 370 drzewach z R² testowym 0,29.
Uczciwa puenta: w 5-krotnej walidacji krzyżowej zwykła regresja liniowa ma na tym zbiorze średnie R² = 0,49, a wzmacnianie gradientowe 0,42 (ustawienia domyślne) i 0,45 (współczynnik 0,01, głębokość 2, 1000 drzew). 442 pacjentów i zależność bliska liniowej to teren, na którym elastyczność boostingu jest bardziej kosztem niż zaletą.
Dane: Diabetes (progresja cukrzycy)
W praktyce
- W scikit-learn:
GradientBoostingRegressor/GradientBoostingClassifier(małe dane) i znacznie szybszeHistGradientBoostingRegressor/HistGradientBoostingClassifier(od kilkudziesięciu tysięcy wierszy). - Typowy start:
learning_rate0,05–0,1,max_depth3–6, kilkaset do kilku tysięcy drzew z wczesnym zatrzymaniem. - Wczesne zatrzymanie:
n_iter_no_change=50, validation_fraction=0.1w scikit-learn alboearly_stopping_roundsw XGBoost i LightGBM. subsample=0.8(losowanie wierszy) i losowanie cech zmniejszają wariancję i przyspieszają trening.- Najpierw ustal mały
learning_rate, potem dobierz liczbę drzew; zmniejszając współczynnik o połowę, licz się z mniej więcej dwa razy większą liczbą drzew.
Najczęstsze pytania
- Czym wzmacnianie gradientowe różni się od lasu losowego?
- Las uczy głębokie drzewa niezależnie i uśrednia je, co zmniejsza wariancję. Boosting uczy płytkie drzewa po kolei, każde poprawiając błędy poprzednich, co zmniejsza obciążenie. Boosting zwykle osiąga lepsze wyniki po dostrojeniu, las jest odporniejszy na złe hiperparametry.
- Czy wzmacnianie gradientowe się przeucza?
- Tak, jeśli dodaje się drzewa bez końca, szczególnie przy dużym współczynniku uczenia. Zabezpieczeniem jest wczesne zatrzymanie na danych walidacyjnych, mały współczynnik uczenia, płytkie drzewa i losowanie podpróbek.
- Dlaczego boosting wygrywa konkursy na danych tabelarycznych?
- Bo dobrze radzi sobie z cechami w różnych skalach, nieliniowościami, interakcjami i brakami danych bez żmudnej obróbki, a jego implementacje są bardzo szybkie. Badania porównawcze, m.in. Grinsztajna i in. (2022), pokazują, że na typowych danych tabelarycznych modele drzewiaste wciąż często wygrywają z sieciami neuronowymi.
Źródła
- Friedman J. H. „Greedy Function Approximation: A Gradient Boosting Machine”, Annals of Statistics 29(5), 2001.
- Friedman J. H. „Stochastic Gradient Boosting”, Computational Statistics & Data Analysis 38(4), 2002.
- Hastie T., Tibshirani R., Friedman J. „The Elements of Statistical Learning”, 2nd ed., 2009, rozdz. 10.
- Grinsztajn L., Oyallon E., Varoquaux G. „Why do tree-based models still outperform deep learning on typical tabular data?”, NeurIPS 2022 (Datasets and Benchmarks).
- Dokumentacja scikit-learn, „Gradient-boosted trees”: https://scikit-learn.org/stable/modules/ensemble.html#gradient-boosted-trees