Phase 12 - Lesson 13

Transfusion: Texto Autorregressivo + Imagem de Difusão em um Único Transformer

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

Chameleon e Emu3 apostaram tudo em tokens discretos. Eles funcionam, mas o gargalo de quantização é visível — a qualidade da imagem atinge um patamar abaixo dos modelos de difusão em espaço contínuo. O Transfusion (Meta, Zhou et al., agosto de 2024) faz a aposta oposta: manter as imagens contínuas, descartar totalmente o VQ-VAE e treinar um único transformer com duas perdas. Tokens de texto recebem predição do próximo token (NTP). Patches de imagem recebem uma perda de correspondência de fluxo (flow matching) / difusão. Ambos os objetivos otimizam os mesmos pesos. A arquitetura subjacente ao Stable Diffusion 3 (MMDiT) é uma prima próxima. Esta lição lê a tese do Transfusion, reconstrói um treinador de brinquedo de duas perdas e rastreia a máscara de atenção que permite a um único transformer fazer ambos os trabalhos.

Tipo: Construir Linguagens: Python (biblioteca padrão, treinador de duas perdas em brinquedo de escala MNIST) Pré-requisitos: Fase 12 · 11 (Chameleon), Fase 8 (IA Generativa) Tempo: ~180 minutos

Objetivos de Aprendizado

  • Conectar um transformer que executa duas perdas (NTP em tokens de texto, MSE de difusão em patches de imagem) em um único backbone.
  • Explicar por que a atenção bidirecional entre patches de imagem combinada com a atenção causal sobre tokens de texto é a escolha correta de máscara.
  • Comparar o estilo Transfusion (imagens contínuas, perda de difusão) ao estilo Chameleon (imagens discretas, NTP) em termos de computação, qualidade e complexidade de código.
  • Nomear a contribuição do MMDiT: pesos específicos de modalidade em cada bloco, atenção conjunta no fluxo residual.

O Problema

O debate sobre tokens de imagem discretos vs. contínuos é mais antigo que os LLMs. Representações contínuas (pixels brutos, latentes de VAE) preservam detalhes. Tokens discretos (índices VQ) se ajustam ao vocabulário nativo do transformer, mas perdem detalhes na etapa de quantização.

O Chameleon / Emu3 seguiu a abordagem discreta: uma perda, uma arquitetura, mas a fidelidade da imagem limitada pela qualidade do tokenizador.

Os modelos de difusão seguiram a abordagem contínua: qualidade de imagem excepcional, mas um modelo separado do LLM, engenharia complexa de cronograma de ruído (noise-schedule) e nenhuma integração limpa com a geração de texto.

O Transfusion pergunta: podemos ter ambos? Manter as imagens contínuas, treinar apenas um modelo e usar duas perdas costuradas em uma única etapa de gradiente.

O Conceito

A arquitetura de duas perdas

Um único transformer apenas-decodificador (decoder-only) processa uma sequência que contém:

  • Tokens de texto (discretos, do vocabulário BPE).
  • Patches de imagem (contínuos, blocos de pixels de 16x16 projetados na dimensão oculta via embedding linear — o mesmo que a entrada de um codificador ViT).
  • Tags <image> e </image> marcando onde os patches contínuos residem.

A passagem direta (forward pass) é executada uma vez. A perda escolhe um de dois cabeçotes por token:

  • Para tokens de texto: entropia cruzada padrão no cabeçote de logits do vocabulário.
  • Para patches de imagem: perda de difusão em patches contínuos — prever o ruído que foi adicionado a cada patch.

O gradiente flui através do corpo do transformer compartilhado. Ambas as perdas melhoram os pesos compartilhados simultaneamente.

Máscara de atenção: texto causal + imagem bidirecional

Os tokens de texto devem ser causais — você não pode permitir que um token de texto atenda ao texto futuro, ou o teacher forcing quebra. Os patches de imagem, no entanto, representam um único instantâneo (snapshot); eles devem atender uns aos outros bidirecionalmente dentro do mesmo bloco de imagem.

A máscara:

M[i, j] = 1 if:
  (i is text and j is text and j <= i)   # causal for text
  OR (i is image and j is image and same_image_block(i, j))   # bidirectional within image
  OR (i is text and j is image and j < i_image_end)   # text attends to previous images
  OR (i is image and j is text and j < i_image_start)   # image attends to preceding text

Implementada como uma máscara triangular em blocos (block-triangular) no treinamento e na inferência.

Perda de difusão dentro do transformer

A perda de difusão é padrão: adicionar ruído a um patch de imagem, pedir ao modelo para prever o ruído (ou o patch limpo, equivalentemente). A versão do Transfusion usa correspondência de fluxo (flow matching) — prever o campo de velocidade do ruidoso para o limpo.

Durante o treinamento:

  1. Para cada patch de imagem x0, amostre um passo de tempo t aleatório.
  2. Amostre o ruído ε, compute xt = (1-t) * x0 + t * ε (interpolação linear para flow matching).
  3. O transformer prevê v_theta(xt, t); perda = MSE(v_theta(xt, t), ε - x0).
  4. Retropropagação (backprop) ao lado das perdas de NTP de texto da mesma sequência.

Na inferência, a geração é:

  • Tokens de texto: amostragem autorregressiva padrão.
  • Patches de imagem: loop de amostragem de difusão (tipicamente de 10 a 30 passos) condicionado aos tokens de texto anteriores.

MMDiT: variante do Stable Diffusion 3

O Stable Diffusion 3 (Esser et al., março de 2024) lançou o MMDiT (Multimodal Diffusion Transformer) na mesma época que o Transfusion. As arquiteturas são irmãs.

As principais diferenças do MMDiT:

  • Pesos específicos de modalidade por bloco. Cada bloco do transformer tem pesos Q, K, V e MLP separados para tokens de texto vs. patches de imagem. A atenção é conjunta (entre modalidades); todo o resto é específico de cada modalidade.
  • Treinamento por fluxo retificado (rectified flow). Uma variante específica de flow matching com amostragem conhecida e matemática mais simples que o DDPM.
  • Escala. O MMDiT é a base do SD3 (variantes de parâmetros de 2B e 8B). O artigo do Transfusion escala até 7B.

Ambos convergem para a mesma ideia central: um transformer executa NTP em texto e difusão em representações de imagem contínuas.

Por que isso supera o estilo Chameleon

A lacuna de qualidade entre difusão contínua e NTP discreto na geração de imagens é mensurável. O artigo do Transfusion relata:

  • Com 7B de parâmetros, supera um modelo de estilo Chameleon de mesmo tamanho no FID por 3 a 5 pontos.
  • Nenhum treinamento de tokenizador é necessário — o codificador de imagem é mais simples (projeção linear para a dimensão oculta, idêntico à camada de entrada de um ViT).
  • A inferência pode paralelizar o denoising dos patches de imagem, ao contrário dos tokens de imagem autorregressivos.

Desvantagem: O Transfusion é um modelo de perda dupla, tornando a dinâmica de treinamento mais complexa. Os pesos das perdas precisam de ajuste. Um descompasso de cronograma entre NTP e difusão pode fazer com que um cabeçote domine o outro.

O que vem a jusante

O Janus-Pro (Lição 12.15) refina a ideia do Transfusion ao desacoplar o codificador de visão para compreensão e geração — SigLIP para um, VQ para o outro — enquanto compartilha o corpo do transformer. O Show-o (Lição 12.14) substitui a difusão por difusão discreta (predição mascarada). A família de geração unificada se ramifica rapidamente após o Transfusion.

Os VLMs de produção de 2026 que emitem imagens — Gemini 3 Pro, GPT-5, o caminho de geração de imagens do Claude Opus 4.7 — quase certamente usam algum descendente desta família. Os detalhes são proprietários.

Use

O arquivo code/main.py constrói um Transfusion de brinquedo em um pequeno problema do tipo MNIST:

  • As legendas de texto são sequências curtas de inteiros descrevendo um dígito (0-9).
  • As imagens são grades 4x4 de bytes.
  • Um par de projeções lineares de peso compartilhado atua como o substituto do transformer; perda NTP no texto, perda MSE em patches ruidosos.
  • O loop de treinamento alterna as duas perdas; a máscara de atenção é explícita.
  • A geração produz uma legenda de texto e uma imagem 4x4 em uma única passagem direta.

O transformer é um brinquedo. A estrutura de duas perdas, a construção da máscara de atenção e o loop de inferência são os artefatos reais.

Envie

Esta lição produz o arquivo outputs/skill-two-loss-trainer-designer.md. Dado um novo cenário de treinamento multimodal (texto + imagem, texto + áudio, texto + vídeo), ela projeta o cronograma de duas perdas (pesos das perdas, formato da máscara, blocos compartilhados vs. específicos de modalidade) e sinaliza riscos de implementação.

Exercícios

  1. Um modelo de estilo Transfusion treina 70% de tokens de texto e 30% de patches de imagem. A perda de difusão de imagem é ~10x maior que a perda NTP de texto em magnitude. Quais pesos de perda os equilibram?

  2. Implemente a máscara triangular em blocos para a sequência: [T, T, <image>, P, P, P, P, </image>, T]. Marque cada entrada com 0 ou 1.

  3. O MMDiT possui pesos QKV específicos de modalidade. Qual sobrecarga de contagem de parâmetros isso adiciona em relação ao transformer totalmente compartilhado do Transfusion? Con 7B de parâmetros, vale a pena?

  4. Geração: dado um prompt de texto, o modelo executa NTP por 50 tokens, atinge <image> e, em seguida, executa a difusão em 256 patches ao longo de 20 passos de denoising. Quantas passagens diretas (forward passes) no total?

  5. Leia a Seção 3 do artigo do SD3. Descreva o fluxo retificado (rectified flow) e por que ele converge em menos passos de inferência que o DDPM.

Termos-Chave

Termo O que as pessoas dizem O que realmente significa
Treinamento de duas perdas "NTP + difusão" Um único transformer otimiza tanto a entropia cruzada em tokens de texto quanto a MSE em patches de imagem contínuos na mesma etapa de gradiente
Correspondência de fluxo (Flow matching) "Fluxo retificado" Variante de difusão que prevê um campo de velocidade de dados ruidosos para dados limpos; matemática mais simples que o DDPM
MMDiT "DiT Multimodal" Arquitetura do Stable Diffusion 3: atenção conjunta, MLPs e normalizações específicas de modalidade
Máscara triangular em blocos "Texto causal + imagem bidirecional" Máscara de atenção que é causal em regiões de texto, mas bi-direcional dentro de regiões de imagem
Representação contínua de imagem "Sem VQ" Patches de imagem como vetores de valores reais, não índices de dicionário de códigos inteiros
Predição de velocidade "Parametrização-v" A saída da rede é o campo de velocidade entre o ruído e o dado limpo, não o ruído em si

Leituras Adicionais

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