Comment fonctionne la rétropropagation dans un réseau neuronal siamois?

13

J'étudie l'architecture du réseau neuronal siamois introduit par Yann LeCun et ses collègues en 1994 pour la reconnaissance des signatures ( "Vérification de signature utilisant un réseau neuronal siamois à retardement" .pdf , NIPS 1994)

J'ai compris l'idée générale de cette architecture, mais je ne comprends vraiment pas comment fonctionne la rétropropagation dans ce cas. Je ne peux pas comprendre quelles sont les valeurs cibles du réseau neuronal, qui permettront à la rétropropagation de définir correctement les poids de chaque neurone.

Image tirée de «Probabilistic Siamese Network for Learning Representations» par Chen Liu (Université de Toronto 2013).

Dans cette architecture, l'algorithme calcule la similitude en cosinus entre les représentations finales des deux réseaux de neurones. Le papier déclare: "La sortie souhaitée est pour un petit angle entre les sorties des deux sous-réseaux (f1 et f2) lorsque des signatures authentiques sont présentées , et un grand angle si l'une des signatures est un faux ".

Je ne peux pas vraiment comprendre comment ils pourraient utiliser une fonction binaire (similitude cosinus entre deux vecteurs) comme cible pour exécuter la rétropropagation.

Comment la rétropropagation est-elle calculée dans les réseaux neuronaux siamois?

DavideChicco.it
la source
je ne peux pas télécharger le papier .... avez-vous une autre source ou dropbox?
Brethlosze
1
Archives NIPS: papers.nips.cc/paper/…
Yannis Assael

Réponses:

11

Les deux réseaux partagent les mêmes architectures, mais ils sont contraints d'avoir les mêmes poids que la publication décrit à la section 4 [1].

Leur objectif est d'apprendre des fonctionnalités qui minimisent la similitude de cosinus entre leurs vecteurs de sortie lorsque les signatures sont authentiques et de les maximiser lorsqu'elles sont falsifiées (c'est également l'objectif de backprop, mais la fonction de perte réelle n'est pas présentée).

La similitude cosinus de deux vecteurs , est une mesure de similitude qui vous donne le cosinus de l'angle entre eux (par conséquent, sa sortie n'est pas binaire). Si votre souci est de savoir comment vous pouvez backprop à une fonction qui génère vrai ou faux, pensez au cas de la classification binaire.cos(A,B)=ABABA,B

Vous ne devriez pas changer la couche de sortie, elle se compose de neurones entraînés avec des valeurs linéaires et c'est une abstraction de niveau supérieur de votre entrée. L'ensemble du réseau doit être formé ensemble. Les deux sorties et sont transmises via une fonction qui leur similitude cosinus ( si elles sont similaires et si elles ne le sont pas). Étant donné que, et que nous avons deux ensembles de tuples d'entrée , un exemple de la fonction de perte la plus simple possible contre laquelle vous pourriez avoir à vous entraîner pourrait être:O1O2cos(O1,O2)10XForged,XGenuine

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

Après avoir formé votre réseau, vous entrez simplement les deux signatures, vous obtenez les deux sorties, les transmettez à la fonction et vérifiez leur similitude.cos(O1,O2)

Enfin, pour garder les poids du réseau identiques, il existe plusieurs façons de le faire (et ils sont également utilisés dans les réseaux de neurones récurrents); une approche courante consiste à faire la moyenne des gradients des deux réseaux avant d'effectuer l'étape de mise à jour de la descente de gradient.

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

Yannis Assael
la source
Je sais que l'objectif est de minimiser la similitude cosinus, mais je ne comprends pas ce que je dois insérer dans la couche de sortie de mon réseau neuronal. Lorsque je crée le réseau neuronal, je place les cibles dans la dernière couche de sortie. Si ce sont des valeurs, ça va. Mais si la cible est une fonction, où trouver les valeurs à remplir? Merci
DavideChicco.it
J'ai mis à jour ma réponse. Votre couche de sortie sera juste une autre couche normale qu'elle émet vers la fonction de similitude cosinus. Les deux réseaux connectés à la fonction de similitude cosinus doivent être entraînés ensemble en fonction d'un critère de perte. Enfin, je vous ai suggéré la perte la plus simple que vous puissiez avoir dans ce cas.
Yannis Assael
1
Merci. Je pense avoir réalisé mon problème: c'est l'implémentation de cette architecture de réseau neuronal dans Torch7. Ici, avant la formation et les tests, pendant la construction du réseau neuronal, je dois spécifier beaucoup de choses, y compris les valeurs du jeu de données d'entrée et les valeurs de la couche cible de sortie . Dans le passé, j'ai traité des problèmes supervisés qui avaient toujours des valeurs de couche cible de sortie fixes (par exemple, des étiquettes vrai / faux ou des valeurs dans l'intervalle [0, 1]). Mais cette fois, c'est différent: la couche de sortie est une fonction qui dépend de deux valeurs qui seront calculées pendant l'entraînement. Est-ce correct?
DavideChicco.it
Exactement cette fois, vous avez des valeurs linéaires dans la couche de sortie non binaires (donc ce n'est que la sortie du neurone). De plus, vous n'avez pas de valeurs cibles de sortie directes dans ce cas, mais vous avez une fonction de perte à optimiser. Enfin, la couche de sortie est la sortie de neurones (le nombre d'unités est défini par l'architecture du modèle et référencé dans l'article). Les neurones dépendant de la fonction d'activation choisie (tanh, sigmoïde etc) ont respectivement des activations linéaires non binaires [-1,1] ou [0,1]. noutputnoutput
Yannis Assael
Merci @iassael. Avez-vous une idée de la façon de l'implémenter dans Torch7?
DavideChicco.it