Capítulo 21 · Difusão · 9 min
Gerar uma imagem apagando o ruído
Stable Diffusion, DALL-E, Midjourney. O processo inverso de denoising, o papel do CLIP, e por que U-Net cede lugar aos Transformers.
Uma familia diferente
Tudo o que vimos ate aqui descreve Transformers que preveem o proximo token. E a arquitetura que domina a linguagem, o codigo, e cada vez mais o video e o audio.
Mas quando voce digita um prompt no Midjourney, no DALL-E ou no Stable Diffusion, nao e isso que acontece. A imagem nao e gerada pixel por pixel da esquerda para a direita. Ela aparece em todo lugar ao mesmo tempo, refinada por etapas sucessivas.
E a obra de uma familia de modelos bem diferente: os modelos de difusao.
A ideia central: aprender a remover ruido
O processo de difusao se inspira numa intuicao quase simples demais. Se eu pego uma imagem nitida e vou adicionando progressivamente ruido gaussiano, em algum momento ela fica indistinguivel do ruido puro. Se eu aprendo a inverter esse processo — a tirar ruido pouco a pouco — entao posso partir de ruido puro e terminar com uma imagem nitida.
Durante o treinamento:
- Pegamos uma imagem do dataset
- Adicionamos ruido a ela segundo um cronograma predefinido (por exemplo T = 1000 etapas)
- Treinamos uma rede a prever o ruido que foi adicionado dados a imagem ruidosa e o passo t
Assim o modelo aprende, para qualquer nivel de ruido, a reconhecer o que e "imagem real" e o que e "ruido adicionado".
Na inferencia, invertemos: partimos de ruido puro e, a cada passo, o modelo preve o ruido, nos o subtraimos, e recomecamos. Apos T passos, obtemos uma imagem plausivel — que se parece com a distribuicao aprendida.
Experimente o denoising
A animação parte de uma imagem de ruído puro e a denoising em passos sucessivos. Cada passo segue o gradiente aprendido no treinamento, guiado pelo embedding textual do CLIP. Em 5 passos o resultado é borrado; em 50, é nítido.
Brinque com o numero de passos. Em 5 passos, a imagem fica granulada — o modelo nao tem tempo de refinar. Em 50 passos, ela fica nitida mas com dez vezes mais calculo. A maioria dos samplers modernos (DDIM, DPM-Solver) atingem qualidade quase otima em 20 a 30 passos.
Direcionar para uma imagem precisa: a guidance
O ruido puro e o mesmo para todos os prompts. Como o modelo sabe que queremos um por do sol e nao um cachorro? A resposta: nos condicionamos o modelo no texto.
Durante o treinamento, fornecemos a rede, alem da imagem ruidosa e do passo, um embedding do texto associado a imagem (frequentemente um encoder do tipo CLIP). A rede aprende assim previsoes de ruido condicionadas: "sabendo que a imagem descreve um por do sol, e assim que parece o ruido".
Na inferencia, calculamos duas previsoes: uma com o prompt, outra sem (ou com prompt vazio). A tecnica do Classifier-Free Guidance (CFG) consiste em extrapolar na direcao do prompt:
predicao_final = predicao_sem_prompt + guidance × (predicao_com_prompt − predicao_sem_prompt)
O coeficiente guidance (CFG scale) controla quanto nos afastamos do natural para colar no prompt. Em CFG=0, o modelo ignora o texto; em CFG=7, a imagem segue fielmente o prompt sem ficar artificial; alem de 12, ela fica supersaturada e perde os detalhes finos.
Latent diffusion: fazer menos calculo
Uma imagem 512×512 tem 786.432 pixels (3 canais × 512 × 512). Fazer 1.000 passos de denoising em tantos pixels e muito caro. O Stable Diffusion popularizou um truque: trabalhar num espaco latente comprimido.
Antes de treinar o modelo de difusao, treinamos um autoencoder (um VAE) que comprime as imagens num espaco latente 64×64×4 — cerca de 48× menor. A difusao se aplica entao apenas a esse latente, nao aos pixels. No final do denoising, decodificamos o latente para a imagem final.
E isso que torna o Stable Diffusion executavel num GPU consumidor em alguns segundos — enquanto um modelo equivalente baseado em pixels exigiria um cluster.
CLIP: a ponte entre texto e imagem
Para condicionar em texto, precisamos de uma representacao textual que compartilhe um espaco com a das imagens. Esse e o papel do CLIP (Contrastive Language-Image Pretraining), treinado pela OpenAI em 400 milhoes de pares imagem/legenda.
O CLIP aprende dois encoders — um para imagens, um para texto — que produzem embeddings num espaco comum. Uma legenda e sua imagem alvo tem embeddings proximos; uma legenda nao relacionada fica distante. Esse alinhamento permite ao modelo de difusao entender prompts textuais que ele nunca viu exatamente no treinamento.
U-Net vs Transformer (DiT)
Por muito tempo, a arquitetura de referencia para difusao era a U-Net: uma rede convolucional em U, com skip connections que preservam os detalhes finos. Stable Diffusion 1.4, 1.5 e 2 todos usam U-Net.
Mas em 2022, Peebles e Xie propuseram o DiT (Diffusion Transformer): substituir a U-Net por um Transformer puro. Cada "patch" da imagem e tratado como um token, com atencao completa sobre todos os outros patches. Sem mais piramide convolucional, sem mais skip connections — apenas blocos Transformer empilhados.
Stable Diffusion 3, FLUX, Sora (video) — todas as arquiteturas recentes migraram para o Transformer. Por que? Porque os Transformers escalam melhor: encontramos as mesmas scaling laws da linguagem. Dobrar o compute num DiT melhora as imagens de forma previsivel.
O sampler: DDPM, DDIM, DPM-Solver
O sampler e o algoritmo que decide, a cada passo, como combinar a previsao do ruido com o estado atual para produzir o proximo passo.
| Sampler | Passos tipicos | Particularidade |
|---|---|---|
| DDPM | 1000 | Estocastico, fiel ao treinamento, lento |
| DDIM | 20–50 | Deterministico, qualidade comparavel ao DDPM em bem menos passos |
| DPM-Solver | 10–25 | Solver de EDO, ainda mais rapido |
| Euler / Heun | 20–30 | Metodos classicos de EDO, simples e robustos |
| LCM | 4–8 | Destilacao latente, ultra-rapida |
A escolha do sampler e uma das alavancas mais acessiveis para ajustar velocidade vs qualidade.
Por que essa familia existe ao lado dos Transformers
Voce pode perguntar: por que nao gerar imagens como geramos texto, token por token? A resposta e sutil.
Para o texto, a ordem e natural: lemos da esquerda para a direita, e cada palavra depende das anteriores. Para uma imagem, nao ha ordem canonica. Gerar pixel por pixel introduz artefatos (os primeiros pixels nao tem o contexto dos ultimos). A difusao resolve esse problema gerando a imagem inteira em paralelo, refinada globalmente a cada passo.
E por isso que as abordagens autoregressivas em pixels (como PixelRNN, ou o ImageGPT inicial da OpenAI) foram abandonadas em favor da difusao. O unico retorno possivel seria via modelos autoregressivos sobre tokens de imagem (DALL-E 1, e agora o Chameleon da Meta) — mas eles ainda sao menos performaticos que as difusoes em qualidade fotorrealista.
A difusao nao e um Transformer. E uma outra forma, matematicamente ortogonal, de aprender uma distribuicao complexa — e para imagens, e a que ganhou.
Atualizado em