Jak działa propagacja wsteczna w syjamskiej sieci neuronowej?

13

Studiowałem architekturę syjamskiej sieci neuronowej wprowadzonej przez Yanna LeCuna i jego współpracowników w 1994 r. Do rozpoznawania podpisów ( „Weryfikacja podpisu przy użyciu sieci neuronowej z opóźnieniem czasowym syjamskim” .pdf , NIPS 1994)

Zrozumiałem ogólną ideę tej architektury, ale tak naprawdę nie rozumiem, jak działa backpropagacja w tym przypadku. Nie rozumiem, jakie są docelowe wartości sieci neuronowej, które pozwolą na propagację wsteczną w celu prawidłowego ustawienia wag każdego neuronu.

Zdjęcie z „Probabilistic Siamese Network for Learning Representations” autorstwa Chen Liu (University of Toronto 2013).

W tej architekturze algorytm oblicza podobieństwo kosinusowe między końcowymi reprezentacjami dwóch sieci neuronowych. Artykuł stwierdza: „Pożądane dane wyjściowe dotyczą niewielkiego kąta między wyjściami dwóch podsieci (f1 i f2), gdy przedstawione są prawdziwe podpisy oraz duży kąt, jeśli jeden z podpisów jest fałszywy ”.

Naprawdę nie rozumiem, w jaki sposób mogliby wykorzystać funkcję binarną (podobieństwo cosinusa między dwoma wektorami) jako cel do uruchomienia propagacji wstecznej.

Jak obliczana jest propagacja wsteczna w syjamskich sieciach neuronowych?

DavideChicco.it
źródło
Nie mogę pobrać papieru ... Czy masz inne źródło lub Dropbox?
Brethlosze
1
Archiwum NIPS: papers.nips.cc/paper/…
Yannis Assael

Odpowiedzi:

11

Obie sieci mają podobną architekturę, ale są ograniczone do takich samych wag, jak opisano w publikacji w rozdziale 4 [1].

Ich celem jest poznanie funkcji, które minimalizują podobieństwo cosinusowe między ich wektorami wyjściowymi, gdy podpisy są autentyczne, i maksymalizują je, gdy zostaną sfałszowane (jest to również cel wsteczny, ale funkcja straty rzeczywistej nie jest prezentowana).

Podobieństwo cosinus dwóch wektorów jest miarą podobieństwa, która daje cosinus kąta między nimi (dlatego jego wynik nie jest binarny). Jeśli martwisz się, w jaki sposób możesz zastosować funkcję backprop do funkcji, która wypisuje wartość true lub false, pomyśl o przypadku klasyfikacji binarnej.cos(A,B)=ABABA,B

Nie powinieneś zmieniać warstwy wyjściowej, składa się ona z wyszkolonych neuronów o wartościach liniowych i stanowi abstrakcję twojego wkładu wyższego poziomu. Cała sieć powinna zostać przeszkolona razem. Oba wyjścia i są przekazywane przez funkcję która wyświetla ich podobieństwo cosinus ( jeśli są podobne, i jeśli nie są). Biorąc to pod uwagę, i że mamy dwa zestawy krotek wejściowych , przykładem najprostszej możliwej funkcji straty, z którą możesz trenować, może być:O1O2cos(O1,O2)10XForged,XGenuine

L=(xA,xB)XForgedcos(xA,xB)(xC,xD)XGenuinecos(xC,xD)

Po wyszkoleniu sieci wystarczy wprowadzić dwa podpisy, a dwa wyjścia je do funkcji i sprawdź ich podobieństwo.cos(O1,O2)

Wreszcie, aby utrzymać identyczne wagi sieci, można to zrobić na kilka sposobów (i są one również stosowane w sieciach neuronowych); powszechnym podejściem jest uśrednianie gradientów dwóch sieci przed wykonaniem kroku aktualizacji Zejście gradientu.

[1] http://papers.nips.cc/paper/769-signature-verification-using-a-siamese-time-delay-neural-network.pdf

Yannis Assael
źródło
Wiem, że celem jest zminimalizowanie podobieństwa cosinusowego, ale nie rozumiem, co powinienem wstawić do warstwy wyjściowej mojej sieci neuronowej. Kiedy tworzę sieć neuronową, umieszczam cele w ostatniej warstwie wyjściowej. Jeśli są wartościami, to w porządku. Ale jeśli cel jest funkcją, gdzie znajdę wartości do wypełnienia? Dzięki
DavideChicco.it
Zaktualizowałem swoją odpowiedź. Twoja warstwa wyjściowa będzie po prostu kolejną normalną warstwą, którą wysyła do funkcji podobieństwa cosinus. Dwie sieci połączone funkcją podobieństwa kosinusowego powinny być szkolone razem zgodnie z kryterium utraty. Na koniec zasugerowałem ci najprostszą stratę, jaką możesz mieć w tym przypadku.
Yannis Assael
1
Dzięki. Myślę, że zdałem sobie sprawę z mojego problemu: jest to implementacja architektury sieci neuronowej w Torch7. Tutaj, przed szkoleniem i testowaniem, podczas budowy sieci neuronowej muszę określić wiele rzeczy, w tym wejściowe wartości zestawu danych i wartości warstwy docelowej . W przeszłości miałem do czynienia z nadzorowanymi problemami, które zawsze miały ustalone wartości warstwy wyjściowej i docelowej (np. Etykiety prawda / fałsz lub wartości w przedziale [0, 1]). Ale tym razem jest inaczej: warstwa wyjściowa jest funkcją zależną od dwóch wartości, które zostaną obliczone podczas treningu. Czy to jest poprawne?
DavideChicco.it
Dokładnie tym razem masz liniowe wartości w warstwie wyjściowej, a nie binarne (więc jest to tylko wyjście neuronu). Co więcej, w tym przypadku nie masz bezpośrednich wartości docelowych-wyjściowych, ale masz funkcję straty do optymalizacji. Na koniec warstwa wyjściowa jest wyjściem neuronów (liczba jednostek jest określona przez architekturę modelu i jest przywołana w artykule). Neurony w zależności od wybranej funkcji aktywacji (tanh, sigmoid itp.) Mają odpowiednio liniowe, a nie binarne aktywacje [-1,1] lub [0,1]. noutputnoutput
Yannis Assael
Dzięki @iassael. Czy masz pomysł, jak to zaimplementować w Torch7?
DavideChicco.it