Propagacja wsteczna

Algorytm trenowania sieci neuronowych, który oblicza gradient funkcji straty względem wag i pozwala je korygować. To podstawa nauki w głębokich sieciach.

Propagacja wsteczna (ang. backpropagation) to algorytm, który uczy sieć neuronową, jak poprawiać swoje wagi, żeby popełniać mniej błędów. W skrócie: liczy gradient funkcji straty względem każdej wagi w sieci, czyli mówi ci, „w którą stronę i jak mocno” przesunąć każdy parametr, żeby predykcja była bliższa prawdy. To matematyczny silnik, dzięki któremu uczenie głębokich sieci w ogóle jest wykonalne.

Jak to działa

Trening idzie w dwóch fazach. Najpierw forward pass: dane wejściowe przechodzą przez kolejne warstwy aż do wyjścia, a sieć oblicza, jak bardzo się pomyliła (to właśnie strata, np. cross-entropy albo MSE). Potem backward pass: błąd „cofa się” przez sieć, warstwa po warstwie, od wyjścia do wejścia. Tu wkracza reguła łańcuchowa z analizy matematycznej — backpropagation to po prostu sprytne, wielokrotne jej zastosowanie, które pozwala policzyć pochodne dla milionów parametrów bez liczenia każdej z osobna od zera.

Sam backprop tylko liczy gradienty. Faktyczną korektę wag robi optimizer (np. SGD albo Adam), który przesuwa wagi w kierunku przeciwnym do gradientu o krok zależny od learning rate. Powtarzasz to przez tysiące iteracji i sieć stopniowo się uczy.

Przykład z praktyki

W PyTorch nie implementujesz tego ręcznie — robi to silnik autograd. Wygląda to mniej więcej tak:

  • loss = criterion(output, target) — liczysz stratę,
  • loss.backward() — to jest właśnie propagacja wsteczna; PyTorch wypełnia .grad dla każdego parametru,
  • optimizer.step() — optimizer aktualizuje wagi,
  • optimizer.zero_grad() — zerujesz gradienty przed kolejną iteracją.

W TensorFlow analogicznie używasz tf.GradientTape. W obu przypadkach framework buduje graf obliczeń i sam wie, jak go przejść wstecz.

Częste błędy i pułapki

  • Brak zero_grad() — w PyTorch gradienty domyślnie się akumulują. Zapomnisz wyzerować i twój model uczy się na zsumowanych gradientach z kilku batchy. Klasyk u początkujących.
  • Vanishing/exploding gradients — w bardzo głębokich sieciach gradient po drodze potrafi zaniknąć do zera albo wystrzelić w kosmos. Stąd ReLU zamiast sigmoidy, normalizacja i gradient clipping.
  • Mit „backprop to to samo co sieć neuronowa — nie. To algorytm liczenia gradientów, a nie sama architektura ani sposób działania mózgu (z biologią ma wspólne tyle, co nic).

Pojęcia powiązane: gradient descent, funkcja straty, reguła łańcuchowa, learning rate, optimizer (SGD, Adam), autograd, sieci neuronowe, deep learning, vanishing gradient.