Wzmacnianie gradientu jest metodologią stosowaną innego algorytmu systemów uczących się. W prostym stylu wzmacnianie gradientu obejmuje 2 typy modeli:
- „słaby” który jest zwykle drzewem decyzyjnym.
- „silne” który składa się z wielu słabych modeli ML.
Przy wzmacnianiu gradientu na każdym etapie trenowany jest nowy słaby model tak, aby przewidywał „błąd” obecnego silnego modelu (zwanego pseudoreakcją). Wyświetlimy „błąd” później. Na razie przyjmijmy, że „błąd” jest różnica między z prognozą i etykietą regresji. Słaby model (czyli „błąd”) to a następnie dodano do silnego modelu ze znakiem ujemnym, aby zmniejszyć błąd solidny model.
Wzmacnianie gradientem jest iteracyjne. Każda iteracja wywołuje tę formułę:
\[ F_{i+1} = F_i - f_i \]
gdzie:
- Najsilniejszy model na etapie $i$ to $F_i$.
- $f_i$ to słaby model w kroku $i$.
Ta operacja powtarza się, dopóki nie zostanie spełnione kryterium zakończenia, takie jak maksymalna liczby iteracji lub jeśli model (silny) zacznie się zawyżać, zgodnie z pomiarem osobnego zbioru danych do weryfikacji.
Zilustrujemy wzmocnienie gradientu w prostym zbiorze danych regresji, w którym:
- Celem jest prognozowanie wartości $y$ od $x$.
- Silny model ma wartość zerową: $F_0(x) = 0$.
# Simplified example of regressive gradient boosting.
y = ... # the labels
x = ... # the features
strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.
for i in range(num_iters):
# Error of the strong model
error = strong_predictions - y
# The weak model is a decision tree (see CART chapter)
# without pruning and a maximum depth of 3.
weak_model = tfdf.keras.CartModel(
task=tfdf.keras.Task.REGRESSION,
validation_ratio=0.0,
max_depth=3)
weak_model.fit(x=x, y=error)
strong_model.append(weak_model)
weak_predictions = weak_model.predict(x)[:,0]
strong_predictions -= weak_predictions
Zastosujmy ten kod do następującego zbioru danych:
Rysunek 25. Zbiór danych syntetycznych regresywny z 1 cechą liczbową. .
Oto 3 wykresy po pierwszej iteracji wzmocnienia gradientu. algorytm:
Rysunek 26. Trzy wykresy po pierwszej iteracji. .
Pamiętaj o tych uwagach na temat wykresów na rys. 26:
- Pierwszy wykres przedstawia prognozy silnego modelu, który jest obecnie zawsze 0.
- Drugi wykres pokazuje błąd, który jest etykietą słabego modelu.
- Trzeci wykres przedstawia słaby model.
Pierwszym słabym modelem jest uczenie się przybliżonej reprezentacji etykiety i przede wszystkim obejmuje lewą część przestrzeni cech (tę o największej zmienności, a co za tym idzie, z największym błędem stałego nieprawidłowego modelu).
Poniżej przedstawiono te same wykresy dla innej iteracji algorytmu:
Rysunek 27. Trzy wykresy po drugiej iteracji. .
Pamiętaj o uwagach dotyczących wykresów na rys. 27:
- Silny model zawiera teraz prognozę słabego modelu poprzedniej iteracji.
- Nowy błąd silnego modelu jest nieco mniejszy.
- Nowa prognoza słabego modelu skupia się teraz na prawej części do działania.
Algorytm uruchamiamy jeszcze przez 8 powtórzeń:
Rysunek 28. Trzy wykresy po trzeciej i dziesiątej iteracji. .
Na rys. 28 warto zauważyć, że prognoza silnego modelu zaczyna przypominać wykres zbioru danych,
Rysunki te ilustrują algorytm wzmocnienia gradientem, wykorzystując drzewa decyzyjne jako słabych uczniów. Ta kombinacja jest nazywana drzewami decyzyjnymi z wzmocnieniem gradientu.
Poprzednie wykresy sugerują istotę wzmocnienia gradientu. Jednak W przykładzie brakuje dwóch rzeczywistych działań:
- Zmniejszenie
- Optymalizacja wartości liści za pomocą jednego etapu metody Newtona
Zmniejszanie
Słaby model $f_i$ jest mnożony przez małą wartość $\nu$ (na przykład $\nu = 0,1$) przed dodaniem do silnego modelu $F_i$. Ta mała wartość nazywa się zmniejszenia. Innymi słowy, zamiast każdej iteracji za pomocą wzór:
\[ F_{i+1} = F_i - f_i \]
Każda iteracja korzysta z tej formuły:
\[ F_{i+1} = F_i - \nu f_i \]
Zmniejszenie w wzmacnianiu gradientu jest analogiczne do tempa uczenia się w sieciach neuronowych. Zmniejszanie kontroluje szybkość uczenia się silnego modelu, co pomaga ograniczyć nadmiernego dopasowania. Oznacza to, że wartość kurczenia bliższa 0,0 zmniejsza większe dopasowanie niż wartość kurczenia bliższa 1,0.
W powyższym kodzie zmniejszanie zostałoby zaimplementowane w następujący sposób:
shrinkage = 0.1 # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions