# Réseau neuronal siamois

Un réseau neuronal siamois (parfois appelé réseau neuronal jumeau) est un réseau neuronal artificiel qui utilise les mêmes poids tout en travaillant en tandem sur deux vecteurs d'entrée différents pour calculer des vecteurs de sortie comparables$^,$$^,$. Souvent, un des vecteurs de sortie est précalculé, formant ainsi une ligne de base à laquelle l'autre vecteur de sortie est comparé. Ceci est similaire à la comparaison d'empreintes digitales, mais peut être décrit plus techniquement par une fonction de distance.
Des utilisations sont par exemple la reconnaissance d'écriture manuscrite, la détection automatique des visages, le suivi d'objets (voir ci-dessous) et la correspondance des requêtes avec des documents indexés. L'application peut-être la plus connue des réseaux siamois est la reconnaissance faciale, où des images connues de personnes sont précalculées et comparées à une image d'un tourniquet ou similaire. Il y a en fait deux problèmes légèrement différents. L'un est la reconnaissance d'une personne parmi un grand nombre d'autres personnes, c'est le problème de la reconnaissance faciale. DeepFace est un exemple d'un tel système. Dans sa forme la plus extrême, il s'agit de reconnaître une seule personne dans une gare ou un aéroport. L'autre est l'authentification faciale, c'est-à-dire vérifier que la personne présente est bien le propriétaire du laisser-passer présenté.

## Apprentissage

L'apprentissage dans les réseaux jumeaux peut se faire avec une fonction de coût par triplet ou contrastive. Pour l'apprentissage par triplet, un vecteur de base (image d'ancrage) est comparé à un vecteur positif (image vraie) et à un vecteur négatif (image fausse). Le vecteur négatif forcera l'apprentissage dans le réseau, tandis que le vecteur positif agira comme un régularisateur. Pour apprendre par perte contrastive, il doit y avoir une décroissance de poids pour régulariser les poids, ou une opération similaire comme une normalisation.
Une métrique de distance pour une fonction de perte peut avoir les propriétés suivantes :
* Non-négativité : $\delta (x,y)\geq 0$
* Identité des non-discernables : $\delta (x,y)=0\iff x=y$
* Symétrie: $\delta (x,y)=\delta (y,x)$
* Inégalité triangulaire : $\delta (x,z)\leq \delta (x,y)+\delta (y,z)$
En particulier, on utilise souvent la distance euclidienne au carré (qui, contrairement à la distance euclidienne, ne vérifie pas l'inégalité triangulaire).

### Métriques prédéfinies

L'objectif d'apprentissage commun est de minimiser une métrique de distance pour des objets similaires et de la maximiser pour des objets distincts.

### Métriques apprises

Un cas plus général est celui où le vecteur de sortie du réseau jumeau est transmis à travers des couches de réseau supplémentaires mettant en œuvre des métriques de distance non linéaires.

## Réseaux siamois pour le suivi d'objets

Les réseaux siamois ont été utilisés dans le suivi d'objets (dans des flux vidéo). Dans le suivi d'objets, une entrée du réseau jumeau est une image d'exemplaire présélectionnée par l'utilisateur, l'autre entrée est une image de recherche plus grande, dont le travail de réseau jumeau est de localiser l'exemplaire à l'intérieur de l'image de recherche. En mesurant la similarité entre l'exemplaire et chaque partie de l'image de recherche, une carte du score de similarité peut être donnée par le réseau siamois. De plus, en utilisant un réseau entièrement convolutif, le processus de calcul du score de similarité de chaque secteur peut être remplacé par une seule couche de corrélation croisée.
Après avoir été introduit pour la première fois en 2016, les réseaux siamois entièrement convolutifs ont été utilisés dans de nombreux réseaux de neurones de suivi d'objets en temps réel : CFnet, StructSiam, SiamFC-tri, DSiam, SA-Siam, SiamRPN, DaSiamRPN, Cascaded SiamRPN, SiamMask, SiamRPN++, DWSiamRPN.

## Réseaux siamois dans le traitement du langage

Les réseaux siamois sont à la base du modèle Sentence BERT (SBERT), une version du modèle BERT développé par Google. L'idée derrière SBERT est de permettre de créer des plongements contextuels de phrase dans l'objectif d'accélérer les tâches de comparaison de phrases.
L'utilisation de réseaux siamois a permis de réduire un temps de computation de 65 heures (pour un set de 10 000 phrases sur un GPU V100) à 5 secondes avec SBERT.