Phase 12 - Lesson 11

Chameleon e Modelos Multimodais Apenas de Tokens com Fusão Precoce

This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.

Cada VLM que vimos até agora mantém imagens e texto separados. Os tokens visuais vêm de um codificador de visão, passam por um projetor e encontram o texto dentro do LLM. Os vocabulários de visão e texto nunca se sobrepõem. O Chameleon (Meta, maio de 2024) questionou: e se eles se sobrepusessem? Treine um VQ-VAE que transforma uma imagem em uma sequência de tokens discretos de um vocabulário compartilhado. Cada documento multimodal agora é uma única sequência — tokens de texto e tokens de imagem intercalados, com uma única perda autorregressiva. Efeito colateral: o modelo pode gerar saídas de modalidade mista — alternando tokens de texto e imagem em uma única chamada de inferência. Esta lição aborda a tese da fusão precoce e reconstrói uma versão simplificada de ponta a ponta.

Tipo: Construção Idiomas: Python (stdlib, tokenizador VQ-VAE + decodificador intercalado) Pré-requisitos: Fase 12 · 05, Fase 8 (IA Generativa) Tempo: ~180 minutos

Objetivos de Aprendizado

  • Explicar por que um vocabulário compartilhado + perda única altera o que o modelo pode fazer.
  • Descrever como um VQ-VAE tokeniza uma imagem em uma sequência discreta compatível com o objetivo de próximo token de um transformer.
  • Nomear os truques de estabilidade de treinamento do Chameleon: QK-Norm, posicionamento de dropout e ordenação de LayerNorm.
  • Comparar o Chameleon com a abordagem Q-Former do BLIP-2 e descrever quando cada um é a escolha certa.

O Problema

VLMs baseados em adaptadores (LLaVA, BLIP-2, Qwen-VL) tratam texto e imagem como duas coisas diferentes. Um token de texto passa por embed(text_token); uma imagem passa por visual_encoder(image) → projector → ... pseudo_tokens. O modelo possui dois caminhos de entrada que se fundem no meio do caminho.

Três consequências:

  1. O LLM só pode consumir imagens, não emiti-las. A saída é apenas texto.
  2. Documentos de modalidade mista (parágrafos e imagens se alternando, como em um artigo) são complicados — você precisa analisar a entrada multimodal fora do modelo ou encadear gerações.
  3. Incompatibilidade distribucional. Tokens visuais e tokens de texto vivem em diferentes regiões do espaço oculto, criando problemas sutis de alinhamento.

O Chameleon rejeita essa premissa: imagens são apenas sequências de tokens discretos de um vocabulário compartilhado. Treine o modelo em documentos intercalados, com uma única perda, um único decodificador autorregressivo, e você desbloqueará a geração de modalidade mista gratuitamente.

O Conceito

VQ-VAE como tokenizador de imagem

O tokenizador é um autocodificador variacional quantizado por vetores (vector-quantized variational autoencoder). A arquitetura:

  • Codificador (Encoder): CNN + ViT que mapeia a imagem para um mapa de características espaciais, por exemplo, 32x32 características de dimensão 256.
  • Livro de Códigos (Codebook): um vocabulário aprendido de K vetores (o Chameleon usa 8192), também de dimensão 256.
  • Quantização: para cada característica espacial, busca-se a entrada mais próxima no livro de códigos por distância L2. Substitui-se a característica contínua pelo índice inteiro correspondente.
  • Decodificador (Decoder): CNN que transforma as características quantizadas de volta em pixels.

Treinamento: perda de reconstrução do VAE + perda de comprometimento (commitment loss) + perda do livro de códigos. Os índices do livro de códigos formam um alfabeto discreto para imagens.

Para o Chameleon: uma imagem se torna 32*32 = 1024 tokens extraídos de um vocabulário de 8192. Concatenados com tokens de texto (do vocabulário BPE do LLM, digamos 32000), o vocabulário final é 40192. O transformer vê uma única sequência e uma única perda.

O vocabulário compartilhado

O vocabulário do Chameleon combina tokens de texto, tokens de imagem e separadores de modalidade. Cada token possui um ID único. A camada de embedding de entrada mapeia cada ID para um vetor oculto de dimensão D. A projeção de saída mapeia o estado oculto de volta para os logits do vocabulário. O Softmax escolhe o próximo token, independentemente da modalidade.

Os separadores são importantes: as tags <image> e </image> delimitam a sequência de tokens de imagem. No momento da geração, se o modelo emitir <image>, o software downstream saberá que os próximos 1024 tokens são índices VQ que devem ser enviados ao decodificador para renderização de pixels.

Geração de modalidade mista

A inferência consiste na previsão do próximo token no vocabulário compartilhado. Exemplo de prompt: "Draw a cat and describe it." O Chameleon emite:

<image> 4821 1029 2891 ... (1024 image tokens) </image>
The cat is orange, sitting on a windowsill...

O modelo escolhe a ordem de forma autônoma — ele pode produzir imagem e depois texto, texto e depois imagem, ou intercalar ambos. Mesmo decodificador, mesma perda.

Compare isso com os VLMs baseados em adaptadores, nos quais a geração é apenas de texto. O Chameleon reabre a questão das modalidades de saída do modelo.

Estabilidade no treinamento — QK-Norm, dropout e ordenação de LayerNorm

O treinamento de fusão precoce é instável em grande escala. O artigo do Chameleon documenta três truques:

  • QK-Norm. Aplica LayerNorm às projeções de query e key dentro do mecanismo de atenção, antes do produto escalar. Isso evita a explosão da magnitude dos logits em camadas profundas. Usado por múltiplos modelos grandes pós-2024.
  • Posicionamento de dropout. Dropout após cada adição residual, e não apenas após a atenção e o MLP. É necessária mais regularização quando os gradientes dos tokens de imagem podem dominar.
  • Ordenação de LayerNorm. Pre-LN no ramo residual (padrão), além de um LN extra na conexão de skip do último bloco. Isso estabiliza o fluxo de gradiente da camada final.

Sem esses truques, o treinamento do Chameleon com 34 bilhões de parâmetros divergiu em múltiplos checkpoints. Com eles, o treinamento converge. A receita de treinamento é uma contribuição tão importante quanto a própria arquitetura.

O limite de reconstrução do tokenizador

O VQ-VAE perde informações (lossy). Com 8192 entradas no livro de códigos e 1024 tokens por imagem de 512x512, o PSNR de reconstrução é limitado a cerca de 26-28 dB. Isso é suficiente para uma geração de imagem reconhecível, mas visivelmente pior do que a difusão em espaço contínuo (o Stable Diffusion 3 alcança mais de 32 dB).

O tokenizador é o gargalo. Tokenizadores melhores (MAGVIT-v2, IBQ, SBER-MoVQGAN) elevam esse limite. O Emu3 (Lição 12.12) alcança uma geração com qualidade do SDXL utilizando apenas um tokenizador melhor.

Chameleon vs BLIP-2 / LLaVA

Chameleon (fusão precoce, vocabulário compartilhado):

  • Uma perda, um decodificador.
  • Gera saídas de modalidade mista.
  • O tokenizador determina o teto de qualidade.
  • Caro: decodificador VQ-VAE por imagem gerada no caminho de inferência.

BLIP-2 / LLaVA (fusão tardia, torres separadas):

  • Entrada de visão, saída apenas de texto.
  • Reutiliza LLM pré-treinado.
  • Sem gargalo de tokenizador para compreensão.
  • Barato: passagem direta única (single forward pass).

Escolha por tarefa. Se precisar de geração de imagens, utilize a família Chameleon. Se precisar apenas de compreensão, um adaptador-VLM é mais simples e reutiliza mais computação pré-treinada.

Fuyu e AnyGPT

O Fuyu (Adept, 2023) é uma abordagem relacionada: descarta completamente o codificador de visão separado e passa patches de imagem brutos pela projeção de entrada do LLM como se fossem tokens, sem tokenizador. É mais simples que o Chameleon, mas perde a geração de saída com vocabulário compartilhado.

O AnyGPT (Zhan et al., 2024) estende o Chameleon para quatro modalidades: texto, imagem, fala e música. Usa o mesmo truque do VQ-VAE para cada uma delas, com um transformer compartilhado. Geração de qualquer modalidade para qualquer modalidade (any-to-any). Mais detalhado na Lição 12.16.

Use

code/main.py constrói um modelo simplificado de fusão precoce de ponta a ponta:

  • Um quantizador minúsculo no estilo VQ-VAE que mapeia patches de 8x8 para índices do livro de códigos (K=16).
  • Um vocabulário compartilhado de (IDs de texto 0..31) + (IDs de imagem 32..47) + (separadores 48, 49).
  • Um decodificador autorregressivo simplificado (tabela de bigramas) treinado em legendas sintéticas + sequências de tokens de imagem.
  • Loop de amostragem que emite tokens alternados de texto + imagem a partir de um prompt.

O código mantém o transformer intencionalmente minúsculo (bigramas) para que você possa rastrear o fluxo do sinal de ponta a ponta.

Envie

Esta lição produz outputs/skill-tokenizer-vs-adapter-picker.md. Dada uma especificação de produto (apenas compreensão vs compreensão + geração, qualidade de imagem exigida, orçamento de custo), ela seleciona entre a família Chameleon (fusão precoce) e a família LLaVA (fusão tardia) e justifica a escolha com regras práticas quantitativas.

Exercícios

  1. O Chameleon usa K=8192 entradas de livro de códigos e 1024 tokens por imagem de 512x512. Estime a taxa de compressão em relação a uma imagem RGB de 24 bits. Há perdas? Quão grande é a perda?

  2. Uma imagem 4K (3840x2160) na mesma densidade de VQ-VAE produz quantos tokens de imagem? Um modelo no estilo Chameleon pode gerar uma imagem 4K em uma única chamada de inferência? O que falha primeiro — contexto, qualidade do tokenizador ou cache KV?

  3. Implemente o QK-Norm em Python puro. Dados uma query e key de dimensão 64, mostre o produto escalar antes e depois do LayerNorm. Por que o controle de magnitude é importante em camadas profundas?

  4. Leia a Seção 2.3 do artigo do Chameleon sobre estabilidade no treinamento. Descreva o modo de falha exato que o artigo observou no modelo de 34B sem QK-Norm. Qual era a assinatura da "explosão de norma"?

  5. Estenda o decodificador simplificado para emitir uma resposta de modalidade mista a partir de um prompt apenas de texto. Meça com que frequência o modelo escolhe imagem primeiro versus texto primeiro, considerando uma distribuição dos dados de treinamento de 60% texto primeiro / 40% imagem primeiro.

Termos-Chave

Termo O que as pessoas dizem O que realmente significa
Fusão precoce "Tokens unificados" Imagens convertidas em tokens discretos que compartilham o vocabulário do transformer desde a primeira etapa
VQ-VAE "Tokenizador de imagem" CNN + ViT + livro de códigos que mapeia imagens para índices inteiros que o transformer pode prever
Vocabulário compartilhado "Um dicionário" Um espaço único de IDs de tokens cobrindo texto + imagem + separadores de modalidade
QK-Norm "Estabilizador de atenção" LayerNorm aplicado a queries e keys antes de seu produto escalar, evitando a explosão da norma
Geração de modalidade mista "Saída de texto + imagem" Inferência que produz de forma autônoma tokens intercalados de texto e imagem em uma única passagem
Tamanho do livro de códigos "Entradas K" Número de vetores discretos aos quais o VQ-VAE pode quantizar; equilibra compressão e fidelidade
Limite do tokenizador "Limite de reconstrução" Melhor PSNR alcançável ao decodificar tokens VQ; limita a qualidade de imagem do modelo

Leituras Adicionais

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