Contrastive Learning
L’apprentissage contrastif entraîne les embeddings en rapprochant les paires correspondantes et en éloignant les autres échantillons. Découvre InfoNCE, SimCLR, MoCo, CLIP et le code.
L’apprentissage contrastif entraîne un modèle à produire des plongements où les paires d’échantillons correspondants, appelées positives, sont proches les unes des autres, tandis que les échantillons non correspondants, appelés négatifs, sont éloignés. Les paires peuvent provenir des données elles-mêmes, comme deux recadrages augmentés de la même photo, ou de données naturellement associées, comme une image et sa légende ; l’apprentissage contrastif ne nécessite donc pas d’étiquettes de classe. C’est l’une des principales familles de méthodes d’apprentissage auto-supervisé pour les images, avec la reconstruction masquée et l’auto-distillation. Les encodeurs ainsi entraînés produisent des caractéristiques transférables à la détection, à la classification et à la récupération ; le même objectif entraîne des modèles vision-langage comme CLIP, qui peuvent ensuite classer des images à partir du seul texte grâce à l’apprentissage zéro-shot.
Fonctionnement de l'apprentissage contrastif#
Une méthode contrastive comporte trois éléments : un moyen de créer des paires positives, un encodeur qui convertit chaque échantillon en un plongement normalisé et une fonction de perte qui compare les similarités. Dans SimCLR, Ting Chen et ses collègues de Google ont créé deux vues de chaque image par recadrage aléatoire, distorsion des couleurs et flou, puis les ont encodées avec un même ResNet suivi d'une petite tête de projection. Les autres images du lot étaient considérées comme négatives :
L'augmentation des données détermine ce que le modèle apprend à ignorer. Puisque deux recadrages d'une même image doivent être projetés vers des points proches, l'encodeur apprend que les variations de position, d'échelle et de couleur ne changent pas ce que l'image représente ; il conserve les caractéristiques qui distinguent une image de toutes les autres. Avec un ResNet-50 quatre fois plus large que la version standard, un classificateur linéaire entraîné sur les caractéristiques gelées de SimCLR a atteint une exactitude top-1 de 76,5 % sur ImageNet, égalant un ResNet-50 supervisé.
Fonctions de perte contrastives#
- Perte contrastive par paire : la perte de 2006 de Raia Hadsell, Sumit Chopra et Yann LeCun rapproche chaque paire positive et éloigne chaque paire négative jusqu'à ce que leur distance soit d'au moins une marge m.
- Perte par triplets : compare une ancre à un exemple positif et un exemple négatif, et exige que le positif soit plus proche d'une marge donnée. En 2015, FaceNet, développé par Google, a entraîné des plongements de visages avec cette méthode.
- InfoNCE : compare simultanément un exemple positif à de nombreux exemples négatifs. Avec des similarités s divisées par une température τ, la perte pour une ancre est −log[exp(s₊/τ) / Σⱼ exp(sⱼ/τ)], une entropie croisée softmax où le positif est la classe correcte parmi tous les candidats. Aaron van den Oord et ses collègues ont introduit ce nom en 2018 dans le cadre du codage prédictif contrastif. La perte NT-Xent de SimCLR et celle de CLIP en sont des variantes.
- Perte sigmoïde : SigLIP évalue chaque paire comme une correspondance indépendante par oui ou par non au moyen d'une sigmoïde ; la perte n'a donc pas besoin d'être normalisée sur l'ensemble du lot.
Dans PyTorch, InfoNCE se réduit à une entropie croisée appliquée à une matrice de similarité dont la diagonale contient les exemples positifs :
import torch
import torch.nn.functional as F
torch.manual_seed(0)
# Stand-in embeddings for 8 images, a second view of each (row i of both is a positive pair),
# and 8 unrelated images
view1 = F.normalize(torch.randn(8, 128), dim=1)
view2 = F.normalize(view1 + 0.1 * torch.randn(8, 128), dim=1)
unrelated = F.normalize(torch.randn(8, 128), dim=1)
# InfoNCE: cosine similarities divided by a temperature, then cross-entropy where
# each row's positive (the diagonal) is the correct class among all 8 candidates
temperature = 0.1
targets = torch.arange(8)
for name, keys in [("Augmented views", view2), ("Unrelated images", unrelated)]:
logits = view1 @ keys.T / temperature
print(f"{name}: loss {F.cross_entropy(logits, targets):.3f}")Le script affiche Augmented views: loss 0.016 et Unrelated images: loss 2.505. Lorsque le positif de chaque ligne est clairement la clé la plus similaire, la perte tend vers zéro. Avec des clés sans rapport, elle dépasse ln 8 ≈ 2.08, soit la perte d'une prédiction uniforme parmi huit candidats, car une division par une température de 0.1 transforme des similarités dues au hasard en prédictions erronées très confiantes. Une température plus basse rend le softmax plus sélectif et concentre la perte sur les négatifs les plus difficiles. MoCo utilise τ = 0.07 et CLIP initialise sa température apprise à la même valeur.
Négatifs, taille de lot et variantes#
InfoNCE s'améliore avec un plus grand nombre de négatifs, ce qui en fait un coût essentiel. SimCLR les tirait de lots très volumineux. MoCo, développé par Kaiming He et ses collègues de Facebook AI Research, conservait une file de 65 536 plongements issus de lots récents comme exemples négatifs et les encodait avec une copie de l'encodeur mise à jour lentement par momentum, ce qui dissocie le nombre de négatifs de la taille du lot. Les négatifs aléatoires peuvent être de faux négatifs, comme une autre photo d'un chien de la même race, tandis que les négatifs trop faciles apportent peu d'information ; c'est pourquoi l'extraction de négatifs difficiles recherche les échantillons faciles à confondre. L'apprentissage contrastif supervisé (SupCon) utilise les étiquettes pour considérer tous les échantillons d'une même classe comme positifs. Des méthodes non contrastives comme BYOL, SimSiam et DINO éliminent complètement les négatifs et évitent de projeter toutes les entrées vers un même plongement au moyen de réseaux asymétriques, de gradients interrompus ou du centrage.
Apprentissage contrastif et concepts connexes#
- Apprentissage métrique : tâche plus générale consistant à apprendre une fonction de distance, dont dérivent les pertes contrastive et par triplets. Aujourd'hui, l'« apprentissage contrastif » désigne généralement la forme auto-supervisée à nombreux négatifs popularisée par SimCLR et MoCo.
- Autoencodeurs : apprennent en reconstruisant l'entrée ; leurs caractéristiques doivent donc préserver les détails au niveau des pixels. Les caractéristiques contrastives ne conservent que ce qui distingue un échantillon des autres.
- JEPA : prédit les plongements des régions masquées d'une image à partir des régions visibles. Il apprend dans l'espace des plongements sans paires négatives.
- Apprentissage supervisé : entraîne un modèle à prédire un ensemble fixe de classes attribuées par des humains, tandis que le préentraînement contrastif nécessite uniquement une règle déterminant quels échantillons correspondent.
Applications#
- Modèles vision-langage : CLIP a entraîné un encodeur d'images et un encodeur de texte sur 400 millions de paires image-légende, avec des lots de 32 768 éléments, afin que des requêtes textuelles puissent classer et rechercher des images. Les modèles YOLOE-26 d'Ultralytics encodent les noms de classes avec l'encodeur de texte MobileCLIP2 d'Apple, entraîné au moyen d'un objectif contrastif de type CLIP. Ils évaluent chaque région candidate par rapport à ces plongements textuels dans une tête contrastive :
set_classes(["forklift", "pallet"])transforme ainsi les mêmes poids en détecteur de nouvelles catégories. - Recherche sémantique : les plongements d'images et de textes entraînés de manière contrastive sont stockés dans une base de données vectorielle et recherchés par similarité.
- Préentraînement avec peu d'étiquettes : dans des domaines comme l'analyse d'images médicales, où les étiquettes produites par des experts sont rares, le préentraînement contrastif sur des examens non étiquetés fournit un backbone que l'ajustement fin adapte à l'aide d'un petit ensemble étiqueté.
- Reconnaissance faciale et réidentification : les pertes contrastive et par triplets entraînent des plongements où les photos d'une même personne ou d'un même objet sont proches les unes des autres. Les plongements de 128 dimensions de FaceNet ont atteint une exactitude de 99,63 % sur le benchmark Labeled Faces in the Wild.










