ML Atlas

Kurs uczenia maszynowego od zera · Lekcja 1.6 · 7 z 33 gotowych lekcji · 10 min

Spadek gradientu: nauka małymi krokami

W skrócie

Spadek gradientu szuka dobrych parametrów, krok po kroku schodząc w dół po błędzie. Współczynnik uczenia decyduje, czy będzie postęp, czy eksplozja.

Rozgrzewka Dwa pytania z wcześniejszych lekcji. Minuta, a lekcji nie blokuje.
Z lekcji 1.5: Regresja liniowa: dopasowanie prostej Przy nachyleniu ustawionym na zero, jaki wyraz wolny daje najmniejsze MSE?

Pokaż odpowiedź

Poprawna odpowiedź: Średnią wartości przewidywanej zmiennej w danych treningowych

Dla poziomej prostej błąd kwadratowy jest najmniejszy przy średniej, dlatego średnia to naturalny punkt odniesienia w regresji.

Z lekcji 1.4: Najbliżsi sąsiedzi: najprostszy model Dlaczego przed kNN zwykle standaryzuje się pomiary?

Pokaż odpowiedź

Poprawna odpowiedź: Bo pomiar w dużych jednostkach, np. gramach, zagłusza pozostałe

Odległość dodaje różnice w pomiarach. Masa w tysiącach gramów przykrywa dziób w milimetrach: na czterech pomiarach 76,7% bez skalowania i 96,1% po standaryzacji.

W poprzedniej lekcji wzór podał nam najlepszą prostą od razu. Ale sieć neuronowa z milionami wag takiego wzoru nie ma. Jak komputer ma znaleźć dobre ustawienie milionów pokręteł, skoro nikt nie umie mu powiedzieć, gdzie jest najlepsze? Odpowiedź jest niemal wstydliwie prosta: wyczuwa, w którą stronę jest w dół, i robi mały krok. A potem znowu.

Przewidź, potem sprawdź Do wyboru są cztery współczynniki uczenia (długości kroku): 0,01; 0,1; 0,8 i 1,1. Który da najniższą stratę (liczbę, która mówi, jak bardzo model się myli) po 5 krokach?
Jak bardzo jesteś pewny(-a)?

Eksperyment

Ten interaktywny eksperyment działa w przeglądarce z włączonym JavaScriptem. Tekst wokół opisuje, co w nim widać.

Pokaż odpowiedź

Poprawna odpowiedź: 0,8

Po 5 krokach strata wynosi 24468 (η = 0,01), 6595 (0,1), 4043 (0,8) i 159823 (1,1); minimum to 3890. Przy 0,8 krok jest duży, ale jeszcze nie przeskakuje doliny. Przy 1,1 każdy krok przeskakuje ją tak mocno, że strata rośnie.

Spróbuj

  • Wybierz mały współczynnik uczenia i naciśnij kilka razy Krok. Patrz, jak prosta przesuwa się trochę przy każdym kroku, a krzywa straty powoli opada.
  • Naciśnij Uruchom i poczekaj. Czy prosta ląduje blisko prostej najmniejszych kwadratów z poprzedniej lekcji?
  • Zacznij od nowa z największym współczynnikiem uczenia i znowu naciskaj Krok. Patrz na krzywą straty: zamiast spadać, rośnie, a prosta miota się na boki. To jest rozbieżność.
  • Wypróbuj współczynniki pośrednie i znajdź największy, przy którym strata wciąż równo spada.

Gdy już sprawdzisz to w labie, zobaczmy, co się tam właściwie działo.

Pomysł w prostych słowach

Wyobraź sobie, że stoisz na zboczu w gęstej mgle. Chcesz zejść do doliny, ale widzisz tylko metr wokół siebie. Rozsądna strategia: wyczuć stopami grunt, znaleźć kierunek, w którym teren najbardziej opada, zrobić tam krok i powtórzyć. Całego krajobrazu nie widzisz nigdy, a jednak z każdym krokiem jesteś niżej.

W uczeniu maszynowym „krajobrazem” jest błąd modelu. Każda para nachylenia i wyrazu wolnego to punkt na mapie, a wysokość w tym punkcie to błąd średniokwadratowy z lekcji 3. Dno doliny to najlepsza prosta. Spadek gradientu to ten spacer we mgle: zacznij gdziekolwiek, zmierz, w którą stronę błąd maleje, przesuń parametry trochę w tę stronę i powtarzaj, aż błąd przestanie spadać.

Dlaczego to działa

Kierunek najszybszego wzrostu funkcji wskazuje jej gradient — lista pochodnych, po jednej dla każdego parametru, mówiących, o ile wzrósłby błąd, gdyby ten parametr lekko zwiększyć. Idź w przeciwną stronę, a błąd spadnie. Dla każdego parametru w jeden krok wygląda tak:

w ← w − η · ∂L/∂w

Tutaj L to funkcja straty (błąd, który minimalizujemy), ∂L/∂w mówi, jak mocno strata reaguje na w, a η (grecka litera eta) to współczynnik uczenia, który ustala długość kroku. Tam, gdzie zbocze jest strome, kroki są duże; przy dnie zbocze się wypłaszcza i kroki same się skracają.

Wszystko zależy od współczynnika uczenia. Gdy jest za mały, każdy krok jest malutki i spacer trwa wieki. Gdy jest w sam raz, błąd szybko spada i ustala się blisko minimum. Gdy jest za duży, każdy krok przeskakuje dolinę i ląduje wyżej na przeciwległym zboczu; następny przeskakuje jeszcze bardziej i błąd rośnie bez końca. To rozbieżność i najczęstszy powód, dla którego trening „wybucha”.

Dla regresji liniowej z błędem średniokwadratowym krajobraz ma kształt gładkiej miski: jedno dno i żadnych fałszywych dolinek po drodze, więc przy rozsądnym kroku spacer zawsze tam trafi. W sieciach neuronowych krajobraz jest pofałdowany i pełen płaskowyżów, a mimo to ta sama prosta metoda sprawdza się w praktyce zaskakująco dobrze.

Piękno tej metody polega na tym, że potrzebuje tylko jednego: umiejętności policzenia gradientu w bieżącym punkcie. Nie potrzebuje wzoru na odpowiedź i działa tak samo dla dwóch parametrów jak dla dwóch miliardów. Dlatego napędza niemal każdą sieć neuronową, łącznie z modelami językowymi z lekcji 12. W praktyce gradient zwykle szacuje się na małej losowej porcji przykładów, a nie na wszystkich naraz — każdy krok jest wtedy tańszy i bardziej rozedrgany, ale działa to zadziwiająco dobrze.

Częsty błąd

Gdy strata nagle wystrzeliwuje w górę albo zamienia się w „NaN” (nie-liczbę), początkujący często szukają błędu w kodzie. Dużo częściej współczynnik uczenia jest po prostu za duży. Lekarstwem jest jego zmniejszenie, a nie przepisywanie modelu. Odwrotny błąd jest mniej widoczny: współczynnik tak mały, że strata wciąż spada, gdy trening się kończy, więc model wygląda gorzej, niż mógłby. Pokrewna pułapka to cechy w bardzo różnych skalach — powiedzmy wiek w latach obok dochodu w złotych — przez co dolina zamienia się w długi, wąski kanion i żaden pojedynczy współczynnik nie pasuje do wszystkich kierunków. Wcześniejsze przeskalowanie cech bardzo ułatwia spacer.

Mamy już obie połowy przepisu na uczenie: ocenę i sposób jej poprawiania. W następnej lekcji użyjemy ich do nowego rodzaju pytań — nie „ile?”, tylko „który?”.

Quiz

Trzy pytania na sprawdzenie się. Wybierz odpowiedź albo rozwiń odpowiedź pod pytaniem. Z klawiatury: strzałki wybierają, Enter albo spacja zatwierdza.

1. Co gradient mówi algorytmowi w każdym kroku?
Pokaż odpowiedź

Poprawna odpowiedź: W którą stronę i jak stromo rośnie strata w bieżącym punkcie

Gradient wskazuje w górę, więc krok w przeciwną stronę obniża stratę, ale opisuje tylko najbliższe otoczenie bieżącego punktu.

2. Strata rośnie z każdym krokiem. Jaka jest najbardziej prawdopodobna przyczyna?
Pokaż odpowiedź

Poprawna odpowiedź: Za duży współczynnik uczenia, przez który kroki przeskakują minimum

Przy zbyt długim kroku parametry za każdym razem przeskakują dolinę do wyższego punktu i błąd rośnie.

3. Dlaczego w sieciach neuronowych używa się spadku gradientu zamiast dokładnego wzoru?
Pokaż odpowiedź

Poprawna odpowiedź: Bo wzoru na najlepsze parametry zwykle nie ma, a gradient da się policzyć

Spadek gradientu potrzebuje tylko nachylenia straty w bieżącym punkcie, a to jest dostępne nawet przy miliardach parametrów.

Najważniejsze wnioski

  • Spadek gradientu poprawia parametry, raz za razem robiąc krok przeciwnie do gradientu straty.
  • Współczynnik uczenia ustala długość kroku: za mały jest powolny, za duży prowadzi do rozbieżności.
  • Strata, która wybucha, zwykle oznacza za duży współczynnik uczenia, a nie zepsuty kod.
  • Metoda potrzebuje tylko gradientu, więc działa od dwóch parametrów po miliardy.

Głębiej: wzór, kod, praktyka

Matematyka

Weźmy prostą ŷ = b + w·z ze stratą L(w, b) = (1/n) · Σ (yᵢ − b − w·zᵢ)². Jej gradient to ∂L/∂w = −2 · mean(r · z) i ∂L/∂b = −2 · mean(r), gdzie r = y − ŷ to reszty. Jeden krok to w ← w − η·∂L/∂w oraz b ← b − η·∂L/∂b.

Gdy cecha jest ustandaryzowana (mean(z) = 0, mean(z²) = 1), oba kierunki sobie nie przeszkadzają. Każdy krok zmniejsza wtedy odległość do najlepszych w i b o czynnik 1 − 2η.

  • 0 < η < 1: odległość maleje, a strata spada do minimum. Im bliżej η do 0,5, tym szybciej.
  • η > 1: czynnik ma wartość bezwzględną większą niż 1, każdy krok przestrzeliwuje dalej i strata rośnie bez końca.
  • Bez standaryzacji bezpieczny zakres η zależy od skali cechy, więc jedna wartość nie pasuje już do każdego kierunku.
W kodzie (Python)

Strata z laba po 5 krokach od w = b = 0, dla czterech współczynników uczenia, na ustandaryzowanym BMI (dane o cukrzycy):

import numpy as np
from sklearn.datasets import load_diabetes

X, y = load_diabetes(return_X_y=True, as_frame=True, scaled=False)
bmi = X["bmi"].to_numpy()
z = (bmi - bmi.mean()) / bmi.std()  # ustandaryzowane BMI, jak w labie
mse = lambda w, b: np.mean((y - (b + w * z)) ** 2)
for lr in [0.01, 0.1, 0.8, 1.1]:
    w, b = 0.0, 0.0  # start w zerze
    for _ in range(5):  # pięć kroków na całym zbiorze
        r = y - (b + w * z)
        w, b = w + lr * 2 * np.mean(r * z), b + lr * 2 * np.mean(r)
    print(f"lr {lr}: loss after 5 steps {mse(w, b):.0f}")
w_best, b_best = np.polyfit(z, y, 1)
print(f"minimum: {mse(w_best, b_best):.0f}")

Wynik

lr 0.01: loss after 5 steps 24468
lr 0.1: loss after 5 steps 6595
lr 0.8: loss after 5 steps 4043
lr 1.1: loss after 5 steps 159823
minimum: 3890

Minimum, 3890, to MSE prostej najmniejszych kwadratów z lekcji 3. Dla lr = 0.8 czynnik wynosi |1 − 1,6| = 0,6 na krok, co bije 0,9 dla lr = 0.1. Dla lr = 1.1 wynosi 1,2, więc strata rośnie.

Dla praktyka
  • Przed spadkiem gradientu standaryzuj cechy liczbowe. Miska straty robi się okrągła i jeden współczynnik uczenia pasuje do wszystkich kierunków.
  • Zawsze rysuj stratę w funkcji kroku. Gładki spadek to zdrowy objaw. Wzrost albo NaN prawie zawsze znaczy zbyt duży współczynnik uczenia, więc zmniejsz go dziesięciokrotnie i spróbuj jeszcze raz.
  • Nie poprzestawaj na stałej liczbie kroków. Zatrzymuj też, gdy strata prawie się nie zmienia, i sprawdź, czy naprawdę się wypłaszczyła, a nie tylko pełznie.
  • Jeśli piszesz gradient ręcznie, porównaj go z oszacowaniem różnicowym w kilku punktach, zanim zaufasz długiemu przebiegowi.
  • Gdy istnieje wzór zamknięty, jak w regresji liniowej, użyj go. Spadek gradientu zasługuje na swoje miejsce przy modelach, które takiego wzoru nie mają.

Więcej w Atlasie

Hasła encyklopedii o pojęciach z tej lekcji: