Diffusion Model (扩散生成模型)的基本原理详解(二)Score-Based Generative Modeling(SGM)

这篇具有很好参考价值的文章主要介绍了Diffusion Model (扩散生成模型)的基本原理详解(二)Score-Based Generative Modeling(SGM)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇是《Diffusion Model (扩散生成模型)的基本原理详解(一)Denoising Diffusion Probabilistic Models(DDPM)》的续写,继续介绍有关diffusion的另一个相关模型,同理,参考文献和详细内容与上一篇相同,读者可自行查阅,本篇着重介绍Score-Based Generative Modeling(SGM)的部分,本篇的理论部分参考与上一节相同,当然涉及了一些原文的理论部分,笔者在这里为了更能让各位读懂,略掉了原文的一些理论证明,感兴趣读者可以自行阅读Song Yang et al.SGM原文。笔者只介绍重要思想和重要理论,省略了较多细节篇幅。下一节介绍本基础系列最后一部重点:Stochastic Differential Equation(SDE)。

2、Score-Based Generative Models(SGM)

不同于DDPM,这是一个基于分数的Model,换而言之通过预测评分来获取最终的信息。在阅读本篇之前,这样我们显然会产生两个问题:
一、Network应该以什么为基准的评分?
二、DDPM网络是一个可以直接给出的后验分布(去噪链),那么如果我得到了一个基于评分的网络,如何进行所谓的“采样”,这里没有直接对分布进行所谓的预测。
下面开始进入正题介绍,先从评分函数讲起。

2.1、Score-Function(评分函数)

SGMS的核心思想在于评分函数的定义,让我们来一起看一下它的Score-Function的定义是怎么样定义的,以下是它的定义:

假若有一个概率密度函数 p ( x ) p(x) p(x),定义“Stein-ScoreFunction”如下:
S t e i n − S c o r e F u n c t i o n = ∇ x l o g ( p ( x ) ) Stein-ScoreFunction=\nabla_xlog(p(x)) SteinScoreFunction=xlog(p(x))显然的,该score表示了概率密度函数增长的快慢程度。

2.2、SGM forward Markov Chain(加噪链)—— q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt​∣xt−1​)

我们仍旧假设原始数据 x 0 x_0 x0是从某一分布 x 0 ~ q ( x 0 ) x_0~q(x_0) x0q(x0)中采样得到。不同于之前DDPM,SGM使用另外一种更直接化的分布来进行采样,具体操作如下:假设生成噪声步长为 T T T,给予一组逐步弱化的噪声: [ σ 1 , σ 2 , σ 3 ⋅ ⋅ ⋅ σ T ] [\sigma_1,\sigma_2,\sigma_3···\sigma_T] [σ1,σ2,σ3⋅⋅⋅σT],则会有如下结论:
在第 i i i步噪声数据 x i x_i xi满足从如下分布中进行采样:
x i ~ N ( x 0 , σ i 2 I )    ⟺    q ( x i ∣ x 0 ) = N ( x 0 , σ i 2 I )    ⟺    q ( x i ) = ∫ q ( x i ∣ x 0 ) q ( x 0 ) d ( x 0 ) x_i~N(x_0,\sigma_i^2I)\iff q(x_i|x_0)=N(x_0,\sigma_i^2I)\iff q(x_i)=\int q(x_i|x_0)q(x_0)d(x_0) xiN(x0,σi2I)q(xix0)=N(x0,σi2I)q(xi)=q(xix0)q(x0)d(x0)

2.3、Score-Network—— s θ ( x t , t ) s_\theta(x_t,t) sθ​(xt​,t)

2.3.1、SGM与DDPM的一致性&Loss-Function

不同于DDPM,这里并不是直接训练出一个去噪链直接解决问题并生成数据,我们的目的是想训练出一个可以模拟Score-Function的良好网络,再基于该Score-Function进行反向的采样,即想要设计一个Network : s θ ( x t , t ) s_\theta(x_t,t) sθ(xt,t)用来模拟当前的Score-Function: ∇ x t l o g ( q ( x t ∣ x 0 ) ) \nabla_{x_{t}} log(q(x_t|x_0)) xtlog(q(xtx0))。那么显然地,目标函数变为:
L o s s = ∣ ∣ ∇ x t l o g ( q ( x t ∣ x 0 ) ) − s θ ( x t , t ) ∣ ∣ 2 Loss=||\nabla_{x_{t}} log(q(x_t|x_0))-s_\theta(x_t,t)||^2 Loss=∣∣xtlog(q(xtx0))sθ(xt,t)2
而我们已经知道了 q ( x t ∣ x 0 ) = N ( x 0 , σ t 2 I ) = 1 2 π σ t e − ( x t − x 0 ) 2 2 σ t 2 q(x_t|x_0)=N(x_0,\sigma_t^2I)=\frac{1}{\sqrt{2\pi}\sigma_t}e^{-\frac{(x_t-x_0)^2}{2\sigma_t^{2}}} q(xtx0)=N(x0,σt2I)=2π σt1e2σt2(xtx0)2
那么显然地,我们会有 ∇ x t l o g [ q ( x t ∣ x 0 ) ] = − x t − x 0 σ t 2 \nabla_{x_{t}}log[q(x_t|x_0)]=-\frac{x_t-x_0}{\sigma_t^{2}} xtlog[q(xtx0)]=σt2xtx0
则会有当前优化目标可以视为如下的函数
L o s s = ∣ ∣ − x t − x 0 σ t 2 − s θ ( x t , t ) ∣ ∣ 2 Loss=||-\frac{x_t-x_0}{\sigma_t^{2}}-s_\theta(x_t,t)||^2 Loss=∣∣σt2xtx0sθ(xt,t)2
注意到第一项,这可视为从正态分布进行的采样,差了一个非网络参数 σ t \sigma_t σt即:
L o s s ∗ = σ t 2 L o s s = ∣ ∣ x t − x 0 σ t + σ t s θ ( x t , t ) ∣ ∣ 2 Loss^*=\sigma_t^2Loss=||\frac{x_t-x_0}{\sigma_t}+\sigma_ts_\theta(x_t,t)||^2 Loss=σt2Loss=∣∣σtxtx0+σtsθ(xt,t)2
− σ t s θ ( x t , t ) = z θ ( x t , t ) -\sigma_ts_\theta(x_t,t)=z_\theta(x_t,t) σtsθ(xt,t)=zθ(xt,t)
L o s s ∗ = σ t 2 L o s s = ∣ ∣ z − z θ ∣ ∣ 2 Loss^*=\sigma_t^2Loss=||z-z_\theta||^2 Loss=σt2Loss=∣∣zzθ2
如果读者已经度过了笔者写过的(一)DDPM部分,读者会惊奇的发现,这与DDPM的优化目标是一致的,从原理上,它们的目的是相同的。

2.3.2、SGM-Sampling(Langevin Monte Carlo)

SGM的采样办法有很多种,不同于DDPM的那种“一步一步”反向估计后验估计的办法,这里首先介绍使用Langevin Monte Carlo(基于Langevin Dynamics的一种办法)进行采样,这里介绍算法过程,有关Langevin Monte Carlo理论部分的介绍可见随机过程中的Important-Sampling等会有一些介绍,笔者之后会给予一些简单的补充资料来对Langevin Monte Carlo理论进行说明,这里读者可以认为它的目的是去模拟原始分布 q ( x 0 ) q(x_0) q(x0),然后直接用该分布采样生成数据。
先来介绍Langevin Monte Carlo采样算法的过程:
假设我们已经训练好了一个网络 s θ ( x t , t ) s_\theta(x_t,t) sθ(xt,t),它可以作为 ∇ x t l o g ( q ( x t ∣ x 0 ) ) \nabla_{x_{t}} log(q(x_t|x_0)) xtlog(q(xtx0))的近似,我们下面要利用该网络进行分布预估:给定比步长(固定)为 s ∗ s^* s ( s ∗ (s^* (s足够小 ) ) ),迭代次数为 N N N。下面进行反向生成过程,笔者将其总结为SGM算法:

SGM算法(Langevin Monte Carlo法)
①、随机采样一个样本 x T 0 ~ N ( 0 , 1 ) x_T^{0}~N(0,1) xT0N(0,1) ( T (T (T足够大 ) ) ),记录当前时间 t = T t=T t=T
②、迭代 x t i + 1 = x t i + 1 2 s ∗ s θ ( x t i , t ) + s ∗ z x_t^{i+1}=x_t^{i}+\frac{1}{2}s^*s_\theta(x_t^{i},t)+\sqrt{s^*}z xti+1=xti+21ssθ(xti,t)+s z 直到 i = N i=N i=N
③、 x t − 1 0 = x t T , t = t − 1 x_{t-1}^{0}=x_{t}^T,t=t-1 xt10=xtT,t=t1
④、重复②~③直到 t = 0 t=0 t=0文章来源地址https://www.toymoban.com/news/detail-486868.html

到了这里,关于Diffusion Model (扩散生成模型)的基本原理详解(二)Score-Based Generative Modeling(SGM)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Stable Diffusion生成式扩散模型代码实现原理

    Stable Diffusion可以使用PyTorch或TensorFlow等深度学习框架来实现。这些框架提供了一系列的工具和函数,使得开发者可以更方便地构建、训练和部署深度学习模型。因此可以使用PyTorch或TensorFlow来实现Stable Diffusion模型。 安装PyTorch:确保您已经安装了PyTorch,并具备基本的PyTorch使用

    2024年03月13日
    浏览(47)
  • 由浅入深理解latent diffusion/stable diffusion(2):扩散生成模型的工作原理

    Diffusion Models专栏文章汇总:入门与实战 前言: 关于如何使用stable diffusion的文章已经够多了,但是由浅入深探索stable diffusion models背后原理,如何在自己的科研中运用stable diffusion预训练模型的博客少之又少。本系列计划写5篇文章,和读者一起遨游diffusion models的世界!本文主

    2024年02月08日
    浏览(54)
  • 扩散模型(Diffusion model)代码详细解读

    代码地址:denoising-diffusion-pytorch/denoising_diffusion_pytorch.py at main · lucidrains/denoising-diffusion-pytorch (github.com) 前向过程和后向过程的代码都在 GaussianDiffusion ​这个类中。​ 有问题可以一起讨论! Why self-conditioning? · Issue #94 · lucidrains/denoising-diffusion-pytorch (github.com) \\\"pred_x0\\\" preforms

    2024年01月25日
    浏览(50)
  • 【CV】Latent diffusion model 扩散模型体验

    稳定扩散模型(Stable Diffusion Model)是一种用于描述信息传播和创新扩散的数学模型。它基于经典的扩散方程,但引入了长尾分布以捕捉现实中存在的大量异常事件。 在稳定扩散模型中,假设某个创新或信息被一个人采纳后,它会以一定的概率被其他人采纳,并通过社交网络

    2024年02月02日
    浏览(46)
  • DiffIR: Efficient Diffusion Model for Image Restoration 利用扩散模型进行图像重建

    •我们提出了DiffIR,一种强大、简单、高效的基于扩散模型的的图像修复方法。与图像生成不同的是,输入图像的大部分像素都是给定的。因此,我们利用DM强大的映射能力来估计一个紧凑的IPR(IR Prior Representation,图像修复的先验表示)来引导图像修复,从而提高DM在图像修

    2024年02月08日
    浏览(52)
  • 扩散模型DDPM开源代码的剖析【对应公式与作者给的开源项目,diffusion model】

    论文地址:https://proceedings.neurips.cc/paper/2020/hash/4c5bcfec8584af0d967f1ab10179ca4b-Abstract.html 项目地址:

    2023年04月08日
    浏览(39)
  • 【扩散模型Diffusion Model系列】0-从VAE开始(隐变量模型、KL散度、最大化似然与AIGC的关系)

    VAE(Variational AutoEncoder),变分自编码器,是一种无监督学习算法,被用于压缩、特征提取和生成式任务。相比于GAN(Generative Adversarial Network),VAE在数学上有着更加良好的性质,有利于理论的分析和实现。 生成式模型(Generative Model)的目标是学习一个模型,从 一个简单的分布 p (

    2024年02月03日
    浏览(52)
  • AIGC原理:扩散模型diffusion综述一:面向视觉计算的扩散模型研究进展

    论文地址:State of the Art on Diffusion Models for Visual Computing 👉 贴一幅SGM(Score-based Generative Model)的原因是宋飏博士将他2019年提出的SMLD模型和2020年Jonathan Ho提出的DDPM采用SDE进行一统这两大极为相似的生成式模型。殊途同归,基于概率的扩散模型DDPM和基于分数的扩散模型SMLD都是

    2024年02月05日
    浏览(53)
  • 扩散模型实战(十):Stable Diffusion文本条件生成图像大模型

     扩散模型实战(一):基本原理介绍 扩散模型实战(二):扩散模型的发展 扩散模型实战(三):扩散模型的应用 扩散模型实战(四):从零构建扩散模型 扩散模型实战(五):采样过程 扩散模型实战(六):Diffusers DDPM初探 扩散模型实战(七):Diffusers蝴蝶图像生成实

    2024年02月03日
    浏览(62)
  • 文字转图片生成系统-Stable diffusion稳定扩散模型

    二话不说先上效果图:(附带代码和模型资源文件)  让它画一个超级汽车在海边。。  近期百度推出了文言一心, 一个能回答问题,能根据文字描述绘制图片的服务,前期可能不太完善出现了一些失误,不过这个idea还是相当不错的   这个东西挺好哈,作为文学创作,生成

    2024年02月09日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包