手推diffusion
参考链接:https://zhuanlan.zhihu.com/p/525106459
看了大佬的推导过程后自己推了一遍,捋出了一个大概的推导逻辑,并将一些复杂的问题隐藏在整个逻辑后面,思路相对来说比较简单。
整体下来其实学过概率论就能看懂,一些数学符号在一般概率论中没见过的话可以查查。
比如
N
(
x
t
;
1
−
β
t
x
t
−
1
,
β
t
I
)
\mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I})
N(xt;1−βtxt−1,βtI),前面的
x
t
x_t
xt其实就是指服从后面均值方差参数的随机变量。即表达为:
x
t
∼
N
(
1
−
β
t
x
t
−
1
,
β
t
I
)
x_t \sim \mathcal{N}(\sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I})
xt∼N(1−βtxt−1,βtI)
还有就是后面的
I
\mathbf{I}
I 也就是单位阵,因为
x
t
x_t
xt是一个多维随机变量。
注:下面的 q ( x t − 1 ∣ x t ) q_{(x_{t-1}|x_t)} q(xt−1∣xt)其实本质上来说就是论文中的 p ( x t − 1 ∣ x t ) p_{(x_{t-1}|x_t)} p(xt−1∣xt)。
forward processing / 加噪过程
预设的加噪分布
q
(
x
t
∣
x
t
−
1
)
=
N
(
x
t
;
1
−
β
t
x
t
−
1
,
β
t
I
)
(
1
)
q_{(x_t|x_{t-1})} = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I}) \qquad (1)
q(xt∣xt−1)=N(xt;1−βtxt−1,βtI)(1)
q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) ( 2 ) q_{(x_{1:T}|x_0)} = \prod_{t=1}^{T} q_{(x_t|x_{t-1})} \qquad (2) q(x1:T∣x0)=t=1∏Tq(xt∣xt−1)(2)
推理过程
现在我们知道了如何加噪,那么该如何做去噪呢?
既然知道了 q ( x t ∣ x t − 1 ) q_{(x_t|x_{t-1})} q(xt∣xt−1) , 就可以用贝叶斯公式求出 q ( x t − 1 ∣ x t ) q_{(x_{t-1}|x_t)} q(xt−1∣xt)这个逆向的从 x t x_t xt到 x t − 1 x_{t-1} xt−1的分布。不就能实现去噪了吗?
好,开始推!
q ( x t − 1 ∣ x t ) = q ( x t − 1 , x t ) q ( x t ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ) q ( x t ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) ( 3 ) \begin{aligned} q_{(x_{t-1}|x_t)} &= \frac{q_{(x_{t-1}, x_t)}} {q_{(x_t)}} \\ &= q_{(x_t|x_{t-1})} \frac{q_{(x_{t-1})}} {q_{(x_t)}} \\ &= q_{(x_t|x_{t-1},x_0)} \frac{q_{(x_{t-1}|x_0)}} {q_{(x_t|x_0})} \qquad (3) \\ \end{aligned} q(xt−1∣xt)=q(xt)q(xt−1,xt)=q(xt∣xt−1)q(xt)q(xt−1)=q(xt∣xt−1,x0)q(xt∣x0)q(xt−1∣x0)(3)
设 α t = 1 − β t \alpha_t = 1 - \beta_t αt=1−βt
这三项中,
-
q
(
x
t
∣
x
t
−
1
,
x
0
)
q_{(x_t|x_{t-1},x_0)}
q(xt∣xt−1,x0) 是已知的,由等式 (1) 可知
q ( x t ∣ x t − 1 , x 0 ) ∝ exp ( − 1 2 × ( x t − 1 − β t x t − 1 ) 2 β t ) ∝ exp ( − 1 2 × ( x t − α t x t − 1 ) 2 β t ) ( 4 ) \begin{aligned} q_{(x_t|x_{t-1},x_0)} &\propto \exp(-\frac{1}{2} \times \frac{(x_t-\sqrt{1-\beta_t}x_{t-1})^2}{\beta_t}) \\ &\propto \exp(-\frac{1}{2} \times \frac{(x_t-\sqrt{\alpha_t} x_{t-1})^2}{\beta_t}) \qquad (4) \end{aligned} q(xt∣xt−1,x0)∝exp(−21×βt(xt−1−βtxt−1)2)∝exp(−21×βt(xt−αtxt−1)2)(4)
由等式(2) 可知,剩余两项可写为:
- q ( x t − 1 ∣ x 0 ) = ∏ s = 1 t − 1 q ( x s ∣ x s − 1 ) ( 5 ) q_{(x_{t-1}|x_0)} = \prod_{s=1}^{t-1} q_{(x_s|x_{s-1})} \qquad (5) q(xt−1∣x0)=∏s=1t−1q(xs∣xs−1)(5)
- q ( x t ∣ x 0 ) = ∏ s = 1 t q ( x s ∣ x s − 1 ) ( 6 ) q_{(x_{t}|x_0)} = \prod_{s=1}^{t} q_{(x_s|x_{s-1})} \qquad (6) q(xt∣x0)=∏s=1tq(xs∣xs−1)(6)
其实它俩也是高斯分布,看我给你推。
证明:
∵ q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) ∴ x t ∼ N ( 1 − β t x t − 1 , β t I ) ∴ x t = α t x t − 1 + 1 − α t z 1 w h e r e z 1 , z 2 , . . . ∼ N ( 0 , 1 ) = α t ( α t − 1 x t − 2 + 1 − α t − 1 z 2 ) + 1 − α t z 1 = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) z 2 + 1 − α t z 1 \because q_{(x_t|x_{t-1})} = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I}) \\ \quad \\ \therefore x_t \sim \mathcal{N}(\sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I}) \\ \quad \\ \begin{aligned} \therefore x_t &= \sqrt{\alpha_t} x_{t-1} + \sqrt{1-\alpha_t} z_1 \qquad where z_1, z_2,... \sim \mathcal{N}(0,1)\\ &= \sqrt{\alpha_t} (\sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{1-\alpha_{t-1}} z_2) + \sqrt{1-\alpha_t} z_1 \\ &= \sqrt{\alpha_t\alpha_{t-1}} x_{t-2} + \sqrt{\alpha_t(1-\alpha_{t-1})} z_2 + \sqrt{1-\alpha_t} z_1 \\ \end{aligned} \\ ∵q(xt∣xt−1)=N(xt;1−βtxt−1,βtI)∴xt∼N(1−βtxt−1,βtI)∴xt=αtxt−1+1−αtz1wherez1,z2,...∼N(0,1)=αt(αt−1xt−2+1−αt−1z2)+1−αtz1=αtαt−1xt−2+αt(1−αt−1)z2+1−αtz1
好,有意思的来了
α t ( 1 − α t − 1 ) z 2 ∼ N ( 0 , α t ( 1 − α t − 1 ) I ) 1 − α t z 1 ∼ N ( 0 , ( 1 − α t ) I ) ∴ α t ( 1 − α t − 1 ) z 2 + 1 − α t z 1 ∼ N ( 0 , ( 1 − α t α t − 1 ) I ) \sqrt{\alpha_t(1-\alpha_{t-1})} z_2 \sim \mathcal{N}(0, \alpha_t(1-\alpha_{t-1})\mathbf{I}) \\ \sqrt{1-\alpha_t} z_1 \sim \mathcal{N}(0, (1-\alpha_{t})\mathbf{I}) \\ \quad \\ \therefore \sqrt{\alpha_t(1-\alpha_{t-1})} z_2 + \sqrt{1-\alpha_t} z_1 \sim \mathcal{N}(0, (1-\alpha_t\alpha_{t-1})\mathbf{I}) αt(1−αt−1)z2∼N(0,αt(1−αt−1)I)1−αtz1∼N(0,(1−αt)I)∴αt(1−αt−1)z2+1−αtz1∼N(0,(1−αtαt−1)I)
上面的计算就省了,递推一下,下面的递推可能看上去有点武断,但确实是对的
x t = α t x t − 1 + 1 − α t z 1 = α t α t − 1 x t − 2 + 1 − α t α t − 1 z 2 = . . . = α t α t − 1 . . . α 1 x 0 + 1 − α t α t − 1 . . . α 1 z t ( 7 ) \begin{aligned} x_t &= \sqrt{\alpha_t} x_{t-1} + \sqrt{1-\alpha_t} z_1 \\ &= \sqrt{\alpha_t\alpha_{t-1}}x_{t-2} + \sqrt{1-\alpha_t\alpha_{t-1}} z_2 \\ &= ... \\ &= \sqrt{\alpha_t\alpha_{t-1}...\alpha_1}x_{0} + \sqrt{1-\alpha_t\alpha_{t-1}...\alpha_1} z_t \qquad (7)\\ \end{aligned} xt=αtxt−1+1−αtz1=αtαt−1xt−2+1−αtαt−1z2=...=αtαt−1...α1x0+1−αtαt−1...α1zt(7)
简记一下 α t ‾ = ∏ i = 1 t α i \overline{\alpha_t} = \prod_{i=1}^t \alpha_i \qquad αt=∏i=1tαi 等式(7)就可以简写为:
x t = α t ‾ x 0 + 1 − α t ‾ z t ∼ N ( α t ‾ x 0 , 1 − α t ‾ I ) ( 8 ) x_t = \sqrt{\overline{\alpha_t}} x_0 + \sqrt{1-\overline{\alpha_t}} z_t \sim \mathcal{N}(\sqrt{\overline{\alpha_t}} x_0,1-\overline{\alpha_t}\mathbf{I}) \qquad (8) xt=αtx0+1−αtzt∼N(αtx0,1−αtI)(8)
证明完毕, x t 和 x t − 1 x_t和x_{t-1} xt和xt−1 确实都是高斯分布
那么(5)(6)的分布也到手了
q
(
x
t
−
1
∣
,
x
0
)
∝
exp
(
−
1
2
×
(
x
t
−
1
−
α
t
−
1
‾
x
0
)
2
1
−
α
t
−
1
‾
)
q
(
x
t
∣
,
x
0
)
∝
exp
(
−
1
2
×
(
x
t
−
α
t
‾
x
0
)
2
1
−
α
t
‾
)
\begin{aligned} q_{(x_{t-1}|,x_0)} &\propto \exp(-\frac{1}{2} \times \frac{(x_{t-1} - \sqrt{\overline{\alpha_{t-1}}} x_0)^2}{1-\overline{\alpha_{t-1}}}) \\ q_{(x_{t}|,x_0)} &\propto \exp(-\frac{1}{2} \times \frac{(x_{t} - \sqrt{\overline{\alpha_{t}}} x_0)^2}{1-\overline{\alpha_{t}}}) \\ \end{aligned}
q(xt−1∣,x0)q(xt∣,x0)∝exp(−21×1−αt−1(xt−1−αt−1x0)2)∝exp(−21×1−αt(xt−αtx0)2)
好好好,现在倒推的分布
q
(
x
t
−
1
∣
x
t
)
q_{(x_{t-1}|x_t)}
q(xt−1∣xt)也就快到手了
这里留给大佬的公式截图,公式太长不想写了
-
用得到的三项的分布对逆向概率分布计算并整理
-
对应标准高斯密度函数,得到 x t − 1 x_{t-1} xt−1的均值和方差
这一步是把
x
0
x_0
x0替换为
x
t
x_t
xt,用的是等式(8)。
总结
DDPM的每一步推断可总结为
-
每个时间步通过 x t x_t xt 与t得到 Z θ ( x t , t ) Z_{\theta}(x_t,t) Zθ(xt,t),并根据此计算出 μ θ ( x t , t ) 和 Σ \mu_{\theta}(x_t, t)和\Sigma μθ(xt,t)和Σ
-
由 μ 和 Σ \mu和\Sigma μ和Σ得到 q ( x t − 1 ∣ x t ) q_{(x_{t-1}|x_t)} q(xt−1∣xt),用以反推 x t − 1 x_{t-1} xt−1