o problema
Em 2021 os modelos de difusão já eram o estado da arte em síntese de imagem, e eram caros de um jeito que fechava a porta. O paper cita a ordem de grandeza: 150 a 1.000 dias de V100 para treinar os melhores modelos, e cerca de cinco dias numa única A100 só para produzir 50 mil amostras. O motivo é estrutural, não de engenharia: modelos baseados em verossimilhança cobrem modos, e cobrir modos significa gastar capacidade modelando os bits imperceptíveis da imagem. Mesmo com o objetivo reponderado do DDPM, que subamostra os passos iniciais de denoising, cada gradiente e cada passo de inferência ainda são avaliados sobre todos os pixels RGB.
A saída conhecida era comprimir antes. VQ-VAE, VQGAN e DALL-E já treinavam um modelo generativo sobre um latente discreto em vez de pixels. Só que esses modelos eram autorregressivos: precisavam achatar o latente numa ordem 1D e, para que o transformer fosse viável, exigiam compressão agressiva. O preço aparece na reconstrução, antes mesmo de qualquer geração — o autoencoder f igual a 8 do DALL-E marca R-FID 32,01 e PSNR 22,8; o VQGAN f igual a 16, R-FID 4,98 e PSNR 19,9. Menos compressão custava computação demais; mais compressão destruía detalhe que nenhum estágio posterior recuperaria.
a ideia
Dividir o aprendizado em duas fases que já eram distintas na prática: compressão perceptual, que remove alta frequência sem mexer em semântica, e compressão semântica, onde o modelo generativo de fato aprende a composição da cena. A primeira vira um autoencoder, treinado uma vez e reutilizado. A segunda vira o modelo de difusão, treinado no latente.
O que destrava a coisa é que o backbone da difusão é um UNet convolucional e o latente continua sendo um tensor 2D. Sem precisar achatar nada em sequência, não há pressão para comprimir agressivamente. O autoencoder f igual a 4 do paper chega a R-FID 0,58 e PSNR 27,4 — ou seja, dá para reduzir a dimensionalidade e ainda ficar perceptualmente perto do original.
como funciona
O primeiro estágio é um autoencoder treinado com perda perceptual (LPIPS) mais um discriminador patch-based, o que evita o borrão típico de perdas puramente em L1 ou L2. A regularização é deliberadamente fraca, para não estragar a reconstrução: ou uma penalidade KL com peso da ordem de 10⁻⁶, ou uma camada de quantização vetorial com codebook grande, absorvida no decoder.
O segundo estágio é DDPM comum, só que sobre z:
z = E(x) / sigma_hat # rescale por desvio-padrão só no caso KL
t ~ U{1..T}
eps ~ N(0, I)
z_t = alpha_t * z + sigma_t * eps
loss = || eps - eps_theta(z_t, t, tau_theta(y)) ||²
O condicionamento tem dois caminhos. Quando y é espacialmente alinhado (imagem de baixa resolução, máscara, mapa semântico), basta concatenar ao input do UNet. Quando y é token — texto, layout, classe —, entra por cross-attention: Q sai da representação intermediária do UNet, K e V saem de τ_θ(y), e τ_θ é treinado junto. No modelo texto-imagem de 1,45 bilhão de parâmetros treinado no LAION-400M, τ_θ é um transformer de 32 blocos, dimensão 1.280, sequência 77, sobre o tokenizer do BERT. No modelo condicionado por classe, τ_θ é uma única camada de embedding de dimensão 512.
Dois detalhes que mordem quem implementa: o SNR induzido pela variância do latente muda o resultado da amostragem convolucional, e o latente KL precisa ser reescalado (o VQ já tem variância perto de 1); e um modelo treinado em 256² generaliza para 512² ou 1024² em tarefas densamente condicionadas, amostrando de forma convolucional.
o que isso custou
Os autores listam duas limitações e nenhuma delas é pequena. A amostragem continua sequencial e mais lenta que a de uma GAN — o ganho foi no treino e no custo por passo, não na natureza iterativa. E a capacidade de reconstrução do autoencoder virou um teto: para tarefas que exigem precisão fina em pixel, o LDM não passa dele, e o paper suspeita que os próprios modelos de super-resolução já esbarram nisso. A tabela de super-resolução mostra o formato do trade-off: o LDM-4 ganha em FID (2,8 contra 5,2 do SR3), mas perde em PSNR (24,4 contra 26,4) para uma regressão simples, que vence nessas métricas produzindo borrão.
A janela de compressão útil também depende dos dados — ImageNet exige compressão menor que CelebA para não perder qualidade, então “escolha f igual a 4 ou 8” é heurística, não regra. E os autores marcam como pergunta aberta o quanto a combinação de treino adversarial no primeiro estágio com objetivo de verossimilhança no segundo distorce a distribuição. Na seção de impacto social eles são explícitos sobre baratear a produção de deep fakes, sobre mulheres serem desproporcionalmente afetadas por isso, e sobre modelos generativos poderem revelar dados de treino — extensão ainda não compreendida no caso de difusão de imagens.
onde isso aparece hoje
O código e os modelos foram liberados em CompVis/latent-diffusion, e o Stable Diffusion é o descendente direto dessa base — a mesma estrutura de autoencoder mais UNet mais cross-attention, com um encoder de texto CLIP ocupando o slot do τ_θ que aqui era um transformer sobre tokens do BERT. Essa divisão em três peças virou o formato padrão dos geradores de imagem abertos, a ponto de “VAE”, “UNet” e “text encoder” serem arquivos separados que se trocam à mão.
Duas escolhas do paper também viraram default de ferramenta. O autoencoder é um artefato reutilizável, treinado uma vez e compartilhado entre modelos e tarefas. E classifier-free guidance deixou de ser opcional: no texto-imagem, o FID no MS-COCO sai de 23,31 sem guidance para 12,63 com escala 1,5 — a diferença entre um resultado morno e um competitivo com modelos de 4 a 6 bilhões de parâmetros.