¿Cómo funciona la retropropagación en una red neuronal siamesa?

13

He estado estudiando la arquitectura de la red neuronal siamesa introducida por Yann LeCun y sus colegas en 1994 para el reconocimiento de firmas ( "Verificación de firma usando una red neuronal siamesa de retardo de tiempo" .pdf , NIPS 1994)

Entendí la idea general de esta arquitectura, pero realmente no puedo entender cómo funciona la retropropagación en este caso. No puedo entender cuáles son los valores objetivo de la red neuronal, que permitirán que la retropropagación establezca adecuadamente los pesos de cada neurona.

Imagen de "Red Probabilística Siamesa para Representaciones de Aprendizaje" por Chen Liu (Universidad de Toronto 2013).

En esta arquitectura, el algoritmo calcula la similitud del coseno entre las representaciones finales de las dos redes neuronales. El documento establece: "La salida deseada es para un ángulo pequeño entre las salidas de las dos subredes (f1 y f2) cuando se presentan firmas genuinas , y un gran ángulo si una de las firmas es una falsificación ".

Realmente no puedo entender cómo podrían usar una función binaria (similitud de coseno entre dos vectores) como objetivo para ejecutar la propagación hacia atrás.

¿Cómo se calcula la propagación hacia atrás en las redes neuronales siamesas?

DavideChicco.it
fuente
no puedo descargar el documento ... ¿tiene otra fuente o dropbox?
Brethlosze
1
Archivo de NIPS: papers.nips.cc/paper/…
Yannis Assael

Respuestas:

11

Ambas redes comparten arquitecturas similares y están limitadas a tener los mismos pesos que la publicación describe en la sección 4 [1].

Su objetivo es aprender las características que minimizan la similitud de coseno entre sus vectores de salida cuando las firmas son genuinas y la maximizan cuando se falsifican (este también es el objetivo del backprop, pero no se presenta la función de pérdida real).

La similitud del coseno de dos vectores , es una medida de similitud que le da el coseno del ángulo entre ellos (por lo tanto, su salida no es binaria). Si le preocupa cómo puede retroceder a una función que genera verdadero o falso, piense en el caso de la clasificación binaria.cos(A,B)=ABABA,B

No debe cambiar la capa de salida, consta de neuronas entrenadas con valores lineales y es una abstracción de nivel superior de su entrada. Toda la red debe ser entrenada en conjunto. Ambas salidas y pasan a través de una función que genera su similitud de coseno ( si son similares y si no lo son). Dado eso, y que tenemos dos conjuntos de tuplas de entrada , un ejemplo de la función de pérdida más simple contra la que podría tener que entrenar podría ser:O1O2cos(O1,O2)10XForged,XGenuine

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

Después de entrenar su red, simplemente ingresa las dos firmas, obtiene las dos salidas y las pasa a la función , y verifica su similitud.cos(O1,O2)

Finalmente, para mantener los pesos de red idénticos, hay varias formas de hacerlo (y también se usan en redes neuronales recurrentes); Un enfoque común es promediar los gradientes de las dos redes antes de realizar el paso de actualización Pendiente de degradado.

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

Yannis Assael
fuente
Sé que el objetivo es minimizar la similitud del coseno, pero no puedo entender lo que debo insertar en la capa de salida de mi red neuronal. Cuando creo la red neuronal, pongo los objetivos en la última capa de salida. Si son valores, está bien. Pero si el objetivo es una función, ¿dónde encuentro los valores para completar? Gracias
DavideChicco.it 01 de
He actualizado mi respuesta. Su capa de salida será simplemente otra capa normal que dará salida a la función de similitud de coseno. Las dos redes conectadas a la función de similitud de coseno deben entrenarse juntas contra un criterio de pérdida. Finalmente, le he sugerido la pérdida más simple que podría tener en este caso.
Yannis Assael
1
Gracias. Creo que me di cuenta de mi problema: es la implementación de esta arquitectura de red neuronal en Torch7. Aquí, antes del entrenamiento y las pruebas, durante la construcción de la red neuronal, tengo que especificar muchas cosas, incluidos los valores del conjunto de datos de entrada y los valores de la capa objetivo de salida . En el pasado, me ocupé de problemas supervisados ​​que siempre tenían valores fijos de la capa objetivo de salida (por ejemplo, etiquetas verdadero / falso o valores en el intervalo [0, 1]). Pero esta vez es diferente: la capa de salida es una función que depende de dos valores que se calcularán durante el entrenamiento. ¿Es esto correcto?
DavideChicco.it 01 de
Exactamente esta vez tiene valores lineales en la capa de salida, no binarios (por lo que es solo la salida de la neurona). Además, no tiene valores directos de salida-objetivo en este caso, pero tiene una función de pérdida para optimizar. Finalmente, la capa de salida es la salida de neuronas (el número de unidades está definido por la arquitectura del modelo y se hace referencia en el documento). Las neuronas que dependen de la función de activación elegida (tanh, sigmoide, etc.) tienen activaciones lineales no binarias [-1,1] o [0,1] respectivamente. noutputnoutput
Yannis Assael
Gracias @iassael. ¿Tienes alguna idea sobre cómo implementar esto en Torch7?
DavideChicco.it 01 de