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.
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.
Wybierz odpowiedź i pewność.
Odpowiedz, żeby odblokować lab.
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.
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.
Pobierz notebook (.ipynb). Otwórz go w Jupyterze albo wgraj do Google Colab; brakujące dane pobierze sam.
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
NaNprawie 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ą.
Czy to było pomocne?
Dzięki! To pomaga nam poprawiać Atlas.
Więcej w Atlasie
Hasła encyklopedii o pojęciach z tej lekcji: