Contrastive Learning
A aprendizagem contrastiva treina embeddings aproximando pares correspondentes e afastando outras amostras. Veja InfoNCE, SimCLR, MoCo, CLIP e código.
O aprendizado contrastivo treina um modelo para produzir incorporações em que pares de amostras correspondentes, chamados positivos, ficam próximos, e amostras não correspondentes, chamadas negativas, ficam distantes. Os pares podem vir dos próprios dados, como dois recortes aumentados da mesma foto, ou de dados naturalmente pareados, como uma imagem e sua legenda, por isso o aprendizado contrastivo não precisa de rótulos de classe. É uma das principais famílias de métodos de aprendizado autossupervisionado para imagens, junto com a reconstrução mascarada e a autodestilação. Codificadores treinados dessa forma produzem características que se transferem para detecção, classificação e recuperação, e o mesmo objetivo treina modelos de visão e linguagem, como o CLIP, que pode classificar imagens apenas com texto por meio do aprendizado zero-shot.
Como funciona a aprendizagem contrastiva#
Um método contrastivo tem três componentes: uma forma de criar pares positivos, um codificador que converte cada amostra num embedding normalizado e uma função de perda que compara semelhanças. No SimCLR, Ting Chen e colegas da Google criaram duas vistas de cada imagem com recortes aleatórios, distorção de cor e desfocagem, codificaram ambas com uma ResNet partilhada, seguida de uma pequena cabeça de projeção, e trataram as outras imagens do lote como negativas:
O aumento de dados define o que o modelo aprende a ignorar. Como dois recortes da mesma imagem têm de ser mapeados para pontos próximos, o codificador aprende que as alterações de posição, escala e cor não mudam o que a imagem representa e mantém as características que distinguem uma imagem das restantes. Com uma ResNet-50 quatro vezes mais larga do que a versão padrão, um classificador linear treinado com as características congeladas do SimCLR atingiu 76.5% de precisão top-1 no ImageNet, igualando uma ResNet-50 supervisionada.
Funções de perda contrastiva#
- Perda contrastiva por pares: a função de perda de 2006 de Raia Hadsell, Sumit Chopra e Yann LeCun aproxima cada par positivo e afasta cada par negativo até que a distância entre os dois seja, no mínimo, igual a uma margem m.
- Perda tripla: compara uma âncora com um exemplo positivo e um negativo, exigindo que o positivo esteja mais próximo por uma margem. Em 2015, a FaceNet da Google treinou embeddings faciais com esta função.
- InfoNCE: compara um positivo com muitos negativos em simultâneo. Com as semelhanças s divididas por uma temperatura τ, a perda de uma âncora é −log[exp(s₊/τ) / Σⱼ exp(sⱼ/τ)], uma entropia cruzada softmax em que o positivo é a classe correta entre todos os candidatos. Aaron van den Oord e colegas deram-lhe este nome em codificação preditiva contrastiva, em 2018; a perda NT-Xent do SimCLR e a perda do CLIP são variantes desta função.
- Perda sigmoide: o SigLIP avalia cada par como uma correspondência independente de sim ou não através de uma sigmoide, pelo que a perda não precisa de normalização ao longo do lote.
No PyTorch, a InfoNCE reduz-se à entropia cruzada aplicada a uma matriz de semelhanças cuja diagonal contém os positivos:
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}")Apresenta Augmented views: loss 0.016 e Unrelated images: loss 2.505. Quando o positivo de cada linha é claramente a chave mais semelhante, a perda aproxima-se de zero. Com chaves não relacionadas, ultrapassa ln 8 ≈ 2.08, a perda de uma escolha uniforme entre oito candidatos, porque dividir por uma temperatura de 0.1 transforma semelhanças aleatórias em previsões erradas feitas com confiança. Uma temperatura mais baixa torna a softmax mais acentuada e concentra a perda nos negativos mais difíceis. O MoCo usa τ = 0.07, e o CLIP inicializa a sua temperatura aprendida com o mesmo valor.
Negativos, tamanho do lote e variantes#
A InfoNCE melhora com mais negativos, o que faz do número de negativos um custo central. O SimCLR obtinha-os a partir de lotes muito grandes. O MoCo, criado por Kaiming He e colegas da Facebook AI Research, mantinha uma fila de 65,536 embeddings de lotes recentes como negativos e codificava-os com uma cópia do codificador atualizada lentamente por momentum, o que separa o número de negativos do tamanho do lote. Negativos aleatórios podem ser falsos negativos, como outra fotografia de um cão da mesma raça, e os negativos muito fáceis ensinam pouco; por isso, a mineração de negativos difíceis procura amostras que possam ser confundidas. A aprendizagem contrastiva supervisionada (SupCon) usa rótulos para tratar todas as amostras da mesma classe como positivas. Métodos não contrastivos, como BYOL, SimSiam e DINO, eliminam por completo os negativos e evitam que todos os exemplos colapsem para o mesmo embedding através de redes assimétricas, gradientes interrompidos ou centralização.
Aprendizagem contrastiva e conceitos relacionados#
- Aprendizagem de métricas: tarefa mais abrangente de aprender uma função de distância, da qual derivam as perdas contrastiva e tripla. Atualmente, «aprendizagem contrastiva» refere-se, em geral, à variante autossupervisionada com muitos negativos, popularizada pelo SimCLR e pelo MoCo.
- Autoencoders: aprendem a reconstruir a entrada, pelo que as suas características têm de preservar os detalhes ao nível dos píxeis. As características contrastivas mantêm apenas o que distingue uma amostra das restantes.
- JEPA: prevê os embeddings de regiões ocultas da imagem a partir das regiões visíveis, aprendendo no espaço dos embeddings sem pares negativos.
- Aprendizagem supervisionada: treina o modelo para reconhecer um conjunto fixo de classes atribuídas por humanos, enquanto a pré-treino contrastivo só precisa de uma regra para determinar quais as amostras que correspondem.
Aplicações#
- Modelos de visão e linguagem: o CLIP treinou um codificador de imagens e um codificador de texto com 400 milhões de pares imagem-legenda e lotes de 32,768, permitindo que os comandos de texto classifiquem e recuperem imagens. Os modelos Ultralytics YOLOE-26 codificam os nomes das classes com o codificador de texto MobileCLIP2 da Apple, treinado com um objetivo contrastivo ao estilo CLIP, e avaliam cada região candidata em relação a esses embeddings de texto numa cabeça contrastiva, pelo que
set_classes(["forklift", "pallet"])transforma os mesmos pesos num detetor para novas categorias. - Pesquisa semântica: os embeddings de imagens e texto treinados por contraste são armazenados numa base de dados vetorial e pesquisados por semelhança.
- Pré-treino com poucos rótulos: em áreas como a análise de imagens médicas, onde os rótulos especializados são escassos, o pré-treino contrastivo com exames sem rótulos fornece uma rede base que a afinação adapta com um pequeno conjunto rotulado.
- Reconhecimento facial e reidentificação: as perdas contrastiva e tripla treinam embeddings nos quais as fotografias da mesma pessoa ou objeto ficam próximas. Os embeddings da FaceNet, com 128 dimensões, atingiram 99.63% de precisão na referência Labeled Faces in the Wild.










