Song Y. and Ermon S. Generative modeling by estimating gradients of the data distribution. In Advances in Neural Information Processing Systems (NIPS), 2019.
概
当前生成模型, 要么依赖对抗损失(GAN), 要么依赖替代损失(VAE), 本文提出了基于score matching 训练, 以及利用annealed Langevin dynamics推断的模型, 思想非常有趣.
主要内容
Langevin dynamics
对于分布p(x), 我们可以通过下列方式迭代生成
~xt=~xt−1+ϵ2∇xlogp(~xt−1)+√ϵzt,
其中~x0∼π(x)来自一个先验分布, zt∼N(0,I). 当步长ϵ→0并且T→+∞的时候, ~xT可以认为是从p(x)中采样的样本.
注: 一般的Langevin, dynamics还需要在每一次迭代后计算一个接受概率然后判断是否接受, 不过在实际中这一步往往可以省略.
Score Matching
通过上述的迭代可以发现, 我们只需要获得∇xlogp(x)即可采样x, 我们可以期望通过下面的方式, 通过一个网络sθ(x)来逼近∇xlogpdata(x):
minθ12Epdata(x)[∥sθ(x)−∇xlogpdata(x)∥22],
但是在实际中, 先验logpdata(x)也是未知的, 幸运的是上述公式等价于:
minθEpdata(x)[tr(∇xsθ(x))+12∥sθ(x)∥22].
注: 见 score matching
Denoising Score Matching
一个共识是, 所获得的数据往往是一个低维流形, 即其内在的维度实际上很低. 所以Epdata(x)在实际中会出现高密度的区域估计得很好, 但是低密度得区域估计得非常差. Denosing Score Matching提高了一个较为鲁棒的替代方法:
minθ12Eqσ(~x|x)pdata(x)[∥sθ(~x)−∇xlogqσ(~x|x)∥22].
当优化得足够好的时候,
sθ∗(x)=∇xlogqσ(x),qσ(~x):=∫qσ(~x|x)pdata(x)dx.
实际中, 通常取qσ(~x|x)=N(~x|x,σ2I), 相当于在真实数据x上加了一个扰动, 当扰动足够小(σ足够小)的时候, qσ(x)≈pdata(x), 则sθ∗(x)≈∇xlogpdata(x).
注: 为啥期望部分要有pdata? 实际上上述目标和score matching依旧是等价的.
Noise Conditional Score Networks
Slow mixing of Langevin dynamics
假设pdata(x)=πp1(x)+(1−π)p2(x), 且p1,p2的支撑集合是互斥的, 那么 ∇xlogpdata(x)要么为∇xlogp1(x)或者∇xlogp2(x), 与π没有丝毫关联, 这会导致训练的结果与π也没有关联. 在实际中, 若p1,p2近似互斥, 也会产生类似的情况:

如上图所示, 通过Langevin dynamics采样的点几乎是1:1的, 这与真实的分布便有了出入.
作者的想法是, 设计一个noise conditional score networks:
sθ(x,σ),
给定不同的σ其拟合不同扰动大小的pσ, 在采样中, 首先用大一点的σ, 然后再逐步缩小, 这便是一种退火的思想. 显然, 一开始用大一点的σ能够为后面的采样提供更好更鲁棒的初始点.
损失函数
设定σi,i=1,2,⋯,L, 且满足:
σ1σ2=⋯=σL−1σL>1,
即一个等比例(缩小)的数列.
对于每个σ采用如下损失:
ℓ(θ;σ)=12Epdata(x)EN(~x|x,σI)[∥sθ(~x,σ)+~x−xσ2∥22].
注: ∇~xqσ(~x|x)=−~x−xσ2.
于是总损失为
L(θ;{σi}Li=1):=1LL∑i=1λ(σi)ℓ(θ;σi),
λ(σi)为权重系数.
Annealed Langevin dynamics
Input: {σi}Li=1,ϵ,T;
- 初始化x0;
- For i=1,2,⋯,L do:
- αi←ϵ⋅σ2i/σ2L;
- For t=1,2,⋯,T do:
- 采样zt∼N(0,I);
- xt←xt−1+αi2sθ(xt−1,σ)+√αizt;
- x0←xT;
Output: xT.
细节
-
关于参数λ(σ)的选择:
作者推荐选择λ(σ)=σ2, 因为当优化到最优的时候, ∥sθ(x,σ)∥2∝1/σ, 故σ2ℓ(θ;σ)=12E[∥σsθ(x,σ)+~x−xσ∥22], 其中σsθ(x,σ)∝1,~x−xσ∼N(0,I), 故σ2ℓθ,σ与σ无关.
-
关于αi←ϵ⋅σ2i/σ2L:
对于一次Langevin dynamic, 其获得的信息为: αi2sθ(xt−1,σ), 其噪声为√αizt, 故其信噪比(signal-to-noise)为(应该是element-wise的计算?)
αisθ(x,σi)2√αiz,
当我们按照算法中的取法时, 我们有
∥αisθ(x,σi)2√αiz∥22≈αi∥sθ(x,σi)∥224∝∥σisθ(x,σi)∥224∝14.
故采用此策略能够保证SNR保持一个稳定的值.
代码
原文代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix