antonio leandro

ia generativa

Denoising Diffusion Probabilistic Models

paper · Jonathan Ho, Ajay Jain, Pieter Abbeel ·

a tese

prever o ruído, e não a imagem, é o que faz difusão funcionar: com essa parametrização e uma perda de mínimos quadrados sem pesos, o modelo bate os gan da época em fid no cifar10

o que fica

  1. A rede não aprende a imagem: ela aprende a prever o ruído gaussiano que foi somado, e a imagem sai da subtração.
  2. A perda que dá as melhores amostras não é o limite variacional correto, e sim uma versão dele sem os pesos — treinar no bound de verdade dá codelength melhor e FID três vezes pior.
  3. O processo forward não tem um parâmetro sequer: as variâncias são constantes fixas, o que apaga um termo inteiro da perda e permite pular direto para qualquer passo de ruído em forma fechada.
  4. Amostrar custa 1.000 passadas sequenciais pela rede: 17 segundos para 256 imagens 32×32 e 300 segundos para 128 imagens 256×256 numa TPU v3-8.
  5. Mais da metade do codelength do modelo é gasta descrevendo distorções que ninguém enxerga — 1,78 bit por dimensão de taxa produz um erro de reconstrução de 0,95 numa escala de 0 a 255.
  6. Deixar a rede aprender as variâncias do reverse process desestabilizou o treino; fixá-las em constantes dependentes só do tempo funcionou melhor.

o problema

Em 2020 a geração de imagem estava dividida em duas famílias que não se encontravam. De um lado, os GAN produziam as amostras mais bonitas, mas não davam verossimilhança nenhuma e o treino adversarial era um problema em si. Do outro, os modelos baseados em verossimilhança — autoregressivos, flows, VAE — tinham treino estável e número comparável, e amostra visivelmente pior. Score matching e modelos baseados em energia tinham acabado de chegar perto dos GAN, o que sugeria que havia caminho fora do adversarial.

Modelos de difusão existiam desde 2015. São fáceis de definir, eficientes de treinar, e ninguém havia demonstrado que geravam imagem de qualidade. Ficaram cinco anos como uma curiosidade elegante de inferência variacional: uma cadeia de Markov que aprende a reverter outra cadeia de Markov que destrói o sinal com ruído. A ideia estava lá, faltava a escolha de parametrização que fizesse ela render.

a ideia

Você define, à mão, um processo que estraga a imagem: a cada passo, encolhe um pouco os pixels e soma um pouco de ruído gaussiano. Depois de mil passos não sobrou nada — é ruído puro, indistinguível de uma amostra de uma normal padrão. Esse processo não tem nada para aprender; é aritmética com constantes escolhidas de antemão. O modelo só aprende o caminho de volta, um passo por vez.

O movimento central do paper está em o que exatamente a rede prevê. O caminho óbvio é fazê-la prever a média do passo anterior. Ho, Jain e Abbeel reescrevem essa média e descobrem que ela é uma função do ruído que foi somado — ruído esse que o treino conhece, porque foi sorteado. Então trocam a pergunta: em vez de “como era a imagem antes”, a rede responde “quanto de ruído tem aqui”. Com essa troca, o termo da perda vira um mínimos quadrados entre o ruído sorteado e o ruído previsto, e o objetivo inteiro passa a se parecer com denoising score matching em várias escalas de ruído. As duas linhas de pesquisa eram a mesma coisa vista de ângulos diferentes.

como funciona

O processo forward tem uma propriedade que faz o treino ser barato: dá para saltar direto do dado original para o passo t em forma fechada, sem simular os passos intermediários. Isso transforma o treino num loop sem cadeia nenhuma.

treino:
  x0  ~ dados
  t   ~ uniforme(1..T)
  eps ~ N(0, I)
  xt  = sqrt(abarra[t])*x0 + sqrt(1 - abarra[t])*eps
  gradiente em || eps - eps_theta(xt, t) ||^2

amostragem:
  xT ~ N(0, I)
  para t = T..1:
    z = N(0,I) se t > 1, senão 0
    x[t-1] = (x[t] - (1-alpha[t])/sqrt(1-abarra[t]) * eps_theta(x[t],t)) / sqrt(alpha[t]) + sigma[t]*z

A perda de treino é essa e só essa: erro quadrático, sem os pesos que o limite variacional prescreveria. Descartar os pesos reduz a importância dos passos de ruído pequeno, onde a tarefa é fácil, e concentra a rede nos passos difíceis.

T é 1.000, com as variâncias crescendo linearmente de 0,0001 a 0,02. A rede é uma U-Net no estilo do PixelCNN++ com group normalization e self-attention na resolução 16×16; o timestep entra via sinusoidal position embedding, o mesmo do Transformer, somado em cada bloco residual. Os pesos são compartilhados entre todos os passos — é uma rede só, chamada mil vezes. O modelo de CIFAR10 tem 35,7 milhões de parâmetros; os de 256×256, 114 milhões.

o que isso custou

Verossimilhança. O modelo com FID 3,17 tem codelength de 3,75 bits por dimensão, contra 2,80 do Sparse Transformer. E o trade-off é explícito na ablação: treinar no limite variacional verdadeiro melhora o codelength e joga o FID de 3,17 para 13,51. Você escolhe um ou outro.

Amostragem. Mil avaliações sequenciais da rede por imagem. O paper mede: 17 segundos para um batch de 256 imagens 32×32, 300 segundos para 128 imagens 256×256. É ordens de grandeza mais caro que uma passada de GAN.

Fragilidade da receita. Aprender as variâncias do reverse process desestabiliza o treino. Prever a imagem original em vez do ruído piora as amostras. Prever a média com o objetivo simplificado não treina. A combinação que funciona é estreita, e o paper admite que a justificativa dela é empírica.

Qualidade fora do CIFAR10. Em LSUN Cat o FID é 19,75, contra 6,93 do StyleGAN2; em Church, 7,89 contra 6,42 do ProgressiveGAN. A vitória não é geral.

E a leitura de compressão progressiva, que é uma das partes mais bonitas do texto, é declarada prova de conceito: depende de minimal random coding, que não é tratável em alta dimensão.

onde isso aparece hoje

A parametrização por predição de ruído virou o padrão de fato dos modelos de difusão, e a difusão virou a base dos geradores de imagem que se popularizaram depois. As duas frentes de trabalho seguintes estão anunciadas no próprio paper: ele observa que o comprimento da difusão não precisa ser 1.000 e pode ser encurtado para amostrar rápido, e que o decoder final poderia ser mais forte.

A observação sobre geração progressiva — features de larga escala aparecem primeiro, detalhes por último — também sobreviveu como intuição operacional. É por isso que travar o latente intermediário preserva pose e cor de cabelo enquanto varia o resto, e é o que torna interpolação e edição no meio da cadeia possíveis.

lido na íntegra por pipeline de llm, revisado por antonio leandro antes de publicar ·