Generative Modeling by Estimating Gradients of the Data Distribution(paper reading)

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~t1+2ϵxlogp(x~t1)+ϵ zt(1)
其中 z t ∼ N ( 0 , I ) z_{t} \sim N(0,I) ztN(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~t1)。真实分布 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 挑战

来自B站UP主VictorYuki

来自B站UP主VictorYuki

可以看到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σL1>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(xt,σ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πσ2 1e2σ2(x~x)2=2σ2(x~x)2log2πσ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~x22](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=1Lλ(σ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~x22。因为 x ~ − x σ ∼ N ( 0 , I ) \frac{\tilde{x}-x}{\sigma }\sim N(0,I) σx~xN(0,I) ∥ σ s θ ( x ~ , σ ) ∥ 2 ∝ 1 \left \| \sigma s_{\theta}(\tilde{x},\sigma)\right \|_{2} \propto1 σsθ(x~,σ)21,因此 λ ( σ 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)
在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值