四、扩散模型(Diffusion Model)的推理过程

推理过程也叫采样过程,是从噪音xT中逐步去噪,最终生成图片的过程

文章内容主要参考了李宏毅老师的课程

1. 扩散模型的推理过程

在论文中,扩散模型的推理过程如下

image-20241017173024698

推理过程第1步

生成噪音xT

推理过程第3步

生成噪音z。特别的,当t=1时,z=0

推理过程第4步

  • 目的:根据xt,生成去噪后的图片xt1

  • 公式讲解:

    • ϵθ(xt,t)ϵθ是预测噪音的模型,它有两个输入,分别是图片xt和时刻t

    • 1αt(xt1αt1α¯tϵθ(xt,t))

      在第二篇文章中,我们知道,在前向过程中,在已知 xt1 的条件下, xt 的概率密度函数 q(xtxt1)=N(xt;1βtxt1,βtI);在已知 x0 的条件下, xt 的概率密度函数 q(xtx0)=N(xt;α¯tx0,(1α¯t)I)

      根据贝叶斯公式,我们可以得到,在已知 xt 的条件下, xt1 的概率密度函数q(xt1|xt)。推导之后,我们可以发现,q(xt1|xt)也服从正态分布,其方差为常数,均值为1αt(xt1αt1α¯tϵ),其中ϵ为从x0xt添加的噪音之和。

    详细的推导过程见上一篇文章

    我们设:在反向过程中,在已知 xt 的条件下, xt1 的概率密度函数pθ(xt1|xt)

    我们想要让反向过程和正向过程尽可能保持一致,因此可以让pθ(xt1|xt)尽可能的接近q(xt1|xt)。也就是说,我们可以让pθ(xt1|xt)也是正态分布,其方差为常数,均值为1αt(xt1αt1α¯tϵθ(xt,t)),其中ϵθ(xt,t)是对ϵ的预测值

    在正态分布N(x;μ,σ2)中,当x=μ时,概率密度函数取得最大值。

    因此,xt1=1αt(xt1αt1α¯tϵθ(xt,t))时,pθ(xt1|xt)取得最大值。也就是说,在已知xt的情况下,xt1最有可能取到1αt(xt1αt1α¯tϵθ(xt,t))这个值。

    • xt1=1αt(xt1αt1α¯tϵθ(xt,t))+σtz

      但是在最终,我们在1αt(xt1αt1α¯tϵθ(xt,t))后面又加上了噪声σtz(其中,σt为正态分布pθ(xt1|xt)的标准差)作为xt1的推测值。

      为什么这么干呢?因为在真实世界中,会有很多随机扰动,加入噪音的目的就是为了模拟这些扰动,以防止模型过拟合。

      并且经过实验,如果我们不加入随机噪声,那么扩散模型是无法生成图片的;只有加入随机噪声,才能正常生成图片。

      如下图,不加入随机噪声时(即σt=0时),无法生成正常的图片
      image-20241021145608519

2. 总结

应该说,经过了前面几篇文章的铺垫,理解扩散模型的推理过程是不难的。

至此,扩散模型的理论部分已经分享完毕。

在下篇文章中,我会尝试用Python实现扩散模型。

posted @   Brain404  阅读(278)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示