Gradient descent (spadek gradientowy) to fundamentalny algorytm optymalizacji w uczeniu maszynowym i sieciach neuronowych. Jego zadanie jest proste: znaleźć wartości parametrów (wag), które minimalizują funkcję straty. Innymi słowy — sprawić, żeby predykcje modelu były jak najbliższe prawdziwym wartościom.
Intuicja: schodzenie ze wzgórza we mgle
Wyobraź sobie, że stoisz na szczycie wzgórza we gęstej mgle. Chcesz zejść na dół, ale nie widzisz doliny. Co robisz? Wyczuwasz, w którym kierunku teren opada najstrumniej — i stawiasz krok w tym kierunku. Powtarzasz to wielokrotnie, aż dojdziesz do najniższego punktu.
Gradient descent działa identycznie:
- Wzgórze = funkcja straty (loss function) w przestrzeni parametrów
- Twoja pozycja = aktualne wartości wag
- Nachylenie terenu = gradient (wektor pochodnych cząstkowych)
- Krok w dół = aktualizacja wag w kierunku ujemnego gradientu
Matematyka gradient descent
Wzór aktualizacji
W każdej iteracji wagi są aktualizowane:
θ = θ - η · ∇L(θ)
Gdzie:
- θ — wektor parametrów (wag) modelu
- η (eta) — learning rate (współczynnik uczenia) — rozmiar kroku
- ∇L(θ) — gradient funkcji straty L względem parametrów θ
Gradient ∇L(θ) to wektor pochodnych cząstkowych: [∂L/∂θ₁, ∂L/∂θ₂, ..., ∂L/∂θₙ]. Wskazuje kierunek najszybszego wzrostu funkcji straty — dlatego idziemy w przeciwnym kierunku (stąd minus).
Funkcja straty (Loss Function)
Gradient descent minimalizuje funkcję straty, która mierzy „jak źle" model przewiduje:
- MSE (Mean Squared Error) — regresja: L = (1/n) · Σ(yᵢ - ŷᵢ)²
- Cross-Entropy — klasyfikacja: L = -(1/n) · Σ[yᵢ·log(ŷᵢ) + (1-yᵢ)·log(1-ŷᵢ)]
Gradient tej funkcji oblicza backpropagation.
Warianty gradient descent
1. Batch Gradient Descent (pełny)
Oblicza gradient na całym zbiorze treningowym przed aktualizacją wag.
Zalety:
- Stabilny, deterministyczny gradient
- Gwarancja zbieżności do minimum (dla funkcji wypukłych)
Wady:
- Ekstremalnie wolny na dużych zbiorach danych — jeden krok wymaga przejścia przez miliony przykładów
- Wymaga załadowania całego zbioru do pamięci
- Łatwo wpada w lokalne minima
2. Stochastic Gradient Descent (SGD)
Oblicza gradient na jednym losowym przykładzie i natychmiast aktualizuje wagi.
Zalety:
- Bardzo szybki — aktualizacja po każdym przykładzie
- Szum pomaga uciekać z lokalnych minimów
- Nie wymaga dużej pamięci
Wady:
- Gradient jest zaszumiony — wagi „skaczą" chaotycznie
- Wolniejsza zbieżność (ale szybsza w praktyce niż batch)
- Nie korzysta z wektoryzacji GPU
3. Mini-batch Gradient Descent
Kompromis: oblicza gradient na małej partii (mini-batch) przykładów (typowo 32–256).
Zalety:
- Balans między stabilnością (batch) a szybkością (SGD)
- Efektywne wykorzystanie GPU (operacje macierzowe na mini-batchach)
- Umiarkowany szum — pomaga w eksploracji, nie destabilizuje
Wady:
- Hiperparametr: rozmiar mini-batcha wymaga dostrojenia
Mini-batch gradient descent to de facto standard w treningu sieci neuronowych. Gdy ktoś mówi „SGD" w kontekście deep learning, zazwyczaj ma na myśli mini-batch SGD.
Learning rate — najważniejszy hiperparametr
Learning rate (η) kontroluje rozmiar kroków:
- Za duży η → wagi „przeskakują" minimum, trening oscyluje lub dywerguje
- Za mały η → trening trwa wieczność, łatwo utknąć w lokalnym minimum
- Optymalny η → szybka, stabilna zbieżność
Harmonogramy learning rate (schedules)
Zamiast stałego η, popularne jest zmniejszanie go w trakcie treningu:
- Step decay — zmniejsz η o połowę co N epok
- Cosine annealing — η maleje gładko według krzywej kosinusowej
- Warmup — zacznij od małego η, zwiększ do pełnej wartości, potem zmniejszaj. Standardowa praktyka w treningu transformerów
- Cyclical learning rate — η oscyluje między wartością minimalną a maksymalną
Zaawansowane optymalizatory
Prosty SGD ma ograniczenia: ten sam learning rate dla wszystkich parametrów, brak „pamięci" z poprzednich kroków. Zaawansowane optymalizatory rozwiązują te problemy:
SGD z momentum
Dodaje „bezwładność" — aktualizacja uwzględnia kierunek poprzednich kroków:
v = β · v + η · ∇L(θ) θ = θ - v
Gdzie β (typowo 0,9) kontroluje siłę momentum. Efekt: szybsze schodzenie w jednym kierunku, wytłumienie oscylacji.
RMSProp
Adaptuje learning rate osobno dla każdego parametru, dzieląc przez średnią kwadratów ostatnich gradientów:
s = β · s + (1-β) · (∇L)² θ = θ - η · ∇L / (√s + ε)
Parametry z dużymi gradientami mają mniejszy efektywny learning rate (i odwrotnie). Stabilizuje trening.
Adam (Adaptive Moment Estimation)
Łączy momentum i RMSProp — najpopularniejszy optymalizator w deep learning:
m = β₁ · m + (1-β₁) · ∇L (pierwszy moment — średnia gradientów) v = β₂ · v + (1-β₂) · (∇L)² (drugi moment — wariancja gradientów) θ = θ - η · m̂ / (√v̂ + ε)
Gdzie m̂ i v̂ to wartości skorygowane o bias (ważne w pierwszych iteracjach, gdy m i v są bliskie 0).
Domyślne hiperparametry: η = 0,001, β₁ = 0,9, β₂ = 0,999, ε = 10⁻⁸
AdamW
Wariant Adama z poprawnym weight decay (regularyzacja L2). Decoupled weight decay zamiast L2 regularyzacji w gradiencie. Standard w treningu transformerów — używany do treningu GPT, BERT, Claude.
Problemy optymalizacji w głębokich sieciach
Lokalne minima i siodła
Funkcja straty głębokiej sieci ma miliardy wymiarów. W tak wysokowymiarowej przestrzeni prawdziwe lokalne minima są rzadkie — większość „pułapek" to punkty siodłowe (saddle points), w których gradient jest zerowy, ale punkt nie jest minimum we wszystkich kierunkach. SGD z szumem i momentum zazwyczaj potrafi uciec z punktów siodłowych.
Plateau
Płaskie regiony funkcji straty, gdzie gradient jest bliski zeru. Trening „staje w miejscu". Rozwiązania: momentum (przeskakuje plateau dzięki bezwładności), zwiększenie learning rate, zmiana optymalizatora.
Overfitting
Gradient descent minimalizuje stratę treningową — ale nie gwarantuje dobrej generalizacji. Techniki regularyzacji (dropout, weight decay, early stopping) zapobiegają nadmiernemu dopasowaniu.
Gradient descent w praktyce — podsumowanie
| Aspekt | Rekomendacja |
|---|---|
| Wariant | Mini-batch SGD lub Adam |
| Rozmiar mini-batcha | 32–256 (zależy od GPU i danych) |
| Learning rate | Adam: 3e-4 (domyślnie), SGD: 0,1 z decay |
| Schedule | Cosine annealing z warmupem (transformery) |
| Optymalizator do transformerów | AdamW |
| Optymalizator do CNN | SGD z momentum (0,9) lub Adam |
Gradient descent to silnik uczenia maszynowego. Backpropagation oblicza kierunek aktualizacji (gradienty), gradient descent decyduje o wielkości kroku i wykonuje aktualizację. Razem tworzą mechanizm, dzięki któremu miliardy parametrów sieci neuronowej „dojrzewają" do rozwiązywania złożonych problemów.