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.
Jeśli to uzyskam, to dostanę
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.
neural-networks
Biegł
źródło
źródło
Odpowiedzi:
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
i jak to powiedziała ameba, musisz także wyprowadzić pozakątne wpisy jakobianów, które dają
Te dwie definicje pojęć można dogodnie łączyć za pomocą konstruktu o nazwie Delta Kroneckera , dzięki czemu powstaje definicja gradientu
Jakobian jest macierzą kwadratową[J]ij=hi(δij−hj)
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 wynosi∇hi xi
Biorąc pod uwagę zdefiniowaną powyżej jakobianową macierz, jest to trywialnie zaimplementowane jako iloczyn macierzy i wektora błędu wyjściowego:
Jeśli warstwa softmax jest warstwą wyjściową, wówczas połączenie jej z modelem kosztów entropii krzyżowej upraszcza obliczenia po prostu
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.t⃗ h⃗
źródło
Pochodna jest błędna. Powinno być,
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
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.tnk tnk
Zauważ, że t są stałe. Dlatego minimalizacja tej funkcji jest równoważna minimalizacji,
co ma tę zaletę, że jakobian przyjmuje bardzo dogodną formę, a mianowicie:
Poleciłbym ci zdobyć kopię Bishop's Neural Networks for Recognition Recognition . IMHO wciąż najlepsza książka o sieciach neuronowych.
źródło
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=∂hj∂zj=hj(1−hj) j ≠ k∂khj=−hjhk j≠k
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 ∂ Cj j
źródło