参考阅读:
[1] 张振虎博客
进食顺序如下
PS.内容基本上是参考博客的内容,以下内容本人复习用
1 马尔可夫分层概率模型
扩散模型可以看作是多层的VAE,既编码和解码过程分别重复了
T
T
T次。但无论是前向过程还是反向过程,都遵循马尔可夫过程(Markov chain):当前时刻
t
t
t仅与其上一时刻相关。
和VAE类似,其对数似然可以写成如下式子,利用詹森不等式可以求出其ELBO:
l
o
g
p
(
x
)
=
l
o
g
∫
p
(
x
,
z
1
:
T
)
d
z
1
:
T
=
l
o
g
∫
p
(
x
,
z
1
:
T
q
ϕ
(
z
1
:
T
∣
x
)
q
ϕ
(
z
1
:
T
∣
x
)
d
z
1
:
T
=
l
o
g
E
q
ϕ
(
z
1
:
T
∣
x
)
[
p
(
x
,
z
1
:
T
)
q
ϕ
(
z
1
:
T
∣
x
)
]
≥
E
q
ϕ
(
z
1
:
T
∣
x
)
[
p
(
x
,
z
1
:
T
)
q
ϕ
(
z
1
:
T
∣
x
)
]
\begin{aligned} log p(x) &= log\int p(x,z_{1:T})dz_{1:T}\\ &= log\int \frac{p(x,z_{1:T}q_\phi(z_{1:T}|x)}{q_\phi(z_{1:T}|x)}dz_{1:T}\\ &= log E_{q_\phi(z_{1:T}|x)}[ \frac{p(x,z_{1:T})}{q_\phi(z_{1:T}|x)}]\\ &\ge E_{q_\phi(z_{1:T}|x)}[ \frac{p(x,z_{1:T})}{q_\phi(z_{1:T}|x)}] \end{aligned}
logp(x)=log∫p(x,z1:T)dz1:T=log∫qϕ(z1:T∣x)p(x,z1:Tqϕ(z1:T∣x)dz1:T=logEqϕ(z1:T∣x)[qϕ(z1:T∣x)p(x,z1:T)]≥Eqϕ(z1:T∣x)[qϕ(z1:T∣x)p(x,z1:T)]
2 扩散概率模型
在以上基础上,进行微调便可得到扩散模型:
- 不再区分 x x x和 z z z,且尺寸保持不变(VAE中 z z z一般小于 x x x)
- 前向过程不再需要学习,既 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt∣xt−1)固定为一个线性高斯变换,不再使用参数化的模型去拟合。
- 结合线性高斯变换和马尔科夫链的特性,理论上 T → ∞ T\rightarrow \infty T→∞时, x T x_T xT是一个正态分布,既其收敛到 N ( 0 , I ) N(0,I) N(0,I)
2.1 前向和反向过程
由上图可知,整个网络可以用前向过程
q
q
q或者反向过程
p
p
p表示,既联合概率可以表示为
p
(
x
0
:
T
)
=
q
(
x
0
)
∏
t
=
1
T
q
(
x
t
∣
x
t
−
1
)
=
p
(
x
T
)
∏
t
=
1
T
p
(
x
t
−
1
∣
x
t
)
p(x_{0:T})=q(x_0)\prod_{t=1}^Tq(x_t|x_{t-1})=p(x_T)\prod_{t=1}^Tp(x_{t-1}|x_t)
p(x0:T)=q(x0)t=1∏Tq(xt∣xt−1)=p(xT)t=1∏Tp(xt−1∣xt)
前向过程又叫扩散过程,是在前进过程中不断增加微小的标准高斯噪声,当
T
T
T很大时,原图趋近于标准高斯噪声;反向过程又叫采样过程,它可以从纯粹的标准高斯噪声随机变量逐渐转变为真实图片。
前向过程
定义
q
(
x
t
∣
x
t
−
1
)
=
N
(
x
t
;
1
−
β
t
x
t
−
1
,
β
t
I
)
q(x_t|x_{t-1}) = N(x_{t}; \sqrt{1-\beta_t}x_{t-1},\beta_t I)
q(xt∣xt−1)=N(xt;1−βtxt−1,βtI)
定义这个概率分布为线性高斯变换,是指
x
t
x_t
xt的均值和
x
t
−
1
x_{t-1}
xt−1的值呈线性关系,也就是
x
t
=
1
−
β
t
x
t
−
1
+
β
t
ϵ
,
ϵ
∼
N
(
0
,
1
)
x_t = \sqrt{1-\beta_t}x_{t-1}+\sqrt{\beta_t}\epsilon\space,\epsilon\sim N(0,1)
xt=1−βtxt−1+βtϵ ,ϵ∼N(0,1)
且
β
\beta
β满足,
t
1
>
t
2
>
.
.
.
>
t
T
t_1>t_2>...>t_T
t1>t2>...>tT时,有
β
1
<
β
2
<
.
.
.
<
β
T
\beta_1<\beta_2<...<\beta_T
β1<β2<...<βT,且
β
∈
[
0
,
1
]
\beta\in[0,1]
β∈[0,1]。也可以令
α
t
=
1
−
β
t
\alpha_t=1-\beta_t
αt=1−βt,则
α
t
\alpha_t
αt是单调递减的。则此时式子变成:
x
t
=
α
t
x
t
−
1
+
1
−
α
t
ϵ
x_t = \sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}\epsilon
xt=αtxt−1+1−αtϵ
为什么要有
β
\beta
β系数呢?且为什么要小于1呢?
因为希望渐进
x
t
x_t
xt趋近于标准高斯分布,且
x
t
x_t
xt与
x
t
−
1
x_{t-1}
xt−1呈线性高斯变换,且
x
t
x_t
xt仅与
x
t
−
1
x_{t-1}
xt−1有关,所以
μ
x
\mu_x
μx和
x
t
−
1
x_{t-1}
xt−1的关系就是其乘上一个系数,所以设置了
β
\beta
β。设置为小于1,是因为要使得均值趋近于0,方差趋近于1。
因为是线性高斯变换的过程,且根据高斯分布的计算性质(也就是将
x
t
−
2
,
ϵ
t
−
2
和
α
t
−
1
x_{t-2},\epsilon_{t-2}和\alpha_{t-1}
xt−2,ϵt−2和αt−1代入到上式的
x
t
−
1
x_{t-1}
xt−1中,如此直到
x
0
x_0
x0),我们可以得出
x
t
x_t
xt和
x
0
x_0
x0的关系,其中令
α
ˉ
t
=
∏
t
=
0
T
α
t
\bar\alpha_t=\prod_{t=0}^T\alpha_t
αˉt=∏t=0Tαt:
所以我们最终得到
x
t
x_t
xt和
x
0
x_0
x0的关系,也是DPM的前提:
x
t
=
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
x_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\epsilon
xt=αˉtx0+1−αˉtϵ
所以只要设置了 α 0 : T \alpha_{0:T} α0:T,我们就可以一步从 x 0 x_0 x0解析到 x t x_t xt。
反向过程
反向过程已知是 p ( x 0 : T ) = p ( x T ) ∏ t = 1 T p ( x t − 1 ∣ x t ) p(x_{0:T})=p(x_T)\prod_{t=1}^Tp(x_{t-1}|x_t) p(x0:T)=p(xT)∏t=1Tp(xt−1∣xt),其中 p ( x T ) ∼ N ( 0 , I ) p(x_T)\sim N(0,I) p(xT)∼N(0,I),而 p ( x t − 1 ∣ x t ) p(x_{t-1}|x_t) p(xt−1∣xt)是难以计算的,我们可以使用神经网络去拟合 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt−1∣xt)。此处定义含 θ \theta θ的是模型,不含的是真实分布。
2.2 优化目标 ELBO
只有
x
0
x_0
x0是真实数据,
x
1
:
T
x_{1:T}
x1:T都是隐变量,所以我们极大化的是边缘分布
p
(
x
0
)
p(x_0)
p(x0)而不是联合分布
p
(
x
0
:
T
)
p(x_{0:T})
p(x0:T)。继续推导ELBO公式,推导过程如下:
我们得到三项:
- reconstruction term: E q ( x 1 ∣ x 0 ) [ l n p θ ( x 0 ∣ x 1 ) ] E_{q(x_1|x_0)}[ln p_\theta(x_0|x_1)] Eq(x1∣x0)[lnpθ(x0∣x1)]
- prior matching term: E q ( x T − 1 ∣ x 0 ) [ K L ( q ( x T ∣ x T − 1 ) ∣ ∣ p ( x T ) ) ] E_{q(x_{T-1}|x_0)}[KL(q(x_T|x_{T-1})||p(x_T))] Eq(xT−1∣x0)[KL(q(xT∣xT−1)∣∣p(xT))]
- consistency term : ∑ t = 1 T − 1 E q ( x t − 1 , x t + 1 ∣ x 0 ) [ K L ( q ( x t ∣ x t − 1 ) ∣ ∣ p θ ( x t ∣ x t + 1 ) ) ] \sum_{t=1}^{T-1}E_{q(x_{t-1},x_{t+1}|x_0)}[KL(q(x_t|x_{t-1})||p_\theta(x_t|x_{t+1}))] ∑t=1T−1Eq(xt−1,xt+1∣x0)[KL(q(xt∣xt−1)∣∣pθ(xt∣xt+1))]
对于重建损失:
和VAE第一项一样,也是从
x
1
x_1
x1还原回
x
0
x_0
x0的损失
对于先验匹配损失:
这一项并没有可学习参数,函数
q
q
q已知是没有可学习参数的,而
x
T
x_T
xT已知满足标准高斯分布,当
T
T
T很大时,这一项趋近于0
对于consistency loss:
这一项是
q
(
x
t
∣
x
t
−
1
)
q(x_t|x_{t-1})
q(xt∣xt−1)和
p
θ
(
x
t
∣
x
t
+
1
)
p_\theta(x_t|x_{t+1})
pθ(xt∣xt+1)的KL散度,也就是希望解码器
p
θ
(
x
t
∣
x
t
+
1
)
p_\theta(x_t|x_{t+1})
pθ(xt∣xt+1)生成的
x
t
x_t
xt和
q
(
x
t
∣
x
t
−
1
)
q(x_t|x_{t-1})
q(xt∣xt−1)生成的内容保持一致,如下图所示
他有两个随机变量
x
t
−
1
,
x
t
+
1
x_{t-1},x_{t+1}
xt−1,xt+1,而是用马尔科夫链采样的方法对于两个随机变量会导致更大的方差,优化过程不稳定,难以收敛。所以直接优化不是很好的option。
根据条件独立性
我们有
q
(
x
t
∣
x
t
−
1
)
=
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_t|x_{t-1})=q(x_{t-1}|x_t,x_0)
q(xt∣xt−1)=q(xt−1∣xt,x0),根据贝叶斯公式,有
q
(
x
t
−
1
∣
x
t
,
x
0
)
=
q
(
x
t
−
1
∣
x
t
,
x
0
)
q
(
x
t
∣
x
0
)
q
(
x
t
−
1
∣
x
0
)
q(x_{t-1}|x_t,x_0)=\frac{q(x_{t-1}|x_{t},x_0)q(x_{t}|x_0)}{q(x_{t-1}|x_0)}
q(xt−1∣xt,x0)=q(xt−1∣x0)q(xt−1∣xt,x0)q(xt∣x0)
注意写这一项是因为我们已知前向过程满足马尔科夫链性质,所以前向过程各个随机变量之间是满足条件独立性。而且上述ELBO包含项
p
(
x
t
∣
x
t
−
1
)
p(x_t|x_{t-1})
p(xt∣xt−1)
这三项变为:
- reconstruction term: E q ( x 1 ∣ x 0 ) [ l n p θ ( x 0 ∣ x 1 ) ] E_{q(x_1|x_0)}[ln p_\theta(x_0|x_1)] Eq(x1∣x0)[lnpθ(x0∣x1)]
- prior matching term: K L ( q ( x T ∣ x 0 ) ∣ ∣ p ( x T ) ) KL(q(x_T|x_0)||p(x_T)) KL(q(xT∣x0)∣∣p(xT)) (原来为 E q ( x T − 1 ∣ x 0 ) [ K L ( q ( x T ∣ x T − 1 ) ∣ ∣ p ( x T ) ) ] E_{q(x_{T-1}|x_0)}[KL(q(x_T|x_{T-1})||p(x_T))] Eq(xT−1∣x0)[KL(q(xT∣xT−1)∣∣p(xT))])
- consistency term : ∑ t = 2 T E q ( x t ∣ x 0 ) [ K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) ] \sum_{t=2}^TE_{q(x_t|x_0)}[KL(q(x_{t-1}|x_t,x_0)||p_\theta(x_{t-1}|x_t))] ∑t=2TEq(xt∣x0)[KL(q(xt−1∣xt,x0)∣∣pθ(xt−1∣xt))](原来为 ∑ t = 1 T − 1 E q ( x t − 1 , x t + 1 ∣ x 0 ) [ K L ( q ( x t ∣ x t − 1 ) ∣ ∣ p θ ( x t ∣ x t + 1 ) ) ] \sum_{t=1}^{T-1}E_{q(x_{t-1},x_{t+1}|x_0)}[KL(q(x_t|x_{t-1})||p_\theta(x_t|x_{t+1}))] ∑t=1T−1Eq(xt−1,xt+1∣x0)[KL(q(xt∣xt−1)∣∣pθ(xt∣xt+1))])
第一项重建损失保持不变;
第二项发生了变化但是没有影响,本质还是约束 x T x_T xT要尽量接近分布 p ( x T ) p(x_T) p(xT);
第三项需要采样的变量变为了
x
t
−
1
x_{t-1}
xt−1一个,约束参数化模型
p
θ
(
x
t
−
1
∣
x
t
)
p_\theta(x_{t-1}|x_t)
pθ(xt−1∣xt)尽可能接近
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1}|x_t,x_0)
q(xt−1∣xt,x0)
对其进行详细推导:
第一项 p θ ( x 0 ∣ x 1 ) p_\theta(x_0|x_1) pθ(x0∣x1)依赖于 x 1 x_1 x1的条件高斯分布,假设它的均值 μ θ \mu_\theta μθ是关于 x 1 和 t = 1 x_1和t=1 x1和t=1的参数化函数,假设方差 Σ \Sigma Σ是个常量,我们可以用神经网络去拟合它,既 μ θ ( x 1 , t = 1 ) \mu_\theta(x_1,t=1) μθ(x1,t=1)。
模型的输出实际上就是在预测
x
0
x_0
x0,所以更换掉
μ
\mu
μ符号:
第二项先验匹配项,可知其趋近于0,不需要关注
第三项去噪匹配项,我们先来推导
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1}|x_t,x_0)
q(xt−1∣xt,x0)的均值和方差:
可得
q
(
x
t
−
1
∣
x
t
,
x
0
)
q(x_{t-1}|x_t,x_0)
q(xt−1∣xt,x0)的均值和方差为:
μ
q
(
x
t
,
x
0
)
=
α
t
(
1
−
α
ˉ
t
−
1
)
1
−
α
ˉ
t
x
t
+
α
ˉ
t
−
1
(
1
−
α
t
)
1
−
α
ˉ
t
x
0
Σ
q
(
t
)
=
(
1
−
α
t
)
(
1
−
α
ˉ
t
−
1
)
1
−
α
ˉ
t
I
\begin{aligned} \mu_q(x_t,x_0)&=\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t+\frac{\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)}{1-\bar\alpha_t}x_0\\ \Sigma_q(t) &= \frac{(1-\alpha_t)(1-\bar\alpha_{t-1})}{1-\bar\alpha_t} I \end{aligned}
μq(xt,x0)Σq(t)=1−αˉtαt(1−αˉt−1)xt+1−αˉtαˉt−1(1−αt)x0=1−αˉt(1−αt)(1−αˉt−1)I
均值和
x
0
,
x
t
x_0,x_t
x0,xt有关,而方差是一个常数;
而我们第三项的目标是让模型参数尽可能接近真实后验分布,所以模型参数也需要是一个高斯分布也行。我们假设模型参数的均值和方差分别为 μ θ , Σ θ \mu_\theta, \Sigma_\theta μθ,Σθ,又因为真实后验分布的方差是一个常数,我们简单地设 Σ θ = Σ q ( t ) \Sigma_\theta=\Sigma_q(t) Σθ=Σq(t)即可。
两个高斯分布的KL散度计算公式是已知的:
极大化ELBO,等同于极小化
K
L
(
q
(
x
t
−
1
∣
x
t
,
x
0
)
∣
∣
p
θ
(
x
t
−
1
∣
x
t
)
)
KL(q(x_{t-1}|x_t,x_0)||p_\theta(x_{t-1}|x_t))
KL(q(xt−1∣xt,x0)∣∣pθ(xt−1∣xt)),等同于极小化他们之间的均值的均方误差。
又已知 μ q ( x t , x 0 ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + α ˉ t − 1 ( 1 − α t ) 1 − α ˉ t x 0 \mu_q(x_t,x_0)=\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t+\frac{\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)}{1-\bar\alpha_t}x_0 μq(xt,x0)=1−αˉtαt(1−αˉt−1)xt+1−αˉtαˉt−1(1−αt)x0, 我们可以人为地定义 μ θ \mu_\theta μθ为一样的形式,既 μ θ ( x t , t ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + α ˉ t − 1 ( 1 − α t ) 1 − α ˉ t x 0 ^ ( x t , t ) \mu_\theta(x_t,t)=\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t+\frac{\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)}{1-\bar\alpha_t}\hat{x_0}(x_t,t) μθ(xt,t)=1−αˉtαt(1−αˉt−1)xt+1−αˉtαˉt−1(1−αt)x0^(xt,t)
按如下推导化简均值的均方误差:
所以又等同于极小化模型的输出和
x
0
x_0
x0之间的均方误差
整合一下:
2.3 采样过程
我们可以知道模型参数
p
θ
(
x
t
−
1
∣
x
t
)
p_\theta(x_{t-1}|x_t)
pθ(xt−1∣xt)的均值和方差,既:
μ
θ
(
x
t
,
t
)
=
α
t
(
1
−
α
ˉ
t
−
1
)
1
−
α
ˉ
t
x
t
+
α
ˉ
t
−
1
(
1
−
α
t
)
1
−
α
ˉ
t
x
0
^
(
x
t
,
t
)
Σ
q
(
t
)
=
(
1
−
α
t
)
(
1
−
α
ˉ
t
−
1
)
1
−
α
ˉ
t
I
\begin{aligned} \mu_\theta(x_t,t)&=\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t+\frac{\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)}{1-\bar\alpha_t}\hat{x_0}(x_t,t)\\ \Sigma_q(t) &= \frac{(1-\alpha_t)(1-\bar\alpha_{t-1})}{1-\bar\alpha_t} I \end{aligned}
μθ(xt,t)Σq(t)=1−αˉtαt(1−αˉt−1)xt+1−αˉtαˉt−1(1−αt)x0^(xt,t)=1−αˉt(1−αt)(1−αˉt−1)I
采样过程(逆过程):
- 设定T=1000;
- 从标准高斯分布中采样 x T x_T xT
- 神经网络计算 x ^ 0 ( x t , t ) \hat x_0(x_t,t) x^0(xt,t)
- 计算网络参数均值和方差
- 从 p ( x t − 1 ∣ x t ) p(x_{t-1}|x_t) p(xt−1∣xt)采样到 x t − 1 x_{t-1} xt−1
- 重复3-5,直到t=1
存在的问题是,神经网络每时每刻都在预测 x 0 x_0 x0,但实际上当t较大时, x t x_t xt距离 x 0 x_0 x0应该比较远,意味着同样的参数,要解决不同的t。所以DPM的生成质量不高。
3 去噪扩散概率模型DDPM
之前的前向过程,我们可以得到
x
t
=
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon
xt=αˉtx0+1−αˉtϵ,所以反过来,有
x
0
=
x
t
−
1
−
α
ˉ
t
ϵ
α
ˉ
t
x_0 = \frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon}{\sqrt{\bar\alpha_t}}
x0=αˉtxt−1−αˉtϵ
代入到
μ
\mu
μ的计算中,可得:
同样也对
μ
θ
\mu_\theta
μθ做一样的参数化,可得
μ
θ
(
x
t
,
t
)
=
1
α
t
x
t
−
1
−
α
t
1
−
α
ˉ
t
α
t
ϵ
^
θ
(
x
t
,
t
)
\mu_\theta(x_t,t)=\frac{1}{\sqrt{\alpha_t}}x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}\sqrt{\alpha_t}}\hat\epsilon_\theta(x_t,t)
μθ(xt,t)=αt1xt−1−αˉtαt1−αtϵ^θ(xt,t)
一起代入之前的均值的均方误差,得:
此时的训练过程变为(对每一个时刻 t t t):
- 从标准正态分布中随机采样一个噪声,注意每一时刻的 t , ϵ t,\epsilon t,ϵ都是不同的。
- 通过前向传导计算出 x t x_t xt
- 将 x t x_t xt和 t t t传入模型计算出预测噪音 ϵ ^ θ ( x t , t ) \hat\epsilon_\theta(x_t,t) ϵ^θ(xt,t)
- 与采样得到的噪声计算均方误差
直觉上来说,模型预测噪声要比直接预测输出
x
0
x_0
x0合理的多,以下为训练过程的伪代码。
以下为采样过程的伪代码:
首先从标准正态分布中采样
x
T
x_T
xT,然后模型预测噪声,通过
x
0
(
x
t
,
ϵ
)
x_0(x_t,\epsilon)
x0(xt,ϵ)的式子计算出
x
~
0
\tilde x_0
x~0,然后通过
μ
t
(
x
t
,
x
~
0
)
\mu_t(x_t,\tilde x_0)
μt(xt,x~0)计算出均值,如果
t
≠
1
t\not = 1
t=1,则
x
t
−
1
=
μ
~
+
σ
t
z
x_{t-1}=\tilde \mu +\sigma_t z
xt−1=μ~+σtz,加上随机噪声(加了效果会更好)。
最后
t
=
1
t=1
t=1时刻,预测出的
x
0
x_0
x0实际上是模型输出的均值
至此,DPM和DDPM模型理论部分就学习完毕了