2012-10-27 35 views
10

Niedawno ukończyłem kurs uczenia maszynowego profesora Nga na Courserze i chociaż uwielbiałem cały kurs, nigdy nie udało mi się naprawdę zrozumieć algorytmu wstecznej propagacji do treningu sieci neuronowych.Czy ktoś może mi wyjaśnić algorytm propagacji wstecznej?

Mój problem ze zrozumieniem tego polega na tym, że uczy on tylko wektorowej implementacji dla w pełni połączonych sieci przesyłu. Moja algebra liniowa jest zardzewiała i myślę, że znacznie łatwiej byłoby zrozumieć, czy ktoś mógłby nauczyć mnie algorytmu ogólnego celu. Może w sposób zorientowany na węzeł.

Postaram i wyrażenie problem po prostu, ale może być nieporozumienie prace jak backprop, więc jeśli to nie ma sensu, lekceważenie go:

dla dowolnego węzła danego N, biorąc pod uwagę wagi wejściowe/wartości, wyjściowe wagi/wartości i błąd/koszt wszystkich węzłów, do których N generuje, jak obliczyć "koszt" N i użyć go do aktualizacji wag wejściowych?

+0

To dość szerokie pytanie. Możesz mieć więcej szczęścia na http://dsp.stackexchange.com. – mtrw

+6

Możesz znaleźć bardzo dobre wyjaśnienie, ze zdjęciami, na http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_pl/backprop.html –

+1

To wspaniałe wytłumaczenie Marc! Nie jestem jednak pewien, czy rozumiem różnicowy bit. Czy df (e)/de oznacza pochodną w odniesieniu do całej ważonej sumy (e) lub tylko dane wejściowe połączenia, którego wagę próbujemy zaktualizować? Więc powiedzmy, że węzeł ma liniową funkcję aktywacji, czy df (e)/de zawsze będzie równe 1 (f (e) = e -> df (e)/de = 1)? Czy też zawsze będzie to równa masa, którą aktualizujemy (f (e) = w1x1 + w2x2 -> df (e)/dx1 = w1) –

Odpowiedz

14

Rozważmy węzeł w sieci propagacji wstecznej (BP). Ma wiele wejść i wytwarza wartość wyjściową. Chcemy użyć korekcji błędów podczas treningu, więc zaktualizuje ona także wagi na podstawie oszacowania błędu dla węzła.

Każdy węzeł ma wartość odchylenia, θ. Możesz myśleć o tym jako o wadze do wewnętrznego, stałego, wartościowanego wejścia 1.0.

Aktywacja jest sumą ważonych wejść i wartości obciążenia. Przyjrzyjmy się naszemu węzłowi zainteresowania jako j, węzły w poprzedniej warstwie z wartościami i, i węzły w następnej warstwie o wartościach k. Aktywacja naszego węzła j wynosi:

netto J = Σ i (O i x W ij) + θ J

Oznacza to, że wartość aktywacji dla j jest sumą produktów wyjściowych z węzła i oraz odpowiedniego węzła łączącego wagę i i j, plus wartość odchylenia.

Wyjście naszego węzła j to funkcja przenoszenia aktywacji:

O J = F (bez J)

f jest zwykle funkcją esicy.

F (netto J) = 1/(1 + e -net J)

Funkcja esicy ma łatwo określić pierwszą pochodną:

f '(net j) = f (netto j) × (1.0 - f (netto j))

Cokolwiek przeniesienie funkcji używamy, musimy wiedzieć, jak obliczyć jego pierwszą pochodną. BP działa poprzez gradientowe zejście przez regułę łańcucha, więc jest to ważne. Powyższe równanie będzie różne przy innej funkcji przenoszenia.

Do tej pory wiemy, jak uzyskać wartości wejściowe, obliczyć aktywację, obliczyć wyjście i obliczyć pierwszą pochodną aktywacji. Teraz musimy radzić sobie z błędami i regulacją wagi.

Wartość używana do oszacowania błędu węzła w BP jest nazywana δ. Wartość δ dla węzła jest proporcjonalna do pierwszej pochodnej aktywacji węzła i warunku błędu, który otrzymuje. Istnieją dwa sformułowania dla odebranego błędu, jeden dla węzłów wyjściowych i jeden dla ukrytych węzłów.

Rodzajowo

δ = F '(netto) x (otrzymane błąd)

Dla węzła wyjściowego

δ wyjście = F' (netto) × (t - o)

gdzie t jest wartością oczekiwaną w tym węźle wyjściowym, a o jest faktyczną wartością wyjściową tego węzła wyjściowego.

Naszym ukrytego węzła j, to jest tak:

δ J = F '(bez J) x Ď K K x W jk)

δ naszego węzła j δ j jest produktem pierwszej pochodnej naszego tran funkcja sfer podana czasy aktywacji suma delt w następnej warstwie (bliżej wyjścia) pomnożona przez wartość masy łączącej. Mając to na ręce, możemy obliczyć, w jaki sposób wyregulować ciężary idące do poprzedniej warstwy węzłów (bliżej wejścia).

DW ij = L x O i x δ J

DW tutaj oznacza "zmiana masy", to co równanie mówi się, że zmiana w masie z węzeł i do naszego węzła j jest równy iloczynowi parametru uczenia L (zwykle ta sama wartość dla wszystkich węzłów w sieci), wartość wyjściowa węzła i oraz δ (termin błędu) dla naszego węzła j.

Regulacja wartości odchylenia jest podobna do regulacji wagi.

J = L x f (θ J) x δ J

dθ tutaj oznacza "zmianę θ". Musimy zastosować funkcję transferu do wartości odchylenia θ j, aby uzyskać termin podobny do wyniku z węzła. W przeciwnym razie wygląda tak jak inne równanie.

Należy zauważyć, że obliczanie zmian masy powinno odbywać się w całej sieci, a następnie zastosować zmiany po obliczeniu wszystkich tych wartości.

+0

Czy można wyjaśnić, dlaczego pochodną funkcji celu dla ostatniej warstwy jest różnica między wartością obserwowaną a przewidywaną? Powiedzmy, że używamy funkcji sigmoid do pobrania danych wejściowych i przekonwertowania go na wartość nieliniową ... – user2543622

+0

Mam na myśli przyjrzałem się pochodnej obiektywnej funkcji regresji logistycznej i rozumiem, że pochodna jest równa (różnica między prognozami) * x_varaiable .. .so dlaczego w przypadku sieci neuronowej pozbywamy się części x_variable i keep only (difference between prediction)? – user2543622

+0

@ user2543622, pochodną funkcji celu jest w rzeczywistości gradient tej funkcji celu, która jest wektorem pochodnej MSE (zwykle wykorzystywana funkcja celu). –

0

Dla każdego węzła danego N, biorąc pod uwagę wagi wejściowe/wartości, wyjście wagi/wartości, a błąd/koszt wszystkich węzłów, które wyjścia N, aby, jak mogę obliczyć „koszt” N i użyć tego do aktualizacji ciężarów wejściowych ?

Nigdy nie interesuje Cię funkcja kosztu pośredniego poszczególnych neuronów. Zamiast tego jesteś zainteresowany kosztem ostatecznej produkcji; zawsze. Następnie użyj tego do propagowania tempa zmian wymaganych przez neurony w tylnych warstwach aż do przodu.