Modelos de Difusão

O que são modelos de difusão?

Modelos de difusão (diffusion models) são uma família de modelos generativos (generative models) que aprendem a criar dados (imagens, áudio etc.) ao reverter um processo gradual de adição de ruído (noising). Em vez de gerar uma amostra de uma só vez (como muitas Redes Adversárias Generativas (GANs) fazem) ou token a token (como os Modelos Autoregressivos (Autoregressive Models) fazem), os modelos de difusão geram por remoção de ruído iterativa (iteratively denoising): começam a partir de ruído aleatório e aplicam repetidamente um passo aprendido de “remoção de ruído” até que uma amostra limpa emerja.

Essa abordagem se mostrou especialmente eficaz para sinais contínuos e de alta dimensionalidade (high-dimensional), como imagens e áudio, porque:

  • O problema de aprendizado é transformado em uma sequência de tarefas de remoção de ruído gerenciáveis.
  • O treinamento costuma ser estável (sem jogo adversarial).
  • O modelo consegue representar bem distribuições de dados multimodais (multi-modal), frequentemente produzindo amostras diversas.
  • A natureza iterativa se alinha bem com a forma como imagens/áudio podem ser refinados de uma estrutura grosseira para detalhes finos.

Modelos de difusão impulsionam muitos sistemas modernos de geração de texto-para-imagem (text-to-image generation), preenchimento (inpainting), super-resolução (super-resolution), síntese de áudio (audio synthesis) e problemas inversos (inverse problems) (por exemplo, desfoque reverso, reconstrução), muitas vezes por meio de mecanismos de condicionamento (conditioning) e guiamento (guidance).

A ideia central: aprender a desfazer o ruído

Modelos de difusão definem dois processos:

  1. Processo direto (forward process, de difusão): corrompe gradualmente dados reais com ruído até que se tornem (aproximadamente) ruído Gaussiano puro.
  2. Processo reverso (reverse process, de remoção de ruído): aprende um modelo que reverte essa corrupção passo a passo, transformando ruído de volta em dados.

Intuição com imagens

Imagine que você pega uma foto e adiciona uma pequena quantidade de ruído gaussiano (Gaussian noise). Ela ainda parece a foto. Adicione um pouco mais, e a foto fica mais difícil de enxergar. Continue por centenas ou milhares de passos e ela se torna indistinguível de ruído aleatório.

Um modelo de difusão aprende o reverso: dada uma imagem levemente ruidosa, prevê como remover um pouco do ruído. Repetir isso gradualmente reconstrói uma imagem realista.

Esse enquadramento de “muitos passos pequenos” é uma grande parte do motivo pelo qual modelos de difusão funcionam bem: cada passo é uma transformação relativamente local que uma rede neural (neural network) consegue aprender com confiabilidade.

Fundamentos matemáticos (estilo DDPM)

A formulação moderna mais comum começa com Modelos Probabilísticos de Difusão por Remoção de Ruído (Denoising Diffusion Probabilistic Models, DDPMs).

Processo direto: cronograma fixo de adição de ruído

Seja (x_0) uma amostra de dados (por exemplo, uma imagem). Defina uma cadeia de Markov (Markov chain) que adiciona ruído Gaussiano ao longo de (T) passos:

[ q(x_t \mid x_{t-1}) = \mathcal{N}\left(x_t; \sqrt{1-\beta_t}, x_{t-1}, \beta_t I\right) ]

  • (\beta_t) é uma pequena agenda de variância (variance schedule) (por exemplo, aumentando linearmente).
  • Após muitos passos, (x_T \approx \mathcal{N}(0, I)).

Uma propriedade crucial: você pode amostrar (x_t) diretamente a partir de (x_0) sem simular todos os passos anteriores:

[ q(x_t \mid x_0) = \mathcal{N}\left(x_t; \sqrt{\bar{\alpha}_t}, x_0,; (1-\bar{\alpha}_t) I\right) ] onde (\alpha_t = 1-\beta_t) e (\bar{\alpha}t = \prod{s=1}^t \alpha_s).

Equivalentemente: [ x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t},\epsilon,\quad \epsilon \sim \mathcal{N}(0, I) ]

Essa reparametrização (reparameterization) é o elemento central do treinamento.

Processo reverso: transições de remoção de ruído aprendidas

O processo reverso é outra cadeia de Markov:

[ p_\theta(x_{t-1}\mid x_t) = \mathcal{N}\left(x_{t-1}; \mu_\theta(x_t, t), \Sigma_t\right) ]

Aqui, a média (\mu_\theta) é produzida por uma rede neural. A covariância (\Sigma_t) frequentemente é fixa ou parametrizada de forma simples.

Em vez de prever (\mu_\theta) diretamente, muitas implementações preveem um destes alvos equivalentes:

  • Predição de ruído (noise prediction): (\epsilon_\theta(x_t, t)) (mais comum)
  • Predição de dados (data prediction): (x_{0,\theta}(x_t, t))
  • Predição de velocidade (velocity prediction): (v_\theta(x_t,t)) (popular em sistemas de difusão latente)

A predição de ruído é popular porque o objetivo de treinamento se torna simples e estável.

Objetivo de treinamento: remoção de ruído como aprendizado supervisionado

Modelos de difusão são treinados com Descida do Gradiente (Gradient Descent) usando Retropropagação (Backpropagation), como Redes Neurais (Neural Networks) padrão. O objetivo mais usado (derivado de um limite variacional) se reduz a:

[ \mathbb{E}{t, x_0, \epsilon}\left[\left|\epsilon - \epsilon\theta(x_t, t)\right|^2\right] ]

Procedimento de treinamento:

  1. Amostrar um exemplo real (x_0).
  2. Amostrar um passo de tempo (t \in {1,\dots,T}).
  3. Amostrar ruído (\epsilon \sim \mathcal{N}(0,I)).
  4. Construir (x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon).
  5. Treinar a rede para prever (\epsilon) a partir de ((x_t, t)).

Isso é essencialmente remoção de ruído supervisionada, exceto que o nível de ruído muda com (t), então o modelo aprende a remover ruído em muitas razões sinal-ruído.

Exemplo prático: um passo mínimo de treinamento (pseudocódigo tipo PyTorch)

# x0: batch of images in [-1, 1], shape (B, C, H, W)
# eps_model: U-Net-like network predicting noise
# alpha_bar: precomputed array of length T+1 with cumulative products

t = torch.randint(1, T+1, (B,), device=x0.device)              # timesteps
eps = torch.randn_like(x0)                                     # true noise

a_bar = alpha_bar[t].view(B, 1, 1, 1)                          # broadcast
xt = torch.sqrt(a_bar) * x0 + torch.sqrt(1.0 - a_bar) * eps     # noisy input

eps_pred = eps_model(xt, t)                                     # predict noise
loss = torch.mean((eps - eps_pred) ** 2)

loss.backward()
opt.step()
opt.zero_grad()

Na prática, você também usará:

  • embeddings temporais (time embeddings) (por exemplo, sinusoidais),
  • precisão mista (mixed precision),
  • pesos de média móvel exponencial (Exponential Moving Average, EMA),
  • aumento de dados (data augmentation),
  • e possivelmente um autoencodificador latente (veja “Difusão latente” abaixo).

Amostragem: gerar por remoção de ruído iterativa

Para gerar uma nova amostra:

  1. Comece com (x_T \sim \mathcal{N}(0, I)).
  2. Para (t = T, T-1, \dots, 1), amostre (x_{t-1}) de (p_\theta(x_{t-1}\mid x_t)).
  3. Retorne (x_0).

Por que a amostragem pode ser lenta (e como ficou mais rápida)

De forma ingênua, você pode precisar de centenas ou milhares de passos. Muitas melhorias reduzem os passos drasticamente:

  • DDIM (Modelos Implícitos de Difusão por Remoção de Ruído, Denoising Diffusion Implicit Models): amostragem determinística ou semi-determinística com menos passos.
  • Solucionadores de ordem superior (higher-order solvers) (por exemplo, métodos do tipo DPM-Solver): tratam o processo como a integração de uma equação diferencial.
  • Abordagens de consistência/retificadas (consistency/rectified approaches) (ideias relacionadas): visam reduzir os passos para muito poucos, mantendo a qualidade.

O trade-off geral é:

  • menos passos → mais rápido, mas pode reduzir a fidelidade ou aumentar artefatos
  • mais passos → mais lento, mas frequentemente com maior qualidade e estabilidade

Exemplo prático: um loop básico de amostragem ancestral (ancestral sampling)

x = torch.randn(B, C, H, W, device=device)  # x_T

for t in range(T, 0, -1):
    eps = eps_model(x, torch.full((B,), t, device=device))
    # Convert eps prediction to mean of p(x_{t-1} | x_t)
    beta_t = beta[t]
    alpha_t = 1.0 - beta_t
    alpha_bar_t = alpha_bar[t]
    alpha_bar_prev = alpha_bar[t-1]

    # Estimate x0 from xt and eps
    x0_hat = (x - torch.sqrt(1 - alpha_bar_t) * eps) / torch.sqrt(alpha_bar_t)

    # Compute mean (one common parameterization)
    mean = (
        torch.sqrt(alpha_bar_prev) * x0_hat
        + torch.sqrt(1 - alpha_bar_prev) * eps
    )

    if t > 1:
        z = torch.randn_like(x)
        x = mean + torch.sqrt(beta_t) * z
    else:
        x = mean  # final step: no noise

x0 = x

Implementações reais diferem nos detalhes (tratamento de variância, clipping, limiares dinâmicos), mas isso captura o “sabor” da remoção de ruído iterativa.

Condicionamento e guiamento (por que texto-para-imagem funciona)

Modelos de difusão se tornam muito mais úteis quando você consegue direcionar a geração usando informação de condicionamento (c), como:

  • prompts de texto
  • rótulos de classe
  • imagens de referência (para preenchimento, guia de pose, mapas de profundidade)
  • sinais de alinhamento áudio/texto

Isso tipicamente significa que o removedor de ruído se torna (\epsilon_\theta(x_t, t, c)), frequentemente implementado usando camadas de atenção cruzada (cross-attention) (comumente associadas à Arquitetura Transformer (Transformer Architecture), embora muitos backbones de difusão sejam redes U-Net aumentadas com atenção).

Guiamento por classificador e guiamento sem classificador

Um grande avanço em controlabilidade prática é o guiamento, que aumenta a probabilidade de amostras corresponderem à condição.

  • Guiamento por classificador (classifier guidance) usa um classificador externo para “empurrar” amostras durante a amostragem.
  • Guiamento sem classificador (classifier-free guidance, CFG) treina o modelo às vezes com a condição removida, permitindo guiamento sem um classificador separado.

O CFG usa: [ \epsilon_{\text{guided}} = (1+w)\epsilon_\theta(x_t,t,c) - w\epsilon_\theta(x_t,t,\varnothing) ] onde (w) é a escala de guiamento (guidance scale).

(w) maior:

  • melhora a aderência ao prompt (prompt adherence),
  • mas pode reduzir a diversidade e aumentar artefatos (nitidez excessiva, texturas “queimadas”).

Arquiteturas: U-Nets, atenção e difusão latente

Removedores de ruído com U-Net

Muitos modelos de difusão para imagens usam uma rede U-Net (U-Net) como backbone:

  • O caminho de downsampling captura estrutura global.
  • O caminho de upsampling reconstrói detalhes.
  • Conexões de atalho preservam informação espacial.

Blocos de atenção frequentemente são inseridos em resoluções intermediárias para melhorar a coerência global.

Difusão latente (por que é eficiente)

A difusão em espaço de pixels em alta resolução é cara. A difusão latente (latent diffusion) resolve isso ao:

  1. Treinar (ou usar) um autoencodificador (autoencoder) para mapear imagens para um espaço latente (latent space) de menor dimensionalidade (z).
  2. Executar a difusão no espaço latente (mais barato).
  3. Decodificar o latente final de volta para pixels.

Essa é uma ideia-chave por trás de sistemas de texto-para-imagem amplamente utilizados.

Transformers de Difusão (DiT)

Uma alternativa cada vez mais comum é usar um backbone Transformer (Transformer) (operando em patches de imagem ou tokens latentes) como o removedor de ruído. Isso pode escalar bem com dados e computação, de forma semelhante às tendências em modelos de linguagem grandes (large language models, LLMs), mas U-Nets continuam muito competitivas, especialmente para tarefas espacialmente estruturadas.

Por que a difusão funciona bem para imagens e áudio

Modelos de difusão não são a única abordagem generativa (veja também Autoencoders Variacionais (Variational Autoencoders, VAEs), Redes Adversárias Generativas e Modelos de Fluxo (Flow Models)), mas eles têm várias propriedades que se alinham particularmente bem a sinais perceptuais.

1) A decomposição da tarefa combina com a estrutura do sinal

Imagens e áudio têm estrutura rica em múltiplas escalas:

  • layout grosseiro / semântica global
  • formas e texturas de nível intermediário
  • detalhes finos (bordas, harmônicos, transientes)

A remoção de ruído iterativa dá suporte natural a um refinamento do grosseiro para o fino (coarse-to-fine refinement). Passos iniciais moldam a estrutura global; passos posteriores adicionam detalhes de alta frequência.

2) Objetivo de treinamento estável

O treinamento por difusão normalmente é uma perda de regressão direta (por exemplo, MSE no ruído), que tende a ser mais estável do que o treinamento adversarial em Redes Adversárias Generativas. Essa estabilidade ajuda ao escalar para grandes conjuntos de dados e condicionamentos complexos (por exemplo, texto).

3) Forte cobertura de modos (diversidade)

Como modelos de difusão aprendem a corresponder à distribuição de dados por meio de muitos problemas condicionais de remoção de ruído, eles frequentemente exibem menos problemas de perda de modos (mode dropping) do que redes adversárias generativas. Isso é crucial para geração criativa e para representar conjuntos de dados diversos.

4) Ruído gaussiano é uma distribuição “ponte” natural

Para dados contínuos, o ruído Gaussiano é matematicamente conveniente e suave. O processo direto garante que, para (t) grande, a distribuição se aproxime de um prior fácil de amostrar (\mathcal{N}(0,I)). Então o aprendizado foca em transições locais, em vez de inventar um mapeamento global em um único passo.

5) Funciona bem com priores perceptuais e restrições

Em muitos problemas de imagem e áudio você quer incorporar restrições (pixels conhecidos, bandas de frequência, medições). A amostragem por difusão pode ser modificada para impor restrições a cada passo, tornando modelos de difusão poderosos para:

  • preenchimento / expansão (outpainting)
  • desfoque reverso e super-resolução
  • reconstrução de MRI/CT
  • aprimoramento de fala e extensão de banda (bandwidth extension)

Difusão para áudio: o que muda?

Áudio também é contínuo, mas tem estrutura diferente:

  • fortes dependências temporais
  • estrutura de frequência em múltiplas escalas (harmônicos)
  • a fase (phase) importa (dependendo da representação)

Modelos de difusão para áudio podem operar sobre:

  • formas de onda brutas (mais difícil, mas possível),
  • espectrogramas (comum),
  • latentes de áudio aprendidos.

A remoção de ruído funciona bem porque muitas transformações de áudio (remover ruído, restaurar harmônicos) são naturalmente enquadradas como refinamento progressivo. Síntese iterativa pode produzir áudio de alta qualidade, especialmente quando combinada com boas representações e condicionamento (texto, fonemas, mel-espectrogramas).

Aplicações comuns

Geração de imagens (texto-para-imagem, incondicional)

Gerar imagens a partir de:

  • ruído puro (incondicional (unconditional))
  • prompts de texto (condicional (conditional))
  • imagens de referência (imagem-para-imagem (image-to-image))

Edição de imagens

  • Preenchimento: preencher regiões ausentes ao condicionar nos pixels conhecidos.
  • Expansão: estender uma imagem além de suas bordas.
  • Transferência de estilo/estrutura (style/structure transfer): edições controladas via sinais de condicionamento (bordas, profundidade, segmentação (segmentation)).

Super-resolução

Condicionar o modelo de difusão em uma imagem de baixa resolução e gerar uma versão plausível em alta resolução.

Geração e aprimoramento de áudio

  • geração de texto-para-áudio
  • remoção de ruído e aprimoramento de fala
  • síntese musical em espaço latente ou de espectrograma

Problemas inversos científicos e industriais

Priores de difusão podem melhorar reconstruções quando você tem medições parciais, guiando amostras para corresponder aos dados observados enquanto permanecem realistas.

Considerações práticas (o que importa em sistemas reais)

Agenda de ruído e parametrização

  • A escolha do cronograma de (\beta_t) (ou níveis de ruído em tempo contínuo (continuous-time noise levels)) afeta a dinâmica de treinamento e a qualidade das amostras.
  • Prever (\epsilon) vs (x_0) vs (v) pode mudar a estabilidade e os resultados perceptuais.

Escala de guiamento

  • Ajuste a escala de CFG para o trade-off fidelidade/diversidade.
  • Guiamento alto pode produzir texturas supersaturadas ou reduzir a variedade.

Contagem de passos e amostrador

  • Use amostradores/solucionadores mais rápidos para reduzir passos.
  • Para muitas tarefas, 20–50 passos podem ser um ponto ideal; menos pode funcionar com métodos mais novos.

Espaço latente vs espaço de pixels

  • Difusão latente é muito mais barata e permite resoluções mais altas.
  • Difusão em espaço de pixels pode produzir detalhes muito nítidos, mas é pesada em computação.

Avaliação

Métricas e abordagens comuns incluem:

  • FID/KID para imagens (imperfeitas, mas amplamente usadas)
  • estudos de preferência humana (frequentemente os mais significativos)
  • métricas específicas da tarefa para reconstrução/aprimoramento
  • medidas de diversidade (para detectar comportamento semelhante a colapso)

Limitações e modos de falha

  • Custo de amostragem: remoção de ruído iterativa é mais lenta do que geradores de uma passada, embora solucionadores e destilação (distillation) ajudem.
  • Trade-off entre aderência ao prompt e realismo: guiamento forte pode prejudicar a naturalidade.
  • Consistência temporal (vídeo/áudio): difusão ingênua por quadro pode gerar tremulação (flicker); são necessários modelos temporais especializados.
  • Riscos de viés e memorização: como todos os grandes modelos generativos, modelos de difusão herdam vieses do conjunto de dados e podem memorizar exemplos raros.
  • Controle é imperfeito: controle composicional preciso continua sendo uma área ativa (frequentemente endereçada com melhor condicionamento, adaptadores ou restrições explícitas).

Como a difusão se relaciona com outras famílias de modelos generativos

  • Em comparação com Redes Adversárias Generativas: o treinamento por difusão geralmente é mais estável e diverso, mas a amostragem é mais lenta.
  • Em comparação com Autoencoders Variacionais: difusão frequentemente produz maior fidelidade perceptual, mas autoencoders variacionais podem amostrar em uma passada e fornecem estrutura latente explícita.
  • Em comparação com Modelos Autoregressivos: difusão não gera token a token; ela se destaca em domínios contínuos e refinamento iterativo, enquanto modelos autoregressivos brilham para sequências discretas como texto.
  • Em comparação com Modelos de Fluxo: modelos de fluxo oferecem verossimilhança exata e amostragem em uma passada (com restrições de invertibilidade), enquanto difusão oferece flexibilidade e qualidade com amostragem iterativa.

Resumo

Modelos de difusão geram dados ao aprender a reverter um processo gradual de adição de ruído, transformando ruído aleatório em amostras coerentes por meio de remoção de ruído iterativa. Seus pontos fortes — treinamento estável, alta qualidade de amostras, boa diversidade e condicionamento poderoso — os tornam particularmente eficazes para imagens e áudio, onde o refinamento de uma estrutura grosseira para detalhes finos corresponde à natureza do sinal. Sistemas modernos estendem a ideia básica com espaços latentes, condicionamento baseado em atenção e amostradores mais rápidos, viabilizando aplicações práticas que vão de geração de texto-para-imagem a síntese de áudio e reconstrução científica.