Spadek wzdłuż gradientu

Algorytm optymalizacji, który iteracyjnie zmienia parametry modelu w kierunku najszybszego zmniejszania funkcji straty. Rozmiar kroku zależy od współczynnika uczenia.

Spadek wzdłuż gradientu (ang. gradient descent) to algorytm optymalizacji, który iteracyjnie dobiera parametry modelu tak, żeby zminimalizować funkcję straty (loss). W każdym kroku liczy gradient straty względem parametrów — czyli wektor pokazujący kierunek najszybszego wzrostu błędu — i robi krok w kierunku przeciwnym, bo chcesz błąd zmniejszać. Stąd nazwa: schodzisz w dół po powierzchni straty, jakbyś z zawiązanymi oczami szukał najniższego punktu doliny, macając, w którą stronę teren opada.

Jak to działa

Wzór jest banalnie prosty: theta = theta - lr * grad. theta to parametry (wagi), grad to gradient straty, a lr (learning rate) to rozmiar kroku. Powtarzasz to dopóki strata nie przestanie spadać. Cały trening sieci neuronowej to w praktyce miliony takich kroczków, a gradient liczy backpropagation.

W czystej postaci (batch gradient descent) liczysz gradient na całym zbiorze danych naraz — dokładnie, ale wolno i pamięciożernie. Dlatego w deep learningu króluje SGD (stochastic gradient descent) i mini-batch: gradient szacujesz na małej paczce próbek (np. 32 czy 64), co jest szybsze i — paradoksalnie — szum pomaga uciec z płytkich minimów lokalnych.

Przykład z praktyki

W PyTorchu nie piszesz tego ręcznie. Definiujesz optymalizator i w pętli treningowej wołasz trzy linijki:

  • optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
  • loss.backward() — liczy gradienty
  • optimizer.step() — robi krok wzdłuż gradientu, a potem optimizer.zero_grad(), żeby gradienty się nie kumulowały

W realnych projektach częściej zobaczysz Adam niż goły SGD — to wariant, który sam dostraja krok dla każdego parametru i zwykle szybciej zbiega.

Częste błędy

Najczęstsza wpadka to learning rate. Za duży — strata skacze albo leci do NaN (przeskakujesz dolinę, zamiast w nią schodzić). Za mały — trening pełznie godzinami. Druga klasyka: zapomniany zero_grad(), przez co gradienty się sumują i model uczy się dziwactw. Pamiętaj też, że gradient descent znajduje minimum lokalne, niekoniecznie globalne — w praktyce dla dużych sieci to zwykle wystarcza.

Pojęcia powiązane: backpropagation, learning rate, funkcja straty (loss function), SGD, mini-batch, Adam, learning rate scheduler, minimum lokalne, optymalizacja.