Comprendre la Perte de Classement, la Perte Contrastive, la Perte de Marge, la Perte de Triplet, la Perte de Charnière et tous ces noms confus

Après le succès de mon article Comprendre la Perte d’Entropie Croisée Catégorielle, La Perte d’Entropie Croisée Binaire, la Perte Softmax, la Perte Logistique, la Perte Focale et tous ces noms confus, et après avoir vérifié que la Perte de Triplet surpasse la Perte d’Entropie Croisée dans mon sujet de recherche principal (Récupération Multimodale), j’ai décidé d’écrire un article similaire expliquant les fonctions de Pertes de Classement.

Les pertes de classement sont utilisées dans différents domaines, tâches et configurations de réseaux neuronaux (comme les réseaux Siamois ou les réseaux Triplets). C’est pourquoi ils reçoivent différents noms tels que Perte Contrastive, Perte de Marge, Perte de Charnière ou Perte de Triplet.

Fonctions de Perte de Classement: Apprentissage métrique

Contrairement à d’autres fonctions de perte, telles que la Perte d’Entropie Croisée ou la Perte d’Erreur Quadratique Moyenne, dont l’objectif est d’apprendre à prédire directement une étiquette, une valeur ou un ensemble ou des valeurs données par une entrée, l’objectif du Classement des Pertes est de prédire les distances relatives entre les entrées. Cette tâche est souvent appelée apprentissage métrique.

Les fonctions de pertes de classement sont très flexibles en termes de données d’entraînement : Il suffit d’un score de similarité entre les points de données pour les utiliser. Ce score peut être binaire (similaire / différent). À titre d’exemple, imaginez un ensemble de données de vérification de visage, où nous savons quelles images de visage appartiennent à la même personne (similaires) et lesquelles non (différentes). En utilisant une fonction de perte de classement, nous pouvons entraîner un CNN à déduire si deux images de visage appartiennent à la même personne ou non.

Pour utiliser une fonction de perte de classement, nous extrayons d’abord les entités de deux (ou trois) points de données d’entrée et obtenons une représentation intégrée pour chacun d’eux. Ensuite, nous définissons une fonction métrique pour mesurer la similitude entre ces représentations, par exemple la distance euclidienne. Enfin, nous entraînons les extracteurs de caractéristiques à produire des représentations similaires pour les deux entrées, dans le cas où les entrées sont similaires, ou des représentations distantes pour les deux entrées, dans le cas où elles sont différentes.
Nous ne nous soucions même pas des valeurs des représentations, seulement des distances entre elles. Cependant, cette méthodologie de formation a démontré produire des représentations puissantes pour différentes tâches.

Formulation des pertes de classement

Différents noms sont utilisés pour classer les pertes, mais leur formulation est simple et invariante dans la plupart des cas. Nous distinguons deux types de pertes de classement pour deux configurations différentes: Lorsque nous utilisons des paires de points de données d’entraînement ou des triplets de points de données d’entraînement.
Les deux comparent les distances entre les représentations des échantillons de données d’entraînement.

Si vous préférez le format vidéo, j’ai fait une vidéo de ce post. Aussi disponible en espagnol:

Perte de classement par paire

Exemple d’une configuration de perte de classement par paires pour entraîner un réseau pour la vérification du visage de l’image. Dans cette configuration, les poids des CNN sont partagés. Nous l’appelons filets siamois. Mais une perte de classement par paire peut être utilisée dans d’autres configurations ou avec d’autres filets.

Pour les paires positives, la perte ne sera \(0\) que lorsque le filet produira des représentations pour les deux éléments de la paire sans distance entre eux, et la perte (et donc la mise à jour des paramètres nets correspondants) augmentera avec cette distance.

Pour les paires négatives, la perte sera \(0\) lorsque la distance entre les représentations des deux éléments de la paire est supérieure à la marge \(m\). Mais lorsque cette distance n’est pas supérieure à \(m\), la perte sera positive et les paramètres nets seront mis à jour pour produire une représentation plus éloignée de ces deux éléments. La valeur de perte sera au plus \(m\), lorsque la distance entre \(r_a\) et \(r_n\) est \(0\). La fonction de la marge est que, lorsque les représentations produites pour une paire négative sont suffisamment éloignées, aucun effort n’est gaspillé pour agrandir cette distance, de sorte qu’un entraînement ultérieur peut se concentrer sur des paires plus difficiles.

Perte de Classement du Triple

Exemple d’une configuration de perte de classement en triplets pour entraîner un filet pour la vérification du visage de l’image. Dans cette configuration, les poids des CNN sont partagés. Nous appelons cela des filets triples.

Analysons 3 situations de cette perte:

Source : https://omoindrot.github.io/triplet-loss. Représentation de trois “types de négatifs” pour une paire ancre et positive.

Sélection des négatifs

Une décision importante d’un entraînement avec perte de classement par triplet est la sélection des négatifs ou l’extraction de triplets. La stratégie choisie aura un impact important sur l’efficacité de la formation et la performance finale. Une appréciation évidente est que l’entraînement avec des Triplés faciles doit être évité, car leur perte résultante sera \(0\).

Les premières stratégies ont utilisé l’extraction de triplets hors ligne, ce qui signifie que les triplets sont définis au début de la formation, ou à chaque époque. Plus tard, l’extraction de triplets en ligne, ce qui signifie que des triplets sont définis pour chaque lot pendant la formation, a été proposée et a permis d’améliorer l’efficacité et les performances de la formation.
Le mode optimal de sélection des négatifs dépend fortement de la tâche. Mais je ne vais pas y entrer dans ce post, car son objectif n’est que de donner un aperçu des différents noms et approches pour classer les pertes. Reportez-vous à l’article de blog d’Oliver moindrot pour une analyse plus approfondie de l’extraction de triplets.

La perte de triplets dans le deep learning a été introduite dans Learning Fine-Grained Image Similarity with Deep Ranking et FaceNet : Une intégration unifiée pour la reconnaissance faciale et le Clustering.

Ce github contient des graphiques intéressants d’un modèle entraîné sur MNIST avec une Perte d’Entropie Croisée, une Perte de Classement par Paires et une Perte de Classement par Triplets, et le code Pytorch pour ces formations.

Les autres noms utilisés pour classer les Pertes

Les Pertes de classement sont essentiellement ceux expliqués ci-dessus, et sont utilisés dans de nombreuses applications différentes avec la même formulation ou des variations mineures. Cependant, différents noms sont utilisés pour eux, ce qui peut prêter à confusion. Ici, j’explique pourquoi ces noms sont utilisés.

  • Perte de classement: Ce nom vient du champ de recherche d’informations, où nous voulons entraîner les modèles à classer les éléments dans un ordre spécifique.
  • Perte de marge: Ce nom vient du fait que ces pertes utilisent une marge pour comparer des distances de représentations d’échantillons.
  • Perte contrastive: La perte contrastive fait référence au fait que ces pertes sont calculées en contrastant deux représentations de points de données ou plus. Ce nom est souvent utilisé pour la perte de classement par paire, mais je ne l’ai jamais vu l’utiliser dans une configuration avec des triplets.
  • Perte de triplets: Souvent utilisé comme nom de perte lorsque des paires d’entraînement de triplets sont utilisées.
  • Perte de charnière: Également connu sous le nom d’objectif de marge maximale. Il est utilisé pour la formation des SVM pour la classification. Il a une formulation similaire dans le sens où il optimise jusqu’à une marge. C’est pourquoi ce nom est parfois utilisé pour classer les pertes.

Filets Siamois et triplets

Les filets Siamois et triplets sont des configurations d’entraînement où la Perte de Classement par paires et la Perte de Classement par Triplets sont utilisées. Mais ces pertes peuvent également être utilisées dans d’autres configurations.
Dans ces configurations, les représentations des échantillons d’apprentissage dans la paire ou le triplet sont calculées avec des réseaux identiques avec des poids partagés (avec le même CNN).

Les filets siamois

sont construits par deux CNN identiques avec des poids partagés (les deux CNN ont les mêmes poids). Chacun de ces filets traite une image et produit une représentation. Ces représentations sont comparées et une distance entre elles est calculée. Ensuite, une perte de classement par paire est utilisée pour entraîner le réseau, de sorte que la distance entre les représentations produites par des images similaires est petite et la distance entre les représentations d’images non similaires est grande.

Étant donné que dans une configuration de réseau siamois, les représentations des deux éléments de la paire sont calculées par le même CNN, étant \(f(x)\) que CNN, nous pouvons écrire la Perte de classement par paire comme:

Filets triplets

L’idée est similaire à un filet siamois, mais un filet triplet a trois branches (trois CNN avec des poids partagés). Le modèle est entraîné en donnant simultanément une image positive et une image négative à l’image d’ancrage correspondante, et en utilisant une perte de classement Triplet. Cela permet au réseau d’apprendre mieux quelles images sont similaires et différentes de l’image d’ancrage.

Dans le cas des réseaux de triplets, puisque le même CNN\(f(x)\) est utilisé pour calculer les représentations des trois éléments de triplets, nous pouvons écrire la Perte de classement des triplets comme suit :

Perte de classement pour la récupération multimodale

Dans mes recherches, j’ai utilisé la perte de classement Triplet pour la récupération multimodale d’images et de texte. Les données d’apprentissage consistent en un ensemble de données d’images avec du texte associé. L’objectif est d’apprendre les intégrations des images et des mots dans un même espace pour une récupération cross-modale. Pour ce faire, nous apprenons et figeons d’abord les intégrations de mots à partir uniquement du texte, en utilisant des algorithmes tels que Word2Vec ou GloVe. Ensuite, nous visons à former un CNN à intégrer les images dans ce même espace: L’idée est d’apprendre à intégrer une image et sa légende associée au même point dans l’espace d’intégration multimodal.

La première approche à cet effet consistait à entraîner un CNN à prédire directement les intégrations de texte à partir d’images en utilisant une perte d’entropie croisée. Les résultats étaient bons, mais plus tard, nous avons découvert que l’utilisation d’un résultat de perte de classement en Triplet était meilleure.

La configuration est la suivante: Nous utilisons des intégrations de texte fixes (Gant) et nous n’apprenons que la représentation de l’image (CNN). Ainsi, l’échantillon d’ancrage \(a\) est l’image, l’échantillon positif \(p\) est le texte associé à cette image et l’échantillon négatif \(n\) est le texte d’une autre image “négative”. Pour choisir le texte négatif, nous avons exploré différentes stratégies d’extraction négative en ligne, en utilisant les distances dans l’espace des gants avec l’intégration de texte positif. L’extraction de triplets est particulièrement judicieuse dans ce problème, car il n’y a pas de classes établies. Compte tenu de la diversité des images, nous avons de nombreux triplets faciles. Mais nous devons faire attention à l’extraction de négatifs durs, car le texte associé à une autre image peut également être valable pour une image d’ancrage.

Formation de perte de classement Triplet d’un pipeline de récupération multimodal. Les intégrations de gants de texte sont fixes et nous entraînons le CNN à intégrer l’image plus près de son texte positif que du texte négatif.

En utilisant cette configuration, nous avons calculé des résultats quantitatifs pour comparer la formation en perte de classement Triplet avec la formation en Perte d’entropie croisée. Je ne vais pas expliquer les détails de l’expérience ici, mais la configuration est la même que celle utilisée dans (paper, blogpost). Fondamentalement, nous effectuons des requêtes textuelles et évaluons l’image par les performances de récupération de texte lors de l’apprentissage des données des médias sociaux de manière auto-supervisée. Les résultats utilisant une Perte de Classement en Triplets sont nettement meilleurs que ceux utilisant une Perte d’Entropie Croisée.

Récupération d’image par texte précision moyenne sur InstaCities1M.

Un autre avantage de l’utilisation d’une Perte de Classement Triplet à la place d’une Perte d’Entropie Croisée ou d’une Perte d’Erreur Quadratique Moyenne pour prédire les intégrations de texte, est que nous pouvons mettre de côté les intégrations de texte pré-calculées et fixes, que dans le cas de régression nous utilisons comme vérité au sol pour les modèles out. Cela permet d’utiliser RNN, LSTM pour traiter le texte, que nous pouvons former avec le CNN, et qui conduisent à de meilleures représentations.

Des approches similaires sont utilisées pour la formation de systèmes de récupération multimodaux et de systèmes de sous-titrage dans COCO, par exemple ici.

Classement des couches de perte dans les Frameworks d’apprentissage profond

Caffe

  • Couche De Perte Constrastive. Limité au calcul des pertes de classement par paires. Peut être utilisé, par exemple, pour former des réseaux siamois.

  • Couche de Perte de Classement du Triplet PyCaffe. Par David Lu pour former des réseaux de triplets.

PyTorch

  • Perte de cosinus. C’est une perte de classement par paire qui utilise la distance cosinus comme mesure de distance. Les entrées sont les caractéristiques des éléments de la paire, l’étiquette indiquant s’il s’agit d’une paire positive ou négative et la marge.

  • Perte de marge. Similaire au premier, mais utilise la distance euclidienne.

  • Perte de Tripletmargin. Une Perte de classement en Triplet en utilisant la distance euclidienne.

TensorFlow

  • contrastive_loss. Perte De Classement Par Paire.

  • triplet_semihard_loss. Perte de triplet avec minage négatif semi-dur.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.