Backpropagation (propagacja wsteczna) to algorytm, który sprawia, że sieci neuronowe potrafią się uczyć. Bez niego głębokie uczenie nie istniałoby — nie mielibyśmy rozpoznawania obrazów, tłumaczy maszynowych ani dużych modeli językowych. To jeden z najważniejszych algorytmów w historii sztucznej inteligencji.

Intuicja: jak sieć neuronowa poprawia błędy?

Wyobraź sobie orkiestrę symfoniczną, która gra fałszywie. Dyrygent (funkcja straty) mówi: „za głośno". Ale który instrument? Który muzyk powinien grać ciszej i o ile?

Backpropagation odpowiada dokładnie na to pytanie: który parametr (waga) w sieci jest odpowiedzialny za błąd i o ile należy go zmienić.

Proces uczenia sieci neuronowej składa się z dwóch faz:

  1. Forward pass (przejście do przodu) — dane wchodzą przez warstwę wejściową, są przetwarzane warstwa po warstwie, aż do wyjścia (predykcji)
  2. Backward pass (propagacja wsteczna) — błąd jest propagowany „wstecz" od warstwy wyjściowej do wejściowej, obliczając gradients dla każdej wagi

Krok po kroku: jak działa backpropagation

Rozważmy prostą sieć z jedną warstwą ukrytą. Cel: nauczyć sieć klasyfikować dane binarne.

Krok 1: Forward pass

Dane wejściowe x przechodzą przez sieć:

  1. Warstwa ukryta: z₁ = W₁ · x + b₁, a₁ = f(z₁) (gdzie f to funkcja aktywacji)
  2. Warstwa wyjściowa: z₂ = W₂ · a₁ + b₂, ŷ = f(z₂)

Wynik ŷ to predykcja sieci.

Krok 2: Oblicz stratę

Funkcja straty L mierzy, jak daleko predykcja ŷ jest od prawdziwej etykiety y:

  • MSE (Mean Squared Error): L = (y - ŷ)²
  • Cross-Entropy (klasyfikacja): L = -[y·log(ŷ) + (1-y)·log(1-ŷ)]

Chcemy zminimalizować L, modyfikując wagi W₁, W₂, b₁, b₂.

Krok 3: Backward pass — obliczanie gradientów

Tu zaczyna się właściwy backpropagation. Używamy reguły łańcuchowej (chain rule) z rachunku różniczkowego.

Warstwa wyjściowa:

∂L/∂W₂ = ∂L/∂ŷ · ∂ŷ/∂z₂ · ∂z₂/∂W₂

Każdy czynnik jest prosty do obliczenia:

  • ∂L/∂ŷ — pochodna funkcji straty (np. dla MSE: -2(y - ŷ))
  • ∂ŷ/∂z₂ — pochodna funkcji aktywacji (np. sigmoid: σ(z₂)·(1 - σ(z₂)))
  • ∂z₂/∂W₂ — po prostu a₁ (aktywacja poprzedniej warstwy)

Warstwa ukryta:

∂L/∂W₁ = ∂L/∂ŷ · ∂ŷ/∂z₂ · ∂z₂/∂a₁ · ∂a₁/∂z₁ · ∂z₁/∂W₁

Zauważ wzorzec: gradient „przepływa" wstecz przez sieć, mnożony na każdym etapie przez lokalną pochodną. Im głębsza warstwa, tym dłuższy łańcuch mnożeń.

Ładowanie wizualizacji...

Krok 4: Aktualizacja wag

Obliczone gradienty przekazujemy do algorytmu gradient descent, który aktualizuje wagi:

W = W - η · ∂L/∂W

Gdzie η (eta) to współczynnik uczenia (learning rate).

Krok 5: Powtórz

Powtarzamy cykl forward–backward–update dla kolejnych partii danych (mini-batchy), iterując przez zbiór treningowy wielokrotnie (epoki).

Reguła łańcuchowa — serce backpropagation

Reguła łańcuchowa (chain rule) mówi, jak obliczyć pochodną funkcji złożonej:

Jeśli y = f(g(x)), to dy/dx = dy/dg · dg/dx

W kontekście sieci neuronowej: sieć to głęboko zagnieżdżona funkcja złożona. Wyjście = f₃(f₂(f₁(x, W₁), W₂), W₃). Reguła łańcuchowa pozwala efektywnie „rozplątać" te zagnieżdżenia i obliczyć gradient względem każdej wagi.

Dlaczego „wstecz"?

Forward pass oblicza wynik od wejścia do wyjścia. Backward pass oblicza gradienty od wyjścia do wejścia. Dlaczego właśnie wstecz? Bo to efektywniejsze obliczeniowo.

Alternatywa (forward-mode differentiation) wymagałaby osobnego przejścia dla każdego parametru. Sieć z milionami parametrów potrzebowałaby milionów przejść. Backpropagation oblicza gradienty wszystkich parametrów w jednym przejściu wstecz — dlatego jest praktyczny.

Problemy backpropagation w głębokich sieciach

Zanikający gradient (Vanishing Gradient)

W głębokich sieciach (wiele warstw) gradienty mogą maleć wykładniczo. Jeśli funkcje aktywacji mają pochodne < 1 (sigmoid: maksymalnie 0,25), to iloczyn wielu takich pochodnych szybko zbliża się do zera. Wczesne warstwy otrzymują znikome gradienty i nie uczą się.

Rozwiązania:

  • Funkcja aktywacji ReLU (pochodna = 1 dla z > 0)
  • Residual connections (sieci rezydualne, ResNet) — dodają „skróty" omijające warstwy
  • Batch normalization — normalizuje aktywacje między warstwami
  • Odpowiednia inicjalizacja wag (Xavier, He)

Eksplodujący gradient (Exploding Gradient)

Przeciwieństwo: gradienty rosną wykładniczo, powodując niestabilność treningu — wagi „skaczą" do ogromnych wartości.

Rozwiązania:

  • Gradient clipping — obcięcie gradientu powyżej ustalonego progu
  • Mniejszy learning rate
  • Batch normalization

Problem umierających neuronów (Dying ReLU)

Neuron z ReLU, który zawsze otrzymuje ujemne wejścia, ma gradient zero — jest „martwy" i nigdy się nie nauczy. Rozwiązanie: Leaky ReLU, PReLU.

Historia backpropagation

Algorytm propagacji wstecznej ma zaskakująco długą historię:

  • 1960 — Henry Kelley opisał ideę propagacji gradientów w teorii sterowania
  • 1970 — Seppo Linnainmaa sformalizował automatyczne różniczkowanie (autodiff)
  • 1974 — Paul Werbos w swojej pracy doktorskiej zaproponował backpropagation do uczenia sieci neuronowych
  • 1986 — David Rumelhart, Geoffrey Hinton i Ronald Williams spopularyzowali backpropagation w artykule Learning representations by back-propagating errors (Nature). To ten artykuł zainspirował odrodzenie sieci neuronowych po pierwszej zimie AI

Backpropagation w nowoczesnym AI

Automatyczne różniczkowanie (Autodiff)

W praktyce nikt nie implementuje backpropagation ręcznie. Frameworki głębokiego uczenia (PyTorch, TensorFlow, JAX) automatycznie obliczają gradienty dzięki automatycznemu różniczkowaniu — budują graf obliczeniowy podczas forward pass i automatycznie propagują gradienty wstecz.

Backpropagation w transformerach

Transformery to najgłębsze i największe sieci trenowane backpropagation. GPT-4 ma setki warstw i biliony parametrów — a gradients wciąż muszą „dotrzeć" od warstwy wyjściowej do wejściowej. Residual connections (dodawanie wejścia warstwy do jej wyjścia) i layer normalization są kluczowe dla stabilności.

Backpropagation Through Time (BPTT)

Wariant backpropagation dla sieci rekurencyjnych (RNN): sieć jest „rozwinięta w czasie" — każdy krok czasowy traktowany jest jak kolejna warstwa, a gradienty propagowane są wstecz przez wszystkie kroki.

Alternatywy dla backpropagation

Backpropagation ma ponad 40 lat i dominuje niepodzielnie. Ale badacze eksplorują alternatywy:

  • Forward-forward algorithm (Hinton, 2022) — uczenie bez propagacji wstecznej, każda warstwa uczy się lokalnie
  • Perturbation-based learning — szacowanie gradientów przez drobne zaburzenia wag
  • Evolutionary strategiesalgorytmy genetyczne jako alternatywa dla gradient-based optimization
  • Equilibrium propagation — biofizycznie inspirowana metoda uczenia

Żadna z tych metod nie dorównuje jeszcze efektywności backpropagation w dużej skali.

Podsumowanie

Backpropagation to algorytm, który sprawił, że sieci neuronowe stały się praktyczne. Jego siła tkwi w elegancji: zastosowanie reguły łańcuchowej do efektywnego obliczania gradientów w głęboko zagnieżdżonych funkcjach. Bez backpropagation nie byłoby deep learningu, transformerów, ChatGPT ani Claude. Każdy system AI, który dziś rozpoznaje twarze, tłumaczy tekst czy generuje kod, zawdzięcza swoją zdolność uczenia się temu algorytmowi.