Wie funktioniert die Rückausbreitung in einem siamesischen neuronalen Netzwerk?

11

Ich habe die Architektur des siamesischen neuronalen Netzwerks untersucht, die Yann LeCun und seine Kollegen 1994 zur Erkennung von Signaturen eingeführt haben ( „Signaturüberprüfung mit einem siamesischen neuronalen Netzwerk mit Zeitverzögerung“ .pdf , NIPS 1994).

Ich habe die allgemeine Idee dieser Architektur verstanden, aber ich kann wirklich nicht verstehen, wie die Backpropagation in diesem Fall funktioniert. Ich kann nicht verstehen, was die Zielwerte des neuronalen Netzwerks sind, die es der Rückausbreitung ermöglichen, die Gewichte jedes Neurons richtig einzustellen.

Bild aus dem „Probabilistic Siamese Network for Learning Representations“ von Chen Liu (University of Toronto 2013).

In dieser Architektur berechnet der Algorithmus die Kosinusähnlichkeit zwischen den endgültigen Darstellungen der beiden neuronalen Netze. In der Arbeit heißt es: "Die gewünschte Ausgabe ist für einen kleinen Winkel zwischen den Ausgaben der beiden Teilnetze (f1 und f2), wenn echte Signaturen präsentiert werden und ein großer Winkel, wenn eine der Signaturen eine Fälschung ist ".

Ich kann nicht wirklich verstehen, wie sie eine Binärfunktion (Kosinusähnlichkeit zwischen zwei Vektoren) als Ziel verwenden könnten, um die Backpropagation auszuführen.

Wie wird die Backpropagation in den siamesischen neuronalen Netzen berechnet?

DavideChicco.it
quelle
Ich kann das Papier nicht herunterladen. Haben Sie eine andere oder Dropbox-Quelle?
Brethlosze
1
NIPS-Archiv: paper.nips.cc/paper/…
Yannis Assael

Antworten:

11

Beide Netzwerke haben ähnliche Architekturen, müssen jedoch die gleichen Gewichte haben wie in der Veröffentlichung in Abschnitt 4 [1] beschrieben.

Ihr Ziel ist es, Merkmale zu lernen, die die Kosinusähnlichkeit zwischen ihren Ausgangsvektoren minimieren, wenn Signaturen echt sind, und sie zu maximieren, wenn sie gefälscht sind (dies ist auch das Backprop-Ziel, aber die tatsächliche Verlustfunktion wird nicht dargestellt).

cos(EIN,B.)=EINB.EINB.EIN,B.

Ö1Ö2cÖs(Ö1,Ö2)10X.F.ÖrGed,X.Genuichne

L.=(xEIN,xB.)X.F.ÖrGedcÖs(xEIN,xB.)- -(xC.,xD.)X.GenuichnecÖs(xC.,xD.)

cÖs(Ö1,Ö2)

Um die Netzwerkgewichte identisch zu halten, gibt es verschiedene Möglichkeiten, dies zu tun (und sie werden auch in wiederkehrenden neuronalen Netzen verwendet). Ein üblicher Ansatz besteht darin, die Gradienten der beiden Netzwerke zu mitteln, bevor der Aktualisierungsschritt für den Gradientenabstieg ausgeführt wird.

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

Yannis Assael
quelle
Ich weiß, dass das Ziel darin besteht, die Kosinusähnlichkeit zu minimieren, aber ich kann nicht verstehen, was ich in die Ausgabeschicht meines neuronalen Netzwerks einfügen soll. Wenn ich das neuronale Netzwerk erstelle, lege ich die Ziele in die letzte Ausgabeebene. Wenn es Werte sind, ist das in Ordnung. Aber wenn das Ziel eine Funktion ist, wo finde ich die zu füllenden Werte? Vielen Dank
DavideChicco.it
Ich habe meine Antwort aktualisiert. Ihre Ausgabeebene ist nur eine weitere normale Ebene, die an die Cosinus-Ähnlichkeitsfunktion ausgegeben wird. Die beiden Netzwerke, die die Kosinus-Ähnlichkeitsfunktion verbinden, sollten zusammen gegen ein Verlustkriterium trainiert werden. Schließlich habe ich Ihnen den einfachsten Verlust vorgeschlagen, den Sie in diesem Fall haben könnten.
Yannis Assael
1
Vielen Dank. Ich glaube, ich habe mein Problem erkannt: Es ist die Implementierung dieser neuronalen Netzwerkarchitektur in Torch7. Hier muss ich vor dem Training und dem Testen während des Aufbaus eines neuronalen Netzwerks viele Dinge spezifizieren, einschließlich der Werte des Eingabedatensatzes und der Werte der Ausgabezielschicht . In der Vergangenheit habe ich mich mit überwachten Problemen befasst, bei denen immer feste Werte für die Ausgabezielschicht vorhanden waren (z. B. True / False-Labels oder Werte im Intervall [0, 1]). Diesmal ist es jedoch anders: Die Ausgabeebene ist eine Funktion, die von zwei Werten abhängt, die während des Trainings berechnet werden. Ist das richtig?
DavideChicco.it
nÖutputnÖutput
Danke @iassael. Haben Sie eine Idee, wie Sie dies in Torch7 implementieren können?
DavideChicco.it