Phase 12 - Lesson 14
Modelos Unificados Show-o e de Difusão Discreta
This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.
Transfusion mistura representações contínuas e discretas. Show-o (Xie et al., agosto de 2024) vai pelo outro caminho: tokens de texto usam previsão causal do próximo token (next-token prediction), tokens de imagem usam difusão discreta mascarada no estilo do MaskGIT. Ambos residem em um único transformer com uma máscara de atenção híbrida. O resultado unifica VQA, texto para imagem (text-to-image), inpainting e geração de modalidades mistas em uma única estrutura (backbone), um tokenizador por modalidade e uma formulação de perda única (perda de próximo token estendida para previsão mascarada). Esta lição aborda o design do Show-o — por que a difusão discreta mascarada é um gerador de imagens paralelo de poucos passos — e o contrasta com o Transfusion e o Emu3.
Tipo: Aprender Idiomas: Python (biblioteca padrão, amostrador de difusão discreta mascarada) Pré-requisitos: Fase 12 · 13 (Transfusion) Tempo: ~120 minutos
Objetivos de Aprendizado
- Explicar a difusão discreta mascarada: o cronograma que mascara os tokens uniformemente e depois pede ao transformer para recuperá-los.
- Comparar a decodificação paralela de imagens (Show-o, MaskGIT) com a decodificação autorregressiva de imagens (Chameleon, Emu3) em relação a velocidade e qualidade.
- Nomear as três tarefas que o Show-o executa em um único checkpoint: T2I, VQA e inpainting de imagem.
- Escolher um cronograma de mascaramento (cosseno, linear, truncado) e raciocinar sobre seu efeito na qualidade da amostra.
O Problema
O treinamento de duas perdas (two-loss) do Transfusion funciona, mas tem dinâmicas mais complicadas — a perda de difusão contínua reside em uma escala numérica diferente da perda de NTP discreta. Equilibrar os pesos das perdas exige uma busca de hiperparâmetros. A arquitetura é eficaz, mas complexa.
A resposta do Show-o: manter ambas as modalidades discretas (como o Chameleon), mas gerar imagens em paralelo via difusão discreta mascarada em vez de sequencialmente. O objetivo de treinamento se torna uma previsão única de token mascarado (masked-token-prediction) que generaliza naturalmente a previsão do próximo token (next-token-prediction).
O Conceito
Difusão discreta mascarada (MaskGIT)
O truque original do MaskGIT de Chang et al. (2022) é elegante. Comece com uma imagem totalmente mascarada (cada token é o ID especial <MASK>). A cada etapa, preveja todos os tokens mascarados em paralelo, depois mantenha as K previsões mais confiantes e mascare o restante novamente. Após ~8-16 iterações, todos os tokens estão preenchidos. O cronograma de quantos tokens desmascarar por etapa é ajustado — cronogramas de cosseno funcionam bem.
O treinamento é simples: selecione uma taxa de mascaramento uniformemente de [0, 1], aplique-a aos tokens VQ da imagem e treine o transformer para recuperar os tokens mascarados. Exatamente o que o BERT fez para texto, escalado para a geração de imagens.
Show-o: um transformer, máscara híbrida
O Show-o coloca o MaskGIT dentro de um transformer de modelo de linguagem causal. A máscara de atenção é:
- Tokens de texto: causal (LLM padrão).
- Tokens de imagem: bidirecional completo dentro do bloco de imagem (para que os tokens mascarados consigam ver todos os outros tokens de imagem durante a previsão).
- Texto para imagem: o texto atende a imagens anteriores, a imagem atende a textos anteriores.
O treinamento alterna entre:
- NTP padrão em sequências de texto.
- Amostras de T2I: texto → imagem com tokens de imagem mascarados, perda de previsão de tokens mascarados (masked-token-prediction loss).
- Amostras de VQA: imagem → texto com tokens de texto mascarados (na verdade, apenas NTP).
A perda unificada é a entropia cruzada nos tokens <MASK>, que cobre tanto o NTP de texto (onde apenas o último token é "mascarado") quanto a difusão mascarada de imagem (onde um subconjunto aleatório é mascarado).
Amostragem paralela
O Show-o gera uma imagem em ~16 etapas em vez de ~1000 (autorregressivo por token) ou ~20 (difusão). Em cada etapa, preveja todos os tokens mascarados em paralelo; confirme as K previsões mais confiantes (top-K); repita.
Compare:
- Chameleon / Emu3 (autorregressivo sobre tokens): N_tokens passagens diretas (forward passes), tipicamente de 1024 a 4096 por imagem.
- Transfusion (difusão contínua): ~20 etapas, cada uma sendo uma passagem completa pelo transformer.
- Show-o (difusão discreta mascarada): ~16 etapas, cada uma sendo uma passagem completa pelo transformer.
O Show-o é mais rápido que o Chameleon em modelos de escala semelhante e praticamente se iguala à contagem de etapas do Transfusion com um custo menor por etapa (logits de vocabulário discreto vs perda MSE contínua).
Tarefas em um único checkpoint
O Show-o suporta quatro tarefas na inferência, selecionadas pelo formato do prompt:
- Geração de texto: saída de texto autorregressiva padrão.
- VQA: imagem de entrada, texto de saída.
- T2I: texto de entrada, imagem de saída via difusão discreta mascarada.
- Inpainting: imagem com alguns tokens mascarados, preenchimento.
A capacidade de inpainting vem de graça graças ao treinamento de previsão mascarada. Mascare uma região da grade de tokens VQ, envie o restante junto com um prompt de texto e preveja os tokens mascarados.
Cronograma de mascaramento
O cronograma de quantos tokens desmascarar por etapa molda a qualidade. O Show-o recomenda o cosseno:
mask_ratio(t) = cos(pi * t / (2 * T)) # t = 0..T
Na etapa 0, todos os tokens estão mascarados (taxa de 1.0). Na etapa T, nenhum está mascarado. O cosseno concentra a massa em taxas intermediárias, onde a previsão é mais informativa. Cronogramas lineares também funcionam, mas atingem um patamar de estabilização (plateau) mais rapidamente.
Show-o2
O Show-o2 (sequência de 2025, arXiv 2506.15564) escala o Show-o: base LLM maior, melhor tokenizador, cronograma de máscara aprimorado. O mesmo padrão arquitetônico.
Onde o Show-o se posiciona
Na taxonomia de 2026:
- Tokens discretos + NTP: Chameleon, Emu3. Simples, mas com inferência lenta.
- Tokens discretos + difusão mascarada: Show-o, MaskGIT, LlamaGen, Muse. Amostragem paralela, ainda com perdas devido ao tokenizador (lossy).
- Contínuo + difusão: Transfusion, MMDiT, DiT. Qualidade mais alta, treinamento mais complexo.
- Contínuo + correspondência de fluxo (flow matching) em um VLM: JanusFlow, InternVL-U. O mais recente.
Escolha pela tarefa: Show-o quando desejar T2I + inpainting + VQA in um único modelo aberto com velocidade razoável; Transfusion quando a qualidade for primordial e você puder arcar com a estrutura de duas perdas.
Use
O arquivo code/main.py simula a amostragem do Show-o:
- Uma grade de brinquedo de 16 tokens VQ.
- Um "transformer" simulado (mock) que prevê logits com base em um prompt e nos tokens atualmente desmascarados.
- Amostragem mascarada paralela ao longo de 8 etapas com cronograma de cosseno.
- Imprime os estados intermediários (evolução do padrão de máscara) e os tokens finais.
Execute-o e observe a máscara se dissolver passo a passo.
Envie
Esta lição produz o arquivo outputs/skill-unified-gen-model-picker.md. Dado um produto que necessita tanto de compreensão (VQA, legendagem/captioning) quanto de geração (T2I, inpainting) sob uma restrição de pesos abertos (open weights), escolhe entre a família Show-o, a família Transfusion/MMDiT e a família Emu3 / Chameleon com base em trade-offs concretos.
Exercícios
A difusão discreta mascarada gera amostras em ~16 etapas. Por que não em 1? O que quebra se você desmascarar tudo na etapa 0?
O inpainting vem de graça com a difusão mascarada. Proponha um caso de uso de produto (real ou hipotético) no qual o inpainting do Show-o supere um modelo especialista.
Cronograma de cosseno vs cronograma linear: trace o número de tokens desmascarados por etapa para T=8. Qual deles é mais equilibrado?
Uma imagem de 512x512 no Show-o tem 1024 tokens. Com um vocabulário K=16384, o modelo emite 1024 * log2(16384) = 14.336 bits (
1.75 KiB) de dados. O Stable Diffusion gera 51251224 bits = 6.291.456 bits (768 KiB) de pixels brutos. Qual é a taxa de compressão e que qualidade ela proporciona?Leia o artigo do LlamaGen (arXiv:2406.06525). Como o modelo de imagem autorregressivo condicional a classes do LlamaGen difere da abordagem mascarada do Show-o?
Termos-Chave
| Termo | O que as pessoas dizem | O que realmente significa |
|---|---|---|
| Difusão discreta mascarada | "Estilo MaskGIT" | Treinamento para prever tokens mascarados; na inferência, desmascara iterativamente as previsões mais confiáveis |
| Cronograma de cosseno | "Cronograma de desmascaramento" | Decaimento da taxa de máscara ao longo das etapas de inferência; concentra o aumento de confiança na faixa intermediária |
| Decodificação paralela | "Todos os tokens de uma vez" | Cada etapa prevê a sequência completa de tokens mascarados em uma única passagem direta (forward pass) e depois confirma os top-K |
| Atenção híbrida | "Causal + bidirecional" | Máscara que é causal para tokens de texto e bidirecional dentro de blocos de imagem |
| Inpainting | "Geração por preenchimento" | Condicionamento em uma imagem com alguns tokens mascarados para prever os que faltam; gratuito devido ao objetivo de treinamento |
| Taxa de confirmação (Commitment rate) | "Top-K por etapa" | Quantos tokens são declarados como "concluídos" por iteração; controla o trade-off entre inferência e qualidade |