Back to archive
#ai#llm#glossary#aigen

Stochastic Gradient Descent

Chcesz nauczyć prosty model przewidywania czasu dostawy. Na razie zawsze podaje 6 minut, a dwa zapisane przejazdy trwały 8 i 12 minut. Trzeba zmienić jego ustawienie. Można przed każdą poprawką sprawdzać wszystkie przejazdy. Przy dwóch to łatwe; przy milionach kolejne pełne przeliczenie opóźnia każdą zmianę.

Stochastic Gradient Descent (SGD) wyznacza poprawkę na podstawie losowo wybranego przykładu, zamiast całego zbioru. W wariancie mini-batch SGD korzysta z małej grupy przykładów i uśrednia ich wskazówki (D2L, §12.5.2). Nie wybiera przypadkowego kierunku: losowe są dane użyte do jego obliczenia. Różnicę między pełnym obliczeniem a pojedynczą próbką opisuje Léon Bottou, Large-Scale Machine Learning with Stochastic Gradient Descent, §2.1–2.2.

Mała łyżka pobiera porcję z dużej miski różnobarwnych ziaren, pokazując wybór części danych do jednej poprawki modelu.

Jedna poprawka bez przeglądania wszystkiego

W naszym uproszczeniu model ma jedną wagę — regulowaną liczbę, tutaj równą prognozie czasu. Strata to liczbowa ocena błędu. Przyjmijmy połowę kwadratu różnicy między prognozą a rzeczywistym czasem. Kwadrat sprawia, że duże pomyłki kosztują więcej.

Gradient mówi, jak mała zmiana wagi wpływa na stratę. Dla tej straty to prognoza minus rzeczywisty czas. Znak podpowiada kierunek: ujemny gradient oznacza, że zwiększenie prognozy zmniejsza stratę tej próbki. Learning rate określa, jak mocno zastosujemy wskazówkę; wybieramy 0,2.

Jeśli wylosujemy przejazd trwający 8 minut, gradient wynosi 6 − 8 = −2. Odejmujemy 0,2 × (−2) od prognozy: dostajemy 6,4 minuty. Gdyby trafiło na 12 minut, wynik wyniósłby 7,2. Pełna średnia wskazówek z obu przejazdów dałaby 6,8. To własne dane i rachunki, nie pomiar modelu językowego.

SGD pozwala zacząć aktualizację po przetworzeniu części danych. Przy równym losowaniu z tych dwóch przejazdów średnia możliwych gradientów odpowiada pełnemu gradientowi, choć pojedyncze kroki się różnią. Nie gwarantuje to krótszego całego treningu ani najlepszego rozwiązania.

Poprawa próbki może pogorszyć całość

Ustawmy prognozę na 10 minut: to najlepszy wspólny wynik dla naszych dwóch czasów i wybranej straty. Krok z próbki 8 minut zmieni ją na 9,6. Strata tej próbki spadnie z 2 do 1,28, lecz średnia strata obu przejazdów wzrośnie z 2 do 2,08. Pojedyncza próbka nie opisuje całego zbioru. Dobór wielkości kroków ma znaczenie; stały krok może podtrzymywać wahania wokół rozwiązania (Bottou, §2.2).

Wybierz poniżej porcję danych, potem punkt startu 10. Porównaj błąd porcji z błędem całego zbioru. Przyciski odsłaniają możliwe wyniki losowania; same nie losują. Każde ustawienie liczy jeden krok od wybranego startu, bez historii wcześniejszych kliknięć.

Jak to łączy się z uczeniem LLM?

Model językowy ma wiele wag i inną funkcję straty, np. Cross-entropy, która ocenia szanse przypisane poprawnym kawałkom tekstu. Zasada aktualizacji z porcji danych pozostaje użyteczna, lecz SGD nie jest jedynym algorytmem. Oryginalny Transformer używał Adama (Attention Is All You Need, §5.3).

Gradient Accumulation łączy wskazówki z kilku porcji przed jednym krokiem. Zwykły SGD nie zachowuje historii gradientów między krokami. Wariant z momentum, który podtrzymuje wpływ wcześniejszych wskazówek, potrzebuje już takiej pamięci — to część Optimizer State, czyli dodatkowych danych przechowywanych przez algorytm aktualizacji wag (reguła i uwagi PyTorch 2.11 SGD).

Wykorzystuję treści generowane przez AI jako część mojego codziennego procesu nauki.