Denoising Diffusion Probabilistic Models论文解读

Denoising Diffusion Probabilistic Models

《Denoising Diffusion Probabilistic Models》简称ddpm。扩散模型的里程碑式文章,简单来说,扩散模型包含两个过程:

  1. 前向过程(从右向左):原始分布x0不断加入噪声,经过T次加噪,最终得到一个标准正太分布xTN(0,1)
  2. 逆向过程(从左向右):从一个标准正态分布xTN(0,1),通过不断降噪,学习一个ϵθ最终得到图像x0

伪代码如下,具体内容会在损失函数小结详细展开:

在三篇前文中我们介绍了ddpm的背景知识前向过程推导逆向过程推导扩散模型损失函数。我们将三篇文章的内容在此总结,并且进一步介绍ddpm的改进。

前向过程

在前向xt1xt加噪的数据分布q人为的定义如下:

(Eq.1)q(xt|xt1):=N(xt;1βtxt1,βtI)

我们通过推导得到了x0xT一步到位的数据分布,如下。其中αt=1βt,α¯t=αtαt1...α1

(Eq.2)q(xt|x0)=N(xt;α¯tx0,(1α¯t)I)

根据重参数化采样的技巧,Eq.2可以得到如下公式:

(Eq.3)xt=α¯tx0+1α¯tϵ,ϵN(0,1)

Eq.3可以看出前向过程就是通过对原始数据x0按照α¯进行采样后,添加标准正态分布的噪声ϵ,最后得到xTN(0,1) 。我们可以观察到Eq.3展示了xtx0是存在一种数据关系可以互相转换的:

(Eq.4)x0=1α¯t(xt1α¯tϵ)

我们可以将xtx0看成是一个函数关系,即xt(x0,ϵ)

逆向过程

所谓逆向过程,就是去除前向过程的噪声。逆向分布我们还是用q表示,因为我们想要知道逆向该如何进行,才能训练一个神经网络pθ去学习逆向分布。我们在前文中得到了逆向过程xtxt1的分布如下:

(Eq.5)q(xt1|xt,x0)=N(xt1;μ~t(xt,x0),β~tI)

其中μ~(xt,x0)β~定义如下:

(Eq.6)μ~t(xt,x0)=αt(1α¯t1)1α¯txt+βtα¯t11α¯tx0,β~=(1α¯t1)1α¯tβt

由于在Eq.4发现xtx0互相转换的关系,所以我们可以重新表示μ~:

(Eq.7)μ~t(xt,x0)=μ~(xt(x0,ϵ),1α¯t(xt(x0,ϵ)1α¯tϵ))=αt(1α¯t1)1α¯txt(x0,ϵ)+βtα¯t11α¯t1α¯t(xt(x0,ϵ)1α¯tϵ)=αt(1α¯t1)αt(1α¯t)xt(x0,ϵ)+βt(xt(x0,ϵ)1α¯tϵ)αt(1α¯t)=1αt[(αtα¯t+βt)xt(x0,ϵ)1α¯tβt1α¯tϵ]=1αt[xt(x0,ϵ)βt1α¯tϵ]

这样我们的μ~的表达式就可以只包含xt。我们之所以煞费苦心地把式子把x0转换掉,是因为在真正推理阶段,我们不可能又原图x0,我们只会有xt的状态。

同样通过重参数化采样的技巧Eq.5可以得到如下关系

(Eq.8)xt1=μ~t(xt,x0)+β~ϵ=αt(1α¯t1)1α¯txt+βtα¯t11α¯tx0+(1α¯t1)1α¯tβtϵ=1αt[xt(x0,ϵ)βt1α¯tϵ]+(1α¯t1)1α¯tβtϵ

损失函数

至此我们表示出了我们需要的前向过程和逆向过程,我们通过训练一个pθ(xt1|xt):=N(xt1;μθ(xt,t),Σθ(xt,t)I) 来拟合逆向过程,其中Σθ(xt,t)我们定义为一个常量σt2=βt,这种定义是为了计算简单,如果引入了方差计算,理论会变得更加复杂。最终的损失函数如下:

(Eq.9)L=DKL[q(xT|x0)p(xT)]LT+t>1TDKL[q(xt1|xt,x0)pθ(xt1|xt)]Lt1logpθ(x0|x1)L0

我们观察损失函数中三项的含义:

  • LT:加噪的结果q(xT|x0)和神经网络的起始分布p(xT)尽可能相似,很符合逻辑。由于q(xT|x0)中的βt是人为定义常量,所以
  • Lt1: 用q得到的正确逆向过程的数据分布和神经网络训练的逆向过程尽可能相似,很符合逻辑
  • L0: 属于t=1的特殊项,和Lt1的含义一致

我们主要关注的就是Lt1这个逆向过程。我们知道q(xt1|xt,x0)的表示,通过高斯分布的KL散度公式可以将Lt1写成如下形式:

(Eq.10)DKL[q(xt1|xt,x0)pθ(xt1|xt)]=logσpσq+σq2+(μ~qμ~p)22σp212

其中σp=βt是一个常量,σq=β~在Eq.6中也是常量,12也是常量,在训练的时候都对梯度起不到作用。我们的关注点只有μ~,如此Lt1的损失函数如下(对应原论文(8)):

(Eq.11)Lt1=12σt2μ~t(xt,x0)μθ(xt,t)2+C

我们将Eq.7引入Eq.11中(对应原论文(10)):

(Eq.12)Lt1C=12σt2μ~t(xt,x0)μθ(xt,t)2=12σt21αt[xt(x0,ϵ)βt1α¯tϵ]μθ(xt,t)2

在Eq.12中我们可以看到我们μθ训练目标就是预测1αt[xt(x0,ϵ)βt1α¯tϵ]。我们使用Eq.7方法同样表示μθ如下:

(Eq.13)μθ(xt,t)=1αt[xtβt1α¯tϵθ(xt,t)]

在这里ϵθ函数用于预测xtϵ。则我们神经网络训练的数据分布pθ(xt1|xt):=N(xt1;μθ(xt,t),σt2I) 就是计算如下公式:

(Eq.14)xt1=1αt[xtβt1α¯tϵθ(xt,t)]+σt2z,zN(0,1)

和算法2的伪代码中间的采样函数一致。Eq.14是用于具体采样阶段的计算公式。

简化损失函数Lt1

我们的损失函数目前是Eq.12的形式,我们将Eq.13带入Eq.12,并且扩写xt函数(对应原论文(12)):

(Eq.15)Lt1C=12σt21αt[xt(x0,ϵ)βt1α¯tϵ]μθ(xt,t)2=12σt21αt[xt(x0,ϵ)βt1α¯tϵ]1αt[xt(x0,ϵ)βt1α¯tϵθ(xt,t)]2=βt22σt2αt(1α¯t)ϵϵθ(α¯tx0+1α¯tϵ,t)2

我们可以省略系数,得到Lt1的最终最简化版本如下:

Lsimple(θ)=ϵϵθ(α¯tx0+1α¯tϵ,t)2

我们可以看到损失函数从最初的Eq.9的最小化KL散度,变成了 Eq.11的预测μ,再进一步变成了Eq.15的预测噪声ϵ,几乎达到了最简化的情况。综上ddpm针对图像生成的训练目标,从复原数据分布,变成了复原分布的均值μ,再进一步变成了预测噪声。其实在结束了所有推导后,重新看这个结论就非常直觉,前向过程通过加噪声将一张图变成高斯分布,那么训练的目标就是去还原噪声就可以恢复一张图。ddpm主要是从理论角度证实了两者的关系,并且确定了扩散模型预测噪声就足够了。


  1. Ho J, Jain A, Abbeel P. Denoising diffusion probabilistic models[J]. Advances in neural information processing systems, 2020, 33: 6840-6851. ↩︎

posted @   PowerZZJ  阅读(33)  评论(0编辑  收藏  举报
编辑推荐:
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
阅读排行:
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率
· AI Agent爆火后,MCP协议为什么如此重要!
点击右上角即可分享
微信分享提示