Phase 12 - Lesson 12
Emu3: Predição de Próximo Token para Geração de Imagem e Vídeo
O Emu3 do BAAI (Wang et al., Setembro de 2024) é o resultado de 2024 que deveria ter encerrado o debate difusão versus autorregressivo. Um único transformer decoder-only no estilo Llama, treinado apenas com o objetivo de predição de próximo token, em um vocabulário unificado de texto + tokens de imagem VQ + tokens de vídeo VQ 3D, supera o SDXL na geração de imagem e o LLaVA-1.6 na percepção. Sem perda CLIP. Sem cronograma de difusão (diffusion schedule). Classifier-free guidance é usado na inferência para qualidade, mas o objetivo principal de treinamento é a predição de próximo token com teacher forcing. Publicado na Nature. Esta lição aborda a tese do Emu3 — por que um tokenizador melhor mais escala é tudo o que você precisa — e contrasta com abordagens de difusão.
Tipo: Learn Linguagens: Python (stdlib, matemática do tokenizador de vídeo 3D + esqueleto de amostrador autorregressivo) Pré-requisitos: Phase 12 · 11 (Chameleon) Tempo: ~120 minutos
Objetivos de Aprendizado
- Explicar por que o objetivo de perda única de próximo token do Emu3 funciona apesar da antiga suposição de que a difusão é necessária para a qualidade de imagem.
- Descrever o tokenizador de vídeo 3D: como é um codebook VQ espaciotemporal e por que os patches abrangem o tempo.
- Comparar o Emu3 vs Stable Diffusion XL em termos de (computação de treinamento, custo de inferência, teto de qualidade).
- Nomear as três funções que o mesmo modelo Emu3 desempenha: Emu3-Gen (geração de imagem), Emu3-Chat (percepção), Emu3-Stage2 (geração de vídeo).
O Problema
O consenso geral até 2024: a geração de imagens precisa de difusão. O argumento: tokens discretos de imagem perdem muita informação para reconstruir detalhes, e a amostragem autorregressiva acumula erros ao longo de milhares de tokens. Stable Diffusion, DALL-E 3, Imagen, Midjourney usam alguma forma de difusão. O Chameleon (Lição 12.11) refutou parcialmente isso em pequena escala, mas não se igualou ao SDXL em qualidade.
O Emu3 atacou esse argumento diretamente. A alegação: um melhor tokenizador visual + escala suficiente + perda de próximo token = geração de imagens superior à difusão no mesmo modelo que também faz percepção.
A aposta era controversa quando foi publicada. Dois anos depois, a família de geração unificada de código aberto (Emu3, Show-o, Janus-Pro, Transfusion) é o caminho padrão para pesquisa; os modelos de fronteira de produção parecem usar alguma variante.
O Conceito
O tokenizador do Emu3
O ingrediente principal é o tokenizador visual. O Emu3 treina um tokenizador customizado da classe IBQ (Inverse Bottleneck Quantizer, família SBER-MoVQGAN) com redução de resolução de 8x8 por token. Uma imagem de 512x512 torna-se 64x64 = 4096 tokens com tamanho de codebook de 32768.
Isso é maior do que os 1024 tokens do Chameleon por 512x512 com K=8192, mas mais barato por token (buscas de codebook menores, codec mais simples). A métrica principal: PSNR de reconstrução a 30.5 dB, competitivo com o espaço latente contínuo do Stable Diffusion a 32 dB.
Para vídeo: um tokenizador VQ 3D codifica um patch espaciotemporal (4x4x4 pixels) em um número inteiro. Um clipe de 4s a 8 FPS possui 32 quadros; a 256x256 com redução espacial de 4x e redução temporal de 4x, a contagem de tokens é (256/4) * (256/4) * (32/4) = 64 * 64 * 8 = 32.768 tokens.
A qualidade do tokenizador é o teto. A contribuição do Emu3 é, em parte, "nós treinamos um tokenizador muito bom."
Treinamento com perda única
O Emu3 usa um único objetivo: predição de próximo token em um vocabulário compartilhado entre tokens de texto, tokens de imagem 2D e tokens de vídeo 3D. Os pesos são multiplicados por fatores específicos de cada modalidade durante o treinamento para equilibrar a contribuição, mas a função de perda é idêntica.
Treinado em uma mistura de:
- Geração de imagem:
<text caption> <image> image_tokens </image> - Percepção de imagem:
<image> image_tokens </image> <question> text_tokens - Geração de vídeo:
<text caption> <video> video_tokens </video> - Percepção de vídeo: análogo.
- Apenas texto: NTP padrão.
O modelo aprende quando emitir tokens de imagem vs tokens de texto a partir da distribuição de dados. Geração surge do modelo prevendo tokens de imagem após a tag <image>.
Classifier-free guidance e temperatura
A geração autorregressiva de imagens melhora significativamente com classifier-free guidance (CFG) na inferência. O Emu3 o utiliza: gera duas vezes, uma vez com a legenda completa, outra com uma legenda vazia, e mistura os logits com um peso de orientação (tipicamente de 3.0 a 7.0). Este é o mesmo truque de CFG que a difusão usa, emprestado para o cenário autorregressivo.
A temperatura importa: muito alta gera artefatos; muito baixa causa colapso de modo. A temperatura recomendada do Emu3 é 1.0 para percepção e 0.8 para geração de imagem.
Três funções, um modelo
O Emu3 é distribuído como três APIs funcionalmente distintas, mas com um único conjunto de pesos subjacente:
- Emu3-Gen. Geração de imagem. Entrada de texto, saída de tokens de imagem.
- Emu3-Chat. VQA e geração de legendas. Entrada de imagem (tokens), saída de texto.
- Emu3-Stage2. Geração de vídeo e VQA de vídeo. Entrada de texto ou vídeo, saída de texto ou vídeo.
Sem cabeças específicas para tarefas. Apenas templates de prompt diferentes. Mesmo checkpoint.
Benchmarks
Do artigo do Emu3 (Setembro de 2024):
- Geração de imagem: supera o SDXL em FID no MJHQ-30K (5.4 vs 5.6), GenEval geral (0.54 vs 0.55 — empate estatístico) e no composto do Deep-Eval no mesmo nível.
- Percepção de imagem: supera o LLaVA-1.6 no VQAv2 (75.1 vs 72.4) e aproximadamente se iguala no MMMU.
- Geração de vídeo: qualidade de clipe de 4 segundos com FVD competitivo com modelos avaliados publicamente da era Sora.
Os números nem sempre são vitoriosos — o Emu3 perde um ponto aqui para ganhar outro ali — mas a afirmação de que "a predição de próximo token é tudo o que você precisa" é defensável em todas as modalidades.
Custo computacional
O Emu3 foi treinado em aproximadamente 300 bilhões de tokens multimodais com um modelo de 7B parâmetros. Horas de GPU são amplamente comparáveis ao pré-treinamento do Llama-2-7B (2k-4k anos-GPU em chips da classe A100). Modelos de difusão como o Stable Diffusion 3 treinam em orçamentos semelhantes, mas precisam de encoders de texto separados e pipelines mais complexos.
Na inferência, o Emu3 é mais lento que o SDXL por imagem: 4096 tokens de imagem a 30 tok/s leva cerca de 2 minutos por imagem de 512x512, comparado a 2-5 segundos para o SDXL. Decodificação especulativa e otimização de KV-cache estreitam a diferença, mas não a eliminam. A geração autorregressiva de imagens é computacionalmente pesada; essa é a desvantagem atual.
Por que isso importa
A contribuição profunda do Emu3 é conceitual. Se a predição de próximo token escala para se igualar à difusão na geração de imagens, o caminho do modelo unificado (uma perda, um backbone, qualquer modalidade) torna-se viável. Modelos futuros não precisarão de encoders de texto separados, schedulers de difusão separados ou VAEs separados. Um transformer, um tokenizador por modalidade, escala.
Show-o, Janus-Pro e InternVL-U constroem sobre ou desafiam essa tese. Laboratórios chineses (BAAI, DeepSeek) publicam de forma mais agressiva nessa direção do que laboratórios dos EUA até 2025.
Use It
O code/main.py constrói duas partes simples:
- Um calculador de contagem de tokenizador VQ 2D vs 3D: dado (resolução, patch, tamanho do clipe, FPS), calcula contagens de tokens para imagem vs vídeo.
- Um amostrador autorregressivo de tokens de imagem com classifier-free guidance por temperatura.
A implementação de CFG corresponde à receita do Emu3 — misturar logits condicionais e incondicionais com um peso de orientação.
Ship It
Esta lição produz o arquivo outputs/skill-token-gen-cost-analyzer.md. Dada uma especificação de produto de geração (imagem ou vídeo, resolução alvo, nível de qualidade, orçamento de latência), ele calcula a contagem de tokens, o custo de inferência e escolhe entre a família Emu3 vs difusão.
Exercícios
O Emu3 produz 4096 tokens por imagem de 512x512 a uma redução de 8x8. Calcule o equivalente para 1024x1024 e 2048x2048. O que acontece com a latência de inferência?
Leia a Seção 3.3 do artigo do Emu3 sobre o tokenizador de vídeo. Descreva o formato do patch VQ 3D e por que ele é 4x4x4 e não 8x8x1.
Peso de classifier-free guidance de 5.0 vs 3.0: qual o efeito visual? Rastreie a matemática em
code/main.py.Calcule os FLOPs de treinamento do Emu3-7B com 300B de tokens e compare com o Stable Diffusion 3. Qual foi mais caro para treinar?
O Emu3 supera o SDXL em FID, mas não no VQAv2 em comparação com VLMs especializados. Explique por que a abordagem de perda unificada mostra forças diferentes em comparação com especialistas em diferentes benchmarks.
Termos-Chave
| Termo | O que as pessoas dizem | O que realmente significa |
|---|---|---|
| Next-token prediction | "NTP" | Perda autorregressiva padrão: prever token[i+1] dado token[0..i]; funciona para qualquer modalidade quando tokenizada |
| IBQ tokenizer | "Inverse bottleneck quantizer" | Uma classe de VQ-VAE com codebooks maiores (32768+) e melhor reconstrução do que o do Chameleon |
| 3D VQ | "Spatiotemporal quantizer" | Codebook indexado por (tempo, linha, coluna); um token cobre um cubo de 4x4x4 pixels |
| Classifier-free guidance | "CFG" | Misturar logits condicionais e incondicionais com peso gama; melhora a qualidade da imagem na inferência |
| Unified vocabulary | "Shared tokens" | Texto + imagem + vídeo são todos extraídos do mesmo espaço de inteiros; o modelo prevê qual modalidade vem a seguir |
| MJHQ-30K | "Image gen benchmark" | Benchmark de qualidade semelhante ao Midjourney com 30 mil prompts; Emu3 relata FID aqui |