ddpm逆向过程推导

ddpm逆向过程推导

本文正式开始了ddpm逆向过程的推导,在逆向推导之前,我们将前一篇文章的推导结果做一个总结。

前文总结

我们目前已知前线过程q

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

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

其中

(Eq.3)α¯t=αtαt1...α1=i=1tαi

(Eq.4)αt+βt=1

高斯公式如下:

(Eq.5)N(μ,σ2I)=12πσ2exp[12(x2σ22μxσ2+μ2σ2)]

逆向过程

逆向过程就是将q(xt|xt1)方向颠倒过来成为q(xt1|xt),一步一步就能将高斯噪声重新生成图片。我们通过贝叶斯公式如下:

(Eq.6)q(xt1|xt)=q(xt|xt1)q(xt1)q(xt)

但是Eq.5最大的问题在于它和我们已知的条件完全无关,为此我们需要引入一些条件,在ddpm中合理的条件就是x0,也就是原图,直觉上很合理,在已知原图的基础上,逆向过程可以改写为如下形式:

(Eq.7)q(xt1|xt,x0)=q(xt|xt1,x0)q(xt1|x0)q(xt|x0)=q(xt|xt1)q(xt1|x0)q(xt|x0)

在引入了x0条件后Eq.6可以引入已知条件。由此我们可以用高斯公式计算Eq.6的表达式,由于这个过程太过枯燥,我们跳过中间过程,结果如下:

(Eq.8)q(xt1|xt,x0)=exp(12[(αtβt+11α¯t1)xt12(2αtβtx+2α¯t11αt1¯x0)xt1+C(xt,x0)])

我们将Eq.8套入Eq.5的形式可以的得到:

(Eq.9)1σ2=αtβt+11α¯t1=αt(1α¯t1)+βtβt(1α¯t1)=1α¯tβt(1α¯t1)

(Eq.10)σ2=β~=βt(1α¯t1)1α¯t

Eq.10和附件中的公式(7)结果一致,并且我们可以发现方差σ2只和α,β相关。除此以外均值μ如下:

(Eq.11)2μσ2=2αtβt+2αt11α¯t1x0

(Eq.12)μ=(αtβtxt+α¯t11α¯t1x0)σ2=αtβtβt(1α¯t1)1α¯txt+α¯t11α¯t1βt(1α¯t1)1α¯tx0=αt(1α¯t1)1α¯txt+βtα¯t1βt(1α¯t1)βt(1α¯t1)1α¯tx0=αt(1α¯t1)1α¯txt+βtα¯t11α¯tx0

Eq.12和附件中公式(7)的结果也一致,至此我们完成了逆向过程的推导过程说明。

这里有一点额外的说明,Eq.12中计算逆向过程的均值μ中出现了xt是一个人为定义的高斯噪声,没有问题。但是对于其中的x0,训练过程中我们包含原图作为条件没有问题,但是推理过程中或者说是AIGC文生图过程中的x0又改如何改变。我们回到已知的Eq.2中,我们可以知道

xt=α¯tx0+1α¯tϵt

x0就为以下等式:

x0=xt1α¯tϵtα¯t

我们可以观察到x0和噪声ϵt有关,所以在推理的时候,我们并不需要知道原图x0就可以进行推理。并且进一步来讲,我们训练的时候的并不是对x0做损失,而是对ϵ使用损失函数,因为两者是相互有关联的。无论训练还是推理过程,都是让ϵ准确就可以正确预测x0

综上我们得到了逆向过程的运算结果,其中μ~的结果在Eq.12, β~t的结果为Eq.10

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

和附件中的公式(6),(7)结果一致

附件(原文background)

posted @   PowerZZJ  阅读(18)  评论(0编辑  收藏  举报
编辑推荐:
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
阅读排行:
· dotnet 源代码生成器分析器入门
· 官方的 MCP C# SDK:csharp-sdk
· 一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
· 一文搞懂MCP协议与Function Call的区别
· 提示词工程师自白:我如何用一个技巧解放自己的生产力
点击右上角即可分享
微信分享提示