Phase 08 - Lesson 19

Modelagem Autorregressiva Visual (VAR): Predição de Próxima Escala

Modelos de difusão realizam amostragem iterativamente no tempo (etapas de remoção de ruído). O VAR realiza amostragem iterativamente na escala — ele prediz um token de 1x1, depois de 2x2, depois de 4x4, até a resolução final, com cada escala se condicionando na anterior. O artigo de 2024 mostrou que o VAR se alinha com as leis de escala do estilo GPT para geração de imagens e supera o DiT com o mesmo orçamento de computação. Esta lição constrói o mecanismo principal.

Tipo: Build Linguagens: Python (com PyTorch) Pré-requisitos: Fase 7 Lição 03 (Multi-Head Attention), Fase 8 Lição 06 (DDPM) Tempo: ~90 minutos

O Problema

A geração autorregressiva dominou a modelagem de linguagem porque escala de forma previsível: mais computação, mais parâmetros, menor perplexidade, melhores saídas. A geração de imagens teve duas tentativas principais de AR antes de 2024: PixelRNN/PixelCNN (pixel por pixel) e DALL-E 1 / Parti / MuseGAN (token por token em códigos VQ-VAE).

Ambas sofreram com o problema da ordem de geração. Pixels e tokens são organizados em uma grade 2D, mas o modelo AR precisa visitá-los em uma ordem de varredura (raster) 1D. Um pixel inicial no canto não tem ideia do que a imagem eventualmente se tornará. A qualidade da geração escalou de forma pior do que o GPT para texto e nunca alcançou a qualidade dos modelos de difusão sob o mesmo orçamento de computação.

O VAR resolve o problema da ordem de geração alterando o que está sendo gerado. Em vez de prever tokens de imagem um por um no espaço, o VAR prevê uma imagem inteira em resoluções crescentes. Passo 1: prever um token 1x1 (o "resumo" geral da imagem). Passo 2: prever uma grade 2x2 de tokens (características mais grossas). Passo 3: prever uma grade 4x4. Passo K: prever a grade final (H/8)x(W/8).

Cada escala atende a todas as escalas anteriores (causalmente na "ordem das escalas") e em paralelo dentro de sua própria escala. O problema da ordem desaparece: a imagem inteira na escala k é produzida em uma única passagem pelo transformer.

O Conceito

Tokenizador Multiescala VQ-VAE

O VAR precisa de um tokenizador discreto multiescala. Para uma imagem x, ele produz uma sequência de grades de tokens de resolução progressivamente maior:

x -> encoder -> latent f
f -> tokenize at 1x1: token grid z_1 of shape (1, 1)
f -> tokenize at 2x2: token grid z_2 of shape (2, 2)
...
f -> tokenize at (H/p)x(W/p): token grid z_K of shape (H/p, W/p)

Cada z_k usa o mesmo codebook (tamanho típico de 4096-16384). A tokenização em cada escala não é independente — ela é treinada de modo que a soma dos resíduos de cada escala reconstrua f:

f ≈ upsample(embed(z_1), target_size) + ... + upsample(embed(z_K), target_size)

Esta é uma variante de residual VQ. A escala k captura o que as escalas 1..k-1 perderam. O decodificador recebe a soma de todas as incorporações (embeddings) de escala e produz a imagem.

O tokenizador VQ multiescala é treinado uma vez (como o VQGAN) e depois congelado. Todo o trabalho gerador é feito pelo modelo autorregressivo por cima.

Predição de Próxima Escala

O modelo gerador é um transformer que visualiza tokens de todas as escalas anteriores e prediz os tokens na escala seguinte.

Estrutura da sequência de entrada:

[START, z_1 tokens, z_2 tokens, z_3 tokens, ..., z_K tokens]

As incorporações de posição (position embeddings) codificam tanto o índice da escala quanto a posição espacial dentro da escala. A atenção é causal na ordem da escala: o token na escala k, posição (i, j) pode atender a todos os tokens nas escalas 1..k e a tokens na própria escala k que vêm antes em qualquer ordem intraescala que seja usada (o VAR usa atenção posicional fixa sem causalidade intraescala — todas as posições dentro de uma escala são preditas em paralelo).

Perda de treinamento: em cada escala k, prever os tokens z_k dados todos os tokens de escalas anteriores. Perda de entropia cruzada (cross-entropy loss) nos códigos discretos do VQ. Mesma estrutura do GPT, exceto que a "sequência" agora é estruturada em escala.

Geração

Na inferência:

generate z_1 = sample from p(z_1)                    # 1 token
generate z_2 = sample from p(z_2 | z_1)              # 4 tokens in parallel
generate z_3 = sample from p(z_3 | z_1, z_2)         # 16 tokens in parallel
...
decode: f = sum of embed-and-upsample scales 1..K
image = VAE_decoder(f)

Para K = 10 escalas, a geração consiste em 10 passagens diretas (forward passes) pelo transformer. Cada passagem produz sua escala inteira em paralelo — sem autorregressão por token dentro de uma escala. Para uma imagem de 256x256, isso representa cerca de 10 passagens contra as 28-50 do DiT.

Por Que a Predição de Próxima Escala Supera a de Próximo Token

Três vantagens estruturais:

  1. O alinhamento de grosso-para-fino com as estatísticas naturais de imagem. A percepção visual humana e os conjuntos de dados de imagens exibem regularidades dependentes da escala: a estrutura de baixa frequência é estável e previsível; o detalhe de alta frequência é condicional ao conteúdo de baixa frequência. A predição de próxima escala explora isso.
  2. Geração paralela dentro da escala. Ao contrário do AR de tokens estilo GPT, o VAR produz todos os tokens em uma escala em um único passo. O comprimento efetivo de geração é em escala logarítmica em vez de linear.
  3. Sem viés de ordem de geração. Os tokens na escala k veem toda a escala k-1; não há viés de "à esquerda de" ou "acima de" que force os tokens iniciais a se comprometerem antes que o contexto posterior esteja disponível.

Lei de Escala

Tian et al. demonstraram que o VAR segue uma curva de escala de lei de potência para o FID no ImageNet — assim como o GPT faz para a perplexidade. Dobrar os parâmetros ou a computação reduz o erro pela metade de forma confiável. Este foi o primeiro modelo gerador de imagens a exibir esse tipo de comportamento de escala de forma tão limpa quanto os modelos de linguagem. O resultado é que as predições em escala VAR tornam-se previsíveis a partir da computação, e não por palpites empíricos por arquitetura.

Relação com a Difusão

O VAR e a difusão compartilham a mesma história de compressão de dados: ambos dividem o problema de geração em uma sequência de subproblemas mais fáceis.

  • Difusão: adiciona ruído gradualmente, aprende a desfazer uma etapa.
  • VAR: adiciona resolução gradualmente, aprende a prever a próxima escala.

Eles representam eixos diferentes para o problema. Ambos geram distribuições condicionais tratáveis. Empiricamente, o VAR é mais rápido na inferência (menos passagens, tudo em paralelo dentro de uma escala) e se equipara ou supera o DiT no ImageNet condicional por classe. O VAR condicional por texto (VARclip, HART) é uma direção de pesquisa ativa.

Build It

Em code/main.py você irá:

  1. Construir um pequeno tokenizador VQ multiescala em dados sintéticos de "imagem" (anéis gaussianos 2D).
  2. Treinar um transformer estilo VAR para prever na próxima escala os tokens.
  3. Amostrar chamando o transformer 4 vezes (4 escalas) e decodificando.
  4. Verificar se o treinamento ordenado por escala torna a geração paralela dentro de uma escala.

Esta é uma implementação de brinquedo. O objetivo é ver a máscara de atenção estruturada por escala e a geração paralela dentro da escala realmente funcionando.

Ship It

Esta lição produz outputs/skill-var-tokenizer-designer.md — uma habilidade para projetar um tokenizador multiescala: número de escalas, proporções de escala, tamanho do codebook, compartilhamento de resíduos, arquitetura do decodificador.

Exercícios

  1. Ablação de contagem de escalas. Treine o VAR com 4, 6, 8, 10 escalas. Meça a qualidade de reconstrução versus o número de passagens autorregressivas. Mais escalas = resíduos mais finos = melhor qualidade, mas mais passagens.

  2. Tamanho do codebook. Treine tokenizadores com tamanhos de codebook de 512, 4096, 16384. Codebooks maiores proporcionam melhor reconstrução, mas predição mais difícil. Encontre o ponto de inflexão.

  3. Verificação de paralelo-dentro-da-escala. Para um VAR treinado, meça explicitamente o padrão de atenção. Dentro da escala k, o modelo atende a posições de escala cruzada, mas não intraescala? Verifique a implementação da máscara.

  4. Escalonamento do VAR vs DiT. Para a mesma tarefa condicional de classe do ImageNet, treine o VAR e o DiT com orçamentos de parâmetros correspondentes (por exemplo, 33M, 130M, 458M). Plote o FID versus computação. O VAR deve ficar à frente do DiT em cada tamanho — reproduza o resultado do artigo em pequena escala.

  5. Condicionamento de texto. Estenda o VAR para receber um embedding de texto (CLIP pooled) como entrada extra de condicionamento via adaLN. Esta é a receita do HART. Quanto o FID melhora na amostragem alinhada ao texto?

Termos-Chave

Termo O que as pessoas dizem O que realmente significa
VAR "Visual AutoRegressive" Geração de imagens por predição de próxima escala sobre uma pirâmide de grades de tokens VQ
Next-scale prediction "Prever mais grosso, depois mais fino" O modelo prevê tokens em escalas de resolução crescente, condicionando-se em todas as escalas anteriores
Multi-scale VQ tokenizer "VQ residual" VQ-VAE que produz K grades de tokens de resolução crescente, com o decodificador somando todas as escalas
Scale k "Nível de pirâmide k" Um dos K níveis de resolução, desde 1x1 para k=1 até (H/p)x(W/p) para k=K
Parallel-within-scale "Um forward por escala" Todos os tokens na escala k são preditos em uma única passagem pelo transformer, não de forma autorregressiva
Causal-across-scales "Atenção ordenada por escala" O token na escala k pode atender a todas as escalas de 1..k, mas não às escalas de k+1..K
Residual VQ "Tokenização aditiva" Os tokens de cada escala codificam o resíduo deixado pelas escalas inferiores; o decodificador soma todas as incorporações de escala
VAR scaling law "Escalonamento GPT de imagem" O FID segue uma lei de potência previsível na computação, como a perplexidade dos modelos de linguagem
HART "Híbrido VAR + texto" Variante de VAR condicional por texto que combina decodificação iterativa estilo MaskGIT com a estrutura de escala do VAR
Scale position embedding "Tripla (escala, linha, col)" A codificação posicional carrega tanto o índice de escala quanto as coordenadas espaciais dentro da escala

Leituras Adicionais

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).