Probabilistic Denosing Diffusion Models imagined by Dall-e 2
Modelos Probabilísticos de Difusión para Eliminación de Ruido
Probabilistic Denoising Diffusion Models
M Rivera
Noviembre 2023
version 1.0.0
En estas notas presentamos la derivación del Modelo de Difusión de Eliminación de Ruido para generar imágenes. Esta derivación corresponde a la presentada en el artículo original.
Definimos el proceso de difusión dado por la fórmula de evolución
(1) xt=1−βtxt−1+βtηt
donde
(2) η∼N(0,I),
βt no es constante en el tiempo y satisface
(3) β0<β1<…βT
Interpretando a xt como la muestra obtenida de nuestro proceso de difusión en tiempo t, tenemos
(4) xt∼q(xt∣xt−1)=N(xt;1−βtxt−1,βtI)
Esto es, xt resulta de muestrear una distribución Gaussiana con media 1−βtxt−1 y varianza βtI. El primer xt antes del ‘;’ indica que los parámetros de la distribución estan asociados a xt.
Otros esquemas de calendarización para α se pueden revisar en
Nichol, Alexander Quinn, and Prafulla Dhariwal. “Improved denoising diffusion probabilistic models.” International Conference on Machine Learning. PMLR, 2021. PDF.
Difusión hacia adelante q(xt∣xt−1)
X =[]
X.append(x0)
Imgs=[]
im =(np.clip(x0,0,1)*255).astype('uint8')
Imgs.append(im)for t,beta inenumerate(betas):
x_tp1 = np.sqrt(1-beta)*X[t]+ np.sqrt(beta)* np.random.normal(0,1, size=x0.shape)
X.append(x_tp1)
im =(np.clip(x_tp1,0,1)*255).astype('uint8')
Imgs.append(im)print(t, end=', ')
io.mimsave('diffusion.gif', Imgs, duration =0.2)
Cálculo de una imagen xt+1 evitando los pasos previos de difusión
De acuerdo a la fórmula (1), para obtener la muestra xt es necesario haber generado la secuencia {xk}k=0:t. Sin embargo veremos una simplificación al proceso, consideramos dos pasos de difusión, digamos
(5) xt=αtxt−1+1−αtηt−1xt−1=αt−1xt−2+1−αt−1ηt−2
donde hemos definido
(6) αt=1−βt.
Luego, sustituimos xt−1 en la primera ecuación:
(7) xt=αtαt−1xt−2+aαt(1−αt−1)ηt−2+b1−αtηt−1
Dado que ηk∼N(0,I), tenemos que a∼N(0,αt(1−αt−1)I) y b∼N(0,(1−αt)I). Luego, la suma de dos variabes aleatorias Gaussianas, independientes, con media cero resulta en una variable aleatoria con media cero y cuya varianza es la suma de la varianza de los sumandos:
Procediendo hasta que encontramos xt a partir de x0 (ver Anexo A):
(9) xt=αˉtx0+1−αˉtη.
Donde hemos definido
(10) αˉt=k=1:t∏αk
A (9) le denonominan los autores “la propiedad bonita” (the nice property). Ecuación (9) es muy importante porque permite obtener la muestra en tiempo t sin necesidad de realizar todo el proceso de difusión para {0:t−1}. Lo que nos lleva a la condicional:
En la figura de arriba el proceso de difusión hacia adelante es conocido se representa por el muestreo de la distribución verdadera q(xt∣xt−1). Luego, dada xt y t, la difusión inversa equivale a muestrear la condicional desconocida q(xt−1∣xt). Este proceso es intratable, pues requeririamos de conocer las de contar con q(xt−1) para intentar usar Bayes.
La estrategia que se sigue se basa en los siguientes puntos:
Aproximamos la verdadera distribución q(xt−1∣xt,x0) por una aproximación paramétrica:
(12) pθ(xt−1∣xt)≃q(xt−1∣xt,x0);
donde θ son los parámetros de las aproximación y hemos condicionado sobre una imagen de referencia x0 que sirve de guía del tipo de imagen esperamos reconstruir.
Si el paso es pequeño podemos asumir que q(xt−1∣xt,x0) es una Gaussiana con media μ(xt,x0,t) y matriz de covarianza Σ(xt,x0,t):
Notamos que la media y varianza se estiman para cada paso y dependen únicamente de xt y t:
(14) μ(xt,t)=αt1(xt−1−αˉtβtηt)
y
(15) Σ(xt,t)=1−αˉt1−αˉt−1βt,
Ver Apéndice B para los detalles de la derivación.
La distribución de la trayectoria inversa {T:0} resulta de aplicar sucesivamente q(xt−1∣xt,x0), o su aproximación pθ(xt−1∣xt), desde xT hasta obtener x0:
(16) pθ(x0:T)=pθ(xT)t=1∏Tpθ(xt−1∣xt)
Siguiendo a (13), (14) y (15); la aproximación paramétrica está dada por
(17) pθ(xt−1∣xt)=N(xt−1;μθ(xtt),Σθ(xt,t))
con
(18) μθ(xt,t)=αt1(xt−1−αˉtβtηθ(xt,t))
y
(19) Σθ(xt,t)=I1−αˉt1−αˉt−1βt.
donde I denota la matriz identidad.
Notemos que la varianza del la aproximación paramétrica se puede calcular con una fórmula cerrada, por lo que no necesitamos estimarla, por lo que solo debemos estimar la media (18) del modelo approximado. En la propuesta original de Ho et al. (2020) toman esta expresion para las entradas en la matriz diagonal de covarianza, por tanto su propuesta no involucra aprender estos coeficientes. Es, sin embargo posible diseñaar un modelo que involucre también aprender esos coeficientes.
Estimación del modelo inverso
Los parámetos θ se obtienen resolviendo el problema de optimización:
(18) θt∗=θargmin∥μ(xt,t)−μθ(xt,t)∥2=∥∥αt1xt−αt1−αˉtβtη−αt1xt+αt1−αˉtβtηθ(xt,t)∥∥2∝∥∥η−η^θ(xt,t)∥∥2
Donde hemos obviado el término de escala.
El algoritmo para entrenar el modelo que estima el ruido se resume a continuación.
Este algoritmo se puede entender como la iteración hasta convergencia de los siguientes pasos:
Obtenemos una imagen al azar (muestra) x0 de la base de datos, similar a la que queremos generar.
Seleccionamos al azar un paso de difusión t y una imagen de ruido Gausiano η
Construimos la imagen de difusión a nivel t a partir de x0.
Hacemos un paso de optimización para entrenar el modelo que reconstruye el ruido ηθ(xt,t) que define la difusión de xt−1 a xt.
Una vez entrenado el modelo (red neuronal del tipo UNet). Luego, para realizar la difusion inversa (denoising) en una imagen xt, es decir estimar x^t−1, es necesario estimamos el ruido ηθ(xt,t) mediante el modelo de red neuronal; luego
(20) xt−1=μθ(xt,t)+Σθ(xt,t)η,
con η∼N(0,I). Y así sucesivamente hasta calcular x^0.
El Algoritmo 2 (Samplig) presenta abajo los detalles de este proceso.
En Algoritmo 2: ϵθ(xt,t)≡η^θ(xt,t), el ruido estimado por la red neuronal.
Función de costo
La estrategia es aproximar el modelo real q por una estimación paramétrica pθ. Similar a como se realiza en los Autoencodificadores Variacionales (VAEs). En una VAE esta estimación se realiza mediante la minimización del Límite Inferior de Evidencia (Evidence Lower Bound, ELBO). En este caso el ELBO está dado por
Donde hemos definido las L que aparecen en los términos L0, LT y en la suma; estos corresponden término a término.
Analizando cada uno de los tres términos:
Primer término, L0=Eq(x1∣x0){logpθ(x1∣x0)}. Es un término de recontrucción (datos) similar al del ELBO en VAEs.
Segundo término, DKL(q(xT∣x0)∥p(xT)). Forza a p(xT) sea cercana a una Gaussiana.; que no tienen parámetros por lo que no es entrenable.
Tercer término, Lt=∑t=2TLt−1. Penaliza las diferencia entre la estimación pθ(xt−1∣xt) y q(xt−1∣xt,x0)
Modelo para estimar el Ruido
A continuación veremos como definir como es el modelo que extrae el ruido de la imagen xt.
Podemos notar que una red neuronal profunda del tipo UNet seria el mas adecuado para representar la red que extrae al componente de ruido de la imagen contaminada xt a grado equivalente a un tiempo t. Notemos que nuestro modelo de red profunda debe estar condicionado por t.
ANEXOS
Anexo A. Calcular xt directamente de x0
Si además sustituimos xt−2, y usando “la propiedad bonita”, tenemos
Para hacer el procedimiento tratable usaremos una imagen de referencia x0, ésto nos permite tener una guía del tipo de imagen que queremos reconstruir. Partimos de (18) condicionandola también en x0:
(B.9b) =β~t1[xt−12−2M(xt,x0)β~txt−1+(M(xt,x0)β~t)2−(M(xt,x0)β~t)2+C(xt,x0)β~t]=β~t1⎣⎡xt−1−μ(xt,x0)M(xt,x0)β~t⎦⎤2−K(xt,x0)β~t1[(M(xt,x0)β~t)2−C(xt,x0)β~t].
Sustitulimos en (B.6):