4 pontos por GN⁺ 2024-05-27 | 1 comentários | Compartilhar no WhatsApp
  • Os modelos de difusão aprendem como adicionar ruído aos dados gradualmente e depois reverter esse processo, sendo usados não só para geração de imagens como o Stable Diffusion, mas também para vídeo, 3D, estrutura de proteínas e geração de trajetórias de robôs
  • O DDPM transforma uma imagem limpa (x_0) em um ruído próximo de (x_T) ao longo de vários timesteps, treinando o modelo com perda L2 para prever a direção do ruído em cada etapa
  • O processo reverso pode ser tratado aproximadamente como uma distribuição gaussiana em pequenos passos de ruído, e Ho 2020 estabilizou o treinamento ao fixar a variância e simplificar a predição da média para predição de ruído
  • A velocidade de geração pode cair da amostragem de até 1000 etapas do DDPM para cerca de 10 etapas com samplers baseados em ODE, chegando até à geração em etapa única com progressive distillation e adversarial distillation
  • Embora o alcance prático dos modelos de difusão tenha aumentado, a perda de qualidade com destilação excessiva, os limites do controle condicional e os problemas éticos e de procedência dos datasets continuam sendo restrições

O lugar dos modelos de difusão na modelagem generativa

  • O problema básico da modelagem generativa é: dado um conjunto de amostras vindas de uma distribuição desconhecida (p(x)), gerar novas amostras da mesma distribuição
  • GANs abordam isso como um jogo entre gerador e discriminador e podem sintetizar imagens impressionantes, mas são difíceis de treinar, não modelam (p(x)) explicitamente e podem sofrer de mode collapse
  • Normalizing flows aprendem um mapeamento determinístico e reversível entre amostras de dados e uma gaussiana padrão
    • O Glow da OpenAI, de 2018, gera imagens de rostos com um latent space significativo
    • flows exigem que cada camada seja reversível e que o determinante do Jacobiano possa ser calculado rapidamente, e como calcular o determinante de um Jacobiano arbitrário (N \times N) custa (O(N^3)), as restrições são grandes
  • Em vez de um mapeamento determinístico, os modelos de difusão realizam um mapeamento probabilístico em várias etapas, adicionando ruído aleatório aos dados aos poucos, e treinam um modelo para reverter esse processo

A ideia básica de Denoising Diffusion

  • Se você adicionar pequeno ruído várias vezes a um ponto de dado limpo, no fim ele chega a um estado que parece quase ruído puro
  • Mesmo olhando apenas para um ponto de dado ruidoso em um certo momento, é possível estimar até certo ponto de que direção ele veio na etapa anterior
  • Se for adicionado ruído suficiente, a probabilidade de um ponto (y) no espaço alvo ter vindo de (x) no espaço original pode ficar arbitrariamente próxima de (p(x))
  • Ao aprender várias etapas do processo reverso, é possível amostrar de (p(x))
  • O treinamento adiciona ruído aleatório a cada ponto de dado, faz o modelo prever esse ruído e então minimiza, com gradient descent, a perda L2 entre o ruído previsto e a direção real do ruído
  • A amostragem básica segue o fluxo abaixo
    • começa com uma imagem de ruído puro
    • prevê o ruído na imagem e remove uma fração predefinida
    • repete isso de 10 a 1000 vezes, dependendo do sampler, até obter uma imagem sem ruído

DDPM: o ponto de partida matemático dos modelos de difusão

  • DDPM (Denoising Diffusion Probabilistic Models) é a abordagem que se tornou a base matemática e a linguagem para o desenvolvimento posterior dos modelos de difusão
  • A imagem de entrada (x_0) recebe repetidamente pequenos ruídos aleatórios ao longo dos timesteps (t=1,2,\dots,T), deslocando-se até um ponto de distribuição normal padrão
  • A etapa de difusão forward cria (x_t) adicionando ruído (\epsilon \sim \mathcal{N}(0,I)) à imagem anterior (x_{t-1})
    • (\alpha_t) é menor que 1, mas próximo de 1
    • é definido de modo que (\prod_{t=1}^T \alpha_t \approx 0)
    • o termo de raiz quadrada faz com que a variância seja preservada após cada etapa
  • Como cada etapa depende apenas do timestep imediatamente anterior e o ruído adicionado é independente do ruído anterior, (x_t) pode ser expresso diretamente com (x_0) e um único vetor de ruído gaussiano
  • Essa propriedade é usada para derivar o processo reverso e o objetivo de treinamento por predição de ruído

Processo reverso e treinamento por predição de ruído

  • Se a imagem ruidosa (x_t) e a imagem original (x_0) forem conhecidas, a distribuição da versão anterior menos ruidosa (x_{t-1}) tem forma fechada gaussiana
  • No momento da geração, como a imagem original (x_0) é desconhecida, seria preciso usar diretamente (q(x_{t-1} \mid x_t)), mas não é possível usar o dataset inteiro nesse momento
    • o dataset pode ter dezenas de bilhões de imagens
    • se isso fosse seguido em todos os timesteps, o resultado seria recuperar amostras de treinamento, e não gerar novas amostras
  • (q(x_{t-1} \mid x_t)) é aproximadamente gaussiana em etapas de ruído muito pequenas, resultado conhecido há muito tempo na física estatística
  • O modelo estima os parâmetros da gaussiana (\mu_\theta, \Sigma_\theta) e reduz a divergência KL em relação à distribuição conhecida (q(x_{t-1} \mid x_t, x_0)) de cada exemplo de treinamento
  • Ho 2020 fixa (\Sigma_\theta) como (\Sigma(t))
    • tentar aprender a variância tornava o treinamento instável demais
    • na prática, aprende-se apenas a média (\mu_\theta)
  • O problema de prever a média é transformado em um problema de predição de ruído, aproveitando o fato de que (x_t) pode ser expresso como uma mistura de (x_0) e ruído gaussiano (\epsilon)
  • A perda simples final (L_\text{simple}) minimiza o erro quadrático entre o ruído real (\epsilon) e a predição do modelo (\epsilon_\theta)
    • ignorar o weighting melhora a qualidade do resultado
    • isso pode ser visto como dar peso menor aos termos de perda de (t) baixo, fazendo a rede focar no problema mais difícil de remover ruído de imagens muito ruidosas

Amostragem no DDPM e exemplo em 2D

  • Com um modelo treinado de estimativa de ruído (\epsilon_\theta(x_t,t)), é possível amostrar o processo reverso
    • amostra-se uma imagem de ruído aleatório com (x_T \sim \mathcal{N}(0,I))
    • os timesteps são percorridos de trás para frente, de (T) até 1, prevendo o ruído
    • (x_{t-1}) é amostrado a partir da média e da variância previstas
  • O fluxo do DDPM é o seguinte
    • tenta aprender a distribuição subjacente do dataset de imagens
    • transforma gradualmente (x_0) em (x_T) com um processo de adição de ruído forward
    • o processo reverso pode ser tratado como aproximadamente gaussiano quando (T) é grande
    • se (x_0) for assumido como uma imagem específica do dataset, a distribuição conhecida pode ser calculada exatamente
    • o treinamento usa divergência KL para se aproximar dessa distribuição conhecida em todas as imagens de treinamento
    • esse processo otimiza um lower bound para maximizar a verossimilhança de regenerar o dataset
  • O exemplo com o dataset Datasaurus, formado por 142 pontos, mostra o aprendizado de uma distribuição 2D
    • um MLP com 3 hidden layers, hidden size 64 e ReLU tem mais de 12 mil parâmetros
    • sem fornecer a informação de timestep, a distribuição desejada em forma de dinossauro não aparece
    • ao inserir o timestep (t=0,\dots,50) normalizado entre 0 e 1, o resultado melhora
    • ao transformar a entrada em um espaço de random frequency feature com Fourier encoding, aprende-se uma distribuição ainda melhor
  • Ajustar o noising schedule também é importante para o desempenho
    • o método de Ho 2020 reduz (\alpha_t) linearmente e faz (\bar\alpha_T \approx 0), o que funciona bem para imagens de alta resolução
    • dados de baixa dimensionalidade já parecem ruído após um ponto intermediário, então ajustar o schedule para treinar com mais exemplos de alto sinal melhora o desempenho
    • o schedule original do exemplo não chegava a ruído puro, com (\bar\alpha_T \approx 0.28), e o novo schedule termina em 0.6, que é o valor intermediário do schedule anterior

Avanços para aumentar a velocidade de geração

  • Score matching e sampler baseado em ODE

    • A desvantagem inicial dos modelos de difusão era a velocidade de geração lenta devido à suposição gaussiana da distribuição reversa no DDPM
    • A direção do ruído prevista pelo modelo a partir da entrada com ruído (x_t), excetuando constantes dependentes do timestep, é igual ao gradiente da log-likelihood do processo forward que gera (x_t), ou seja, ao score
    • O score pode ser visto como um campo vetorial que indica a direção em que se deve mover em direção ao modo da distribuição
    • A noise-conditioning score network aprende o score de um conjunto de dados progressivamente ruidoso e gera novas amostras seguindo o campo de score
    • O processo de difusão forward pode ser descrito como uma stochastic differential equation (SDE)
    • Também existe uma ODE que descreve um processo determinístico com a mesma distribuição em cada timestep, e essa ODE tem uma forma fechada que inclui a função score
    • Com isso, mesmo em um diffusion model pré-treinado, torna-se possível fazer amostragem totalmente determinística, e um ODE solver genérico pode ser usado para a amostragem
    • O DDPM pode precisar de até 1000 etapas para obter resultados de alta qualidade no Stable Diffusion
    • Um sampler baseado no método de Euler pode produzir resultados de alta qualidade com cerca de apenas 10 etapas
    • Karras 2022 aborda os tradeoffs dos samplers e o fato de que a stochasticity de samplers estocásticos como o DDPM pode ser importante em alguns casos
  • Distillation

    • A progressive distillation usa um teacher pré-treinado que faz amostragem em 1000 etapas para treinar o student a prever em 1 etapa a saída de 2 etapas do teacher
    • Repetindo esse processo e usando o student como novo teacher, é possível reduzir pela metade o número de etapas a cada vez
    • A progressive distillation tem perdas, e se for aplicada em excesso as amostras podem ficar borradas ou pouco realistas
    • A adversarial distillation treina junto um discriminator para aumentar o realismo das amostras do student, mas, como visto em GANs, há um tradeoff com a diversidade das amostras
    • O Stable Diffusion XL Turbo foi treinado dessa forma e pode gerar imagens de alta qualidade em uma única etapa

Geração condicional e Guidance

  • Modelo de difusão condicional

    • Para gerar apenas gatos em um modelo treinado com imagens de animais, é preciso modelar a distribuição condicional (p(x \mid y))
    • Se o diffusion model (\epsilon_\theta(x_t,t,y)) for treinado com pares ((x_0,y)) do conjunto de dados, será possível usar informações condicionais como class label, text embedding e segmentation mask
    • Ho 2021 treinou um class-conditional diffusion model no ImageNet
    • Se não houver amostras suficientes de (p(x \mid y)) para um determinado (y), o rótulo pode levar a amostras irreais ou com baixa diversidade
    • Por isso, durante a geração é necessário um guidance para ajustar o quanto o modelo seguirá o label
  • Classifier guidance

    • Se um classifier produz (p_\phi(y \mid x_0)), é possível usar o gradiente em relação à entrada para empurrar a imagem em direção à classe desejada (y)
    • Se o gradiente do classifier for somado à média estimada em cada etapa da amostragem, o processo de difusão pode colocar a imagem em regiões plausíveis do espaço de imagens
    • O classifier é treinado com imagens ruidosas para conseguir lidar com a noisy image (x_t)
    • No exemplo da classe “T-shirt” do Fashion-MNIST, é possível criar amostras com classifier guidance mesmo com um classifier de apenas 40% de acurácia
    • O parâmetro de guidance cg ajusta a escala do gradiente do classifier
    • Um guidance mais forte reforça as características da classe, mas pode reduzir o realismo
  • Classifier-free guidance

    • O classifier-free guidance realiza guidance sem um classifier separado
    • Aplicando a regra de Bayes, o gradiente da classe se torna a diferença entre o score condicional e o score dos dados completos
    • Como o denoising diffusion model aprende o score dos dados de treino, um único diffusion model é treinado de duas formas para a mesma amostra
    • treinando junto com o class label (y)
    • treinando junto com um null class label
    • Na amostragem, faz-se tanto a chamada com o class label desejado quanto a chamada sem label, e depois a diferença entre elas é usada como vetor de guidance

Condições e controle de imagem

  • Image-to-image e SDEdit

    • O image-to-image básico é possível sem retreinar o modelo
    • Adiciona-se ruído à imagem de entrada de acordo com a conditioning strength desejada, e depois ela é denoised
    • Para tornar o conditioning mais forte, adiciona-se menos ruído
    • Para tornar o conditioning mais fraco, adiciona-se mais ruído
    • Esse método é o SDEdit e produz resultados com uma forma geral semelhante à da imagem de entrada
    • A desvantagem é que não é possível especificar com precisão o que a imagem de entrada deve controlar
    • Se houver um esboço de entrada, surge um trade-off em que o resultado pode parecer demais com o esboço ou não seguir suficientemente a forma especificada
  • Sketch-Guided Diffusion e ControlNet

    • Para condicionar a geração com uma imagem de esboço (y), é possível treinar um modelo que prevê as linhas do esboço (\hat{y}=F(x_t)) a partir da noisy image (x_t), e usar o gradiente da sketch loss para guiar cada etapa de sampling
    • Essa é a ideia do Sketch-Guided Diffusion
    • Outro método é mudar a architecture para que o denoiser receba a conditioning image (y) e fazer fine-tuning com pares ((x_0,y))
    • O fine-tuning simples pode causar problemas de overfitting e catastrophic forgetting
    • O ControlNet cria uma cópia para preservar os weights do modelo original, e treina a control-net e os parâmetros de convolução 1x1 enquanto o modelo original permanece freeze
    • A convolução é inicialmente inicializada em zero e aprende gradualmente o delta para a etapa de denoising
    • Na prática, o ControlNet é aplicado no nível de cada bloco, e não no nível do modelo completo de denoising
    • Em avaliações humanas, apresenta desempenho melhor do que alternativas como Sketch-Guided Diffusion
    • Combinado com LoRA, é possível treinar o ControlNet com eficiência em GPUs de consumidor
  • Inpainting

    • Inpainting é a tarefa de preencher a parte mascarada de uma imagem
    • A abordagem simples de image-to-image que adiciona ruído apenas à parte mascarada não funciona
    • Em (t>0), o modelo de denoising não sabe como deve tratar a parte sem ruído
    • A forma que funciona é adicionar ruído tanto à parte mascarada quanto à não mascarada e inserir isso como (x_T)
    • Depois, em cada etapa de sampling (t), copia-se a parte não mascarada da imagem original, adiciona-se ruído de acordo com o timestep (t), e isso é colocado sobre (x_t) para ser usado como entrada do denoiser
  • Text-to-image

    • Text-to-image é geração condicional que usa um label de embedding de texto
    • O Dall-E da OpenAI treina o modelo de encoding CLIP, que projeta imagem e texto no mesmo espaço
    • Um espaço de embedding multimodal não é necessariamente indispensável
    • O Google Imagen codifica o texto em embedding com o large language model T5
    • Se o embedding for uma representação suficientemente rica, ele pode ser usado como condição para text-to-image

Dados de treinamento e ética

  • O dataset de modelos de geração de imagem não é um problema exclusivo de modelos de difusão, mas é um elemento importante nas discussões sobre modelos generativos
  • Exemplos de datasets incluem:
    • O Dall-E 1 foi treinado com 250 milhões de pares texto-imagem, e o Dall-E 2 com 650 milhões de pares; o dataset é closed source
    • O Stable Diffusion 1 foi treinado com 2 bilhões de pares do LAION-2B-en e depois passou por fine-tuning com 170 milhões de pares do LAION-5B
    • Depois disso, os checkpoints do Stable Diffusion 1 passaram por fine-tuning em um subset selecionado do LAION-5B com base em “aesthetics”
    • O LAION-400M foi lançado em agosto de 2021 e era uma tentativa de reproduzir o processo que a OpenAI usou para treinar o CLIP
    • O LAION deriva do Common Crawl, coleta tags HTML de imagem com alt-text e usa o CLIP para descartar itens que não combinam com o conteúdo
  • Alguns usuários montaram uma lista de artistas presentes no LAION, e o haveibeentrained.com permite que usuários verifiquem se suas imagens estão no LAION ou em outros datasets
  • Um elemento importante da reação negativa à AI art é a questão ética de coletar arte em datasets como o LAION sem o consentimento dos artistas e usá-la no treinamento de modelos de geração de imagem
    • Também se discute que modelos de imagem podem representar uma ameaça direta ao sustento dos artistas
  • Também há esforços para treinar modelos competitivos de geração de imagem de forma mais ética
    • O Adobe Firefly é descrito como treinado apenas com licensed content, como Adobe Stock, e conteúdo de domínio público com copyright expirado
    • Houve recentemente um scandal de que o Firefly foi treinado com algumas imagens do Midjourney
    • O Stable Diffusion 3 permitiu que artistas fizessem opt-out do uso para treinamento, e como resultado mais de 80 milhões de imagens foram removidas

Data poisoning

  • O Nightshade é um ataque de data poisoning contra modelos de geração de imagem que ganhou destaque durante a reação negativa à AI art
  • Embora os modelos sejam treinados com bilhões de imagens, pode haver apenas algumas dezenas de imagens para certos concepts específicos
  • O Nightshade busca envenenar os dados em uma base concept-specific
  • Os autores do artigo mostraram um caso em que atacaram o Stable Diffusion XL com 50 imagens modificadas, fazendo com que ele gerasse uma vaca sempre que “car” fosse mencionado no prompt
  • As modificações são projetadas para serem o menos perceptíveis possível ao olho humano, por meio da otimização de uma função multiobjetivo que inclui perceptual loss
  • O ataque inicial exige acesso ao feature extractor do modelo
  • Os autores investigaram como um ataque baseado em um entre quatro modelos funcionava nos outros modelos, e afirmam que o ataque também se generaliza para modelos além do modelo inicial

Geração de imagens em alta resolução

  • Cascaded Diffusion é uma abordagem inicial em que a geração inicial é feita em baixa resolução, e a imagem depois é ampliada com vários modelos de difusão de super-resolution
  • O Stable Diffusion usa latent diffusion
    • Gera a imagem por difusão no espaço latente de um autoencoder
    • Depois, decodifica o latente para obter uma imagem em alta resolução
  • Os autores de latent diffusion consideram que, em vez de treinar o autoencoder e o modelo de difusão juntos, funciona melhor primeiro treinar o autoencoder para comprimir os dados de imagem e depois, separadamente, treinar o modelo de difusão sobre os latentes codificados
  • Cascaded Diffusion e latent diffusion ampliam a imagem gerada ao acoplar vários modelos ao backbone diffusion model
  • Os avanços de resolução em single-model se baseiam em vários training tricks, como multi-scale loss e o uso de arquiteturas backbone como transformer

Aplicações de modelos de difusão além de imagens

  • Áudio, vídeo, 3D

    • Riffusion é um modelo inicial de geração musical que ajustou o Stable Diffusion para produzir imagens de espectrograma e gerar músicas de 12 segundos
    • Sonauto é um modelo controlável mais recente baseado em diffusion transformer e consegue gerar músicas de 1 minuto e 35 segundos com letras coerentes
    • OpenAI Sora e Google Veo são modelos de geração de vídeo com diffusion transformer capazes de criar clipes de vídeo de 1080p com 1 minuto de duração a partir de prompts de texto
    • O Sora decompõe o vídeo em patches de espaço-tempo e é treinado para remover ruído desses patches
    • O insight central do relatório técnico do Sora é que diffusion transformers escalam para geração de vídeo, e o desempenho escala junto com o compute
    • A OpenAI não deixa claro aqui se compute se refere ao tamanho do dataset, ao tamanho do modelo ou ao tempo de treinamento
    • Os dois modelos oferecem suporte a edição mascarada, geração de vídeo em loop completo, animação de imagem estática e tarefas como estender um vídeo para frente e para trás no tempo
    • Entre os trabalhos anteriores de difusão para vídeo está o Imagen Video, e modelos autoregressivos como o VideoPoet também são uma alternativa
    • Modelos de difusão 2D aprendem implicitamente recursos 3D como correspondência
    • DreamFusion usa um modelo de difusão text-to-image como prior para orientar um algoritmo de reconstrução 3D baseado em gradient descent
    • Stable Video 3D melhora a consistência multivisual com difusão de vídeo
    • Esses modelos ainda dependem de algoritmos de reconstrução 3D como fotogrametria, 3D gaussian splatting e neural radiance field
    • Uma possível razão é que os dados 3D são relativamente escassos
  • Ciências da vida

    • Modelos de difusão estão encontrando várias aplicações em medicina e biologia
    • Exames parciais de CT e MRI podem reduzir bastante a exposição do paciente à radiação e aumentar o conforto, mas são difíceis porque exigem reconstruir o exame completo a partir de dados parciais
    • Modelos de difusão oferecem desempenho e generalização superiores aos métodos supervisionados na reconstrução de imagens médicas, avançando o estado da arte
    • O AlphaFold 3 da DeepMind usa uma arquitetura baseada em difusão e mostra melhorias consideráveis em relação à versão anterior e a ferramentas especializadas
    • Dada uma lista de moléculas de entrada, o AlphaFold 3 começa com uma nuvem de átomos e a refina iterativamente para gerar uma estrutura 3D conjunta
    • Isso mostra como as moléculas se encaixam entre si
    • Outras aplicações em biologia computacional incluem análise de dados de célula única, design de fármacos e pequenas moléculas, e interação proteína-ligante
  • Robótica

    • Robôs que interagem com o mundo real precisam executar uma faixa muito ampla de comportamentos físicos
    • A abordagem tradicional programa explicitamente inúmeros edge cases e métodos de recuperação para tarefas como abrir portas ou amarrar cadarços
    • Isso funciona em ambientes controlados, como fábricas, mas não escala
    • Aprendizado de política por demonstração é uma abordagem mais escalável para ensinar robôs a executar tarefas com demonstrações humanas
    • Normalmente, uma pessoa fornece demonstrações controlando os motores do robô por teleoperação
    • As demonstrações podem variar de dezenas a centenas
    • Depois, o robô aprende a gerar ações condicionadas por observações dos sensores e, em alguns casos, por prompts em linguagem natural
    • Modelos de difusão são o estado da arte em modelos de geração de políticas e mostram melhoria substancial em relação às técnicas anteriores
    • Eles lidam naturalmente com distribuições de ação multimodais
    • São adequados para espaços de ação de alta dimensionalidade
    • A estabilidade de treinamento é impressionante

1 comentários

 
GN⁺ 2024-05-27
Opiniões no Hacker News
  • Eu achava que difusão tinha vindo de score matching, mas hoje descobri que difusão veio antes da teoria de score matching.
    Ou seja, mesmo quando a OpenAI treinou com 250 milhões de imagens, não havia uma ótima teoria explicando por que modelar a distribuição subjacente, então foi uma escolha bem ousada.
    • O artigo original de Dickstein de 2015 [1] formulava difusão como uma forma de maximizar um limite inferior da log-verossimilhança para geração de distribuições, então não é que não houvesse teoria nenhuma.
      Mas entendo que o avanço veio dos resultados experimentais de Ho [2] e Nichol [3]. Eles mostraram que difusão não só podia gerar amostras de alta qualidade, como em alguns casos era melhor que GANs.

      [1] https://arxiv.org/abs/1503.03585
      [2] https://arxiv.org/abs/2006.11239
      [3] https://arxiv.org/abs/2105.05233

  • Qual é a melhor biblioteca Python com licença Apache ou MIT para Diffusion Transformers?
  • Em classifier-free guidance, a abordagem de “treinar um único modelo de difusão pareando cada amostra de treino x0x0 uma vez com o rótulo de classe yy e uma vez com um rótulo de classe null” não está fazendo exatamente a mesma coisa que o problema descrito como ruim no primeiro parágrafo da mesma seção?
    Parece o mesmo problema da parte que diz: “se não vimos amostras suficientes de p(x∣y)p(x∣y) para um yy específico, o rótulo pode levar a amostras irrealistas ou com pouca diversidade. Por isso, durante a geração, queremos controlar o quanto o modelo deve ‘seguir’ o rótulo”.
    • Não é exatamente a mesma coisa. A amostragem não é formulada como simplesmente tirar amostras da distribuição condicional, mas como empurrar uma amostra incondicional na direção de uma amostra condicional por uma quantidade ajustável, o que permite controlar o trade-off entre realismo e intensidade da classe.
      Ainda assim, é verdade que, se a força do guidance for alta demais, surge um problema parecido de perda de realismo.
  • “Em 2022, passei um tempo aprendendo a desenhar e fui pego de surpresa pela ascensão de modelos de arte por IA como o Stable Diffusion. De repente, o computador virou um pintor muito melhor do que eu poderia esperar ser.”
    Ainda assim, espero que o autor continue desenhando. Quanto mais a IA invade trabalhos criativos, mais dá vontade de derrubar tudo.
    • Pelo contrário, depois de conhecer coisas como Stable Diffusion e Midjourney, fiquei ainda mais motivado a desenhar e a experimentar arte digital.
      Tento pegar a saída dessas ferramentas e reproduzi-la ou desenhá-la por conta própria.
  • Graças ao texto, passei a entender muito melhor como e por que modelos de difusão funcionam. A aleatoriedade é poderosa de um jeito estranho.
    Agora é hora de codar um por conta própria em alguma linguagem moderadamente inadequada. Para quem só passa os olhos pelos comentários, não há muito o que resumir. O próprio texto já é uma versão resumida do Stable Diffusion.
  • O loop de treinamento não está errado? Como x0s e eps não são usados na expressão de xts, parece que ele está apenas aprendendo a prever ruído aleatório.
    • Não sei a qual equação você se refere, mas, pelo que entendo, a rede nunca “vê” diretamente a imagem correta. Em vez disso, ela precisa aprender a inferir a informação indiretamente por meio da função de perda.
      A função de perda contém informação sobre o ruído e, como a rede vê exatamente a imagem com ruído misturado, isso é equivalente a aprender sobre a imagem de amostra real. Também daria para projetar uma função de perda que medisse a diferença entre a saída e a imagem real, e a quantidade de informação seria equivalente, mas, por causa das propriedades do ruído gaussiano, sabe-se que a previsão de ruído é muito mais favorável para estimar gradientes. O ponto central é que a informação da imagem real está, sim, dentro do loop, mas só entra pela lente de algum ruído.

    • Sim. Deveria ser igual à expressão logo anterior.

      xts = alpha_bar[t].sqrt() * x0s + (1.-alpha_bar[t]).sqrt() * eps

      Além disso, o código também não é consistente. O código de amostragem usa embedding de tempo, mas o código de treinamento não usa.

  • O layout é realmente muito bom de ler. Por que eu desperdiço tanto tempo criando layouts difíceis de ler?
    Mas fiquei um pouco decepcionado ao ativar o Reader View. Parecia querer provar que “esta página é semanticamente perfeita!!”, mas, nesse ambiente, a altura de linha da lista de navegação fica menor que 1 e tudo acaba ficando terrivelmente embolado. Ainda assim, deixo passar ;)