0


去噪扩散概率模型(DDPM)的简单理解

图1 DDPM 无条件控制生成的图像。 这些不是真实的人、地方、动物或物体。

图1 DDPM 无条件控制生成的图像。 这些不是真实的人、地方、动物或物体。

前言

扩散模型最近在图像生成领域取得了巨大的成功,类似 OpenAI 的 DALL-E 2,Google 的 Imagen,以及 Stability AI 最近发行的能够达到商业级绘画目的的 Stable Diffusion 等,都是基于扩散模型来进行图像生成的。本文对知乎上各位大佬对于扩散模型(特别是 DDPM)的讲解进行了融合,带领大家深入浅出理解扩散和逆扩散过程。

数学基础

  1. 先验概率和后验概率
  • 先验概率:根据以往经验和分析得到的概率。它往往作为由因求果问题中的因出现,如 q ( X t ∣ X t − 1 ) q(X_{t}|X_{t-1}) q(Xt​∣Xt−1​)
  • 后验概率:是指在得到结果的信息后重新修正的概率。是执果寻因问题中的因,如 p ( X t − 1 ∣ X t ) p(X_{t-1}|X_{t}) p(Xt−1​∣Xt​)
  1. KL 散度

对于两个单一变量的高斯分布的

    p
   
  
  
   p
  
 
p 和 

 
  
   
    q
   
  
  
   q
  
 
q 而言,它们的 KL 散度为:

 
  
   
    
     K
    
    
     L
    
    
     (
    
    
     p
    
    
     ,
    
    
     q
    
    
     )
    
    
     =
    
    
     l
    
    
     o
    
    
     g
    
    
     
      
       σ
      
      
       2
      
     
     
      
       σ
      
      
       1
      
     
    
    
     +
    
    
     
      
       
        σ
       
       
        1
       
       
        2
       
      
      
       +
      
      
       (
      
      
       
        μ
       
       
        1
       
      
      
       −
      
      
       
        μ
       
       
        2
       
      
      
       
        )
       
       
        2
       
      
     
     
      
       2
      
      
       
        σ
       
       
        2
       
       
        2
       
      
     
    
    
     −
    
    
     
      1
     
     
      2
     
    
   
   
     KL(p, q)=log\frac{\sigma_{2}}{\sigma_{1}}+\frac{\sigma_{1}^{2}+(\mu_{1}-\mu_{2})^{2}}{2\sigma_{2}^{2}}-\frac{1}{2} 
   
  
 KL(p,q)=logσ1​σ2​​+2σ22​σ12​+(μ1​−μ2​)2​−21​
  1. 参数重整化

若希望从高斯分布

    N
   
   
    (
   
   
    μ
   
   
    ,
   
   
    
     σ
    
    
     2
    
   
   
    )
   
  
  
   N(\mu, \sigma^{2})
  
 
N(μ,σ2) 中采样,可以先从标准分布 

 
  
   
    N
   
   
    (
   
   
    0
   
   
    ,
   
   
    1
   
   
    )
   
  
  
   N(0, 1)
  
 
N(0,1) 采样出 

 
  
   
    z
   
  
  
   z
  
 
z,再得到 

 
  
   
    σ
   
   
    ∗
   
   
    z
   
   
    +
   
   
    μ
   
  
  
   \sigma*z+\mu
  
 
σ∗z+μ,这就是我们想要的采样结果。这样做的好处是将随机性转移到了 

 
  
   
    z
   
  
  
   z
  
 
z 这个常量上,而 

 
  
   
    σ
   
  
  
   \sigma
  
 
σ 和 

 
  
   
    μ
   
  
  
   \mu
  
 
μ 则当作仿射变换网络的一部分。

模型介绍

  1. 模型总览

图2 DDPM 是经过训练以逐渐去除噪声数据的参数化马尔可夫链。我们估计生成过程的参数。

图2 DDPM 是经过训练以逐渐去除噪声数据的参数化马尔可夫链。我们估计生成过程的参数。

DDPM 主要分为两个过程:

  • forward 加噪过程(从右往左)
  • reverse 去噪过程(从左往右)

加噪过程是指向数据集中的真实图像逐步加入高斯噪声,而去噪过程是指对加了噪声的图片逐步去噪,从而还原出真实图像。加噪过程满足一定的数学规律,不需要学习,而去噪过程则采用神经网络模型来学习。这样一来,神经网络模型就可以从一堆杂乱无章的噪声图片中生成真实图片了。

  1. 扩散过程
  • 逐步加噪

给定初始数据分布

     x
    
    
     0
    
   
   
    ∼
   
   
    q
   
   
    (
   
   
    x
   
   
    )
   
  
  
   x_{0} \sim q(x)
  
 
x0​∼q(x),我们定义一个前向扩散过程(forward diffusion process):我们向数据分布中逐步添加高斯噪声,加噪过程持续 

 
  
   
    T
   
  
  
   T
  
 
T 次,产生一系列带噪声的图片 

 
  
   
    
     x
    
    
     1
    
   
   
    ,
   
   
    .
   
   
    .
   
   
    .
   
   
    ,
   
   
    
     x
    
    
     T
    
   
  
  
   x_{1},...,x_{T}
  
 
x1​,...,xT​。在由 

 
  
   
    
     x
    
    
     
      t
     
     
      −
     
     
      1
     
    
   
  
  
   x_{t-1}
  
 
xt−1​ 加噪至 

 
  
   
    
     x
    
    
     t
    
   
  
  
   x_{t}
  
 
xt​ 的过程中,噪声的标准差/方差是以一个在区间 

 
  
   
    (
   
   
    0
   
   
    ,
   
   
    1
   
   
    )
   
  
  
   (0, 1)
  
 
(0,1) 内的固定值 

 
  
   
    
     β
    
    
     T
    
   
  
  
   \beta_{T}
  
 
βT​ 来确定的,均值是以固定值 

 
  
   
    
     β
    
    
     T
    
   
  
  
   \beta_{T}
  
 
βT​ 和当前时刻的图片数据 

 
  
   
    
     x
    
    
     
      t
     
     
      −
     
     
      1
     
    
   
  
  
   x_{t-1}
  
 
xt−1​ 来确定的。以上描述的加噪过程可以写成公式:

 
  
   
    
     q
    
    
     (
    
    
     
      x
     
     
      
       1
      
      
       :
      
      
       T
      
      
       ∣
      
      
       
        x
       
       
        0
       
      
     
    
    
     )
    
    
     :
    
    
     =
    
    
     
      ∏
     
     
      
       t
      
      
       =
      
      
       1
      
     
     
      T
     
    
    
     q
    
    
     (
    
    
     
      x
     
     
      t
     
    
    
     ∣
    
    
     
      x
     
     
      
       t
      
      
       −
      
      
       1
      
     
    
    
     )
    
    
     ,
    
    
    
     q
    
    
     (
    
    
     
      x
     
     
      t
     
    
    
     ∣
    
    
     
      x
     
     
      
       t
      
      
       −
      
      
       1
      
     
    
    
     )
    
    
     :
    
    
     =
    
    
     N
    
    
     (
    
    
     
      x
     
     
      t
     
    
    
     ;
    
    
     
      
       1
      
      
       −
      
      
       
        β
       
       
        t
       
      
     
    
    
     
      x
     
     
      
       t
      
      
       −
      
      
       1
      
     
    
    
     ,
    
    
     
      β
     
     
      t
     
    
    
     I
    
    
     )
    
   
   
     q(x_{1:T|x_{0}}):=\prod_{t=1}^{T}q(x_{t}|x_{t-1}), \quad q(x_{t}|x_{t-1}) := \mathcal N(x_{t};\sqrt{1-\beta_{t}}x_{t-1},\beta_{t}\mathbf{I}) 
   
  
 q(x1:T∣x0​​):=t=1∏T​q(xt​∣xt−1​),q(xt​∣xt−1​):=N(xt​;1−βt​​xt−1​,βt​I)

上式的意思是:由

     x
    
    
     
      t
     
     
      −
     
     
      1
     
    
   
  
  
   x_{t-1}
  
 
xt−1​得到

 
  
   
    
     x
    
    
     t
    
   
  
  
   x_{t}
  
 
xt​的过程,满足分布 

 
  
   
    N
   
   
    (
   
   
    
     x
    
    
     t
    
   
   
    ;
   
   
    
     
      1
     
     
      −
     
     
      
       β
      
      
       t
      
     
    
   
   
    
     x
    
    
     
      t
     
     
      −
     
     
      1
     
    
   
   
    ,
   
   
    
     β
    
    
     t
    
   
   
    I
   
   
    )
   
  
  
   \mathcal N(x_{t};\sqrt{1-\beta_{t}}x_{t-1}, \beta_{t}\mathbf{I})
  
 
N(xt​;1−βt​​xt−1​,βt​I),因此噪声只由 

 
  
   
    
     β
    
    
     T
    
   
  
  
   \beta_{T}
  
 
βT​和

 
  
   
    
     x
    
    
     
      t
     
     
      −
     
     
      1
     
    
   
  
  
   x_{t-1}
  
 
xt−1​来确定,是一个固定值而不是一个可学习的过程。因此,只要有了 

 
  
   
    
     x
    
    
     0
    
   
  
  
   x_{0}
  
 
x0​,并且提前确定每一步的固定值

 
  
   
    
     β
    
    
     1
    
   
   
    ,
   
   
    .
   
   
    .
   
   
    .
   
   
    ,
   
   
    
     β
    
    
     T
    
   
  
  
   \beta_{1},...,\beta_{T}
  
 
β1​,...,βT​,我们就可以推出任意一部的加噪数据 

 
  
   
    
     x
    
    
     1
    
   
   
    ,
   
   
    .
   
   
    .
   
   
    .
   
   
    ,
   
   
    
     x
    
    
     T
    
   
  
  
   x_{1},...,x_{T}
  
 
x1​,...,xT​。值得注意的是,这里的加噪过程是一个马尔科夫链过程,即当前状态的概率只与上一时刻有关。
  • 加噪结果

随着

    t
   
  
  
   t
  
 
t 的不断增大,最终原始数据 

 
  
   
    
     x
    
    
     0
    
   
  
  
   x_{0}
  
 
x0​ 会逐步失去它的特征。最终当 

 
  
   
    T
   
   
    →
   
   
    ∞
   
  
  
   T\rightarrow\infty
  
 
T→∞时,

 
  
   
    
     x
    
    
     T
    
   
  
  
   x_{T}
  
 
xT​趋近于一个各向同性的高斯分布。从视觉上看,就是将原本一张完好的照片加噪很多步后,图片几乎变成了一张完全时噪声的图片。
  • 任意时刻 x t x_{t} xt​的计算

逐步加噪过程中,我们其实并不需要一步步地从

     x
    
    
     0
    
   
   
    ,
   
   
    
     x
    
    
     1
    
   
   
    ,
   
   
    .
   
   
    .
   
   
    .
   
  
  
   x_{0},x_{1},...
  
 
x0​,x1​,... 去迭代得到 

 
  
   
    
     x
    
    
     t
    
   
  
  
   x_{t}
  
 
xt​。事实上,我们可以直接从 

 
  
   
    
     x
    
    
     0
    
   
  
  
   x_{0}
  
 
x0​ 和固定值序列 

 
  
   
    {
   
   
    
     β
    
    
     T
    
   
   
    ∈
   
   
    (
   
   
    0
   
   
    ,
   
   
    1
   
   
    )
   
   
    
     }
    
    
     
      t
     
     
      =
     
     
      1
     
    
    
     T
    
   
  
  
   \{ \beta_{T}∈(0, 1)\}_{t=1}^{T}
  
 
{βT​∈(0,1)}t=1T​直接计算得到:

 
  
   
    
     q
    
    
     (
    
    
     
      x
     
     
      t
     
    
    
     ∣
    
    
     
      x
     
     
      0
     
    
    
     )
    
    
     =
    
    
     N
    
    
     (
    
    
     
      x
     
     
      t
     
    
    
     ;
    
    
     
      
       
        α
       
       
        t
       
      
      
       ‾
      
     
    
    
     
      x
     
     
      0
     
    
    
     ,
    
    
     (
    
    
     1
    
    
     −
    
    
     
      
       α
      
      
       t
      
     
     
      ‾
     
    
    
     )
    
    
     I
    
    
     )
    
    
   
   
     q(x_{t}|x_{0}) = \mathcal N(x_{t};\sqrt{\overline{\alpha_{t}}}x_{0}, (1-\overline{\alpha_{t}})\mathbf{I}) \\ 
   
  
 q(xt​∣x0​)=N(xt​;αt​​​x0​,(1−αt​​)I)

上式中,

     α
    
    
     t
    
   
   
    =
   
   
    1
   
   
    −
   
   
    
     β
    
    
     t
    
   
  
  
   \alpha_{t}=1-\beta_{t}
  
 
αt​=1−βt​,

 
  
   
    
     
      α
     
     
      t
     
    
    
     ‾
    
   
   
    =
   
   
    
     ∏
    
    
     
      i
     
     
      =
     
     
      1
     
    
    
     T
    
   
   
    
     α
    
    
     i
    
   
  
  
   \overline{\alpha_{t}}=\prod_{i=1}^T\alpha_{i}
  
 
αt​​=∏i=1T​αi​,中间推导过程不再罗列。
  1. 逆扩散过程

如果我们能够将上述过程转换方法,即从

    q
   
   
    (
   
   
    
     x
    
    
     
      t
     
     
      −
     
     
      1
     
    
   
   
    ∣
   
   
    
     x
    
    
     t
    
   
   
    )
   
  
  
   q(x_{t-1}|x_{t})
  
 
q(xt−1​∣xt​)中采样,那么我们就可以从一个随机的高斯分布

 
  
   
    N
   
   
    (
   
   
    0
   
   
    ,
   
   
    I
   
   
    )
   
  
  
   \mathcal N(0, \mathbf{I})
  
 
N(0,I)中重建出一个真实的原始样本,也就是从一个完全杂乱无章的噪声图片中得到一张真实图片。但是,由于需要从完整数据集中找到数据分布,我们没办法简单地预测

 
  
   
    q
   
   
    (
   
   
    
     x
    
    
     
      t
     
     
      −
     
     
      1
     
    
   
   
    ∣
   
   
    
     x
    
    
     t
    
   
   
    )
   
  
  
   q(x_{t-1}|x_{t})
  
 
q(xt−1​∣xt​),因此需要学习一个模型

 
  
   
    
     p
    
    
     θ
    
   
  
  
   p_{\theta}
  
 
pθ​来近似模拟这个条件概率,从而运行逆扩散过程。

 
  
   
    
     
      p
     
     
      θ
     
    
    
     (
    
    
     
      x
     
     
      
       0
      
      
       :
      
      
       T
      
     
    
    
     )
    
    
     :
    
    
     =
    
    
     p
    
    
     (
    
    
     
      x
     
     
      T
     
    
    
     )
    
    
     
      ∏
     
     
      
       t
      
      
       =
      
      
       1
      
     
     
      T
     
    
    
     
      p
     
     
      θ
     
    
    
     (
    
    
     
      x
     
     
      
       t
      
      
       −
      
      
       1
      
     
    
    
     ∣
    
    
     
      x
     
     
      t
     
    
    
     )
    
    
     ,
    
    
    
     
      p
     
     
      θ
     
    
    
     (
    
    
     
      x
     
     
      
       t
      
      
       −
      
      
       1
      
     
    
    
     ∣
    
    
     
      x
     
     
      t
     
    
    
     )
    
    
     :
    
    
     =
    
    
     N
    
    
     (
    
    
     
      x
     
     
      
       t
      
      
       −
      
      
       1
      
     
    
    
     ;
    
    
     
      μ
     
     
      
       θ
      
      
       (
      
      
       
        x
       
       
        t
       
      
      
       ,
      
      
       t
      
      
       )
      
      
       ,
      
      
       
        ∑
       
       
        θ
       
      
      
       (
      
      
       
        x
       
       
        t
       
      
      
       ,
      
      
       t
      
      
       )
      
     
    
    
     )
    
   
   
     p_{\theta}(x_{0:T}):=p(x_{T})\prod_{t=1}^{T}p_{\theta}(x_{t-1}|x_{t}), \quad p_{\theta}(x_{t-1}|x_{t}):=\mathcal N(x_{t-1};\mu_{\theta(x_{t},t),\sum_{\theta}(x_{t},t)}) 
   
  
 pθ​(x0:T​):=p(xT​)t=1∏T​pθ​(xt−1​∣xt​),pθ​(xt−1​∣xt​):=N(xt−1​;μθ(xt​,t),∑θ​(xt​,t)​)

要点分析

正向的扩散过程

  • 扩散过程时逐步加噪的过程
  • 扩散过程符合马尔科夫假设
  • 每一步的噪声都是高斯噪声
  • 加噪是用方差参数来控制的(预定义的超参数)
  • 正向扩散过程属于无参模型(不需要进行学习)
  • 该过程支持在任意步长采样(方便后续的训练)

逆向的扩散过程

  • 从高斯噪声中采样,学习一个模型估计真实的条件概率分布(从上一状态到下一状态的条件概率模型)
  • 也可以直接计算任意状态的分布,因此可以直接采样,然后和真实图像计算均方误差
  • 用一个 U-Net 结构来对 t t t 时刻的噪声进行预测
  • 逆过程的均值需要模型预测(有参),但方差采用了常数项(无参,当然有工作将其改进成有参也同样 work)

伪代码

在这里插入图片描述

相关论文

标题简称出版评语Denoising Diffusion Probabilistic ModelsDDPMNIPS 2020开山之作Denoising Diffusion Implicit ModelsDDIMICLR 2021采样提速Improved denoising diffusion probabilistic models\ICML 2021在保证高图像质量的同时提升对数似然Diffusion Models Beat GANs on Image Synthesis\NIPS 2021Diffusion Models VS. GANs(提出了带条件的扩散模型)Classifier-Free Diffusion Guidance\NIPS 2021引入等价结构替换分类器引导Hierarchical Text-Conditional Image Generation with CLIP LatentsDALL-E 2NIPS 2022OpenAI 文本生成图像Photorealistic Text-to-Image Diffusion Models with Deep Language UnderstandingImagenNIPS 2022Google 文本生成图像High-Resolution Image Synthesis with Latent Diffusion ModelsLDMCVPR 2022采样提速

参考

  • DDPM解读(一)| 数学基础,扩散与逆扩散过程和训练推理方法
  • diffusion model最近在图像生成领域大红大紫,如何看待它的风头开始超过GAN?
  • 基于扩散模型的文本引导图像生成算法
  • 生成扩散模型漫谈(一):DDPM = 拆楼 + 建楼
  • 生成扩散模型漫谈(二):DDPM = 自回归式VAE
  • Diffusion Model一发力,GAN就过时了?

本文转载自: https://blog.csdn.net/qq_42951560/article/details/126606685
版权归原作者 Xavier Jiezou 所有, 如有侵权,请联系我们删除。

“去噪扩散概率模型(DDPM)的简单理解”的评论:

还没有评论