image.png

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

Septiembre 2025

version 1.1.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.

Recomendado los Blogs:

Lilian Weng, What are Diffusion Models?

Steins, Diffusion Model Clearly Explained!

Jonathan Ho, Ajay Jain, Pieter Abbeel Diffusion Models Explained with Math From Scratch

Referencias a los trabajos seminales

Jascha Sohl-Dickstein, Eric Weiss, Niru Maheswaranathan, and Surya Ganguli. Deep unsupervised
learning using nonequilibrium thermodynamics. In International Conference on Machine Learning, pages
2256–2265, 2015. ArXiv

Ho, J., Jain, A., & Abbeel, P. (2020). Denoising diffusion probabilistic models. Advances in neural information processing systems, 33, 6840-6851. ArXiv

import numpy as np
import matplotlib.pyplot as plt
import PIL.Image as Image
import imageio as io

Cargar imagen de prueba

img = Image.open('cameraman.pgm')
x0 = np.array(img)/255

plt.imshow(x0, 'gray')
plt.axis('off')
(-0.5, 255.5, 255.5, -0.5)

png

Difusión hacia adelante

Proceso de difusión

Definimos el proceso de difusión dado por la fórmula de evolución

(1)
xt=1βtxt1+βtηt x_{t} = \sqrt{1 - \beta_t} x_{t-1} + \sqrt{\beta_t} \eta_t
donde

(2)
ηN(0,I), \eta \sim \mathcal{N}(0, I),

βt\beta_t no es constante en el tiempo y satisface

(3)
β0<β1<βT \beta_0 < \beta_1 < \ldots \beta_T

Interpretando a xtx_{t} como la muestra obtenida de nuestro proceso de difusión en tiempo t{t}, tenemos

(4)
xtq(xtxt1)=N(xt;1βtxt1,βtI) x_{t} \sim q(x_{t} | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} x_{t-1}, \beta_t \mathbf{I} )
Esto es, xtx_{t} resulta de muestrear una distribución Gaussiana con media 1βtxt1\sqrt{1 - \beta_t} x_{t-1} y varianza βtI\beta_t \mathbf{I}. El primer xtx_t antes del ‘;’ indica que los parámetros de la distribución estan asociados a xtx_t.

def linear_beta_schedule(timesteps, start=0.0001, end=0.02):
    return np.linspace(start, end, timesteps)
schedule = 'cosine' 

timesteps = 100
if schedule =='linear':
    betas = linear_beta_schedule(timesteps, start=0.0001, end=0.02)
elif schedule == 'cosine':
    betas = 1-np.cos(np.pi/2 * linear_beta_schedule(timesteps, start=0.0001, end=0.3))


plt.figure(figsize=(6,3))
plt.plot(betas)
plt.xlabel("time (t)")
plt.ylabel(r"beta ($\beta$)")

Text(0, 0.5, 'beta ($\\beta$)')

png

Otros esquemas de calendarización para α\alpha 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(xtxt1)q(x_{t}| x_{t-1})

X = []
X.append(x0)

Imgs=[]
im = (np.clip(x0, 0,1)*255).astype('uint8')
Imgs.append(im)

for t,beta in enumerate(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)
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 

Cálculo de una imagen xt+1x_{t+1} evitando los pasos previos de difusión

De acuerdo con la fórmula (1), para obtener la muestra xtx_{t} es necesario haber generado la secuencia {xk}k=0:t\{x_k\}_{k=0:t}. Sin embargo, veremos una simplificación al proceso. Consideramos dos pasos de difusión, digamos

(5)
xt=αtxt1+1αtηt1xt1=αt1xt2+1αt1ηt2 \begin{align} x_{t} & = \sqrt{\alpha_{t}} x_{t-1} + \sqrt{1-\alpha_{t}} \eta_{t-1} \\ x_{t-1} & = \sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{1- \alpha_{t-1}} \eta_{t-2} \end{align}
donde hemos definido

(6)
αt=1βt. \alpha_t = 1- \beta_t.

Luego, sustituimos xt1x_{t-1} en la primera ecuación:

(7)
xt=αtαt1xt2+αt(1αt1)ηt2undefineda+1αtηt1undefinedb x_{t} = \sqrt{\alpha_t \, \alpha_{t-1}} x_{t-2} + \underbrace{ \sqrt{\alpha_t (1-\alpha_{t-1})} \eta_{t-2} }_{ a} + \underbrace{ \sqrt{1-\alpha_t} \eta_{t-1}}_{ b}

Dado que ηkN(0,I)\eta_k \sim \mathcal{N}(0, I), tenemos que aN(0,αt(1αt1)I)a \sim \mathcal{N}\left(0, \alpha_t (1-\alpha_{t-1}) I\right) y bN(0,(1αt)I)b \sim \mathcal{N}\left(0, (1-\alpha_{t}) I\right). 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:

a+bN(0,(αtαtαt1+1αt)I)N(0,(1αtαt1)I) a+b \sim \mathcal{N}\left(0, (\alpha_t - \alpha_t \alpha_{t-1} + 1 - \alpha_{t}) I\right) \sim \mathcal{N}\left(0, (1- \alpha_t \alpha_{t-1}) I\right)
Reescribiendo (7):

(8)
xt=αtαt1xt2+(1αtαt1)η \begin{align} x_{t} = \sqrt{\alpha_t \, \alpha_{t-1}} x_{t-2} + \sqrt{(1-\alpha_t \alpha_{t-1})} \eta \end{align}
Procediendo hasta que encontramos xtx_{t} a partir de x0x_0 (ver Anexo A):

(9)
xt=αˉtx0+1αˉtη. \begin{align} \boxed{ x_{t} = \sqrt{\bar \alpha_t} x_0 + \sqrt{ 1- \bar\alpha_{t} } \eta. } \end{align}
Donde hemos definido

(10)
αˉt=k=1:tαk \bar \alpha_t = \prod_{k=1:t} \alpha_k

A (9) le denominan los autores “la propiedad bonita” (the nice property). La ecuación (9) es muy importante porque permite obtener la muestra en tiempo tt sin necesidad de realizar todo el proceso de difusión para {0:t1}\{0 : t-1 \}. Lo que nos lleva a la condicional:

(11)
xtq(xtx0)=N(x0;αˉtx0,(1αˉt)I). x_{t} \sim q(x_{t} | x_0) = \mathcal{N} \left(x_0; \sqrt{\bar \alpha_t} x_0 , (1- \bar\alpha_{t}) I \right).

alphas_bar = (1-betas)
for t, alpha in enumerate(alphas_bar[0:-2]): 
    alphas_bar[t+1] *= alpha
X2 = []
X2.append(x0)

Imgs=[]
im = (np.clip(x0, 0,1)*255).astype('uint8')
Imgs.append(im)

for t,alpha_bar in enumerate(alphas_bar): 
    x_tp1 = np.sqrt(alpha_bar)*x0  + np.sqrt(1-alpha_bar)* np.random.normal(0, 1, size=x0.shape)
    X2.append(x_tp1)
    
    im = (np.clip(x_tp1, 0,1)*255).astype('uint8')
    Imgs.append(im)
    
    print(t, end=', ')
    
io.mimsave('difusion2.gif', Imgs, duration = 0.2)
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 
# a manera de demostración

plt.imshow(X2[10]-X[10], 'gray')
plt.axis('off')
plt.show()

png

Difusión Inversa

En la siguiente figura se ilustra el proceso de difusion inversa.

reverse diffusion

Imagen de https://theaisummer.com/diffusion-models, modificado de Ho et al. 2020

En la figura de arriba, el proceso de difusión hacia adelante es conocido y se representa por el muestreo de la distribución verdadera q(xtxt1)q(x_t | x_{t-1}).

Luego, dada xtx_t y tt, la difusión inversa equivale a muestrear la condicional desconocida q(xt1xt)q(x_{t-1} | x_{t}). Podriamos intentar usar la regla de Bayes:

(12)
q(xt1xt)=q(xtxt1)q(xt1)q(xt) q(x_{t-1} | x_{t}) = \frac{q(x_{t} | x_{t-1})\, q(x_{t-1})}{q(x_{t})}
Este proceso es intratable, pues requerimos contar con q(xt1)q(x_{t-1}) para intentar usar Bayes, por otro lado

(13)
q(xt)=q(xtxt1)q(xt1)dxt1 q(x_{t}) = \int q(x_{t} | x_{t-1}) \, q(x_{t-1}) \, d x_{t-1}
requiere calcular sobre todas las posibles xt1x_{t-1}.

Entonces, la estrategia que se sigue se basa en los siguientes puntos:

I. Condicionamos en x0x_0 las probabilidades: q(xt1xt,x0)q(x_{t-1} | x_{t}, x_0).

Usamos Bayes

(14)
q(xt1xt,x0)=q(xtxt1,x0)q(xt1x0)q(xtx0) q(x_{t-1} | x_t, x_0) = \frac{q(x_{t} | x_{t-1}, x_0) q(x_{t-1} | x_0) } {q(x_{t} | x_0)}

donde las condicionales del lado izquierdo se definen usando las medias y las varianzas a partir de (1) y (9):

(15-17)
q(xtxt1,x0)exp[12((xtαtxt1)2βt)],q(xt1x0)exp[12((xt1αˉt1x0)21αˉt1)],q(xtx0)exp[12((xtαˉtx0)21αˉt)]. \begin{align} q(x_{t} | x_{t-1}, x_0) & \propto \exp \left[ -\frac{1}{2} \left( \frac{(x_t - \sqrt{\alpha_t} x_{t-1})^2}{\beta_t} \right) \right] , \\ q(x_{t-1} | x_0) & \propto \exp \left[ -\frac{1}{2} \left( \frac{(x_{t-1} - \sqrt{\bar \alpha_{t-1}} x_{0})^2}{1- \bar \alpha_{t-1}} \right) \right] , \\ q(x_{t} | x_0) & \propto \exp \left[ -\frac{1}{2} \left( \frac{(x_{t} - \sqrt{\bar \alpha_{t}} x_{0})^2}{1- \bar \alpha_{t}} \right) \right]. \end{align}

II. Resulta que q(xt1xt,x0)q(x_{t-1} | x_{t}, x_0) es una Gaussiana con media μ(xt,t)\mu(x_t, t) y matriz de covarianza Σ(xt,t)\Sigma(x_t, t)

Ver Apéndice B para los detalles de la derivación.

(18)
q(xt1xt,x0)=N(xt1;μ(xt,x0,t),Σ(xt,x0,t)). q (x_{t-1} | x_{t}, x_0) = \mathcal{N} \left( x_{t-1}; \mu(x_t, x_0, t), \Sigma(x_t, x_0, t) \right).

Notamos que la media y varianza se estiman para cada paso y dependen únicamente de xtx_t y tt:

(19)
μ(xt,t)=1αt(xtβt1αˉtηt) \mu(x_t,t) = \frac{1}{\sqrt{ \alpha_t}} \left( x_t - \frac{ \beta_t}{\sqrt{1-\bar \alpha_{t}} } \, \eta_t \right)
y

(20)
Σ(xt,t)=[1αˉt11αˉtβt]I \Sigma(x_t, t) = \left[ \frac{1-\bar \alpha_{t-1}} {1-\bar\alpha_{t}} \beta_t \right] \mathbf{I}

donde I\mathbf{I} denota la matriz identidad.

III. Aproximamos la verdadera distribución q(xt1xt,x0)q(x_{t-1} | x_{t}, x_0) por una aproximación paramétrica:

(21)
pθ(xt1xt,x0)q(xt1xt,x0); p_\theta(x_{t-1} | x_{t}, x_0) \simeq q(x_{t-1} | x_{t}, x_0);
donde θ\theta son los parámetros de la aproximación.

La distribución de la trayectoria inversa {T:0}\{T : 0 \} resulta de aplicar sucesivamente q(xt1xt,x0)q(x_{t-1} | x_{t}, x_0), o su aproximación pθ(xt1xt,x0)p_\theta(x_{t-1} | x_{t}, x_0), desde xTx_T hasta obtener x0x_0:

(22)
pθ(x0:T)=pθ(x0)t=1Tpθ(xt1xt) p_\theta(x_{0:T}) = p_\theta(x_0) \prod_{t=1}^T p_\theta(x_{t-1} | x_{t})

Siguiendo a (18), (19) y (20); la aproximación paramétrica que se propone es de la forma:

(23)
pθ(xt1xt,x0)=N(xt1;μθ(xtt),Σθ(xt,t)); p_{\theta} (x_{t-1} | x_{t}, x_0) = \mathcal{N} \left( x_{t-1}; \mu_\theta(x_t t), \Sigma_\theta(x_t, t) \right);
donde la media la expresamos de forma similar a (19):

(24)
μθ(xt,t)=1αt(xtβt1αˉtηθ(xt,t).) \mu_{\theta}(x_t, t) = \frac{1}{\sqrt{ \alpha_t}} \left( x_t - \frac{ \beta_t}{\sqrt{1-\bar \alpha_{t}} } \, \eta_{\theta}(x_t, t).\right)
Dado que Σ(xt,t)\Sigma(x_t, t) [ver (20)] la podemos calcular desde que definimos el calendario de difusión. Esto es, desde que establecimos la secuencia {βt}t=1:T\{\beta_t\}_{t=1:T}. Por lo que hacemos

(25)
Σθ(xt,t)=Σ(xt,t). \Sigma_\theta(x_t, t) = \Sigma(x_t, t).

Estimación del modelo inverso

La varianza de la aproximación paramétrica se puede calcular con una fórmula cerrada, por lo que no necesitamos estimarla: solo debemos estimar la media (24) del modelo aproximado.
En la propuesta original de Ho et al. (2020) toman esta expresión para las entradas en la matriz diagonal de covarianza; por lo tanto, su propuesta no involucra aprender estos coeficientes. Sin embargo, es posible diseñar un modelo que involucre también aprender los coeficientes de la varianza.

Notemos la diferencia entre (19) y (24). La primera es la solución verdadera al problema de difusión inversa,requiere conocer el ruido ηt\eta_t con que se realizó el paso hacia adelante en el tiempo. Por otro lado, la segunda emplea la estimación del ruido ηθ\eta_{\theta}, estimación que se hace con una red neuronal.

Los parámetos θ\theta se obtienen resolviendo el problema de optimización:

(18)
θt=argminθμ(xt,t)μθ(xt,t)2=1αtxtβtαt1αˉtη1αtxt+βtαt1αˉtηθ(xt,t)2ηη^θ(xt,t)2 \begin{align} \theta_t^* = \mathop{\arg \min}\limits_{\theta} & \| \mu(x_{t}, t) - \mu_{\theta}(x_t, t)\|^2 \\ = & \Big\| \frac{1}{\sqrt{\alpha_t}} x_{t} - \frac{\beta_t}{ \sqrt{\alpha_t} \sqrt{ 1- \bar\alpha_{t} }} \eta - \frac{1}{\sqrt{\alpha_t}} x_{t} + \frac{\beta_t}{ \sqrt{\alpha_t}\sqrt{ 1- \bar\alpha_{t} }} \eta_\theta(x_t, t) \Big\|^2 \\ \propto & \Big\| \eta - \hat \eta_\theta(x_t, t) \Big\|^2 \end{align}
Donde hemos obviado el término de escala.

El algoritmo para entrenar el modelo que estima el ruido se resume a continuación.

Ho algo

Este algoritmo se puede entender como la iteración hasta convergencia de los siguientes pasos:

Una vez entrenado el modelo (red neuronal del tipo UNet). Luego, para realizar la difusion inversa (denoising) en una imagen xtx_t, es decir estimar x^t1\hat x_{t-1}, es necesario estimamos el ruido ηθ(xt,t)\eta_\theta(x_t, t) mediante el modelo de red neuronal; luego

(20)
xt1=μθ(xt,t)+Σθ(xt,t)η, \boxed{ x_{t-1} = \mu_{\theta}(x_t, t) + \Sigma_\theta(x_t, t) \, \eta, }
con ηN(0,I)\eta \sim \mathcal{N}(0,I). Y así sucesivamente hasta calcular x^0\hat x_0.
El Algoritmo 2 (Samplig) presenta abajo los detalles de este proceso.

Ho algo

Imagen de https://theaisummer.com/diffusion-models, modificada de Ho et al. 2020

En Algoritmo 2: ϵθ(xt,t)η^θ(xt,t)\epsilon_\theta(x_t, t) \equiv \hat \eta_\theta(x_t, t), el ruido estimado por la red neuronal.

Función de costo

La estrategia es aproximar el modelo real qq por una estimación paramétrica pθp_\theta. 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

(19)

logp(x)Eq(x0x1){logpθ(x1x0)}DKL(q(xTx0)p(xT))t=2TEq(x1x0){DKL(q(xt1xt,x0)pθ(xt1xt))}=L0LTt=2TLt1 \begin{align} \log p(x) \ge & \mathbb{E}_{q(x_0 | x_1)} \{ \log p_\theta (x_1 | x_0)\} - D_{KL} \left( q(x_T | x_0) \| p(x_T) \right) - \sum_{t=2}^T \mathbb{E}_{q(x_1 | x_0)} \{ D_{KL} \left(q (x_{t-1} | x_t, x_0) \| p_\theta (x_{t-1} | x_t ) \right) \} \\ & = L_0 -L_T - \sum_{t=2}^T L_{t-1} \end{align}

Donde hemos definido las LL que aparecen en los términos L0L_0, LTL_T y en la suma; estos corresponden término a término.

Analizando cada uno de los tres términos:

  1. Primer término, L0=Eq(x1x0){logpθ(x1x0)}L_0 = \mathbb{E}_{q(x_1 | x_0)} \{\log p_\theta (x_1 | x_0)\}. Es un término de reconstrucción (datos) similar al del ELBO en VAEs.

  2. Segundo término, DKL(q(xTx0)p(xT))D_{KL} \left( q (x_T | x_0) \| p(x_T) \right). Fuerza a que p(xT)p(x_T) sea cercana a una Gaussiana; que no tiene parámetros, por lo que no es entrenable.

  3. Tercer término, Lt=t=2TLt1L_t = \sum_{t=2}^T L_{t-1}. Penaliza las diferencia entre la estimación pθ(xt1xt)p_\theta(x_{t-1} | x_t) y q(xt1xt,x0)q(x_{t-1} |x_t, x_0)

Modelo para estimar el Ruido

A continuación veremos cómo definir el modelo que extrae el ruido de la imagen xtx_t.

Podemos notar que una red neuronal profunda del tipo UNet sería la más adecuada para representar la red que extrae el componente de ruido de la imagen contaminada xtx_t a nivel tt. Notemos que nuestro modelo de red profunda debe estar condicionado por tt.


ANEXOS


Anexo A. Calcular xtx_t directamente de x0x_0

Si además sustituimos xt2x_{t-2}, y usando “la propiedad bonita”, tenemos

(A.1)
xt=αtαt1αt2xt3+αtαt1(1αt2)ηt3+(1αtαt1)η=αtαt1αt2xt3+1αtαt1αt2η \begin{align} x_{t} =& \sqrt{\alpha_t \, \alpha_{t-1} \, \alpha_{t-2}} x_{t-3} + \sqrt{\alpha_t \, \alpha_{t-1} \, (1-\alpha_{t-2})} \eta_{t-3} + \sqrt{(1-\alpha_t \alpha_{t-1})} \eta \\ =& \sqrt{\alpha_t \, \alpha_{t-1} \, \alpha_{t-2}} x_{t-3} + \sqrt{1-\alpha_t \, \alpha_{t-1} \, \alpha_{t-2}} \eta \end{align}

Sustituyendo xt3x_{t-3} resulta en:

(A.2)
xt=αtαt1αt2αt3xt4+1αtαt1αt2αt3η \begin{align} x_{t} =& \sqrt{\alpha_t \, \alpha_{t-1} \, \alpha_{t-2} \, \alpha_{t-3} } x_{t-4} + \sqrt{1-\alpha_t \, \alpha_{t-1} \, \alpha_{t-2} \, \alpha_{t-3}} \eta \end{align}

Esto es

(A.3)
xt=k=0K1αtkxtK+1k=0K1αtkη. \begin{align} x_{t} =& \sqrt{ \prod_{k=0}^{K-1} \alpha_{t-k} } x_{t-K} + \sqrt{1- \prod_{k=0}^{K-1} \alpha_{t-k} } \eta . \end{align}

Anexo B. Demostración de (23)

Seguimos el excelente blog de L. Weng.

Para hacer el procedimiento tratable usaremos una imagen de referencia x0x_0, esto nos permite tener una guía del tipo de imagen que queremos reconstruir. Partimos de (18) condicionandola también en x0x_0:

(B.1)
q(xt1xt,x0)=N(xt1;μ(xt,x0,t),β~tI) q(x_{t-1} | x_t, x_0) = \mathcal{N} \left( x_{t-1}; \mu(x_t, x_0, t), \tilde \beta_t I \right)

Luego usamos la regla de Bayes

(B.2)
q(xt1xt,x0)=q(xtxt1,x0)q(xt1x0)q(xtx0) q(x_{t-1} | x_t, x_0) = \frac{q(x_{t} | x_{t-1}, x_0) q(x_{t-1} | x_0) } {q(x_{t} | x_0)}

Notamos que usando las medias y las varianzas a partir de (9) y (11)

(B.3-B.5)
q(xtxt1,x0)exp[12((xtαtxt1)2βt)],q(xt1x0)exp[12((xt1αˉt1x0)21αˉt1)],q(xtx0)exp[12((xtαˉtx0)21αˉt)]. \begin{align} q(x_{t} | x_{t-1}, x_0) & \propto \exp \left[ -\frac{1}{2} \left( \frac{(x_t - \sqrt{\alpha_t} x_{t-1})^2}{\beta_t} \right) \right] , \\ q(x_{t-1} | x_0) & \propto \exp \left[ -\frac{1}{2} \left( \frac{(x_{t-1} - \sqrt{\bar \alpha_{t-1}} x_{0})^2}{1- \bar \alpha_{t-1}} \right) \right] , \\ q(x_{t} | x_0) & \propto \exp \left[ -\frac{1}{2} \left( \frac{(x_{t} - \sqrt{\bar \alpha_{t}} x_{0})^2}{1- \bar \alpha_{t}} \right) \right]. \end{align}
Sustituyendo en (B.2):

(B.6)
q(xt1xt,x0)exp[12((xtαtxt1)2βt+(xt1αˉt1x0)21αˉt1(xtαˉtx0)21αˉt)]. \begin{align} q(x_{t-1} | x_{t}, x_0) & \propto \exp \left[ -\frac{1}{2} \left( \frac{(x_t - \sqrt{\alpha_t} x_{t-1})^2}{\beta_t} + \frac{(x_{t-1} - \sqrt{\bar \alpha_{t-1}} x_{0})^2}{1- \bar \alpha_{t-1}} - \frac{(x_{t} - \sqrt{\bar \alpha_{t}} x_{0})^2}{1- \bar \alpha_{t}} \right) \right]. \end{align}
Luego

(B.7)
(xtαtxt1)2βt+(xt1αˉt1x0)21αˉt1(xtαˉtx0)21αˉt=xt22αtxtxt1+αtxt12βt+xt122αˉt1xt1x0+αˉt1x021αˉt1xt22αˉtxtx0+αˉtx021αˉt=(αtβt+11αˉt1)xt12(2αtβtxt+2αˉt11αˉt1x0)xt1+C(xt,x0) \begin{align} \frac{(x_t - \sqrt{\alpha_t} x_{t-1})^2}{\beta_t} & + \frac{(x_{t-1} - \sqrt{\bar \alpha_{t-1}} x_{0})^2}{1- \bar \alpha_{t-1}} -\frac{(x_{t} - \sqrt{\bar \alpha_{t}} x_{0})^2}{1- \bar \alpha_{t}} -\\ = & \frac{x_t^2 - 2 \sqrt{\alpha_t} x_{t} x_{t-1} + \alpha_t x_{t-1}^2}{\beta_t} +\frac{x_{t-1}^2 - 2 \sqrt{\bar \alpha_{t-1}} x_{t-1} x_{0} + \bar \alpha_{t-1} x_{0}^2}{1- \bar \alpha_{t-1}} -\frac{ x_{t}^2 - 2 \sqrt{\bar \alpha_{t}} x_{t} x_{0} + \bar \alpha_{t} x_{0}^2}{1- \bar \alpha_{t}} \\ =& \left(\frac{\alpha_t}{\beta_t} + \frac{1}{1-\bar \alpha_{t-1}}\right) x_{t-1}^2 -\left(\frac{2 \sqrt{\alpha_t}}{\beta_t} x_t + \frac{2 \sqrt{\bar \alpha_{t-1}}}{1-\bar \alpha_{t-1}} x_0 \right) x_{t-1} +C(x_t, x_0) \\ \end{align}

=1αˉt(1αˉt1)βt[xt122(αtβtxt+αˉt11αˉt1x0)(1αˉt1)βt1αˉtxt1+C~(xt,x0)]=1β~t[xt122(αtβtxt+αˉt11αˉt1x0)β~txt1+C(xt,x0)β~t]. \begin{align} = & \frac{1-\bar\alpha_{t}}{(1-\bar \alpha_{t-1}) \beta_t} \left[ x_{t-1}^2 - 2 \left(\frac{\sqrt{\alpha_t}}{\beta_t} x_t + \frac{ \sqrt{\bar \alpha_{t-1}}}{1-\bar \alpha_{t-1}} x_0 \right) \frac{(1-\bar \alpha_{t-1}) \beta_t} {1-\bar\alpha_{t}} x_{t-1} + \tilde C(x_t, x_0) \right] \\ = & \frac{1}{\tilde \beta_t} \left[ x_{t-1}^2 - 2 \left(\frac{ \sqrt{\alpha_t}}{\beta_t} x_t + \frac{ \sqrt{\bar \alpha_{t-1}}}{1-\bar \alpha_{t-1}} x_0 \right) \tilde \beta_t \, x_{t-1} + C(x_t, x_0) \, \tilde \beta_t \right]. \end{align}

Donde definimos

(B.10)
β~t=1αˉt11αˉtβt, \tilde \beta_t = \frac{1-\bar \alpha_{t-1}} {1-\bar\alpha_{t}} \beta_t,
donde
αtβt+11αˉt1=αtαtαˉt1+βt(1αˉt1)βt=αtαˉt+1αt(1αˉt1)βt \frac{\alpha_t}{\beta_t} + \frac{1}{1-\bar \alpha_{t-1}} = \frac{\alpha_t - \alpha_t \bar\alpha_{t-1} + \beta_t}{(1-\bar\alpha_{t-1})\beta_t} = \frac{\alpha_t - \bar\alpha_{t} + 1-\alpha_t}{(1-\bar\alpha_{t-1})\beta_t}

y CC contiene los términos independientes de xt1x_{t-1}.

(B.11)
C(xt,x0)=1βtxt2+αˉt11αˉt1x02xt22αˉtxtx0+αˉtx021αˉt. C(x_t, x_0) = \frac{1}{\beta_t} x_t^2 + \frac{\bar \alpha_{t-1}}{1- \bar \alpha_{t-1}} x_0^2 - \frac{ x_{t}^2 - 2 \sqrt{\bar \alpha_{t}} x_{t} x_{0} + \bar \alpha_{t} x_{0}^2}{1- \bar \alpha_{t}} .
Ahora definimos

(B.12)
M(xt,x0)=αtβtxt+αˉt11αˉt1x0. M(x_t, x_0) = \frac{ \sqrt{\alpha_t}}{\beta_t} x_t + \frac{ \sqrt{\bar \alpha_{t-1}}}{1-\bar \alpha_{t-1}} x_0.

Continuamos con el lado derecho de (B.7):

(B.9b)
=1β~t[xt122M(xt,x0)β~txt1+(M(xt,x0)β~t)2(M(xt,x0)β~t)2+C(xt,x0)β~t]=1β~t[xt1M(xt,x0)β~tundefinedμ(xt,x0)]21β~t[(M(xt,x0)β~t)2C(xt,x0)β~t]undefinedK(xt,x0). \begin{align} =& \frac{1}{\tilde \beta_t} \left[ x_{t-1}^2 -2 M(x_t, x_0) \tilde \beta_t \, x_{t-1} + \left(M(x_t, x_0) \tilde \beta_t \right)^2 - \left(M(x_t, x_0) \tilde \beta_t \right)^2 +C(x_t, x_0) \, \tilde \beta_t \right] \\ =& \frac{1}{\tilde \beta_t} \left[ x_{t-1} - \underbrace{ M(x_t, x_0) \tilde \beta_t }_{\mu(x_t, x_0)}\right]^2 - \underbrace{ \frac{1}{\tilde \beta_t} \left[ \left(M(x_t, x_0) \tilde \beta_t \right)^2 - C(x_t, x_0) \, \tilde \beta_t \right]}_{K(x_t, x_0)}. \end{align}

Sustitulimos en (B.6):

(B.13)
q(xt1xt,x0)exp[12β~t(xt1μ(xt,x0))2]. q(x_{t-1} | x_{t}, x_0) \propto \exp \left[ -\frac{1}{2 \, \tilde \beta_t} \left( x_{t-1} - \mu(x_t, x_0) \right)^2 \right].

Dado que exp[12K(xt,x0)]\exp\left[-\frac{1}{2} K(x_t,x_0) \right] es independiente de xt1x_{t-1}.

Ahora
(B.14)
μ(xt,x0)=(αtβtxt+αˉt11αˉt1x0)1αˉt11αˉtβt=αt(1αˉt1)1αˉtxt+αˉt1βt1αˉtx0=αt(1αˉt1)1αˉtxt+αˉt1βt1αˉt[1αˉt(xt1αˉtη)]. \begin{align} \mu(x_t, x_0) & = \left( \frac{ \sqrt{\alpha_t}}{\beta_t} x_t + \frac{ \sqrt{\bar \alpha_{t-1}}}{1-\bar \alpha_{t-1}} x_0 \right) \frac{1-\bar \alpha_{t-1}} {1-\bar\alpha_{t}} \beta_t \\ & = \frac{ \sqrt{\alpha_t} (1-\bar \alpha_{t-1}) }{1-\bar \alpha_{t}} x_t + \frac{ \sqrt{\bar \alpha_{t-1}} \beta_t }{1-\bar \alpha_{t}} x_0 \\ & = \frac{ \sqrt{\alpha_t} (1-\bar \alpha_{t-1}) }{1-\bar \alpha_{t}} x_t + \frac{ \sqrt{\bar \alpha_{t-1}} \beta_t }{1-\bar \alpha_{t}} \left[ \frac{1}{\sqrt{\bar \alpha_t}} \left( x_t - \sqrt{1-\bar \alpha_t} \eta \right) \right]. \end{align}

Notamos que el témino que multiplica a xtx_t se reduce de la siguiente manera:

(B.15)
αt(1αˉt1)1αˉt+αˉt1βt1αˉt1αˉt=1(1αˉt)[αt(1αˉt1)+αˉt1αˉt(1αt)]=1(1αˉt)[αtαtαt(1αˉt1)+1αt(1αt)]=1(1αˉt)αt[αt(1αˉt1)+(1αt)]=1(1αˉt)αt[αtαˉt+1αt]=1(1αˉt)αt(1αˉt)=1αt; \begin{align} \frac{ \sqrt{\alpha_t} (1-\bar \alpha_{t-1}) }{1-\bar \alpha_{t}} + \frac{ \sqrt{\bar \alpha_{t-1}} \beta_t }{1-\bar \alpha_{t}} \frac{1}{\sqrt{\bar \alpha_t}} &= \frac{1}{ (1-\bar \alpha_{t})}\left[ \sqrt{ \alpha_{t}} (1- \bar\alpha_{t-1}) + \frac{\sqrt{\bar \alpha_{t-1}}}{\sqrt{\bar \alpha_{t}}} (1-\alpha_t) \right] \\ &= \frac{1}{ (1-\bar \alpha_{t}) }\left[ \frac{\sqrt{ \alpha_{t}}}{\sqrt{ \alpha_{t}}} \sqrt{ \alpha_{t}} (1- \bar\alpha_{t-1}) + \frac{1}{\sqrt{ \alpha_{t}}} (1-\alpha_t) \right] \\ &= \frac{1}{ (1-\bar \alpha_{t}) \sqrt{ \alpha_{t}} }\left[ \alpha_{t}(1- \bar\alpha_{t-1}) + (1-\alpha_t) \right]\\ &= \frac{1}{ (1-\bar \alpha_{t}) \sqrt{ \alpha_{t}} }\left[ \alpha_{t} - \bar\alpha_{t} + 1-\alpha_t \right] \\ &= \frac{1}{ (1-\bar \alpha_{t}) \sqrt{ \alpha_{t}} }\left(1 - \bar\alpha_{t} \right) = \frac{1}{\sqrt{ \alpha_{t}}}; \end{align}
y que

(B.16)
αˉt1βt1αˉt1αˉtαˉt=αˉt1αˉt1αˉtβt1αˉt=βtαt1αˉt. \begin{align} \frac{\sqrt{\bar \alpha_{t-1}} \beta_t }{1-\bar \alpha_{t}} \frac{\sqrt{1-\bar \alpha_t}}{\sqrt{\bar \alpha_t}} & = \frac{\sqrt{\bar \alpha_{t-1}} }{\sqrt{\bar \alpha_t}} \frac{\sqrt{1-\bar \alpha_t} \, \beta_t} {1-\bar \alpha_{t} } = \frac{\beta_t}{\sqrt{\alpha_t} \sqrt{1-\bar \alpha_t}}. \end{align}

Sustitutendo (B.15) y (B.16) en (B.14), Finalmente tenemos que

(B.17)
μ(xt,t)=1αt[xtβt1αˉtηt] \mu(x_t,t) = \frac{1}{\sqrt{ \alpha_{t}}} \left[ x_t - \frac{\beta_t}{\sqrt{1-\bar \alpha_t}} \eta_t \right]
y de (B.10) y (B.13)

(B.18)
Σ(xt,t)=[1αˉt11αˉtβt]I \Sigma(x_t, t) = \left[ \frac{1-\bar \alpha_{t-1}} {1-\bar\alpha_{t}} \beta_t \right] \mathbf{I}

Lo que nos lleva a

(B.19)
xt1N(xt;μ(xt,t),Σ(xt,t).) x_{t-1} \sim \mathcal{N}\left( x_{t}; \mu(x_t,t), \Sigma(x_t, t). \right)


Nota: Agradezco los comentarios y revisión de este documento a Luis M. Nuñez Beltrán.