CLIP e Modelos Multimodais

Demonstrações interativas da aula de CLIP e modelos multimodais

Quatro visualizações que acompanham os slides: a similaridade do cosseno cosθ = (u·v)/(‖u‖‖v‖) como medida de alinhamento no espaço compartilhado, a matriz contrastiva S = UVᵀ entre imagens e textos, a perda InfoNCE com temperatura τ e a classificação zero-shot, onde o classificador é montado na hora da inferência a partir dos prompts de texto.

1 · Cosseno e o espaço compartilhado

CLIP projeta imagens e textos num mesmo espaço e mede o alinhamento entre eles pela similaridade do cosseno cosθ = (u·v)/(‖u‖‖v‖). Como o cosseno só depende da direção, a comparação é feita sobre os vetores normalizados û = u/‖u‖ e v̂ = v/‖v‖, que vivem na circunferência de raio 1. Arraste as pontas de u (ciano) e v (laranja): o arco mostra o ângulo θ entre eles e os pontos na circunferência são û e .

Plano com u, v, o arco do ângulo θ e os normalizados û, v̂ na circunferência (arraste as pontas)

cosθ na reta de −1 a 1: 1 é alinhamento total, 0 é ortogonal, −1 é oposto

💡 Quando u e v apontam para o mesmo lado, cosθ se aproxima de 1 e os pontos û, quase coincidem. Em ângulo reto o produto interno zera (cosθ = 0) e em direções opostas cosθ = −1. Aumentar o comprimento de um vetor muda ‖u‖‖v‖ e u·v na mesma proporção, então o cosseno não muda: o que importa é a direção.

2 · Matriz de similaridade S = UVᵀ

No treino contrastivo um lote traz N imagens e N textos, codificados como vetores unitários ûi e j. A matriz de similaridade Sij = ûi·v̂j guarda o cosseno de cada par. Os pares corretos ficam na diagonal (os N positivos) e todo o resto são os N(N−1) negativos. Arraste os pontos nas duas circunferências para girar cada vetor e veja a matriz reagir.

Vetores unitários: imagens ûi (ciano) e textos v̂j (laranja) nas duas circunferências (arraste)

Matriz Sij = ûi·v̂j: linhas são imagens, colunas são textos, a diagonal (verde) são os positivos

💡 O objetivo do treino é deixar a diagonal alta (positivos com cosseno perto de 1) e o resto baixo (negativos com cosseno perto de 0 ou negativo). Alinhe û1 com 1: a célula S11 acende. Gire um texto para perto de outra imagem e um negativo fora da diagonal vai brilhar, exatamente o que a perda contrastiva quer evitar.

3 · InfoNCE e temperatura

A perda InfoNCE aplica um softmax sobre cada linha e cada coluna de S/τ: pij = exp(Sij/τ) / Σk exp(Sik/τ). Cada imagem deve escolher seu texto (softmax por linha) e cada texto deve escolher sua imagem (softmax por coluna). As probabilidades alvo são as da diagonal, e a perda final é LCLIP = ½(Limg→txt + Ltxt→img). A temperatura τ controla o quão afiada fica a distribuição. O controle de alinhamento gira cada texto na direção da sua imagem correspondente.

Softmax por linha plinha (imagem → texto), diagonal em verde

Softmax por coluna pcoluna (texto → imagem), diagonal em verde

Probabilidade da diagonal pii (softmax por linha): afia conforme τ diminui

💡 Com τ grande o softmax fica quase uniforme, as barras da diagonal ficam baixas e a perda alta. Com τ pequeno a distribuição afia: se a diagonal já é o maior valor da linha, sua probabilidade vai a 1 e a perda cai. Suba o alinhamento para empurrar cada texto na direção da sua imagem, a diagonal de S sobe e LCLIP despenca.

4 · Classificação zero-shot

Na classificação zero-shot o classificador é montado na hora da inferência: cada classe vira um prompt de texto (por exemplo "uma foto de um gato"), codificado num vetor unitário k. Para uma imagem û calculamos os escores sk = û·v̂k e aplicamos softmax(sk/τ) para obter a probabilidade de cada classe. A predição é o argmax. Arraste a imagem û e os prompts e veja a predição mudar.

Imagem û (ciano) e os prompts de classe v̂k na circunferência (arraste qualquer um)

Probabilidade de cada classe softmax(sk/τ): a classe vencedora fica em verde

💡 Nenhum peso foi treinado para essas classes: o classificador surge das comparações de cosseno na inferência. Aproxime û de um prompt e ele vence; coloque a imagem entre dois prompts e baixe τ para ver a decisão ficar mais agressiva, com quase toda a massa na classe mais próxima.