o problema
Em 2020 o transformer já era padrão em nlp, e a receita de pré-treinar num corpus gigante e fazer fine-tuning depois tinha empurrado modelos para além de 100 bilhões de parâmetros sem sinal de saturação. Visão computacional seguia noutra estrada: ResNet e derivados, arquiteturas convolucionais afinadas por uma década.
A tentativa óbvia não fecha a conta. Atenção ingênua sobre uma imagem faz cada pixel atender a todos os outros, e o custo é quadrático no número de pixels: uma imagem de 224 por 224 tem mais de 50 mil posições. A saída da literatura foi aproximar — atenção só na vizinhança local, atenção esparsa, atenção só ao longo de um eixo. Todas funcionavam no papel e todas exigiam padrões de atenção especializados, difíceis de implementar rápido em acelerador. O resultado prático é que essas arquiteturas nunca escalaram de verdade em hardware, e o estado da arte continuava sendo ResNet.
a ideia
Não aproxime a atenção: reduza a sequência antes dela. A imagem é cortada numa grade de quadrados de tamanho fixo, cada quadrado é achatado num vetor, e essa sequência entra num transformer encoder sem nenhuma modificação. Com patches de 16 por 16 numa imagem de 224, sobram 196 tokens — a mesma ordem de grandeza de uma frase. O patch vira a palavra.
O que se perde nesse corte é o viés indutivo da convolução: localidade, estrutura de vizinhança 2D e equivariância a translação. Na CNN isso está assado em cada camada. No ViT, só as camadas MLP são locais; a atenção é global desde a primeira, e as relações espaciais entre patches precisam ser aprendidas do zero. A aposta do paper é que, acima de certa quantidade de dados, aprender esses padrões sai melhor que recebê-los prontos.
como funciona
Cada patch achatado passa por uma projeção linear treinável para a dimensão D do modelo. Copiando o BERT, prepende-se um token [class] aprendido, cujo estado na saída da última camada serve de representação da imagem inteira. Somam-se position embeddings 1D aprendidos. O encoder é o de Vaswani: camadas alternadas de multi-head self-attention e MLP, com layernorm antes de cada bloco e conexão residual depois, GELU no MLP. A cabeça de classificação é um MLP de uma camada oculta no pré-treino e uma única camada linear no fine-tuning.
Três tamanhos, herdados do BERT: Base com 12 camadas, D igual a 768 e 86M de parâmetros; Large com 24 camadas e 307M; Huge com 32 camadas e 632M. A notação ViT-L/16 é o Large com patch 16.
O fine-tuning roda em resolução maior que o pré-treino. O patch continua do mesmo tamanho, então a sequência fica mais longa e os position embeddings pré-treinados deixam de bater — os autores fazem interpolação 2D deles conforme a posição original na imagem. Esse ajuste e o corte inicial em patches são os únicos dois pontos em que alguém injeta conhecimento sobre a estrutura 2D da imagem.
o que isso custou
Dados. Pré-treinado só no ImageNet, o ViT-Large fica atrás do ViT-Base, mesmo com regularização — modelo maior piora. Em subconjuntos do JFT, o ViT-B/32 perde feio para o ResNet50 com 9M de imagens e ganha a partir de 90M. O viés convolucional não era enfeite: ele é útil enquanto os dados são poucos.
Os números de topo dependem do JFT-300M, que é interno do Google. Com o ImageNet-21k, público, o ViT-L/16 faz 85,30% no ImageNet contra 88,55% do ViT-H/14 treinado no JFT. A economia de compute anunciada — 2,5 mil TPUv3-core-days contra 9,9 mil do BiT-L — vem com a ressalva dos próprios autores de que schedule, otimizador e weight decay também influenciam a comparação.
O pré-treino auto-supervisionado, que é o que fez o BERT funcionar em texto, não pegou aqui: previsão de patch mascarado leva o ViT-B/16 a 79,9% no ImageNet, dois pontos acima do treino do zero e ainda quatro pontos abaixo do pré-treino supervisionado. O paper também só trata classificação; detecção e segmentação ficam como trabalho futuro. E a atenção continua quadrática — o patch apenas moveu o problema para outra escala.
onde isso aparece hoje
O ViT é o encoder de imagem padrão da geração seguinte. O CLIP usa ViT nos seus modelos mais fortes, e a tokenização por patch virou a forma default de enfiar imagem num transformer — é o que permite que imagem e texto virem a mesma coisa, sequência de vetores, dentro de um modelo só.
O caminho de volta também importa: o encoder é o de Attention Is All You Need sem alteração, o token de classe e os tamanhos Base e Large vêm direto do BERT. O paper é menos uma arquitetura nova que a demonstração de que a arquitetura de texto já servia, e de que a curva de escala descrita em Scaling Laws for Neural Language Models não era exclusividade da linguagem.