🔁 Propagacja wsteczna
Zobacz, jak reguła łańcuchowa płynie wstecz przez małą sieć MLP. Impulsy δ biegną z prawa na lewo, gradienty podświetlają krawędzie, wagi się aktualizują — a granica decyzyjna na płaszczyźnie wejść dopasowuje się do danych.
O propagacji wstecznej w sieciach neuronowych
Propagacja wsteczna (Rumelhart, Hinton i Williams, 1986) to algorytm, który umożliwił praktyczne trenowanie głębokich sieci neuronowych. Wykorzystuje regułę łańcuchową rachunku różniczkowego, aby efektywnie obliczyć gradient funkcji straty względem każdej wagi w sieci w jednym przejściu wstecznym — w porównaniu z naiwnym podejściem polegającym na zaburzaniu każdej wagi osobno, co wymagałoby O(W) przejść w przód dla W wag. Kluczowa obserwacja polega na tym, że gradienty można propagować wstecz warstwa po warstwie, przy czym każda warstwa wykorzystuje ponownie sygnały δ (wyrazy błędu) obliczone przez warstwę powyżej. Propagacja wsteczna jest podstawą niemal każdego współczesnego systemu głębokiego uczenia, od klasyfikatorów obrazów po duże modele językowe.
Ta symulacja wizualizuje wielowarstwowy perceptron (MLP) z warstwą wejściową, dwiema warstwami ukrytymi o regulowanej szerokości H oraz dwuklasowym wyjściem. Możesz przechodzić krok po kroku przez przejście w przód (obserwując przepływ aktywacji od lewej do prawej) i przejście wsteczne (obserwując przepływ sygnałów δ i gradientów wag od prawej do lewej), wybierać między funkcjami aktywacji ReLU, tanh i sigmoidalną, przełączać się między trybem klasyfikacji (softmax) a regresji (liniowy) na wyjściu oraz malować własny zbiór danych na płótnie, korzystając z kilku gotowych zestawów, w tym XOR, spiral i dwóch półksiężyców.
Najczęściej zadawane pytania
Jaki problem rozwiązuje propagacja wsteczna?
Trenowanie sieci neuronowej polega na znalezieniu wag W minimalizujących funkcję straty L(W) — na przykład entropii krzyżowej dla klasyfikacji lub błędu średniokwadratowego dla regresji. Metoda gradientu prostego wymaga obliczenia ∂L/∂w dla każdej wagi w. Sieć z W wagami naiwnie wymagałaby W + 1 przejść w przód, aby oszacować wszystkie gradienty metodą różnic skończonych. Propagacja wsteczna wykorzystuje regułę łańcuchową, by obliczyć dokładny gradient L względem wszystkich W wag w zaledwie jednym przejściu w przód i jednym wstecznym — redukując złożoność obliczeniową z O(W²) do O(W).
Jak reguła łańcuchowa sprawia, że propagacja wsteczna działa?
Reguła łańcuchowa mówi, że jeśli z = f(y) oraz y = g(x), to dz/dx = (dz/dy)(dy/dx). W sieci z warstwami l = 1, …, L strata L zależy od wyjścia ŷ, które zależy od aktywacji w warstwie L–1, ta z kolei od warstwy L–2 i tak dalej. Przejście wsteczne oblicza rekurencyjnie δ^(l) = (∂L/∂a^(l)), „sygnał błędu” w warstwie l: δ^(l) = (W^(l+1))ᵀ δ^(l+1) ⊙ σ'(z^(l)), gdzie σ' jest pochodną funkcji aktywacji. Gradient wagi wynosi wtedy ∂L/∂W^(l) = δ^(l) (a^(l-1))ᵀ.
Czym jest problem zanikającego gradientu?
Przy aktywacjach sigmoidalnej lub tanh pochodna σ'(z) wynosi co najwyżej 0,25 (sigmoid) lub 1 (tanh przy z = 0) i maleje w kierunku zera dla dużych |z|. Mnożenie wielu takich pochodnych w regule łańcuchowej przez L warstw powoduje, że gradienty we wczesnych warstwach maleją wykładniczo — czynnik (0,25)^L na krok dla sigmoidy. Przy 10 warstwach oznacza to zmniejszenie gradientów o czynnik rzędu 10⁻⁶, przez co wagi we wczesnych warstwach stają się niemal niemożliwe do wytrenowania. ReLU (σ'(z) = 1 dla z > 0) unika tego w przejściu w przód, ale może cierpieć na „martwe neurony”, gdy z jest zawsze ujemne.
Jaka jest różnica między SGD, mini-batch GD i pełną wsadową metodą gradientu?
Stochastyczny spadek gradientu (SGD) aktualizuje wagi po każdym pojedynczym przykładzie treningowym — szybki, ale zaszumiony. Pełna wsadowa metoda gradientu oblicza dokładny gradient dla całego zbioru danych przed aktualizacją — stabilna, ale wolna dla dużych zbiorów. Mini-batch (standard w głębokim uczeniu) wykorzystuje losowy podzbiór B przykładów na aktualizację, uśredniając gradient po wsadzie. Mini-batch równoważy szum (który pomaga uciec z minimów lokalnych) z wydajnością obliczeniową (operacje macierzowe na wsadach dobrze zrównoleglają się na GPU). Ta symulacja uruchamia SGD z pojedynczą próbką, by wyraźnie pokazać poszczególne aktualizacje wag.
Jakie są różnice między aktywacjami ReLU, tanh i sigmoidalną?
Sigmoid σ(z) = 1/(1 + e^(–z)) ściska wyjścia do przedziału (0, 1) i był pierwotnym wyborem; cierpi na zanikające gradienty dla dużych |z|. Tanh(z) = (e^z – e^(–z))/(e^z + e^(–z)) odwzorowuje do (–1, 1) i ma silniejsze gradienty blisko zera niż sigmoid, co czyni go lepszym dla warstw ukrytych. ReLU(z) = max(0, z) to najpopularniejszy współczesny wybór: ma stały gradient równy 1 dla z > 0 (bez zanikania), jest tani obliczeniowo i daje rzadkie aktywacje. Leaky ReLU i GELU to popularne warianty naprawiające problem „umierającego ReLU”.
Czym jest współczynnik uczenia i jak wpływa na trening?
Współczynnik uczenia η skaluje każdy krok gradientowy: W ← W – η ∂L/∂W. Zbyt duże η powoduje oscylacje lub rozbieżność straty (przeskoczenie minimum); zbyt małe η prowadzi do bardzo wolnej zbieżności. Typowe wartości mieszczą się w zakresie η = 10⁻⁴ do 10⁻¹. Suwak współczynnika uczenia w tej symulacji używa skali logarytmicznej (10^x, gdzie x zmienia się od –3 do 0). Nowoczesne optymalizatory, takie jak Adam, dostosowują η dla każdego parametru za pomocą estymatorów momentów, efektywnie ustawiając dobre η automatycznie i zwykle wymagając znacznie mniej strojenia.
Co przedstawiają świecące krawędzie podczas przejścia wstecznego?
Jasność krawędzi podczas przejścia wstecznego jest proporcjonalna do |∂L/∂w|, wartości bezwzględnej gradientu dla danej wagi. Jasno świecące krawędzie uczą się szybko — ich wagi są aktualizowane dużym krokiem. Ciemne krawędzie odpowiadają niemal zerowemu gradientowi, co oznacza, że te wagi ledwo się zmieniają. W głębokich sieciach z aktywacjami sigmoidalnymi często widać, że wczesne warstwy mają przygaszone krawędzie (zanikający gradient), podczas gdy późniejsze warstwy świecą jasno — ilustruje to dokładnie, dlaczego głębokie sieci były trudne do wytrenowania przed pojawieniem się ReLU i normalizacji wsadowej.
Jak wizualizowana jest granica decyzyjna?
Tło płótna jest kolorowane zgodnie z aktualną predykcją klasy sieci w każdym punkcie: czerwone obszary są przewidywane jako klasa 0, niebieskie jako klasa 1, a nasycenie koloru wskazuje pewność. Po każdej aktualizacji wag tło jest ponownie renderowane poprzez uruchomienie przejścia w przód w każdym pikselu — co jest kosztowne obliczeniowo dla dużych sieci, więc jest próbkowane na rzadszej siatce i skalowane w górę. W miarę postępu treningu można obserwować, jak granica decyzyjna wykrzywia się i ostrzy, by rozdzielić obie klasy, czasem utykając w minimum lokalnym.
Jakie zbiory danych są dostępne i dlaczego zostały wybrane?
Pięć gotowych zestawów testuje różne aspekty ekspresywności sieci: „2 Gauss” (liniowo separowalne skupiska) można rozwiązać nawet bez warstw ukrytych; „XOR” wymaga co najmniej jednej warstwy ukrytej, ponieważ klasy nie są liniowo separowalne; „Moons” i „Spirals” wymagają, aby sieć nauczyła się krzywej, niewypukłej granicy; „3 Cluster” testuje separację wieloklasową z wyjściem softmax. Spirale to klasyczny benchmark — w pełni połączona sieć z zaledwie dwoma neuronami ukrytymi tanh potrafi je rozwiązać, podczas gdy klasyfikator liniowy nie.
Czym jest norma gradientu |∇| w panelu statystyk?
Norma gradientu |∇| = √(Σ (∂L/∂w)²) to euklidesowa długość całego wektora gradientu połączonego ze wszystkich wag. Duża norma gradientu oznacza, że powierzchnia straty jest stroma, a sieć jest daleko od minimum; bardzo mała norma sugeruje zbieżność lub plateau. Monitorowanie |∇| jest przydatne do wykrywania eksplodujących gradientów (nagle bardzo duże |∇|) i zanikających gradientów (|∇| bliskie zeru na początku treningu). Przycinanie gradientu ustala maksymalną dopuszczalną wartość |∇|, aby ustabilizować trening sieci rekurencyjnych.
Czy ta sieć potrafi nauczyć się funkcji XOR?
Tak — XOR nie jest liniowo separowalny, co oznacza, że żadna pojedyncza linia nie może rozdzielić czterech kombinacji wejściowych, więc perceptron (bez warstw ukrytych) zawodzi całkowicie. Sieć z co najmniej jednym neuronem ukrytym używającym nieliniowej aktywacji może nauczyć się XOR dokładnie. Praca Rumelharta i współautorów z 1986 roku wykorzystała XOR jako kluczową demonstrację, że propagacja wsteczna pozwala neuronom ukrytym wykształcić użyteczne reprezentacje wewnętrzne, a nie być jedynie pośrednikami. Przy η = 0,1 i aktywacjach tanh sieć w tej symulacji zazwyczaj rozwiązuje XOR w ciągu kilkuset kroków SGD.