Modelo de difusão do zero sob uma nova perspectiva teórica
- Os modelos de difusão têm mostrado resultados impressionantes recentemente em modelagem generativa, destacando-se especialmente na amostragem de distribuições multimodais.
- Os modelos de difusão não só foram amplamente adotados em ferramentas de geração de texto para imagem como o Stable Diffusion, como também apresentam ótimo desempenho em diversas áreas de aplicação, como geração de áudio/vídeo/3D, design de proteínas e planejamento de trajetórias para robôs.
- Este tutorial apresenta os modelos de difusão sob a perspectiva da otimização e cobre tanto a teoria quanto o código para explicar como implementá-los do zero.
Treinando modelos de difusão
- O objetivo dos modelos de difusão é gerar amostras a partir de um conjunto aprendido com exemplos de treinamento.
- O treinamento de modelos de difusão envolve o seguinte processo:
- Amostrar
x0 de K, amostrar o nível de ruído σ entre σmin e σmax e amostrar o ruído ϵ de N(0,I).
- Gerar os dados ruidosos
xσ=x0+σϵ.
- Prever
ϵ (a direção do ruído) a partir de xσ, minimizando a perda quadrática.
- Na prática, o treinamento é realizado por meio da função
training_loop, que itera sobre o x0 do batch e usa generate_train_sample para amostrar o nível de ruído sigma e o vetor de ruído eps.
Agenda de ruído
- Na prática,
σ não é amostrado uniformemente no intervalo [σmin,σmax]; esse intervalo é discretizado em N valores distintos, uma agenda de σ.
- A classe
Schedule encapsula a lista de sigmas possíveis e faz amostragens a partir dessa lista durante o treinamento.
- É usada uma agenda log-linear, e são fornecidos gráficos comparando essa agenda com outras usando parâmetros padrão.
Exemplo de brinquedo
- Neste tutorial, é usado um dataset de brinquedo composto por pontos amostrados de uma espiral.
- Para esse dataset simples, o denoiser é implementado com um perceptron multicamadas (MLP).
- O MLP recebe como entrada a concatenação de
x∈R2 e o nível de ruído σ, e prevê ϵ∈R2.
- Depois de reunir todos os componentes necessários, é possível treinar o modelo de difusão.
Interpretando o denoising como projeção aproximada
- O procedimento de treinamento da difusão aprende um denoiser
ϵθ(x,σ) e, no artigo, o denoiser aprendido é interpretado como uma projeção aproximada sobre a variedade de dados K.
- Isso motiva a introdução de um modelo de aproximação por erro relativo para analisar a convergência dos algoritmos de amostragem por difusão.
Funções de distância e projeção
- Para um conjunto
K⊆Rn, a função de distância é definida como distK(x), e a projeção de x∈Rn é definida como o conjunto de pontos que atingem essa distância.
- Se
projK(x) for única, então o gradiente de distK(x) aponta para essa projeção única.
Denoiser ideal
- O denoiser ideal ou ótimo
ϵ∗ para um nível de ruído específico σ é o minimizador exato da função de perda de treinamento.
- Quando os dados seguem uma distribuição uniforme discreta sobre um conjunto finito de K, o denoiser ideal tem uma expressão exata em forma fechada.
Modelo de erro relativo
- Para analisar a convergência dos algoritmos de amostragem por difusão, é introduzido um modelo de erro relativo.
- Esse modelo supõe que a projeção prevista pelo denoiser,
x−σϵθ(x,σ), aproxima bem projK(x) quando σ estima bem distK(x)/n para a entrada x.
Amostrando em modelos de difusão
- Para obter um ponto
x0 pertencente a K por meio de amostragem do denoiser treinado ϵθ(x,σ), o denoiser ϵθ(xt,σt) com ruído xt e nível de ruído σt prevê x0.
Interpretando a amostragem por difusão como minimização de distância
- A iteração de amostragem por difusão pode ser interpretada como descida de gradiente sobre a função
f(x)=12distK(x)2.
- A forma de escolher a agenda
σt determina o número e o tamanho dos passos de gradiente tomados durante a amostragem.
Amostrador aprimorado com estimativa de gradiente
- Um novo amostrador eficiente é derivado por meio de estimativa de gradiente.
- Esse amostrador mostra convergência mais rápida do que o amostrador DDIM existente.
Exemplo em larga escala
- O código de treinamento fornecido acima pode ser usado não apenas em datasets de brinquedo, mas também para treinar do zero modelos de difusão para imagens.
- O código de amostragem funciona sem modificações para amostrar a partir de modelos de difusão latente pré-treinados de ponta.
Outros materiais
- Também são recomendados os seguintes posts de blog sobre modelos de difusão:
- O que são modelos de difusão apresenta os modelos de difusão sob a perspectiva de tempo discreto de reverter processos de Markov.
- Modelagem generativa por estimativa do gradiente da distribuição de dados apresenta os modelos de difusão sob a perspectiva de tempo contínuo de reverter equações diferenciais estocásticas.
- Modelos de difusão comentados explica em detalhes uma implementação em PyTorch de modelos de difusão.
Opinião do GN⁺
- Este tutorial apresenta os modelos de difusão sob a perspectiva da otimização e os explica de forma a conectar a base teórica com a implementação prática em código, tornando o conteúdo acessível até para engenheiros de software iniciantes.
- Os modelos de difusão podem ser aplicados a vários tipos de dados, o que sugere sua utilidade em diversas áreas onde a amostragem de distribuições multimodais é importante.
- O tutorial explica passo a passo os processos de treinamento e amostragem dos modelos de difusão, ajudando na compreensão aprofundada de como o modelo funciona e como implementá-lo.
- Os processos de treinamento e amostragem de modelos de difusão são relativamente complexos, e para entendê-los e implementá-los é necessário conhecimento básico de machine learning e deep learning.
- Ao adotar essa tecnologia, é preciso considerar fatores como custo computacional, qualidade dos dados de treinamento e complexidade do modelo, com potencial para gerar amostras mais sofisticadas e diversas.
1 comentários
Comentários do Hacker News
Palavras do autor: ao tentar entender modelos de difusão, percebeu que era possível simplificar muito o código e a matemática, o que o levou a escrever um post de blog e uma biblioteca sobre difusão. Está disposto a responder perguntas.
Outro ótimo texto,
Diffusion Models From Scratch, aborda os detalhes matemáticos com mais profundidade e vem acompanhado de uma implementação fácil de entender com menos de 500 linhas.Diffusion Models From Scratchaprofunda o conteúdo matemático sobre modelos de difusão e oferece uma implementação de código concisa.É bom que este texto inclua código. Artigos sobre difusão são famosos por terem muitas fórmulas, mas o código é mais claro e mais fácil de entender para pessoas como nós. Todo artigo teórico deveria vir com um código de implementação de referência.
Gostaria de ver uma expansão sobre transformadores de difusão. Eles são usados para impulsionar o Sora e outros modelos de geração de vídeo. Seria ótimo combinar este texto com
GPT From Scratchpara criar uma introduçãoDiffusion Transformer From Scratch.Bom texto, mas ele deixa de fora uma característica importante: modelos de difusão modelam a derivada do log da probabilidade (função de pontuação), e a amostragem por difusão é semelhante à dinâmica de Langevin. Isso ajuda a explicar por que são mais fáceis de treinar do que GANs.
Muito interessante. Lembra o artigo
Iterative alpha-(de)Blending. Esse artigo também propõe um modelo de difusão conceitualmente mais simples e o formula como um processo aproximado de projeção iterativa. Essa abordagem permite experimentos mais interessantes, como análise de erros de remoção de ruído.Iterative alpha-(de)Blending, dizendo que ele apresenta uma forma de simplificar modelos de difusão e de representá-los como um processo de projeção iterativa.Uma das ideias da difusão é obter uma enorme quantidade de dados de treinamento? Ou seja, contrastar imagens difundidas aleatoriamente com imagens não difundidas?
Boa explicação da teoria. Parece ser independente do conjunto de dados. Fico curioso sobre os aspectos específicos da geração de imagem. Por exemplo, por que geradores de imagem têm dificuldade para gerar teclas de piano? Parece que seria necessária uma representação melhor de restrições de médio alcance.
Lembre-se de que todos os modelos de aprendizado de máquina são convolução.
Existe uma sociedade secreta que usa os comentários deste texto para enviar mensagens secretas, então não pesquise no Google.