Modelos de difusión (Diffusion Models)
(andrewkchan.dev)- Los modelos de difusión aprenden a mezclar ruido gradualmente con los datos y luego revertir ese proceso, por lo que se usan no solo para generar imágenes como Stable Diffusion, sino también para generar video, 3D, estructuras de proteínas y trayectorias robóticas.
- DDPM toma una imagen limpia (x_0), la convierte a lo largo de varios timestep en ruido cercano a (x_T), y entrena el modelo con pérdida L2 para que prediga la dirección del ruido en cada paso.
- El proceso inverso puede tratarse aproximadamente como una distribución gaussiana en pasos de ruido pequeños; Ho 2020 estabilizó el entrenamiento fijando la varianza y simplificó la predicción de la media como predicción de ruido.
- La velocidad de generación puede reducirse desde un muestreo DDPM de hasta 1000 pasos a unos 10 pasos con samplers basados en ODE, e incluso a generación de un solo paso con progressive distillation y adversarial distillation.
- El alcance práctico de los modelos de difusión se ha ampliado, pero la degradación de calidad por distillation excesiva, las limitaciones del control condicionado y los problemas de ética y procedencia de los datasets siguen siendo restricciones.
El lugar de los modelos de difusión en el modelado generativo
- El problema básico del modelado generativo es que, dado un conjunto de muestras provenientes de una distribución desconocida (p(x)), se quieren generar nuevas muestras de esa misma distribución.
- Las GAN lo abordan como un juego entre un generador y un discriminador, y pueden sintetizar imágenes impresionantes, pero son difíciles de entrenar, no modelan explícitamente (p(x)) y pueden sufrir mode collapse.
- Los normalizing flows aprenden un mapeo determinista e invertible entre muestras de datos y una gaussiana unitaria.
- Glow de OpenAI, de 2018, generaba imágenes de rostros con un latent space significativo.
- En los flows, cada capa debe ser invertible y el determinante jacobiano debe poder calcularse rápido; calcular el determinante de un jacobiano arbitrario (N \times N) cuesta (O(N^3)), lo que impone fuertes restricciones.
- En lugar de un mapeo determinista, los modelos de difusión realizan en varios pasos un mapeo probabilístico que mezcla ruido aleatorio poco a poco con los datos, y aprenden un modelo que revierte ese proceso.
Idea básica de Denoising Diffusion
- Si a un punto de datos limpio se le mezcla ruido pequeño muchas veces, al final se obtiene un estado que parece casi ruido puro.
- Incluso viendo solo un punto de datos con ruido en un momento dado, se puede estimar en cierta medida desde qué dirección vino en el paso anterior.
- Si se mezcla suficiente ruido, la probabilidad de que un punto (y) del target space provenga de (x) en el espacio original puede acercarse arbitrariamente a (p(x)).
- Al aprender un proceso inverso de varios pasos, se puede muestrear desde (p(x)).
- El entrenamiento agrega ruido aleatorio a cada punto de datos, hace que el modelo prediga ese ruido y luego minimiza mediante gradient descent la L2 loss entre el ruido predicho y la dirección real del ruido.
- El muestreo básico sigue este flujo:
- Se empieza con una imagen de ruido puro.
- Se predice el ruido dentro de la imagen y se resta una proporción determinada.
- Según el sampler, se repite de 10 a 1000 veces para obtener una imagen sin ruido.
DDPM: punto de partida matemático de los modelos de difusión
- DDPM (Denoising Diffusion Probabilistic Models) es el enfoque que se convirtió en el lenguaje y la base matemática del desarrollo posterior de los modelos de difusión.
- La imagen de entrada (x_0) recibe repetidamente pequeñas cantidades de ruido aleatorio durante los timestep (t=1,2,\dots,T), y se desplaza hacia un punto de la distribución normal unitaria.
- El forward diffusion step mezcla ruido (\epsilon \sim \mathcal{N}(0,I)) con la imagen anterior (x_{t-1}) para crear (x_t).
- (\alpha_t) es menor que 1, pero cercano a 1.
- Se configura para que (\prod_{t=1}^T \alpha_t \approx 0).
- Los términos con raíz cuadrada hacen que la varianza se mantenga después de cada paso.
- Cada paso depende solo del timestep inmediatamente anterior, y el ruido mezclado es independiente del ruido previo, por lo que (x_t) puede expresarse directamente con (x_0) y un único vector de ruido gaussiano.
- Esta propiedad se usa para derivar el proceso inverso y el objetivo de entrenamiento de predicción de ruido.
Proceso inverso y entrenamiento de predicción de ruido
- Si se conocen la noisy image (x_t) y la imagen original (x_0), la distribución de la versión anterior con menos ruido (x_{t-1}) tiene una forma cerrada gaussiana.
- En el momento de la generación no se conoce el original (x_0), por lo que habría que usar directamente (q(x_{t-1} \mid x_t)), pero no es posible usar todo el dataset durante la generación.
- El dataset podría tener decenas de miles de millones de imágenes.
- Seguir esto en todos los timestep terminaría recuperando muestras de entrenamiento en vez de nuevas muestras.
- (q(x_{t-1} \mid x_t)) es aproximadamente gaussiana en pasos de ruido muy pequeños, algo que es un resultado antiguo de la física estadística.
- El modelo estima los parámetros gaussianos (\mu_\theta, \Sigma_\theta) y reduce la KL divergence respecto de la distribución conocida (q(x_{t-1} \mid x_t, x_0)) de cada ejemplo de entrenamiento.
- Ho 2020 fijó (\Sigma_\theta) igual a (\Sigma(t)).
- Intentar aprender la varianza volvía el entrenamiento demasiado inestable.
- En la práctica solo se aprende la media (\mu_\theta).
- El problema de predecir la media se convierte en un problema de predicción de ruido usando el hecho de que (x_t) se expresa como una mezcla de (x_0) y ruido gaussiano (\epsilon).
- La pérdida simple final (L_\text{simple}) minimiza el error cuadrático entre el ruido real (\epsilon) y la predicción del modelo (\epsilon_\theta).
- Ignorar el weighting mejora la calidad del resultado.
- Esto puede verse como asignar menor peso a los loss term de (t) bajo, haciendo que la red se concentre en el problema más difícil de denoise de imágenes con mucho ruido.
Muestreo DDPM y ejemplo 2D
- Si se cuenta con un modelo entrenado de estimación de ruido (\epsilon_\theta(x_t,t)), se puede muestrear el proceso inverso.
- Se muestrea una imagen de ruido aleatorio con (x_T \sim \mathcal{N}(0,I)).
- Se recorren los timestep hacia atrás, de (T) a 1, prediciendo el ruido.
- Se muestrea (x_{t-1}) con la media y la varianza predichas.
- El flujo de DDPM es el siguiente:
- Se intenta aprender la underlying distribution del dataset de imágenes.
- Con el forward noising process, (x_0) se transforma gradualmente en (x_T).
- El proceso inverso puede tratarse aproximadamente como gaussiano cuando (T) es grande.
- Si se asume que (x_0) es una imagen específica del dataset, se puede calcular exactamente la distribución conocida.
- Con KL divergence, se entrena para acercarse a esta distribución conocida para todas las imágenes de entrenamiento.
- Este proceso optimiza un lower bound que maximiza la likelihood de volver a generar el dataset.
- El ejemplo del dataset Datasaurus, compuesto por 142 puntos, muestra el aprendizaje de una distribución 2D.
- Un MLP con 3 hidden layer, hidden size 64 y ReLU tiene más de 12,000 parámetros.
- Si no se entrega información del timestep, no aparece la distribución deseada con forma de dinosaurio.
- Si el timestep (t=0,\dots,50) se normaliza entre 0 y 1 y se usa como entrada, el resultado mejora.
- Al transformar la entrada con Fourier encoding a un espacio de random frequency feature, se aprende una distribución mejor.
- Ajustar el noising schedule también es importante para el rendimiento.
- El método de Ho 2020 reduce linealmente (\alpha_t) y hace que (\bar\alpha_T \approx 0), por lo que se adapta bien a imágenes de alta resolución.
- En datos de baja dimensión, después de una etapa intermedia ya parecen ruido; ajustar el schedule para entrenar con más ejemplos high-signal mejora el rendimiento.
- El schedule original del ejemplo tenía (\bar\alpha_T \approx 0.28), por lo que no llegaba a ruido puro, y el nuevo schedule termina en 0.6, un valor intermedio del schedule anterior.
Avances para acelerar la generación
-
Score matching y muestreadores basados en ODE
- Una desventaja inicial de los modelos de difusión era que la velocidad de generación era lenta debido a la suposición gaussiana de la distribución inversa en DDPM
- La dirección del ruido que el modelo predice a partir de una entrada ruidosa (x_t) es, salvo una constante que depende del timestep, igual al gradiente del log-likelihood con el que el forward process generó (x_t), es decir, el score
- El score puede verse como un campo vectorial que indica la dirección en la que hay que moverse hacia el mode de la distribución
- Una noise-conditioning score network aprende el score de un dataset con ruido agregado de forma progresiva y genera nuevas muestras siguiendo el score field
- El forward diffusion process puede describirse como una stochastic differential equation (SDE)
- También existe una ODE que describe un proceso deterministic con las mismas distribuciones por timestep, y esta ODE tiene una forma cerrada que incluye la score function
- Esto permite muestreo completamente deterministic incluso en un diffusion model preentrenado, y permite usar un ODE solver de propósito general para el muestreo
- DDPM puede requerir hasta 1000 pasos para obtener resultados de alta calidad en Stable Diffusion
- Un sampler basado en el Euler method puede producir resultados de alta calidad con apenas unos 10 pasos
- Karras 2022 aborda los tradeoffs de los samplers y cómo la stochasticity de samplers stochastic como DDPM puede ser importante en algunos casos
-
Distillation
- Progressive distillation usa un teacher preentrenado que samplea en 1000 pasos para entrenar a un student a predecir en 1 paso la salida de 2 pasos del teacher
- Al repetir este proceso y usar al student como nuevo teacher, se puede reducir a la mitad el número de pasos en cada iteración
- Progressive distillation tiene pérdida, y si se aplica demasiado, las muestras pueden verse borrosas o poco realistas
- Adversarial distillation entrena también un discriminator para aumentar el realismo de las muestras del student, pero, como se ve en GAN, tiene un tradeoff con la sample diversity
- Stable Diffusion XL Turbo fue entrenado con este enfoque y puede generar imágenes de alta calidad en un solo paso
Generación condicional y Guidance
-
Modelos de difusión condicionales
- Para generar solo gatos con un modelo entrenado con imágenes de animales, hay que modelar la distribución condicional (p(x \mid y))
- Si se entrena un diffusion model (\epsilon_\theta(x_t,t,y)) con pares ((x_0,y)) del dataset, se puede usar información condicional como class labels, text embeddings o segmentation masks
- Ho 2021 entrenó un class-conditional diffusion model en ImageNet
- Si no hay suficientes muestras de (p(x \mid y)) para un (y) específico, el label puede conducir a muestras poco realistas o con baja diversidad
- Por eso se necesita guidance para controlar cuánto debe seguir el modelo el label durante la generación
-
Classifier guidance
- Si un classifier devuelve (p_\phi(y \mid x_0)), se puede usar el gradient respecto de la entrada para empujar la imagen hacia la class (y) deseada
- Al sumar el classifier gradient a la media estimada en cada paso del muestreo, se puede hacer que el diffusion process coloque la imagen en una región plausible del image space
- El classifier se entrena con noisy images para que pueda manejar una noisy image (x_t)
- En el ejemplo de la class “T-shirt” de Fashion-MNIST, incluso un classifier con 40% de exactitud puede producir muestras con classifier guidance
- El parámetro de guidance
cgescala el classifier gradient - Un guidance más fuerte refuerza las características de la class, pero puede reducir el realism
-
Classifier-free guidance
- Classifier-free guidance realiza guidance sin un classifier separado
- Al aplicar la regla de Bayes, el class gradient se convierte en la diferencia entre el score condicional y el score de todos los datos
- Como un denoising diffusion model aprende el score de los datos de entrenamiento, se entrena un único diffusion model de dos maneras para la misma muestra
- Se entrena con class label (y)
- Se entrena con un null class label
- Durante el muestreo, se hacen tanto una llamada con el class label deseado como una llamada sin label, y luego se usa la diferencia como guidance vector
Condiciones y control de imágenes
-
Image-to-image y SDEdit
- El image-to-image básico es posible sin volver a entrenar el modelo.
- Se agrega ruido a la imagen de entrada según la conditioning strength deseada y luego se hace denoise.
- Para que el conditioning sea fuerte, se agrega menos ruido.
- Para que el conditioning sea débil, se agrega más ruido.
- Este método es SDEdit y genera resultados con una forma general similar a la imagen de entrada.
- Su desventaja es que no permite especificar con detalle qué debe controlar la imagen de entrada.
- Si hay un boceto de entrada, aparece un tradeoff: el resultado puede verse como un boceto o no seguir lo suficiente la forma especificada.
-
Sketch-Guided Diffusion y ControlNet
- Para condicionar la generación con una imagen de boceto (y), se puede entrenar un modelo que prediga las líneas del boceto (\hat{y}=F(x_t)) a partir de la noisy image (x_t), y guiar cada paso de sampling con el gradient del sketch loss.
- Esta es la idea de Sketch-Guided Diffusion.
- Otro método es cambiar la architecture para que el denoiser reciba la conditioning image (y) y hacer fine-tuning con pares ((x_0,y)).
- El fine-tuning simple puede causar problemas de overfitting y catastrophic forgetting.
- ControlNet crea una copia para preservar los weights del modelo original y entrena el control-net y los parámetros de convolución 1x1 mientras mantiene congelado el modelo original.
- La convolución se inicializa en cero al comienzo y aprende gradualmente el delta para el denoising step.
- En la práctica, ControlNet no se aplica a nivel de todo el denoising model, sino a nivel de cada bloque.
- Según human evaluation, muestra mejor desempeño que alternativas como Sketch-Guided Diffusion.
- Combinado con LoRA, permite entrenar ControlNet de forma eficiente en una GPU de consumo.
-
Inpainting
- Inpainting es la tarea de rellenar la masked part de una imagen.
- Un método simple de image-to-image que agrega ruido solo a la masked part no funciona.
- En (t>0), el denoising model no sabe cómo tratar la non-noisy part.
- El método que sí funciona consiste en agregar ruido tanto a la masked part como a la unmasked part e ingresarlas como (x_T).
- Luego, en cada sampling step (t), se copia la unmasked part de la imagen original, se le agrega ruido de acuerdo con el timestep (t) y se coloca sobre (x_t) para usarla como entrada del denoiser.
-
Text-to-image
- Text-to-image es generación condicional que usa un text embedding label.
- Dall-E de OpenAI entrena CLIP, un encoding model que proyecta imágenes y texto en el mismo espacio.
- No es indispensable tener un multimodal embedding space.
- Google Imagen codifica el texto como embedding con el large language model T5.
- Si el embedding es una representación suficientemente rica, puede usarse como condición para text-to-image.
Datos de entrenamiento y ética
- Los datasets de los modelos de generación de imágenes no son un problema exclusivo de los modelos de difusión, pero son un factor importante en la discusión sobre modelos generativos.
- Algunos ejemplos de datasets son los siguientes:
- Dall-E 1 se entrenó con 250 millones de pares text-image, Dall-E 2 con 650 millones de pares, y el dataset es closed source.
- Stable Diffusion 1 se entrenó con 2.000 millones de pares de LAION-2B-en y luego se hizo fine-tuning con 170 millones de pares de LAION-5B.
- Más tarde, los checkpoints de Stable Diffusion 1 se fine-tunearon con un subset de LAION-5B elegido según criterios de “aesthetics”.
- LAION-400M se publicó en agosto de 2021 y fue un intento de reproducir el proceso que OpenAI usó para entrenar CLIP.
- LAION deriva de Common Crawl; recopila etiquetas HTML de imagen con alt-text y descarta con CLIP los elementos cuyo contenido no coincide.
- Algunos usuarios crearon una lista de artistas que aparecen en LAION, y haveibeentrained.com permite a los usuarios verificar si sus imágenes están en LAION u otros datasets.
- Un factor importante del rechazo al AI art es el problema ético de recopilar arte sin consentimiento de los artistas en datasets como LAION y usarlo para entrenar modelos de generación de imágenes.
- También se menciona que los modelos de imagen pueden representar una amenaza directa para el sustento de los artistas.
- También hay esfuerzos por entrenar modelos de generación de imágenes competitivos de manera más ética.
- Adobe Firefly supuestamente se entrena solo con licensed content como Adobe Stock y contenido de public domain cuyo copyright ya expiró.
- Hubo un scandal reciente sobre que Firefly se habría entrenado con algunas imágenes de Midjourney.
- Stable Diffusion 3 permitió a los artistas hacer opt-out del uso para training y, como resultado, se eliminaron más de 80 millones de imágenes.
Data poisoning
- Nightshade es un ataque de data poisoning contra modelos de generación de imágenes que llamó la atención dentro del rechazo al AI art.
- Aprovecha que, aunque los modelos se entrenan con miles de millones de imágenes, para un concept específico puede haber solo unas decenas de imágenes.
- Nightshade intenta poison los datos sobre una base concept-specific.
- Los autores del paper muestran un caso en el que atacaron Stable Diffusion XL con 50 imágenes modificadas para hacer que produzca una vaca cada vez que el prompt menciona “car”.
- Las modificaciones se diseñan para ser lo menos perceptibles posible al ojo humano, optimizando una multi-objective function que incluye perceptual loss.
- El ataque inicial requiere acceso al feature extractor del modelo.
- Los autores investigaron cómo funciona en otros modelos un ataque basado en uno de cuatro modelos, y afirman que el ataque se generaliza también a modelos distintos del inicial.
Generación de imágenes de alta resolución
- Cascaded Diffusion es un enfoque inicial que realiza la generación inicial a baja resolución y luego hace upscale de la imagen con varios super-resolution diffusion models.
- Stable Diffusion usa latent diffusion.
- Genera imágenes mediante diffusion en el latent space de un auto-encoder.
- Luego decodifica el latent para obtener una imagen de alta resolución.
- Los autores de latent diffusion consideran que funciona mejor entrenar primero un auto-encoder para comprimir datos de imágenes y luego entrenar por separado un diffusion model sobre los latents codificados, en lugar de entrenar juntos el auto-encoder y el diffusion model.
- Cascaded Diffusion y latent diffusion agregan varios modelos distintos al backbone diffusion model para escalar las imágenes generadas.
- Los avances en resolución con single-model se basan en varios training tricks, como multi-scale loss y el uso de backbone architectures como transformer.
Aplicaciones de los modelos de difusión más allá de las imágenes
-
Audio, video, 3D
- Riffusion es un modelo temprano de generación musical que ajustó finamente Stable Diffusion para producir imágenes de espectrograma como salida y generar canciones de 12 segundos
- Sonauto es un modelo controlable más reciente basado en un diffusion transformer, capaz de generar canciones de 1 minuto y 35 segundos con letras coherentes
- OpenAI Sora y Google Veo son modelos de generación de video con diffusion transformer que pueden crear clips de video de 1 minuto en 1080p a partir de prompts de texto
- Sora descompone el video en parches espacio-temporales y aprende a eliminar el ruido de esos parches
- La idea clave del informe técnico de Sora es que los diffusion transformers escalan para la generación de video y que el rendimiento escala junto con el cómputo
- OpenAI no aclara aquí si “cómputo” se refiere al tamaño del dataset, al tamaño del modelo o al tiempo de entrenamiento
- Ambos modelos admiten tareas como edición con máscaras, generación de videos en loop completos, animación de imágenes estáticas y extensión de videos hacia adelante o hacia atrás en el tiempo
- Entre trabajos anteriores de difusión para video está Imagen Video, y modelos autorregresivos como VideoPoet también son una alternativa
- Los modelos de difusión 2D aprenden implícitamente características 3D como correspondencias
- DreamFusion usa un modelo de difusión de texto a imagen como prior para guiar un algoritmo de reconstrucción 3D basado en descenso de gradiente
- Stable Video 3D mejora la consistencia multivista mediante difusión de video
- Estos modelos aún dependen de algoritmos de reconstrucción 3D como fotogrametría, 3D Gaussian splatting y neural radiance fields
- Una de las posibles razones es que los datos 3D son relativamente escasos
-
Ciencias de la vida
- Los modelos de difusión están encontrando diversas aplicaciones en medicina y biología
- Las tomografías computarizadas y resonancias magnéticas parciales reducen mucho la exposición del paciente a la radiación y mejoran la comodidad, pero son difíciles porque hay que reconstruir el escaneo completo a partir de datos parciales
- En reconstrucción de imágenes médicas, los modelos de difusión ofrecen mejor rendimiento y generalización que los métodos supervisados, y hacen avanzar el estado del arte
- AlphaFold 3 de DeepMind usa una arquitectura basada en difusión y muestra mejoras importantes frente a versiones anteriores y herramientas especializadas
- Dada una lista de moléculas de entrada, AlphaFold 3 parte de una nube de átomos y la refina iterativamente para generar la estructura 3D conjunta
- Esto muestra cómo encajan las moléculas entre sí
- Otras aplicaciones en biología computacional incluyen análisis de datos de células individuales, diseño de fármacos y moléculas pequeñas, e interacción proteína-ligando
-
Robótica
- Los robots que interactúan con el mundo real deben realizar una gama muy amplia de comportamientos físicos
- El enfoque tradicional programa explícitamente una gran cantidad de casos límite y métodos de recuperación para tareas como abrir puertas o atarse los cordones
- Funciona en entornos controlados como fábricas, pero no escala
- El aprendizaje de políticas a partir de demostraciones es un enfoque más escalable para enseñar a un robot a realizar tareas mediante demostraciones humanas
- Por lo general, una persona proporciona demostraciones controlando los motores del robot mediante teleoperación
- Pueden requerirse desde decenas hasta cientos de demostraciones
- Luego, el robot aprende a generar acciones condicionadas por observaciones de sensores y, en algunos casos, por prompts en lenguaje natural
- Los modelos de difusión son el estado del arte en modelos de generación de políticas y muestran mejoras sustanciales frente a técnicas anteriores
- Manejan de forma natural distribuciones de acciones multimodales
- Son adecuados para espacios de acción de alta dimensionalidad
- Su estabilidad de entrenamiento es impresionante
1 comentarios
Opiniones de Hacker News
Eso significa que, incluso cuando OpenAI entrenó con 250 millones de imágenes, no había una gran teoría que explicara por qué modelar la distribución subyacente; fue una apuesta bastante audaz.
El paper original de Dickstein de 2015 [1] formulaba la difusión como una forma de maximizar una cota inferior de la log-verosimilitud para la generación de distribuciones, así que no es que no hubiera teoría en absoluto.
Pero entiendo que el punto de quiebre fueron los resultados experimentales de Ho [2] y Nichol [3], porque mostraron que la difusión no solo podía generar muestras de alta calidad, sino que en algunos casos era mejor que las GAN.
[1] https://arxiv.org/abs/1503.03585
[2] https://arxiv.org/abs/2006.11239
[3] https://arxiv.org/abs/2105.05233
HuggingFace Diffusers tiene licencia Apache y soporta Diffusion Transformers: https://huggingface.co/docs/diffusers/en/api/pipelines/dit
Además de HuggingFace, está el repositorio DDPT: https://github.com/lucidrains/denoising-diffusion-pytorch/
También encontré esto:
https://paperswithcode.com/paper/scalable-diffusion-models-w...
https://github.com/mindspore-lab/mindone/tree/master/example...
Parece el mismo problema que en la parte que dice: “si no vimos suficientes muestras p(x∣y)p(x∣y) para un yy específico, la etiqueta puede producir muestras poco realistas o con poca diversidad. Por eso queremos controlar cuánto ‘sigue’ el modelo la etiqueta durante la generación”.
Dicho eso, es cierto que si la intensidad de la guía se sube demasiado, aparece un problema similar de pérdida de realismo.
Aun así, espero que el autor siga dibujando. Cuanto más invade la IA el trabajo creativo, más me dan ganas de derribarlo todo.
Intento tomar la salida de estas herramientas y reproducirla o copiarla por mi cuenta.
Ahora es momento de programar uno yo mismo en algún lenguaje moderadamente inapropiado. Para quienes solo hojean los comentarios, no hay mucho que resumir: este artículo en sí es una versión resumida de Stable Diffusion.
No sé a qué fórmula te refieres, pero según lo entiendo, la red nunca “ve” directamente la imagen correcta. En cambio, debe aprender a inferir información indirectamente mediante la función de pérdida.
La función de pérdida contiene información sobre el ruido, y como la red ve exactamente la imagen con ruido, eso es equivalente a aprender sobre la imagen de muestra real. También podrías diseñar una función de pérdida que mida la diferencia entre la salida y la imagen real, y la cantidad de información sería equivalente, pero se sabe que, gracias a las propiedades del ruido gaussiano, predecir el ruido es mucho más conveniente para estimar gradientes. La clave es que la información de la imagen real sí está dentro del loop, pero solo entra a través del lente de qué ruido es.
Correcto. Debería ser igual a la fórmula inmediatamente anterior:
xts = alpha_bar[t].sqrt() * x0s + (1.-alpha_bar[t]).sqrt() * epsAdemás, el código tampoco es consistente. En el código de muestreo usa embeddings de tiempo, pero en el código de entrenamiento no.
Aunque al activar Reader View me pareció un poco flojo. Daba la impresión de querer demostrar “¡esta página es semánticamente perfecta!”, pero en ese entorno la altura de línea de la lista de navegación es menor que 1 y se apelmaza muchísimo. Igual lo dejo pasar ;)