Generative Modeling by Estimating Gradients of the Data Distribution (Paper reading)
Yang Song, Stanford University, NeurIPS2019, Cited:498, Code, Paper
精简目录
简简介
Score-based model的开篇之作?扩散模型的理解点这里, 从VAE到Diffusion Moedl的理解。
1. 什么是分数Score和朴素分数模型。
1.1 Score
假设我们的数据集包含了来自未知分布 p d a t a ( x ) p_{data}(x) pdata(x)的独立同分布的样本 x i x_{i} xi,那么分数Score的定义就是概率密度函数 p ( x ) p(x) p(x)的对数似然的梯度 ▽ x l o g p ( x ) \bigtriangledown _{x}logp(x) ▽xlogp(x)。分数网络Score network就是训练一个神经网络用来估计真实分布 p d a t a ( x ) p_{data}(x) pdata(x)。基于分数的生成模型通常有两个成分:分数匹配和Langevin动力学。
1.2 Langevin动力学
Langevin动力学是一个采样算法,这个算法仅仅依赖于分数函数
▽
x
l
o
g
p
(
x
)
\bigtriangledown _{x}logp(x)
▽xlogp(x)就可以从
p
(
x
)
p(x)
p(x)中生成样本。具体算法如下,给定一个特点的步长
ϵ
>
0
\epsilon>0
ϵ>0和一个初始值
x
~
∼
π
(
x
)
\tilde{x} \sim \pi(x)
x~∼π(x),这里
π
\pi
π指任意的先验分布(高斯分布等)。Langevin的方法可以写成迭代的形式:
x
t
~
=
x
~
t
−
1
+
ϵ
2
▽
x
l
o
g
p
(
x
~
t
−
1
)
+
ϵ
z
t
(1)
\tilde{x_{t}} =\tilde{x}_{t-1}+\frac{\epsilon}{2}\bigtriangledown_{x}logp(\tilde{x}_{t-1})+\sqrt{\epsilon}z_{t} \tag{1}
xt~=x~t−1+2ϵ▽xlogp(x~t−1)+ϵzt(1)
其中
z
t
∼
N
(
0
,
I
)
z_{t} \sim N(0,I)
zt∼N(0,I),当
ϵ
⟶
0
\epsilon \longrightarrow 0
ϵ⟶0时且
T
⟶
∞
T \longrightarrow \infty
T⟶∞时,我们可以认为
x
~
T
\tilde{x}_{T}
x~T的分布等于
p
(
x
)
p(x)
p(x),也就是说当
ϵ
\epsilon
ϵ很小,
T
T
T很大,
x
~
T
\tilde{x}_{T}
x~T就是从
p
(
x
)
p(x)
p(x)中生成的样本。我们可以从公式(1)中看到,整个Langevin算法仅仅依赖于上一步概率密度函数的分数
▽
x
l
o
g
p
(
x
~
t
−
1
)
\bigtriangledown_{x}logp(\tilde{x}_{t-1})
▽xlogp(x~t−1)。真实分布
p
d
a
t
a
(
x
)
p_{data}(x)
pdata(x)我们无法获得,因此我们需要训练分数网络来近似
s
θ
(
x
)
≈
▽
x
l
o
g
p
d
a
t
a
(
x
~
)
s_{\theta}(x) \approx \bigtriangledown_{x}logp_{data}(\tilde{x})
sθ(x)≈▽xlogpdata(x~)并替换公式(1)中的分数。这就是基于分数生成模型的主要思想。
1.3 去噪分数匹配 Denoising Score Matching
首先对数据样本
x
x
x加上一个预先设定好的噪声分布
q
σ
(
x
~
∣
x
)
q_{\sigma}(\tilde{x}|x)
qσ(x~∣x)(在
x
x
x上加上噪声强度为
σ
\sigma
σ的噪声后再加到
x
~
\tilde{x}
x~的分布上),然后用分数匹配的方法估计带噪声数据
q
σ
(
x
~
)
=
∫
q
σ
(
x
~
∣
x
)
p
d
a
t
a
(
x
)
d
x
q_{\sigma}(\tilde{x})=\int{q_{\sigma}(\tilde{x}|x)p_{data}(x)} dx
qσ(x~)=∫qσ(x~∣x)pdata(x)dx的分数。目标函数可以被证明等同于:
1
2
E
q
σ
(
x
~
∣
x
)
p
d
a
t
a
(
x
)
[
∥
s
θ
(
x
~
)
−
▽
x
~
l
o
g
q
σ
(
x
~
∣
x
)
∥
2
2
]
(2)
\frac{1}{2}\mathbb{E}_{q_{\sigma}(\tilde{x}|x)p_{data}(x)}[\left \|s_{\theta}(\tilde{x})-\bigtriangledown_{\tilde{x}}logq_{\sigma }(\tilde{x}|x)\right \|^{2}_{2} ] \tag{2}
21Eqσ(x~∣x)pdata(x)[∥sθ(x~)−▽x~logqσ(x~∣x)∥22](2)
此时,训练的最优的分数网络在加的噪声非常小的情况下,也就是说
q
σ
(
x
)
≈
p
d
a
t
a
(
x
)
q_{\sigma}(x) \approx p_{data}(x)
qσ(x)≈pdata(x),近似等同于
q
σ
(
x
)
q_{\sigma}(x)
qσ(x)的分数:
s
θ
∗
(
x
)
=
▽
x
l
o
g
q
σ
(
x
)
≈
▽
x
l
o
g
p
d
a
t
a
(
x
)
s_{\theta^{*}}(x)=\bigtriangledown_{x}logq_{\sigma}(x)\approx\bigtriangledown_{x}logp_{data}(x)
sθ∗(x)=▽xlogqσ(x)≈▽xlogpdata(x)。
1.4 挑战
可以看到socre整体指向数据密度更好的位置,假设我们已经获得了数据空间的score,也就是说训练好了对应的模型,那么每次我们从初始值根据score的方向就可以一步一步的走到数据密度高的位置,也就是完成了一次生成。当然,这一切的前提是我们可以准确的求score。但是在低密度区域,score的估计往往不够准确。
在模型推理的早期,数据分布密度较低的地方的梯度估计通常不准确,因此早期的推理会沿着错误的梯度进行,导致模型效果不好。解决的方法是对数据加噪声,扩大数据范围,让原本低密度的数据区域“膨胀”,如图:
但是,加了噪声后,你最后得到的是噪声分布,这里就会有一个权衡,加的噪声越强,你的估计范围越大,估计越准确,但更多破坏了原有分布;如果加的噪声很小就会导致score的估计不准确,因此解决的方法是,在推理的不同阶段加不同强度的噪声,噪声由大到小。在推理早期时,加强度大的噪声,因为早期的估计距离目标分布较远,所以大噪声更容易估计;而在后期,距离目标分布很近时,就可以减少噪声强度估计出准确的score。具体做法是:1)利用不同的噪声强度扰动数据分布;2)利用一个分数网络去预测不同噪声强度下的分数;3)训练好分数网络后就可以通过退火Langevin方法生成样本,也就是说在从大噪声强度下开始生成样本并逐渐减少噪声生成样本。
2. Noise Conditional Score Networks (NCSN)
2.1 NCSN定义
取 { σ i } i = 1 L \left \{\sigma_{i} \right \}_{i=1}^{L} {σi}i=1L满足 σ 1 σ 2 = ⋅ ⋅ ⋅ = σ L − 1 σ L > 1 \frac{\sigma_{1}}{\sigma_{2}}=···=\frac{\sigma_{L-1}}{\sigma_{L}}>1 σ2σ1=⋅⋅⋅=σLσL−1>1的正数等比数列。令 q σ ( x ) ≜ ∫ p d a t a ( t ) N ( x ∣ t , σ 2 I ) d t q_{\sigma}(x)\triangleq\int{p_{data}(t)N(x|t,\sigma^{2}I)dt} qσ(x)≜∫pdata(t)N(x∣t,σ2I)dt(指在原始数据上加入了噪声)为扰动的数据分布。 σ 1 \sigma_{1} σ1取一个很大的值, σ L \sigma_{L} σL取一个很小的值减少后期对数据的影响。我们的目标就是训练一个条件分数网络估计任一噪声下的分数,即 ∀ σ ∈ { σ i } i = 1 L : s θ ( x , σ ) ≈ ∇ x l o g q σ ( x ) \forall \sigma \in \left \{\sigma_{i} \right \}_{i=1}^{L}:s_{\theta}(x,\sigma) \approx \nabla_{x}logq_{\sigma}(x) ∀σ∈{σi}i=1L:sθ(x,σ)≈∇xlogqσ(x)。这里的 s θ ( x , σ ) s_{\theta}(x,\sigma) sθ(x,σ)就叫做NCSN。
与去噪分数网络的区别就是,1.3讲的内容是仅仅加了噪声的扰动,很小很小的噪声,给分数网络得到分数,并近似的认为是 p d a t a ( x ) p_{data}(x) pdata(x)的分数,而NCSN额外的以噪声 σ \sigma σ作为条件输入,能够预测不同噪声强度下的分数。这里的分数网络是基于U-Net的神经网络。
2.2 训练NCSN
这里我们选择噪声分布为
q
σ
(
x
~
∣
x
)
=
N
(
x
~
∣
x
,
σ
2
I
)
q_{\sigma}(\tilde{x}|x)=N(\tilde{x}|x,\sigma^{2}I)
qσ(x~∣x)=N(x~∣x,σ2I),即在给定
x
x
x样本的条件下,
x
~
\tilde{x}
x~的分布符合均值为
x
x
x,方差为
σ
2
\sigma^{2}
σ2的高斯分布:
q
σ
(
x
~
∣
x
)
=
1
2
π
σ
2
e
−
(
x
~
−
x
)
2
2
σ
2
l
o
g
q
σ
(
x
~
∣
x
)
=
−
(
x
~
−
x
)
2
2
σ
2
−
l
o
g
2
π
σ
2
∇
x
~
l
o
g
q
σ
(
x
~
∣
x
)
=
−
−
(
x
~
−
x
)
σ
2
\begin{aligned} q_{\sigma}(\tilde{x}|x)&=\frac{1}{\sqrt{2\pi\sigma^{2}}}e^{-\frac{(\tilde{x}-x)^{2}}{2\sigma^{2}}}\\ logq_{\sigma}(\tilde{x}|x)&= -\frac{(\tilde{x}-x)^{2}}{2\sigma^{2}}-log\sqrt{2\pi\sigma^{2}}\\ \nabla_{\tilde{x}}logq_{\sigma}(\tilde{x}|x)&=--\frac{(\tilde{x}-x)}{\sigma^{2}} \end{aligned}
qσ(x~∣x)logqσ(x~∣x)∇x~logqσ(x~∣x)=2πσ21e−2σ2(x~−x)2=−2σ2(x~−x)2−log2πσ2=−−σ2(x~−x)
因此给定
σ
\sigma
σ,去噪分数匹配的目标函数可以写作:
l
(
θ
;
σ
)
≜
1
2
E
p
d
a
t
a
(
x
)
E
x
~
∼
N
(
x
,
σ
2
I
)
[
∥
s
θ
(
x
~
,
σ
)
+
x
~
−
x
σ
2
∥
2
2
]
(3)
\mathscr{l}(\theta;\sigma)\triangleq\frac{1}{2}\mathbb{E}_{p_{data}(x)}\mathbb{E}_{\tilde{x}\sim N(x,\sigma^{2}I)}\left [ \left \| s_{\theta}(\tilde{x},\sigma)+\frac{\tilde{x}-x}{\sigma^{2}}\right \|^{2}_{2} \right] \tag{3}
l(θ;σ)≜21Epdata(x)Ex~∼N(x,σ2I)[∥∥∥∥sθ(x~,σ)+σ2x~−x∥∥∥∥22](3)
对于不同的噪声强度,得到最终的目标函数:
L
(
θ
;
{
σ
i
}
i
=
1
L
)
≜
1
L
∑
i
=
1
L
λ
(
σ
i
)
l
(
θ
;
σ
i
)
(4)
\mathcal{L}(\theta; \left \{\sigma_{i} \right \}_{i=1}^{L})\triangleq\frac{1}{L}\sum_{i=1}^{L}\lambda(\sigma _{i})\mathscr{l}(\theta ;\sigma_{i}) \tag{4}
L(θ;{σi}i=1L)≜L1i=1∑Lλ(σi)l(θ;σi)(4)
这里的
λ
(
σ
i
)
>
0
\lambda(\sigma_{i})>0
λ(σi)>0,表示关于
σ
i
\sigma_{i}
σi的权重,目的是在不同噪声强度下做出平衡,使得
l
(
θ
;
σ
i
)
\mathscr{l}(\theta;\sigma_{i})
l(θ;σi)与特点噪声无关。那么我们就希望
λ
(
σ
i
)
l
(
θ
;
σ
i
)
\lambda(\sigma _{i})\mathscr{l}(\theta ;\sigma_{i})
λ(σi)l(θ;σi)在每个噪声强度下都具有同样的量级,即无论噪声多大,两者相乘都是差不多的。作者经验性的发现网络收敛后
∥
s
θ
(
x
,
σ
)
∥
2
∝
1
σ
\left \| s_{\theta}(x,\sigma) \right \|_{2} \propto \frac{1}{\sigma}
∥sθ(x,σ)∥2∝σ1,因此
λ
(
σ
)
=
σ
2
\lambda(\sigma )=\sigma^{2}
λ(σ)=σ2,则
σ
2
l
(
θ
;
σ
)
=
1
2
E
∥
σ
s
θ
(
x
~
,
σ
)
+
x
~
−
x
σ
∥
2
2
\sigma^{2}\mathscr{l}(\theta;\sigma)=\frac{1}{2}\mathbb{E}\left \| \sigma s_{\theta}(\tilde{x},\sigma) + \frac{\tilde{x}-x}{\sigma } \right \|_{2}^{2}
σ2l(θ;σ)=21E∥∥σsθ(x~,σ)+σx~−x∥∥22。因为
x
~
−
x
σ
∼
N
(
0
,
I
)
\frac{\tilde{x}-x}{\sigma }\sim N(0,I)
σx~−x∼N(0,I)且
∥
σ
s
θ
(
x
~
,
σ
)
∥
2
∝
1
\left \| \sigma s_{\theta}(\tilde{x},\sigma)\right \|_{2} \propto1
∥σsθ(x~,σ)∥2∝1,因此
λ
(
σ
i
)
l
(
θ
;
σ
i
)
\lambda(\sigma _{i})\mathscr{l}(\theta ;\sigma_{i})
λ(σi)l(θ;σi)是不依赖于噪声
σ
\sigma
σ的。当训练好分数网络,最佳的情况是分数网络可以精准的预测不同噪声强度下的分数
s
θ
∗
(
x
,
σ
i
)
≈
∇
x
l
o
g
q
σ
i
(
x
)
s_{\theta^{*}}(x,\sigma_{i}) \approx \nabla_{x}logq_{\sigma_{i}}(x)
sθ∗(x,σi)≈∇xlogqσi(x) 。
2.3 NCSN的推理和退火Langevin动力学
当训练好NCSN后,采用退火Langenvin动力学采样方法生成样本。首先设置一组由大到小的噪声
σ
i
\sigma_{i}
σi,和步长
ϵ
\epsilon
ϵ以及
T
T
T。在先验分布中初始化一个
x
0
x_{0}
x0。遍历每一个噪声强度,并根据每一个噪声计算出步长
α
i
=
ϵ
σ
i
2
/
σ
L
2
\alpha_{i}=\epsilon\sigma_{i}^{2}/\sigma_{L}^{2}
αi=ϵσi2/σL2,可以理解为当噪声大的时候用步数较大去采样,而噪声小的时候就需要步数小一点,这跟学习率很像。在每个噪声下都需要通过Langevin动力学采样出当前加噪数据的分布,做T次的迭代后的数据
x
~
T
\tilde{x}_{T}
x~T做为下一次,也就是下一个噪声强度的初始值
x
~
0
\tilde{x}_{0}
x~0,当噪声强度这个循环结束后,得到的
q
σ
L
(
x
)
q_{\sigma_{L}}(x)
qσL(x)可以近似的认为是
p
d
a
t
a
(
x
)
p_{data}(x)
pdata(x)。