Warstwa Softmax w sieci neuronowej

43

Próbuję dodać warstwę softmax do sieci neuronowej wyuczonej z propagacji wstecznej, więc próbuję obliczyć jej gradient.

Wyjście softmax to gdzie jest wyjściowym numerem neuronu.hj=ezjezij

Jeśli to uzyskam, to dostanę

hjzj=hj(1hj)

Podobne do regresji logistycznej. Jest to jednak błędne, ponieważ moja numeryczna kontrola gradientu kończy się niepowodzeniem.

Co ja robię źle? Pomyślałem, że muszę też obliczyć pochodne krzyżowe (tj. ), ale nie jestem pewien, jak to zrobić i zachować wymiar gradientu to samo, więc będzie pasować do procesu wstecznej propagacji.hjzk

Biegł
źródło
3
Powinieneś poprawić tytuł swojego pytania, ponieważ nie mówi ono o dodaniu ogólnej warstwy softmax do NN, ponieważ pytasz konkretnie o to, jak sprawdzenie gradientu kończy się niepowodzeniem. Zdecydowanie sugeruję zmianę tytułu na „Dlaczego propagacja wsteczna przestaje działać poprawnie po dodaniu warstwy softmax do mojej sieci neuronowej”.
Charlie Parker,

Odpowiedzi:

43

Trochę źle czuję się, udzielając na to mojej odpowiedzi, ponieważ jest ona całkiem dobrze uchwycona przez amebę i juampę, z wyjątkiem może ostatecznej intuicji, w jaki sposób jakobian można sprowadzić z powrotem do wektora.

Poprawnie wyprowadziłeś gradient przekątnej macierzy jakobskiej, to znaczy tak

hizj=hi(1hj):i=j

i jak to powiedziała ameba, musisz także wyprowadzić pozakątne wpisy jakobianów, które dają

hizj=hihj:ij

Te dwie definicje pojęć można dogodnie łączyć za pomocą konstruktu o nazwie Delta Kroneckera , dzięki czemu powstaje definicja gradientu

hizj=hi(δijhj)

Jakobian jest macierzą kwadratową[J]ij=hi(δijhj)

Wszystkie informacje do tego momentu są już objęte amebą i juampą. Problem polega oczywiście na tym, że musimy uzyskać błędy wejściowe z błędów wyjściowych, które są już obliczone. Ponieważ gradient błędu wyjściowego zależy od wszystkich danych wejściowych, zatem gradient wejścia wynosihixi

[x]k=i=1hi,k

Biorąc pod uwagę zdefiniowaną powyżej jakobianową macierz, jest to trywialnie zaimplementowane jako iloczyn macierzy i wektora błędu wyjściowego:

σl=Jσl+1

Jeśli warstwa softmax jest warstwą wyjściową, wówczas połączenie jej z modelem kosztów entropii krzyżowej upraszcza obliczenia po prostu

σl=ht

gdzie to wektor etykiet, a to wynik funkcji softmax. Uproszczona forma jest nie tylko wygodna, ale także niezwykle przydatna z punktu widzenia stabilności numerycznej.th

Mranz
źródło
z , jest ? (po prostu próbuję zrozumieć, jaki jest w tym przypadku „gradient”)σl=(σl,1,σl,2,...,σl,k)σl,j=Czj
Alexandre Holden Daly
Tak to jest poprawne.
Mranz
Czy ktoś mógłby wyjaśnić, czym są małe litery delta w delcie Kroneckera i jak je obliczyć?
danijar
Utknąłem na jakiś czas. Wyjaśnić. Masz wektor (przed softmax), a następnie obliczasz softmax. Ponieważ wartości softmax zależą od wszystkich wartości wejściowych, potrzebna jest rzeczywista macierz jacobowska. Następnie bierzemy macierz jacobijską i sumujemy zmniejszamy rzędy, aby uzyskać wektor pojedynczego rzędu, którego zwykle używamy do opadania gradientu. Czy to wszystko w 100% poprawne?
harveyslash
14

Pochodna jest błędna. Powinno być,

hjzk=hjδkjhjhk

sprawdź ponownie swoje obliczenia. Również wyrażenie podane przez amebę dla entropii krzyżowej nie jest całkowicie poprawne. W przypadku zestawu próbek danych pobranych z różnych klas czytamy:C

nk=1Ctknlnyk(xn)

gdzie superindeks przebiega nad zestawem próbek, jest wartością k-tego komponentu celu dla n-tej próbki. Zakłada się tutaj, że używasz schematu kodowania 1-of-C, to znaczy . W takim przypadku wszystkie t są równe zero, z wyjątkiem komponentu reprezentującego odpowiadającą mu klasę, którą jest jedna.tkntkn

Zauważ, że t są stałe. Dlatego minimalizacja tej funkcji jest równoważna minimalizacji,

nk=1Ctknlnyk(xn)+nk=1Ctknlntkn=nk=1Ctknlnyk(xn)tkn

co ma tę zaletę, że jakobian przyjmuje bardzo dogodną formę, a mianowicie:

Ezj=hjtj

Poleciłbym ci zdobyć kopię Bishop's Neural Networks for Recognition Recognition . IMHO wciąż najlepsza książka o sieciach neuronowych.

jpmuc
źródło
14

Każde wyjście softmax zależy od wszystkich danych wejściowych, więc gradient jest rzeczywiście całą matrycą jakobską. Poprawnie obliczyłeś , ale potrzebujesz także jeśli . Sądzę, że jeśli potrafisz wyprowadzić pierwsze wyrażenie, powinieneś być w stanie łatwo wyprowadzić także drugie.jhj=hjzj=hj(1hj) j kkhj=hjhkjk

Nie jestem pewien, jaki masz problem z propagacją wsteczną: w warstwie softmax masz wyjścia i wejścia , więc błąd z każdego wyjścia powinien być propagowany do każdego wejścia, i właśnie dlatego potrzebujesz całego jakobianu. Z drugiej strony, zwykle masz funkcję kosztu powiązaną z wyjściem softmax, np. gdzie są pożądanymi wyjściami (kiedy dokonujesz klasyfikacji, często jedna z nich jest równa 1 i inne do 0). Zatem w rzeczywistości interesuje Cię , który można obliczyć za pomocą reguły łańcucha skutkującej zgrabnym wyrażeniem i faktycznie jest wektorem (a nie macierzą).j C = - j t j log h j , t j Cjj

C=jtjloghj,
tjCzj
ameba mówi Przywróć Monikę
źródło
1
Spróbuję lepiej opisać mój problem, na przykład w tym samouczku ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorytm , muszę elementarnie pomnożyć wagi i deltę przez pochodną (krok nr 3). Więc jeśli mam pełną jakobianową matrycę, wymiary nie pasują. Dzięki.
Ran
Czy wiesz, jak postępować, jeśli nie jest to softmax, ale zwykła ukryta warstwa? Wyobraź sobie, że każda jednostka na tej warstwie otrzymuje dane wejściowe ze wszystkich jednostek poprzedniej warstwy (tj. Ta warstwa jest „w pełni połączona”), co zwykle ma miejsce. Następnie musisz również ponownie propagować błędy z powrotem przez tę warstwę, a pochodne również tworzą matrycę jakobską. Jeśli jesteś zdezorientowany, jak to zrobić, to twoje zamieszanie nie ma związku z softmax.
Ameba mówi Przywróć Monikę
1
Z powodzeniem zaimplementowałem go dla warstw liniowych i sigmoidalnych, ponieważ pochodna jest wektorem, więc nie miałem problemu z wymiarami.
Ran
Przepraszam, Ran, może jestem po prostu głupi, ale jeśli masz warstwę sigmoidalną w pełni połączoną z poprzednią warstwą, wówczas wyjście (lub wejście) do każdej jednostki będzie miało pochodną w odniesieniu do połączenia przychodzącego z każdej jednostki na poprzednia warstwa, tj. wszystkie pochodne tworzą matrycę 2D, n'est-ce pas? iji
ameba mówi Przywróć Monikę