Wyprowadzając gradient jednowarstwowej sieci neuronowej z jej danych wejściowych, jaki jest operator reguły łańcucha?

9

Rzecz w tym:

Oblicz gradient w odniesieniu do warstwy wejściowej dla sieci neuronowej z jedną ukrytą warstwą, używając sigmoid dla wejścia -> ukryty, softmax dla ukrytego -> wyjścia, z utratą entropii krzyżowej.

Mogę przejść przez większość pochodnych za pomocą reguły łańcucha, ale nie jestem pewien, jak właściwie „połączyć” je razem.

Zdefiniuj niektóre notacje

r=xW1+b1

h=σ(r), σ jest funkcją sigmoidalną

θ=hW2+b2,

y^=S(θ), S jest funkcją softmax

J(y^)=iylogy^i , y to prawdziwa etykieta jeden gorący wektor

Następnie regułą łańcucha

Jx=Jθθhhrrx

Poszczególne gradienty to:

Jθ=(y^y)
θh=h[hW2+b2]=W2T
hr=h(1h)
rx=x[xW1+b1]=W1T

Teraz musimy połączyć definicje razem. W pojedynczej zmiennej jest to łatwe, po prostu mnożymy wszystko razem. W wektorach nie jestem pewien, czy użyć mnożenia elementarnego czy mnożenia macierzy.

Jx=(y^y)W2T[h(1h)]W1T

Gdzie to elementowe mnożenie wektorów, a to mnożenie macierzy. Ta kombinacja operacji jest jedynym sposobem, w jaki wydaje mi się, że mogę połączyć je razem, aby uzyskać wektor wymiaru , o czym wiem, że .1DxJx

Moje pytanie brzmi: w jaki sposób mogę dowiedzieć się, którego operatora użyć? Jestem szczególnie zdezorientowany potrzebą elementu między i .W2Th

Dzięki!

amatsukawa
źródło
Zdaję sobie sprawę, że znalezienie gradientu wrt do danych wejściowych nie jest często wykonywane. Wierzę, że jest to wstęp do obliczeń osadzania słów, w których można zoptymalizować wektory słów „wejściowych”.
amatsukawa
how didi dervie dJ / dTheta
raaj,

Odpowiedzi:

4

Uważam, że kluczem do odpowiedzi na to pytanie jest zwrócenie uwagi na to, że mnożenie elementarne jest w rzeczywistości krótsze, a zatem, kiedy wyprowadzasz równania, nigdy go nie używasz.

Rzeczywiste działanie nie jest mnożenie elementów mądry lecz standardowym mnożenie macierzy gradientu z jakobian , zawsze .

W przypadku nieliniowości, jakobian wyjściowego wektora nieliniowości w odniesieniu do wejściowego wektora nieliniowości okazuje się być macierzą diagonalną. Prawdą jest zatem, że gradient pomnożony przez tę macierz jest równoważny gradientowi wyjściowego nieliniowości w odniesieniu do elementu straty pomnożonego przez wektor zawierający wszystkie częściowe pochodne nieliniowości w odniesieniu do danych wejściowych nieliniowości, ale wynika to z przekątnej jakobianów. Musisz przejść przez etap jakobowski, aby dojść do mnożenia elementarnego, co może wyjaśnić twoje zamieszanie.

W matematyce, że jedne nieliniowości , strata i wejścia do nieliniowości (może to być dowolny napinacz). Wyjście nieliniowości ma ten sam wymiar --- jak mówi @Logan, funkcja aktywacji jest zdefiniowana jako element.sLxRn×1s(x)Rn×1

Chcemy

xL=(s(x)x)Ts(x)L

Gdzie jest jakobianem . Rozszerzając ten jakobski, otrzymujemy s(x)xs

[s(x1)x1s(x1)xns(xn)x1s(xn)xn]

Widzimy, że wszędzie jest zero, z wyjątkiem przekątnej. Możemy wykonać wektor wszystkich jego elementów ukośnych

Diag(s(x)x)

A następnie użyj operatora opartego na elementach.

xL=(s(x)x)Ts(x)L=Diag(s(x)x)s(x)L
użytkownik0
źródło
0

Ilekroć jest to odwrotnie proporcjonalne do funkcji aktywacji, operacje stają się elementarne. W szczególności na twoim przykładzie jest pochodną propagacji wstecznej, a jest pochodną aktywacji, a jej produkt jest produktem elementarnym, . Jest tak, ponieważ funkcje aktywacyjne są zdefiniowane jako operacje elementowe w sieci neuronowej.δ2=(y^y)W2Ta=h(1h)δ2a

Zobacz slajdy wykładowe cs224d strona 30, może to również pomóc.

Logan
źródło