Uczenie maszynowe od podstaw · Lekcja 01 · Część 1
Twój pierwszy neuron — ręcznie
Dlaczego model się uczy? Policz to ręcznie na pięciu przykładach, dwóch regulowanych liczbach i kolejnych małych poprawkach.
Zanim zaczniesz
Wystarczą arytmetyka i długopis. Nie zakładamy znajomości uczenia maszynowego, rachunku różniczkowego ani programowania: kod pojawi się w części 2. Zaplanuj około godziny nauki. To szacunek: zatrzymuj się, żeby liczyć, zamiast tylko czytać, nawet jeśli zajmie to dłużej.
Po tej części będziesz umieć obliczyć predykcję i jej stratę, wyprowadzić gradient, wykonać jedną aktualizację i rozpoznać zbyt duży współczynnik uczenia.
1. Teoria — co oznacza „uczenie”?
Od stałej reguły do reguły z regulacją
W zwykłym programowaniu zapisujesz regułę i podajesz jej dane wejściowe. W uczeniu maszynowym wybierasz rodzinę reguł, a przykłady wskazują najlepszą z nich. Model to obliczenie, które przekształca wejście w wyjście. Trening dostraja liczby modelu tak, aby popełniał mniej błędów na przykładach.
Każda próbka łączy wejście (godziny nauki) ze znaną wartością docelową (punkty z egzaminu). Uczenie z par wejście–cel to uczenie nadzorowane, a przewidywanie liczby to regresja. Nasze pięć par to (1, 20), (2, 40), (3, 60), (4, 80) i (5, 100). Są wymyślone i idealnie regularne, więc każde obliczenie da się sprawdzić ręcznie.
Parametry, waga, bias i predykcja
Wyobraź sobie prostą przechodzącą przez pięć punktów. Sterują nią dwa pokrętła: nachylenie i przesunięcie w pionie. Parametr to liczba wewnątrz modelu, którą dostraja trening. Waga określa, o ile zmienia się wyjście, gdy wejście rośnie o jeden. Bias, czyli wyraz wolny , dodaje takie samo przesunięcie do każdego wyjścia.
Predykcja to odpowiedź modelu. Wejście oznaczamy , cel , a predykcję („y z daszkiem”). Nie myl ich: prognoza nie jest wartością docelową.
Dla punktów/godzinę i punktów trzy godziny dają punktów. Zwiększenie o 1 dodaje do tej predykcji 3 punkty, a zwiększenie o 1 — jeden punkt. Wpływ wagi rośnie razem z wejściem.
Ten model to regresja liniowa. Nazywamy go „neuronem”, bo neuron w sieci neuronowej liczy to samo — ważone wejście plus bias — zanim przepuści wynik przez funkcję nieliniową. Tę funkcję dodamy w jednej z kolejnych lekcji.
Strata: jedna ocena pięciu pomyłek
Błąd to predykcja minus cel, więc ujemny błąd oznacza zbyt niską prognozę. Średnia błędów ze znakiem ukrywa pomyłki: −10 i +10 się znoszą. Dlatego podnosimy każdy błąd do kwadratu i uśredniamy kwadraty. Wynik to strata (loss): jedna liczba mówiąca, jak źle model pasuje do danych. Im mniejsza, tym lepiej.
Ta funkcja straty to błąd średniokwadratowy (MSE). Kwadraty nie pozwalają błędom się znosić i zwiększają wagę dużych pomyłek: błąd 20 wnosi cztery razy więcej niż błąd 10. Jednostką MSE są punkty do kwadratu, a nie punkty ani procenty.
to strata, liczba próbek (5), a numeruje próbki. przypomina, że dane są stałe, a wynik zmieniają tylko parametry.
Pochodna: jak bardzo strata reaguje na zmianę?
Obróć lekko jedno pokrętło. Czy strata rośnie, czy maleje, i jak szybko? Odpowiada na to pochodna: tempo zmian funkcji w danym punkcie. Dla funkcji iloraz
to średnia zmiana na małym kroku . Pochodna to wartość, do której ten iloraz dąży, gdy maleje do zera.
Przykład: . Przy przejście do zmienia z 9 na 9,0601. Iloraz wynosi 6,01, a mniejsze kroki przybliżają go do 6. Algebra pokazuje dlaczego:
Pochodna wynosi więc .
Nasza strata zależy od dwóch liczb: i . Pochodna cząstkowa zmienia jedną z nich, a drugą trzyma na stałym poziomie. Zapisujemy je jako i („pochodna cząstkowa L względem w”, „względem b”). Ujemna oznacza, że małe zwiększenie zmniejsza stratę. Nie oznacza, że sama strata jest ujemna.
Gradient i spadek gradientowy
Gradient zbiera wszystkie pochodne cząstkowe w jeden wektor:
Wyobraź sobie stratę jako wysokość terenu, którego współrzędnymi na mapie są i . Gradient wskazuje pod górę, a jego przeciwieństwo — najbardziej stromo w dół.
Spadek gradientowy (gradient descent) to algorytm, który z niego korzysta: oblicz gradient, zrób mały krok w przeciwną stronę, powtórz. Współczynnik uczenia (learning rate) („eta”) ustala długość kroku. To hiperparametr: ustawienie, które wybierasz, a nie coś, czego model się uczy.
Oblicz obie pochodne dla tych samych starych wartości, zanim zmienisz którykolwiek parametr. Gradient jest lokalną wskazówką, a nie obietnicą dotyczącą dalekiego skoku. Zbyt duży współczynnik przeskakuje dolinę i strata rośnie; zbyt mały spowalnia postęp; zero niczego nie zmienia.
Każda aktualizacja w tej lekcji korzysta ze wszystkich pięciu próbek. Jedno pełne przejście przez dane treningowe to epoka, więc tutaj jedna aktualizacja to jedna epoka.
Obliczanie gradientu: reguła łańcuchowa
Strata powstaje etapami: parametry dają predykcje, predykcje dają błędy, a błędy podnosimy do kwadratu i uśredniamy. Aby ustalić, jak parametr wpływa na stratę, mnożymy tempa zmian wzdłuż tego łańcucha. To reguła łańcuchowa.
Dla jednej próbki nazwijmy błąd . Kwadrat zmienia się względem w tempie . Błąd zmienia się względem w tempie , a względem w tempie 1. Mnożąc wzdłuż łańcucha:
Każda próbka wnosi więc do pochodnej względem wagi i do pochodnej względem biasu. Uśrednienie pięciu próbek daje:
W części 2 to obliczenie wykona za Ciebie PyTorch. Jeśli najpierw zrobisz je ręcznie, będziesz dokładnie wiedzieć, co liczy.
2. Przykład obliczeniowy — pierwsza poprawka
Zacznij od i , więc wszystkie predykcje są zerowe. Przed obliczeniami przewidź znaki obu pochodnych cząstkowych: skoro wszystkie cele są dodatnie, czy zwiększenie każdego pokrętła pomoże?
| (godziny) | (punkty) | ||||
|---|---|---|---|---|---|
| 1 | 20 | 0 | −20 | 400 | −20 |
| 2 | 40 | 0 | −40 | 1600 | −80 |
| 3 | 60 | 0 | −60 | 3600 | −180 |
| 4 | 80 | 0 | −80 | 6400 | −320 |
| 5 | 100 | 0 | −100 | 10000 | −500 |
Suma kwadratów błędów to 22000, błędy sumują się do −300, a iloczyny błędu i wejścia do −1100. Zatem:
Dla :
Odjęcie liczby ujemnej zwiększa parametr. Poprawki są różne, bo wejścia mnożą wpływ wagi.
Nowe predykcje to [0.56, 1.00, 1.44, 1.88, 2.32], a nowe błędy [−19.44, −39.00, −58.56, −78.12, −97.68]. Suma ich kwadratów wynosi 20972,304, co daje
Strata spadła, ale niewiele: jedna poprawka to jeszcze nie trening. W listach liczb i w kodzie używamy kropki dziesiętnej.
Sprawdź pochodną bez wzoru
Utrzymaj i zwiększ z 0 do 0,001. Strata wyniesie 4399,560011, więc iloraz
jest bliski −440. Nie jest dokładny, bo krok nie jest nieskończenie mały.
Dlaczego bias rośnie, skoro idealne dopasowanie ma ?
Na początku oba parametry pomagają podnieść predykcje, więc oba rosną. Później, gdy nachylenie jest już prawie dobre, dodatni bias zawyża wyniki dla małych wejść i musi znów maleć. Idealne dopasowanie to , , ale skończona liczba małych kroków nie musi do niego dotrzeć. Powierzchnia straty to długa, pochylona dolina: stroma w poprzek, prawie płaska wzdłuż.
3. Interaktywna wizualizacja — porównaj poprawki
Poniższa symulacja liczy te same równania w JavaScript. Zanim przesuniesz suwaki, przewidź, co się stanie przy współczynnikach 0, 0,001, 0,05 i 0,1. Każda zmiana zaczyna od ; suwak kroku pokazuje model po wskazanej liczbie aktualizacji.
Oś pozioma: zakończone aktualizacje (0–100). Oś pionowa: MSE w punktach², skala liniowa. Górna granica osi pionowej dostosowuje się do przebiegu; porównuj liczby oraz kształt.
Po aktualizacji 1 przy η = 0,001: w = 0,44, b = 0,12, MSE = 4194,4608.
Dopasuj prostą do pięciu punktów
Najpierw wybierz tryb ręczny: ustaw w = 10 i b = 5. Przewidź wpływ zwiększenia tylko biasu o 5, a potem przywróć b = 5 i zwiększ tylko wagę o 5. Co zmienia nachylenie, a co przesunięcie? Następnie wybierz trening i przejdź od aktualizacji 0 do 1, a potem do 100. Połącz ruch prostej ze spadkiem straty.
Koła oznaczają pięć celów treningowych; ciągła linia to ŷ = wx + b. Stałe osie: 0–6 godzin i −60–240 punktów. Fragmenty prostej poza tym zakresem nie są rysowane; wartości pozostają dostępne w opisie i tabeli. Zmiana skali nie ukrywa więc rozbieżności.
Model po aktualizacji 1: w = 0,44, b = 0,12; MSE = 4194,4608 punktów². Predykcje dla godzin 1–5: 0,56; 1; 1,44; 1,88; 2,32.
| Godziny | Cel (punkty) | Predykcja (punkty) |
|---|---|---|
| 1 | 20 | 0.56 |
| 2 | 40 | 1.00 |
| 3 | 60 | 1.44 |
| 4 | 80 | 1.88 |
| 5 | 100 | 2.32 |
Dla współczynnika 0 strata pozostaje równa 4400. Dla 0,001 maleje powoli; dla 0,1 eksploduje w ciągu 100 kroków. Patrz na liczby, nie tylko na krzywą: gdy przebieg się rozbiega, skala pionowa rośnie tak bardzo, że początkowe straty wyglądają na zerowe. Te progi dotyczą tylko tego zbioru danych; nie istnieje uniwersalnie dobry współczynnik uczenia.
4. Ćwiczenia
Zapisz przewidywanie przed obliczeniami, a arytmetykę sprawdź w symulacji.
- Zacznij od , . Oblicz pięć predykcji, MSE, obie pochodne cząstkowe i jedną aktualizację dla . Sprawdź MSE w trybie ręcznym wykresu.
- Pomnóż wszystkie cele przez dwa. Przed obliczeniami przewidź, jak zmienią się początkowa strata i gradienty przy . Wyjaśnij, dlaczego strata i jej pochodne skalują się inaczej.
- W symulacji znajdź w przybliżeniu największy współczynnik, przy którym strata po 100 aktualizacjach wciąż maleje. Co robi prosta na wykresie tuż powyżej tej wartości?
- Zmień cele na [25, 45, 65, 85, 105]. Jakie i dopasowują je dokładnie? Dlaczego model bez biasu nigdy by ich nie dopasował?
Wskazówki
Użyj i osobno zsumuj , i . Przy podwojenie celów podwaja każdy błąd; zastanów się, co robi kwadrat. W ćwiczeniu 3 sprawdzaj współczynniki między 0,05 a 0,1. Nowe cele z ćwiczenia 4 spełniają wzór .
5. Sprawdzenie rozumienia — dlaczego zachodzi uczenie?
Odpowiedz bez przewijania w górę. Poprzyj każdą odpowiedź obliczeniem lub obserwacją, nie samą definicją.
- Ktoś z zespołu twierdzi, że pochodna, gradient i spadek gradientowy to to samo. Pokaż różnicę na przykładzie tego modelu z dwoma parametrami.
- Dlaczego na początku pochodna względem wagi (−440) jest bardziej ujemna niż względem biasu (−120)? Dlaczego obie trzeba obliczyć, zanim zmieni się którykolwiek parametr?
- W symulacji bias najpierw rośnie, choć idealne dopasowanie ma . Dlaczego? Czy 100 aktualizacji gwarantuje dokładne dopasowanie?
Omówienie rozumowania — otwórz po zapisaniu odpowiedzi
Pochodna cząstkowa mierzy wrażliwość na jeden parametr; gradient zbiera je razem; spadek gradientowy używa gradientu do aktualizacji parametrów. Pochodna względem wagi sumuje , więc większe wejścia ją wzmacniają. Aktualizacja w, a potem obliczenie pochodnej względem b dla nowego w, byłaby innym algorytmem. Bias pomaga zmniejszyć początkowe niedoszacowanie, choć jego końcowa wartość to zero; skończona liczba kroków daje postęp, ale nie musi prowadzić do dokładnego rozwiązania.
Lista kontrolna
Zachowaj obliczenia ręczne i krótką notatkę łączącą błędy → gradient → aktualizację → mniejszą stratę. Pola wyboru to przypomnienia dla Ciebie, nie test.
Zapisywane tylko w tej przeglądarce.
Dalej: część 2
Część 2 zamienia te obliczenia w program, a gradient liczy za Ciebie PyTorch.