antonio leandro

ia generativa

An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

paper · Dosovitskiy, Alexey, Beyer, Lucas, Kolesnikov, Alexander, Weissenborn, Dirk, Zhai, Xiaohua, Unterthiner, Thomas, Dehghani, Mostafa, Minderer, Matthias · · ~46 min de leitura do original

a tese

cortar a imagem em quadrados de 16x16 e tratar cada um como palavra basta: com dados suficientes, o transformer padrão aprende sozinho o que a convolução tinha embutido no código

o que fica

  1. Escala de dados vence viés indutivo, mas só depois de um limiar: em subconjuntos de 9M imagens o ResNet50 ganha do ViT-B/32 com o mesmo compute, e a ordem se inverte a partir de 90M.
  2. O patch é o token: com quadrados de 16x16 numa imagem de 224 pixels, a sequência cai de 50.176 pixels para 196 posições, e a atenção quadrática volta a caber na memória.
  3. O tamanho do patch é o botão de custo, porque o comprimento da sequência é inversamente proporcional ao quadrado dele: trocar 32 por 16 quadruplica a conta.
  4. Position embedding 1D aprendido é suficiente — as variantes 2D e relativa não trouxeram ganho, porque o modelo aprende a topologia da imagem sozinho a partir de uma grade pequena.
  5. Os híbridos com ResNet na frente vencem o ViT puro em orçamentos pequenos de compute, e a vantagem desaparece nos modelos grandes.
  6. O melhor resultado do paper depende do JFT-300M, que é interno do Google: com o ImageNet-21k público o mesmo modelo cai de 88,55% para 85,30% no ImageNet.

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.

lido na íntegra por pipeline de llm, revisado por antonio leandro antes de publicar ·