87,5 M parâmetros para imagens, 63,2 M para texto (contados no laboratório). As torres não compartilham nenhum peso: só se encontram na perda.
: pares no lote · B/32: o ViT Base (12 camadas, largura 768) com patches de 32 × 32 · [CLS]: um token extra cuja saída resume a imagem · fim de texto: o último token da legenda, que faz o mesmo papel · 77: o contexto máximo da torre de texto.
O que a perda não pede
Ela nunca reconstrói, gera ou rotula: só distingue pares que casam de pares que não casam. O artigo mediu as alternativas, até a mesma acurácia zero-shot no ImageNet:
objetivo
velocidade relativa
Transformer que prevê a legenda palavra por palavra
1×
prever quais palavras aparecem (saco de palavras)
3×
contrastivo: qual legenda vai com qual imagem
12× (4× o saco de palavras)
Discriminar é um objetivo muito mais barato que gerar — e quase tão informativo.
zero-shot: classificar sem nenhum exemplo de treino da tarefa, só a partir dos nomes das classes escritos como frases (slide 17).
A perda
, : os embeddings normalizados, ; a linha de cada um vem do par .
A linha de é uma classificação entre classes: qual legenda pertence à imagem ? A resposta é .
As colunas fazem a pergunta inversa: qual imagem pertence à legenda ?
InfoNCE simétrica: uma entropia cruzada de softmax cujos rótulos são arange(N).
: a dimensão do espaço comum (512 no ViT-B/32) · : a temperatura · CE(logits, diag): entropia cruzada em que a resposta certa da linha é a coluna · arange(N).
À mão: normalizar, depois comparar
. Normas das linhas de : ; ; — não 1.
Divida cada linha pela sua norma. Como a matriz de imagens aqui é igual à identidade, : a coluna é a legenda normalizada, p.ex. .
A diagonal vence toda linha e toda coluna: as seis buscas estão certas.
À mão: as duas direções
Divida por (p.ex. ) para obter os logits (os valores que entram no softmax) e aplique o softmax nas duas direções:
direção
da resposta certa, por par
perda
linhas (imagem → texto)
· ·
colunas (texto → imagem)
· ·
Linha 2: .
Coluna 3: a legenda 3 tem cosseno com a imagem 2, então .
Não é o mesmo número — por isso a perda tira a média: .
Os mesmos embeddings,
Nada se move: mesmos vetores, mesmos cossenos. Só o vai de para .
O que acontece com a perda? E com a acurácia?
Os logits agora são o próprio e o softmax fica quase plano: a linha 2, , vira ; ; .
(as duas direções dão e ), mais da metade do (log natural) que um chute cego paga, dando a cada legenda.
O ranking — e portanto a acurácia — é idêntico: 3 de 3.
A temperatura decide o quanto a perda insiste, não o que o modelo sabe.
Simulador · o código da perda, linha a linha
I_cru · imagens
T_cru · legendas
Simulador · a matriz de similaridade do lote
A temperatura é aprendida
Guardada como , começa em e é limitada para que .
Os modelos publicados terminam no limite: , . O treino continuou pedindo um softmax mais afiado.
No laboratório, uma imagem do CIFAR-10 por classe com a photo of a {class}.:
1
0,07
0,01
0,003
perda
2,2468
1,5728
0,2698
0,4019
Em todo : 100 % imagem → texto (10 de 10), 90 % texto → imagem (9 de 10). Abaixo de 0,01 a perda volta a subir — a legenda cuja melhor imagem é a errada custa mais quanto mais afiado o softmax.
Um chute cego entre 10 legendas paga log 10 = 2,30.
O tamanho do lote faz parte do objetivo
Mesmo modelo, mesma temperatura. O lote cresce de 2 para 100 pares. O que acontece com a perda e com a acurácia?
2
10
20
50
100
0,69
2,30
3,00
3,91
4,61
perda
?
?
?
?
?
acurácia
?
?
?
?
?
Imagens de teste do CIFAR-100, uma por classe, com a photo of a {class}. · : o que paga um chute cego, que dá a cada legenda · acurácia: fração das imagens cuja legenda mais próxima, entre as do lote, é a certa.
O tamanho do lote · resposta
2
10
20
50
100
0,69
2,30
3,00
3,91
4,61
perda
0,071
0,469
0,733
1,183
1,592
acurácia
0,978
0,868
0,807
0,710
0,636
acaso,
0,50
0,10
0,05
0,02
0,01
Nada no modelo mudou: os mesmos embeddings enfrentam mais concorrentes. A perda sobe e a acurácia cai.
Cada uma das outras legendas é um negativo: um lote maior é uma prova mais difícil. O CLIP treinou com : 32.767 negativos por imagem.
SigLIP: uma sigmoide por par
Cada uma das células é um "casa ou não?" independente — sem softmax sobre o lote.
O viés começa em : de cada células são negativos. Com , o modelo começa dizendo "não casa" para tudo.
Sem normalização sobre o lote: lotes pequenos funcionam e não é preciso all-gather. Claramente melhor em lotes pequenos, tão bom quanto nos grandes.
na diagonal (), fora dela · : escala aprendida (faz o papel de ; é um escalar, não a matriz ) · : a sigmoide, · : viés aprendido · : o cosseno da célula · all-gather: juntar os embeddings de todos os aceleradores, que o softmax sobre o lote exige.
A maioria dos VLMs abertos recentes (modelos de visão-linguagem: modelos de linguagem que também leem imagens), como o PaliGemma, o Idefics2 e 3 e o Gemma 3, usa um encoder de imagem da família SigLIP. Escolhendo uma torre de imagem hoje? Comece por ela.
Classificação zero-shot
Classificação zero-shot com o CLIP. Em cima, cada nome de classe vira um prompt, passa pela torre de texto e vira uma linha de uma matriz W, C por d. Embaixo, a imagem passa pela torre de imagem e vira um vetor unitário x. Os logits são W x dividido por tau; a classe com o maior é a previsão. O conjunto é uma camada linear sem viés cujos pesos foram digitados.C NOMES DE CLASSEcatdogship · …UM PROMPT POR CLASSE“a photo of a cat.”“a photo of a dog.”“a photo of a ship.” …Torre de textoencoder · proj. · L2W · C × dwcatwdogwshipimagema que vamos classificarTorre de imagemencoder · projeção · L2x · d = 512logits = W x / τcosseno × 100cat0,26 → 26dog0,22 → 22ship0,19 → 19ŷ = catargmax dos logitsA MESMA COISA, COMO CAMADAnn.Linear(512, C, bias=False)peso = W: digitado, não treinado
É uma camada linear cujos pesos você digitou
Empilhe os embeddings normalizados dos prompts (um por classe) em ; é o embedding normalizado da imagem:
Isso é uma nn.Linear(512, C, bias=False) (entram , saem classes) com como peso. Zero parâmetros treinados.
Uma décima primeira classe? Escreva uma décima primeira frase.
Laboratório, 1.000 imagens de teste do CIFAR-10 (100 por classe, 32 × 32 ampliadas para 224 × 224): 0,895 de acurácia. Erro mais frequente: deer → horse (17 dos 100 cervos).
"Zero-shot" promete mais do que parece
O CLIP viu 400 milhões de imagens legendadas. Objetos comuns foram descritos ali muitas vezes.
Isto está mais perto de uma busca num conjunto de treino enorme com índice em linguagem natural
que de aprender do nada.
O que é novo: o conjunto de classes é definido na inferência, em linguagem, por quem estiver digitando.
Quanto vale uma frase? Uma sonda linear (linear probe: regressão logística treinada sobre os embeddings do CLIP de imagens rotuladas de treino por classe) precisa de 8 a 16 por classe para alcançar os 0,895 (laboratório: 0,602 com 1, 0,832 com 4, 0,911 com 16).
A redação do prompt
Mesmo modelo, mesmas 1.000 imagens, nenhum treino: só a frase de cada classe muda. Ordene do pior para o melhor.
prompt
acurácia no CIFAR-10
{} (nome da classe sozinho)
?
a photo of a {}.
?
a blurry photo of a {}.
?
a photo of a {}, a type of flower.
?
média de 18 templates
?
{} recebe o nome da classe (cat, ship…) · as imagens do CIFAR são borradas a 224 px · média: o embedding médio das 18 frases que os autores do CLIP escreveram para o CIFAR-10.
A redação do prompt · resposta
prompt
acurácia no CIFAR-10
contra o nome sozinho
{} (nome da classe sozinho)
0,874
—
a photo of a {}.
0,895
+0,021
a blurry photo of a {}.
0,894
+0,020
a photo of a {}, a type of flower.
0,893
+0,019
média de 18 templates
0,916
+0,042
O CLIP viu legendas, não rótulos: uma palavra solta é uma legenda incomum.
O contexto errado quase não custa: as mesmas palavras em toda classe se cancelam no argmax.
ImageNet, no artigo: +1,3 ponto para "a photo of a {}." e mais +3,5 para 80 templates. Um remendo, não uma propriedade.
Busca: o mesmo produto escalar, lido ao contrário
Texto → imagem
Ordene 1.000 imagens do CIFAR-10 para a photo of a {class}.
Precisão@10 (fração das 10 primeiras que são da classe), média das 10 classes: 0,96
Texto livre também funciona: a red car, a ship on the open sea.
Imagem → texto
Ordene as 100 legendas do CIFAR-100 (uma por classe) para cada uma de 500 imagens.
Recall@1 (a certa vem em primeiro): 0,634
Recall@5 (a certa está entre as 5 primeiras): 0,866
Um produto escalar por candidato: é assim que funcionam a busca com CLIP, o CLIPScore e a filtragem de conjuntos de dados.
A geometria: um gap entre modalidades
No laboratório, um gato e a photo of a cat. têm cosseno 0,21 — e é um par correto. Qual é o cosseno entre duas imagens ao acaso?
Duas imagens ao acaso: 0,755. Duas legendas ao acaso: 0,671 (médias sobre todos os pares, quase todos sem relação).
Uma imagem e o seu prompt: 0,258; os prompts errados: 0,201 (média sobre as 1.000 imagens do CIFAR-10).
"Imagem ou texto?" — uma regressão logística acerta 100 %.
As imagens ficam num cone da esfera e os textos em outro (Liang et al., 2022).
O gap entre modalidades, desenhado
O gap entre modalidades, esboçado em duas dimensões. Oito imagens, em roxo, ficam num cone estreito da esfera unitária e as oito legendas, em verde, em outro; uma imagem fica mais perto das outras imagens que da sua própria legenda. Com o botão, a média de cada modalidade é subtraída e os vetores são normalizados de novo: os dois grupos se espalham pela esfera e cada imagem cai ao lado da sua legenda.imagenslegendas
Por que o gap não quebra o zero-shot
O argmax compara uma imagem com vários textos: um deslocamento comum a todos os textos se cancela.
Laboratório: subtraindo de cada modalidade a sua média (e normalizando de novo), o zero-shot só vai de 0,895 para 0,913.
O que muda é a escala: par certo 0,258 → 0,241, pares errados 0,201 → −0,016.
Ele importa quando imagens e textos dividem um mesmo índice: uma imagem costuma ficar mais perto
de outras imagens que de qualquer legenda. E é por isso que similaridades "boas" do CLIP são números
pequenos (0,2–0,35).
Um saco de palavras
legenda A
legenda B
cosseno
a dog chasing a cat
a cat chasing a dog
0,992
a cup on top of a book
a book on top of a cup
0,976
a red cube and a blue sphere
a blue cube and a red sphere
0,974
one cat
three cats
0,884
a dog chasing a cat
dog a cat a chasing
0,893
a dog chasing a cat
a photo of an airplane
0,692
O embedding sabe quais palavras estão lá muito melhor do que como elas estão arranjadas. Um modelo de frase embaralhado, photo a {} of a., ainda classifica com 0,896 (contra 0,895 do original).
As limitações honestas
Contagem e relações espaciais: "três gatos" ≈ "um gato"; o artigo lista a contagem entre as suas tarefas fracas.
Composição: qual objeto tem qual atributo, quem fez o quê a quem (Yuksekgonul et al., 2023).
Sensibilidade ao prompt: a redação move a acurácia em pontos.
As associações da internet: falhas documentadas em raça, gênero e ocupação — herdadas por todo modelo condicionado ao CLIP.
Onde o CLIP fica neste curso
uso
o que o CLIP fornece
condicionar a difusão
o SD faz atenção cruzada com embeddings de texto do CLIP; SD3 e FLUX acrescentam o T5 para prompts longos e composicionais
a torre de imagem de um VLM
hoje, em geral, da família SigLIP
busca
um produto escalar por candidato
avaliação
CLIPScore — cego à ordem das palavras, como o CLIP
curadoria de dados
o LAION foi filtrado por similaridade do CLIP
O CLIP é a ponte: da próxima aula em diante, todo gerador é condicionado a uma frase.
SD: Stable Diffusion (próxima aula) · SD3, FLUX: modelos texto-para-imagem posteriores · T5: o encoder do Transformer texto-para-texto do Google · VLM: modelo de linguagem que também lê imagens · CLIPScore: o cosseno do CLIP entre uma imagem gerada e o seu prompt, reescalado · LAION: conjunto aberto de bilhões de pares imagem–texto da web.
A lição que sobreviveu à arquitetura
O DataComp, um benchmark construído sobre o código do OpenCLIP, manteve arquitetura e custo computacional fixos e variou só os dados.
Uma fração filtrada de um conjunto bateu o conjunto inteiro.
O melhor conjunto filtrado do DataComp treinou um ViT-L/14 (o ViT Large, com patches de 14 × 14) que superou o da própria OpenAI, com o mesmo custo.
Nesta escala, construir o conjunto de dados é a arquitetura do modelo.
Laboratório · um espaço, medido
Notebook no Colab, atividade de ~2 h (poucos minutos de computação numa GPU T4 gratuita, 10 a 20 min em CPU), openai/clip-vit-base-patch32 no CIFAR-10 e no CIFAR-100. Cada seção termina num checkpoint.
as duas torres: formatos e larguras
a perda contrastiva à mão, contra a do modelo
a temperatura
o tamanho do lote como parte do objetivo
zero-shot como camada linear
templates de prompt
busca nas duas direções
a geometria: gap entre modalidades, saco de palavras
zero-shot contra poucos exemplos — e os seus prompts, avaliados em imagens novas
Dois encoders, um espaço: uma interface entre visão e linguagem, não um gerador.
A perda é contrastiva e simétrica, : a diagonal está certa, nas duas direções.
A temperatura muda a perda, não o ranking. O tamanho do lote decide o quão difícil é a prova.
SigLIP: uma sigmoide por par, sem softmax sobre o lote. A torre de imagem a escolher hoje.
Zero-shot = uma camada linear cujos pesos são frases; a redação importa.
Um gap entre modalidades e um saco de palavras: o que a perda nunca pediu.
A curadoria de dados importou mais que a arquitetura.
Roteiro: (1) a ideia e as duas torres; (2) a perda contrastiva, à mão; (3) as suas duas decisões de
projeto (temperatura e tamanho do lote) e o SigLIP; (4) classificação zero-shot e prompts; (5) a
geometria do espaço e as limitações; (6) onde o CLIP fica no curso. Fecha com o laboratório no
Colab.
Deixe a turma responder primeiro. O ponto: um conjunto fixo de rótulos é decidido no treino; com o
CLIP o conjunto de classes é decidido por quem estiver digitando.
Avance passo a passo: o lote, as duas torres, as projeções para um espaço só, a matriz e os dois sentidos da perda. Passe o mouse numa caixa para ver as suas setas. Roxo é o lado da imagem, verde o do texto; as células laranja são os pares que casam.
As projeções são a única razão de o produto escalar estar definido: as torres nem têm a mesma
largura. Depois da normalização, produto escalar = cosseno.
Comece no caso "o exemplo da página": os números são os dos três slides anteriores. Avance linha a linha.
Depois: τ = 1 (perda 0,626, mesma acurácia), "um negativo difícil" (a acurácia texto → imagem cai para 2/3; imagem → texto continua 3/3) e
"chute cego" (perda = log 3).
Comece com N = 16, tau = 0,07. Arraste o tau até 1: a perda salta, a acurácia não se move. Depois
lote de 4 → 64 com tau fixo: o mesmo tipo de embedding, uma prova mais difícil. Por fim troque o
objetivo para SigLIP.
Por que tão pequena: os cossenos das legendas certas e erradas diferem por alguns centésimos; só um
1/tau grande transforma isso num softmax confiante.
Laboratório, seção 4: imagens de teste do CIFAR-100, uma por classe, 200 lotes sorteados por N,
mesmo modelo e mesmo tau. Com N = 32.768 a matriz de similaridade teve de ser espalhada por centenas
de aceleradores.
Avance passo a passo: os prompts viram os pesos W, a imagem vira x e a previsão é o argmax de W x / τ. Os cossenos têm o tamanho que o laboratório mede.
Aperte o botão: subtrair a média de cada modalidade abre os dois cones e cada imagem cai ao lado da sua legenda. Os números são os do laboratório.