Modelos de difusión desde cero desde una nueva perspectiva teórica
- Los modelos de difusión han mostrado resultados impresionantes recientemente en el modelado generativo, en especial por su capacidad para muestrear distribuciones multimodales.
- Los modelos de difusión no solo han sido adoptados ampliamente en herramientas de generación de texto a imagen como Stable Diffusion, sino que también muestran un gran desempeño en diversas áreas de aplicación como generación de audio/video/3D, diseño de proteínas y planificación de trayectorias para robots.
- Este tutorial presenta los modelos de difusión desde una perspectiva de optimización y cubre tanto la teoría como el código para explicar cómo implementarlos desde cero.
Entrenamiento de modelos de difusión
- Los modelos de difusión tienen como objetivo generar muestras a partir del conjunto aprendido de ejemplos de entrenamiento.
- El entrenamiento de un modelo de difusión incluye el siguiente proceso:
- Muestrear x0 de K, muestrear un nivel de ruido σ entre σmin y σmax, y muestrear ruido ϵ de N(0,I).
- Generar los datos con ruido xσ=x0+σϵ.
- Predecir ϵ (la dirección del ruido) a partir de xσ mientras se minimiza la pérdida cuadrática.
- El entrenamiento real se realiza mediante la función
training_loop, que itera sobre el x0 del lote y usa generate_train_sample para muestrear el nivel de ruido sigma y el vector de ruido eps.
Programa de ruido
- En la práctica, σ no se muestrea de manera uniforme en el intervalo [σmin,σmax], sino que este intervalo se discretiza en un programa de σ de N valores distintos.
- La clase
Schedule encapsula la lista de sigmas posibles y muestrea de ella durante el entrenamiento.
- Se utiliza un programa log-lineal, y se ofrece una gráfica que compara este programa con otros usando parámetros predeterminados.
Ejemplo de juguete
- En este tutorial se usa un conjunto de datos de juguete compuesto por puntos muestreados de una espiral.
- Para este conjunto de datos simple, se implementa un denoiser usando un perceptrón multicapa (MLP).
- El MLP recibe como entrada la concatenación de x∈R2 y el nivel de ruido σ, y predice el ruido ϵ∈R2.
- Una vez que se tienen todos los componentes esenciales, se puede entrenar el modelo de difusión.
Interpretar el denoising como una proyección aproximada
- El procedimiento de entrenamiento de difusión aprende un denoiser ϵθ(x,σ), y el artículo interpreta el denoiser aprendido como una proyección aproximada sobre la variedad de datos K.
- Esto motiva la introducción de un modelo de aproximación de error relativo para analizar la convergencia de los algoritmos de muestreo por difusión.
Funciones de distancia y proyección
- La función de distancia para un conjunto K⊆Rn se define como distK(x), y la proyección de x∈Rn se define como el conjunto de puntos que alcanzan esa distancia.
- Si projK(x) es única, entonces el gradiente de distK(x) apunta hacia esa proyección única.
Denoiser ideal
- El denoiser ideal u óptimo ϵ∗ para un nivel de ruido σ específico es el minimizador exacto de la función de pérdida de entrenamiento.
- Cuando los datos siguen una distribución uniforme discreta sobre un conjunto finito de K, el denoiser ideal tiene una expresión exacta en forma cerrada.
Modelo de error relativo
- Para analizar la convergencia de los algoritmos de muestreo por difusión, se introduce un modelo de error relativo.
- Este modelo asume que la proyección predicha por el denoiser x−σϵθ(x,σ) aproxima bien a projK(x) cuando σ estima adecuadamente distK(x)/n con respecto a la entrada x.
Muestreo en modelos de difusión
- Para obtener un punto x0 que pertenezca a K muestreando desde el denoiser aprendido ϵθ(x,σ), el denoiser ϵθ(xt,σt) con ruido xt y nivel de ruido σt predice x0.
Interpretar el muestreo por difusión como minimización de distancia
- La iteración de muestreo por difusión puede interpretarse como descenso por gradiente sobre la función f(x)=12distK(x)2.
- Cómo debe elegirse el programa σt determina el número y el tamaño de los pasos de gradiente que se tomarán durante el muestreo.
Muestreador mejorado mediante estimación del gradiente
- A través de la estimación del gradiente se deriva un nuevo muestreador eficiente.
- Este muestreador muestra una convergencia más rápida que el muestreador DDIM existente.
Ejemplo a gran escala
- El código de entrenamiento presentado arriba puede usarse no solo para el conjunto de datos de juguete, sino también para entrenar desde cero modelos de difusión de imágenes.
- El código de muestreo funciona sin modificaciones para muestrear desde modelos de difusión latente de última generación preentrenados.
Otros recursos
- También se recomiendan las siguientes publicaciones de blog sobre modelos de difusión:
- ¿Qué son los modelos de difusión? presenta los modelos de difusión desde una perspectiva de tiempo discreto que invierte un proceso de Markov.
- Modelado generativo mediante la estimación del gradiente de la distribución de datos presenta los modelos de difusión desde una perspectiva de tiempo continuo que invierte ecuaciones diferenciales estocásticas.
- The Annotated Diffusion Model explica en detalle una implementación en PyTorch de un modelo de difusión.
Opinión de GN⁺
- Este tutorial presenta los modelos de difusión desde una perspectiva de optimización y los explica conectando el trasfondo teórico con la implementación práctica en código, lo que también los hace accesibles para ingenieros de software principiantes.
- Los modelos de difusión pueden aplicarse a diversos tipos de datos, lo que sugiere su utilidad en múltiples áreas donde el muestreo de distribuciones multimodales es importante.
- El tutorial explica paso a paso los procesos de entrenamiento y muestreo de los modelos de difusión, ayudando a lograr una comprensión más profunda de cómo funcionan y cómo se implementan.
- El entrenamiento y el muestreo en modelos de difusión son relativamente complejos, y para comprenderlos e implementarlos se requiere conocimiento básico de machine learning y deep learning.
- Al adoptar esta tecnología, hay que considerar factores como el costo computacional, la calidad de los datos de entrenamiento y la complejidad del modelo, y con ello se obtiene el potencial de generar muestras más refinadas y diversas.
1 comentarios
Comentarios en Hacker News
Comentario del autor: al intentar entender los modelos de difusión, se dio cuenta de que se podía simplificar mucho tanto el código como las matemáticas, lo que lo llevó a escribir una entrada de blog y una biblioteca de difusión. Está dispuesto a responder preguntas.
Otro gran artículo, 'Diffusion Models From Scratch', profundiza más en los detalles matemáticos y viene acompañado de una implementación fácil de entender de menos de 500 líneas.
Está bueno que este artículo incluya código. Los papers sobre difusión son famosos por tener muchas fórmulas, pero el código es más claro y fácil de entender para gente como nosotros. Todos los papers teóricos deberían venir con código de implementación de referencia.
Me gustaría ver una ampliación sobre diffusion transformers. Se usan para impulsar Sora y otros modelos de generación de video. Estaría bueno combinar este artículo con 'GPT From Scratch' para crear una introducción a 'Diffusion Transformer From Scratch'.
Es un buen artículo, pero se pierde una característica importante: los modelos de difusión modelan la derivada del logaritmo de la probabilidad (función de score), y el muestreo por difusión es similar a la dinámica de Langevin. Eso ayuda a explicar por qué son más fáciles de entrenar que las GAN.
Muy interesante. Me recuerda al paper Iterative alpha-(de)Blending. Ese paper también plantea un modelo de difusión conceptualmente más simple y lo formula como un proceso de proyección iterativo aproximado. Este enfoque permite experimentos más interesantes, como el análisis de errores de eliminación de ruido.
¿Una de las ideas de la difusión es obtener una enorme cantidad de datos de entrenamiento? Es decir, ¿contrastar imágenes difundidas aleatoriamente con imágenes no difundidas?
Buena explicación de la teoría. Parece ser independiente del dataset. Me da curiosidad lo específico de la generación de imágenes. Por ejemplo, ¿por qué a un generador de imágenes le cuesta generar teclas de piano? Parece que hace falta una mejor representación de restricciones de alcance medio.
Recuerden: todos los modelos de aprendizaje automático son convoluciones.
Hay una sociedad secreta que usa los comentarios de este artículo para enviar mensajes secretos, así que no lo busquen en Google.