2 pontos por GN⁺ 2024-03-12 | 1 comentários | Compartilhar no WhatsApp

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:
    1. Amostrar x0 de K, amostrar o nível de ruído σ entre σmin e σmax e amostrar o ruído ϵ de N(0,I).
    2. Gerar os dados ruidosos xσ=x0+σϵ.
    3. Prever ϵ (a direção do ruído) a partir de , 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:
    1. 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.
    2. 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.
    3. 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

 
GN⁺ 2024-03-12
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.

    • O autor descobriu, no processo de entender modelos de difusão, que dava para simplificar o código e a matemática, e por isso escreveu um post de blog e uma biblioteca sobre o tema.
  • 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.

    • O texto Diffusion Models From Scratch aprofunda 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.

    • Artigos sobre difusão costumam estar cheios de fórmulas complexas, mas o código é mais fácil de entender e mais preciso. A opinião é que artigos teóricos deveriam ter 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 Scratch para criar uma introdução Diffusion Transformer From Scratch.

    • A opinião pede mais informações sobre transformadores de difusão e sugere uma introdução mostrando como eles podem ser usados em modelos de geração de vídeo.
  • 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.

    • A opinião enfatiza que modelos de difusão modelam a função de pontuação e que a amostragem por difusão se parece com a dinâmica de Langevin, o que explicaria por que o treinamento é mais fácil do que em 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.

    • Menciona o artigo 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?

    • Levanta a pergunta se uma das ideias dos modelos de difusão é aproveitar grandes volumes de dados de treinamento.
  • 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.

    • Diz que a explicação teórica é boa e independente do dataset, e pergunta sobre dificuldades específicas da geração de imagens, como criar padrões complexos como teclas de piano.
  • Lembre-se de que todos os modelos de aprendizado de máquina são convolução.

    • Apresenta uma opinião categórica de que todos os modelos de aprendizado de máquina se baseiam em convolução.
  • Existe uma sociedade secreta que usa os comentários deste texto para enviar mensagens secretas, então não pesquise no Google.

    • Faz uma alegação satírica de que há uma sociedade secreta trocando mensagens por meio dos comentários.