0 前言
上一篇介绍了前向加噪过程,得到如下从 x 0 x_0 x0 一步到 x t x_t xt 过程:
- α t + β t = 1 \alpha_t +\beta_t=1 αt+βt=1,其中 β t \beta_t βt 是正态分布方差,即第 t t t 步产生的噪声从 N ( 0 , β t ) N(0,\beta_t) N(0,βt) 采样。
- X t = α ‾ t X 0 + 1 − α ‾ t z t X_t = \sqrt{\overline{\alpha}_t} X_0 + \sqrt{1- \overline{\alpha}_t}z_t Xt=αtX0+1−αtzt,其中 X t X_t Xt表示第t步加噪后的图像, X 0 X_0 X0表示初始图像。 α ‾ t = α t α t − 1 α t − 2 . . . α 1 \overline{\alpha}_t = \alpha_t\alpha_{t-1}\alpha_{t-2}...\alpha_1 αt=αtαt−1αt−2...α1, z t z_t zt ~ N ( 0 , 1 ) N(0, 1) N(0,1)
可以看到,加噪过程唯一不确定的是从标准正态分布中随机采样的噪声 z t z_t zt。因此,我们训练一个噪声预测模型,模型预测当前图像的噪声 z t z_t zt,记作 ϵ \epsilon ϵ。
这样,可以从随机噪声中一步就可以预测到 X 0 = 1 α ‾ t ( X t − 1 − α ‾ t ϵ ) X_0=\frac{1}{\sqrt{\overline \alpha_t}} (X_t-\sqrt{1-\overline\alpha_t}\epsilon) X0=αt1(Xt−1−αtϵ),然而,从图像中精准的预测 z t z_t zt比较困难,尤其是在初始随机噪声中。
如果我们知道真实的 X 0 X_0 X0,结合 X t X_t Xt,我们可以比较置信的推导出 x t − 1 x_{t-1} xt−1。然而我们不可能知道真实 X 0 X_0 X0,但是可以借助模型预测,虽然从 X t X_t Xt直接预测 X 0 X_0 X0不够准确,但是此时预测出的 X 0 X_0 X0是根据当前 X t X_t Xt输入预测的最大可能性的 X 0 X_0 X0。可以将模型预测的 X 0 X_0 X0假设为真实 X 0 X_0 X0。直接反推 X t − 1 X_{t-1} Xt−1,随着不断地反向迭代降噪,最终得到的 X 0 X_0 X0越来越接近真实分布。
1 数学基础
1.1 重参数技巧
若 X ∼ N ( μ , σ 2 ) , Y ∼ N ( 0 , 1 ) X\sim N(\mu,\sigma^2),Y\sim N(0, 1) X∼N(μ,σ2),Y∼N(0,1) , 则从 X X X 中随机采样 z z z 等价于从标准正态分布 Y Y Y 中采样 z ′ z' z′ , z = μ + σ z ′ z=\mu+\sigma z' z=μ+σz′
1.2 正态分布概率密度函数
若
X
∼
N
(
μ
,
σ
2
)
X∼N(\mu,\sigma^2)
X∼N(μ,σ2),则其概率密度函数:
f
(
x
)
=
1
2
π
σ
e
−
(
x
−
μ
)
2
2
σ
2
f(x)=\frac{1}{\sqrt{2\pi}\sigma }e^{-\frac{(x-\mu)^2}{2\sigma^2}}
f(x)=2πσ1e−2σ2(x−μ)2
1.3 贝叶斯公式
p
(
X
t
−
1
∣
X
t
)
=
p
(
X
t
∣
X
t
−
1
)
p
(
X
t
−
1
)
p
(
X
t
)
p(X_{t-1}|X_t) = p(X_t|X_{t-1}) \frac{p(X_{t-1})}{p(X_t)}
p(Xt−1∣Xt)=p(Xt∣Xt−1)p(Xt)p(Xt−1)
2 由 x 0 x_0 x0、 x t x_t xt 反推 x t − 1 x_{t-1} xt−1
2.1 推断 x t − 1 x_{t-1} xt−1分布
根据加噪过程,有如下4个公式:
q
(
x
t
−
1
∣
x
0
)
∼
N
(
α
‾
t
−
1
x
0
,
(
1
−
α
‾
t
−
1
)
I
)
公式
(
1
)
q
(
x
t
∣
x
0
)
∼
N
(
α
‾
t
x
0
,
(
1
−
α
‾
t
)
I
)
公式
(
2
)
q
(
x
t
∣
x
t
−
1
)
=
α
t
x
t
−
1
+
1
−
α
t
z
t
公式
(
3
)
q
(
x
t
∣
x
t
−
1
,
x
0
)
=
q
(
x
t
∣
x
t
−
1
)
∼
N
(
α
t
x
t
−
1
,
(
1
−
α
t
)
I
)
公式
(
4
)
\begin{aligned} &q(x_{t-1}|x_0) \sim N(\sqrt{\overline{\alpha}_{t-1}}x_0, (1-\overline{\alpha}_{t-1})I) &\qquad 公式(1)\\ &q(x_t|x_0) \sim N(\sqrt{\overline{\alpha}_t}x_0, (1-\overline{\alpha}_t)I) &\qquad 公式(2)\\ \\ &q(x_t|x_{t-1}) =\sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}z_t &\qquad 公式(3)\\ &q(x_t|x_{t-1},x_0) = q(x_t|x_{t-1}) \sim N(\sqrt{\alpha_t}x_{t-1},(1-\alpha_t)I) &\qquad 公式(4) \end{aligned}
q(xt−1∣x0)∼N(αt−1x0,(1−αt−1)I)q(xt∣x0)∼N(αtx0,(1−αt)I)q(xt∣xt−1)=αtxt−1+1−αtztq(xt∣xt−1,x0)=q(xt∣xt−1)∼N(αtxt−1,(1−αt)I)公式(1)公式(2)公式(3)公式(4)
在已知 x t x_t xt 与 x 0 x_0 x0 时,反推 x t − 1 x_{t-1} xt−1,套用贝叶斯公式:
q
(
x
t
−
1
∣
x
t
,
x
0
)
=
q
(
x
t
∣
x
t
−
1
,
x
0
)
q
(
x
t
−
1
∣
x
0
)
q
(
x
t
∣
x
0
)
=
q
(
x
t
∣
x
t
−
1
)
q
(
x
t
−
1
∣
x
0
)
q
(
x
t
∣
x
0
)
\begin{aligned} 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)} \\ &=\frac{q(x_t|x_{t-1})q(x_{t-1}|x_0)}{q(x_t|x_0)} \end{aligned}
q(xt−1∣xt,x0)=q(xt∣x0)q(xt∣xt−1,x0)q(xt−1∣x0)=q(xt∣x0)q(xt∣xt−1)q(xt−1∣x0)
因为
q
(
x
t
−
1
∣
x
0
)
q(x_{t-1}|x_0)
q(xt−1∣x0)、
q
(
x
t
∣
x
0
)
q(x_t|x_0)
q(xt∣x0)、
q
(
x
t
∣
x
t
−
1
,
x
0
)
q(x_t|x_{t-1},x_0)
q(xt∣xt−1,x0) 三项都服从正态分布,所以
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1}|x_t, x_0)
q(xt−1∣xt,x0)服从某个正态分布,接下来只需计算这个正态分布的均值和方差。
2.2 推导 x t − 1 x_{t-1} xt−1均值、方差
从概率密度函数入手,
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1}|x_t, x_0)
q(xt−1∣xt,x0) 概率密度如下:
1
2
π
1
−
α
t
e
−
(
x
t
−
α
t
x
t
−
1
)
2
2
(
1
−
α
t
)
1
2
π
1
−
α
‾
t
−
1
e
−
(
x
t
−
1
−
α
‾
t
−
1
x
0
)
2
2
(
1
−
α
‾
t
−
1
)
1
2
π
1
−
α
‾
t
e
−
(
x
t
−
α
‾
t
x
0
)
2
2
(
1
−
α
‾
t
)
=
1
2
π
(
1
−
α
t
)
(
1
−
α
‾
t
−
1
)
1
−
α
‾
t
e
−
[
(
x
t
−
α
t
x
t
−
1
)
2
2
(
1
−
α
t
)
+
(
x
t
−
1
−
α
‾
t
−
1
x
0
)
2
2
(
1
−
α
‾
t
−
1
)
−
(
x
t
−
α
‾
t
x
0
)
2
2
(
1
−
α
‾
t
)
]
公式
(
5
)
\begin{aligned} &\frac{\frac{1}{\sqrt{2\pi}\sqrt{1-\alpha_t}} e^{-\frac{(x_t-\sqrt{\alpha_t}x_{t-1})^2}{2(1-\alpha_t)}} \frac{1}{\sqrt{2\pi}\sqrt{1-\overline{\alpha}_{t-1}} }e^{-\frac{(x_{t-1}-\sqrt{\overline{\alpha}_{t-1}}x_0)^2}{2(1-\overline{\alpha}_{t-1})}}} {\frac{1}{\sqrt{2\pi}\sqrt{1-\overline{\alpha}_t} }e^{-\frac{(x_t-\sqrt{\overline{\alpha}_t}x_0)^2}{2(1-\overline{\alpha}_t)}}} \\ \\ &=\frac{1}{\sqrt{2\pi}\sqrt\frac{(1-\alpha_t)(1-\overline{\alpha}_{t-1})}{1-\overline{\alpha}_t}} e^{-[\frac{(x_t-\sqrt{\alpha_t}x_{t-1})^2}{2(1-\alpha_t)}+\frac{(x_{t-1}-\sqrt{\overline{\alpha}_{t-1}}x_0)^2}{2(1-\overline{\alpha}_{t-1})}-\frac{(x_t-\sqrt{\overline{\alpha}_t}x_0)^2}{2(1-\overline{\alpha}_t)}]} \qquad\qquad公式(5) \end{aligned}
2π1−αt1e−2(1−αt)(xt−αtx0)22π1−αt1e−2(1−αt)(xt−αtxt−1)22π1−αt−11e−2(1−αt−1)(xt−1−αt−1x0)2=2π1−αt(1−αt)(1−αt−1)1e−[2(1−αt)(xt−αtxt−1)2+2(1−αt−1)(xt−1−αt−1x0)2−2(1−αt)(xt−αtx0)2]公式(5)
前面有说到
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1}|x_t, x_0)
q(xt−1∣xt,x0)服从某个正态分布,因此公式(1)是对应正态分布的概率密度函数。而正态分布的概率密度函数形式为
f
(
x
)
=
1
2
π
σ
e
−
(
x
−
μ
)
2
2
σ
2
f(x)=\frac{1}{\sqrt{2\pi}\sigma }e^{-\frac{(x-\mu)^2}{2\sigma^2}}
f(x)=2πσ1e−2σ2(x−μ)2,对号入座,
1
2
π
σ
e
(
.
.
.
)
=
1
2
π
(
1
−
α
t
)
(
1
−
α
‾
t
−
1
)
1
−
α
‾
t
e
(
.
.
.
)
\frac{1}{\sqrt{2\pi}\sigma } e^{(...)}= \frac{1}{\sqrt{2\pi}\sqrt\frac{(1-\alpha_t)(1-\overline{\alpha}_{t-1})}{1-\overline{\alpha}_t}} e^{(...)}
2πσ1e(...)=2π1−αt(1−αt)(1−αt−1)1e(...)
即可以得知
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1}|x_t, x_0)
q(xt−1∣xt,x0)的方差只能为:
σ
2
=
(
1
−
α
t
)
(
1
−
α
‾
t
−
1
)
1
−
α
‾
t
公式
(
6
)
\sigma^2 = \frac{(1-\alpha_t)(1-\overline{\alpha}_{t-1})} {1-\overline{\alpha}_t} \qquad\qquad公式(6)
σ2=1−αt(1−αt)(1−αt−1)公式(6)
为了凑成正态分布的概率密度函数,整理指数部分为
−
(
x
−
μ
)
2
2
σ
2
-\frac{(x-\mu)^2}{2\sigma^2}
−2σ2(x−μ)2,即分母凑成
2
σ
2
2\sigma^2
2σ2形式,结合公式(2):
−
[
(
x
t
−
α
t
x
t
−
1
)
2
2
(
1
−
α
t
)
+
(
x
t
−
1
−
α
‾
t
−
1
x
0
)
2
2
(
1
−
α
‾
t
−
1
)
−
(
x
t
−
α
‾
t
x
0
)
2
2
(
1
−
α
‾
t
)
]
=
−
[
(
x
t
−
α
t
x
t
−
1
)
2
2
σ
2
∗
1
−
α
‾
t
−
1
1
−
α
‾
t
+
(
x
t
−
1
−
α
‾
t
−
1
x
0
)
2
2
σ
2
∗
1
−
α
t
1
−
α
‾
t
−
(
x
t
−
α
‾
t
x
0
)
2
2
σ
2
∗
(
1
−
α
t
)
(
1
−
α
‾
t
−
1
)
(
1
−
α
‾
t
)
2
]
=
−
1
2
σ
2
[
x
t
−
1
2
−
2
α
t
(
1
−
α
‾
t
−
1
)
x
t
+
α
‾
t
−
1
(
1
−
α
t
)
x
0
1
−
α
‾
t
x
t
−
1
+
(
α
t
(
1
−
α
‾
t
−
1
)
x
t
+
α
‾
t
−
1
(
1
−
α
t
)
x
0
1
−
α
‾
t
)
2
]
=
−
1
2
σ
2
[
x
t
−
1
−
α
t
(
1
−
α
‾
t
−
1
)
x
t
+
α
‾
t
−
1
(
1
−
α
t
)
x
0
1
−
α
‾
t
]
2
\begin{aligned} &-[\frac{(x_t-\sqrt{\alpha_t}x_{t-1})^2}{2(1-\alpha_t)}+\frac{(x_{t-1}-\sqrt{\overline{\alpha}_{t-1}}x_0)^2}{2(1-\overline{\alpha}_{t-1})}-\frac{(x_t-\sqrt{\overline{\alpha}_t}x_0)^2}{2(1-\overline{\alpha}_t)}] \\ \\ &=-[\frac{(x_t-\sqrt{\alpha_t}x_{t-1})^2}{2\sigma^2 } * \frac { 1-\overline{\alpha}_{t-1}} {1-\overline{\alpha}_t} +\frac{(x_{t-1}-\sqrt{\overline{\alpha}_{t-1}}x_0)^2}{2\sigma^2} * \frac{1-\alpha_t} {1-\overline{\alpha}_t} -\frac{(x_t-\sqrt{\overline{\alpha}_t}x_0)^2}{2\sigma^2} * \frac{(1-\alpha_t)(1-\overline{\alpha}_{t-1})} {(1-\overline{\alpha}_t)^2} ] \\ \\ &=-\frac{1}{2\sigma^2}[x_{t-1}^2 - 2 \frac{ \sqrt{\alpha_t}(1-\overline\alpha_{t-1})x_t+\sqrt{\overline\alpha_{t-1}}(1-\alpha_t)x_0 }{1-\overline\alpha_t}x_{t-1} +(\frac{ \sqrt{\alpha_t}(1-\overline\alpha_{t-1})x_t+\sqrt{\overline\alpha_{t-1}}(1-\alpha_t)x_0 }{1-\overline\alpha_t})^2 ] \\ \\ &=-\frac{1}{2\sigma^2}[x_{t-1} - \frac{ \sqrt{\alpha_t}(1-\overline\alpha_{t-1})x_t+\sqrt{\overline\alpha_{t-1}}(1-\alpha_t)x_0 }{1-\overline\alpha_t}]^2 \end{aligned}
−[2(1−αt)(xt−αtxt−1)2+2(1−αt−1)(xt−1−αt−1x0)2−2(1−αt)(xt−αtx0)2]=−[2σ2(xt−αtxt−1)2∗1−αt1−αt−1+2σ2(xt−1−αt−1x0)2∗1−αt1−αt−2σ2(xt−αtx0)2∗(1−αt)2(1−αt)(1−αt−1)]=−2σ21[xt−12−21−αtαt(1−αt−1)xt+αt−1(1−αt)x0xt−1+(1−αtαt(1−αt−1)xt+αt−1(1−αt)x0)2]=−2σ21[xt−1−1−αtαt(1−αt−1)xt+αt−1(1−αt)x0]2
对号入座,可得均值:
μ
=
α
t
(
1
−
α
‾
t
−
1
)
x
t
+
α
‾
t
−
1
(
1
−
α
t
)
x
0
1
−
α
‾
t
公式
(
7
)
\mu= \frac{ \sqrt{\alpha_t}(1-\overline\alpha_{t-1})x_t+\sqrt{\overline\alpha_{t-1}}(1-\alpha_t)x_0 }{1-\overline\alpha_t} \qquad\qquad公式(7)
μ=1−αtαt(1−αt−1)xt+αt−1(1−αt)x0公式(7)
将公式(7)中的
x
0
x_0
x0用模型预测噪声
ϵ
\epsilon
ϵ 和
x
t
x_t
xt 替换:
x
t
=
α
‾
t
x
0
+
1
−
α
‾
t
ϵ
=
>
x
0
=
x
t
−
1
−
α
‾
t
ϵ
α
‾
t
\begin{aligned} &x_t = \sqrt{\overline\alpha_t}x_0+ \sqrt{1-\overline\alpha_t}\epsilon \\ \\ => \quad&x_0 = \frac {x_t- \sqrt{1-\overline\alpha_t}\epsilon}{\sqrt{\overline \alpha_t}} \end{aligned}
=>xt=αtx0+1−αtϵx0=αtxt−1−αtϵ
替换
x
0
x_0
x0 并化简得到均值:
μ
=
α
t
(
1
−
α
‾
t
−
1
)
x
t
+
α
‾
t
−
1
(
1
−
α
t
)
x
0
1
−
α
‾
t
=
α
t
(
1
−
α
‾
t
−
1
)
x
t
+
1
α
t
(
1
−
α
t
)
(
x
t
−
1
−
α
‾
t
ϵ
)
1
−
α
‾
t
=
1
α
t
α
t
(
1
−
α
‾
t
−
1
)
x
t
+
(
1
−
α
t
)
x
t
−
(
1
−
α
t
)
1
−
α
‾
t
ϵ
)
1
−
α
‾
t
=
1
α
t
(
1
−
α
‾
t
)
x
t
−
(
1
−
α
t
)
1
−
α
‾
t
ϵ
)
1
−
α
‾
t
=
1
α
t
(
x
t
−
1
−
α
t
1
−
α
‾
t
ϵ
)
\begin{aligned} \mu&= \frac{ \sqrt{\alpha_t}(1-\overline\alpha_{t-1})x_t+\sqrt{\overline\alpha_{t-1}}(1-\alpha_t)x_0 }{1-\overline\alpha_t} \\ \\ &=\frac{ \sqrt{\alpha_t}(1-\overline\alpha_{t-1})x_t+ \frac{1}{\sqrt{\alpha_t}}(1-\alpha_t)(x_t-\sqrt{1-\overline \alpha_t} \epsilon) }{1-\overline\alpha_t} \\ \\ &=\frac{1}{\sqrt{\alpha_t}} \frac {\alpha_t(1-\overline\alpha_{t-1})x_t+(1-\alpha_t)x_t - (1-\alpha_t)\sqrt{1-\overline\alpha_t}\epsilon)} {1-\overline\alpha_t} \\ \\ &=\frac{1}{\sqrt{\alpha_t}} \frac{(1-\overline\alpha_t)x_t-(1-\alpha_t)\sqrt{1-\overline\alpha_t}\epsilon)}{1-\overline\alpha_t} \\ \\ &=\frac{1}{\sqrt{\alpha_t}} (x_t - \frac{ 1-\alpha_t }{\sqrt{1-\overline\alpha_t}} \epsilon) \end{aligned}
μ=1−αtαt(1−αt−1)xt+αt−1(1−αt)x0=1−αtαt(1−αt−1)xt+αt1(1−αt)(xt−1−αtϵ)=αt11−αtαt(1−αt−1)xt+(1−αt)xt−(1−αt)1−αtϵ)=αt11−αt(1−αt)xt−(1−αt)1−αtϵ)=αt1(xt−1−αt1−αtϵ)
至此,我们得到了
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1}|x_t, x_0)
q(xt−1∣xt,x0)所服从正态分布的均值
μ
\mu
μ 和方差
σ
2
\sigma^2
σ2:
μ
=
1
α
t
(
x
t
−
1
−
α
t
1
−
α
‾
t
ϵ
)
公式
(
8
)
σ
2
=
(
1
−
α
t
)
(
1
−
α
‾
t
−
1
)
1
−
α
‾
t
=
1
−
α
‾
t
−
1
1
−
α
‾
t
β
t
公式
(
9
)
\begin{aligned} \mu &= \frac{1}{\sqrt{\alpha_t}} (x_t - \frac{ 1-\alpha_t }{\sqrt{1-\overline\alpha_t}} \epsilon)&\qquad\qquad公式(8)\\ \\ \sigma^2 &= \frac{(1-\alpha_t)(1-\overline{\alpha}_{t-1})} {1-\overline{\alpha}_t} = \frac{1-\overline{\alpha}_{t-1}} {1-\overline{\alpha}_t} \beta_t &\qquad\qquad公式(9) \end{aligned}
μσ2=αt1(xt−1−αt1−αtϵ)=1−αt(1−αt)(1−αt−1)=1−αt1−αt−1βt公式(8)公式(9)
注意公式(9),作者实验发现,
σ
2
=
1
−
α
‾
t
−
1
1
−
α
‾
t
β
t
\sigma^2 =\frac{1-\overline{\alpha}_{t-1}} {1-\overline{\alpha}_t} \beta_t
σ2=1−αt1−αt−1βt 与
σ
2
=
β
t
\sigma^2 =\beta_t
σ2=βt 效果相似。这也很好理解,因为
1
−
α
‾
t
−
1
1
−
α
‾
t
\frac{1-\overline{\alpha}_{t-1}} {1-\overline{\alpha}_t}
1−αt1−αt−1本身就近似等于1。
因此,方差就直接被替换。再次重新整理最终的均值和方差:
μ
=
1
α
t
(
x
t
−
β
t
1
−
α
‾
t
ϵ
)
σ
2
=
β
t
\begin{aligned} \mu &= \frac{1}{\sqrt{\alpha_t}} (x_t - \frac{ \beta_t}{\sqrt{1-\overline\alpha_t}} \epsilon) \\ \\ \sigma^2 &= \beta_t \end{aligned}
μσ2=αt1(xt−1−αtβtϵ)=βt
可得:
q ( x t − 1 ∣ x t ) ∼ N ( μ , σ 2 ) = N ( 1 α t ( x t − β t 1 − α ‾ t ϵ ) , β t ) q(x_{t-1}|x_t) \sim N(\mu, \sigma^2) = N(\frac{1}{\sqrt{\alpha_t}} (x_t - \frac{ \beta_t}{\sqrt{1-\overline\alpha_t}} \epsilon) , \beta_t) q(xt−1∣xt)∼N(μ,σ2)=N(αt1(xt−1−αtβtϵ),βt)
3 反向降噪
利用重参数技巧:
x
t
−
1
=
μ
t
+
σ
z
=
1
α
t
(
x
t
−
β
t
1
−
α
‾
t
ϵ
)
+
β
t
z
\begin{aligned} x_{t-1} &= \mu_t + \sigma z \\\\ &=\frac{1}{\sqrt{\alpha_t}} (x_t - \frac{ \beta_t}{\sqrt{1-\overline\alpha_t}} \epsilon) + \sqrt{\beta_t} z \end{aligned}
xt−1=μt+σz=αt1(xt−1−αtβtϵ)+βtz
与论文降噪采样算法完全一致。