0


生成式 AI - Diffusion 模型的数学原理(4)

来自 论文《 Denoising Diffusion Probabilistic Model》(DDPM)
论文链接: https://arxiv.org/abs/2006.11239
Hung-yi Lee 课件整理

文章目录

一、

     q 
    
   
     ( 
    
    
    
      x 
     
    
      t 
     
    
   
     ∣ 
    
    
    
      x 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     ) 
    
   
  
    q(x_{t} \mid x_{t-1} ) 
   
  
q(xt​∣xt−1​)的计算


第一行的图示给出了

      x 
     
    
      t 
     
    
   
  
    x_{t} 
   
  
xt​ 和 
 
  
   
    
    
      x 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
  
    x_{t-1} 
   
  
xt−1​的关系,这里的 
 
  
   
    
    
      β 
     
    
      t 
     
    
   
  
    \beta_{t} 
   
  
βt​是事先准备好的值,从 
 
  
   
    
    
      β 
     
    
      1 
     
    
   
  
    \beta_{1} 
   
  
β1​ 到 
 
  
   
    
    
      β 
     
    
      T 
     
    
   
  
    \beta_{T} 
   
  
βT​,这个值相当于超参数,是可以调整的。

噪声是从一个均值为0,方差为1的高斯分布中sample出来的。
实际上这里的

     q 
    
   
     ( 
    
    
    
      x 
     
    
      t 
     
    
   
     ∣ 
    
    
    
      x 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     ) 
    
   
  
    q(x_{t} \mid x_{t-1} ) 
   
  
q(xt​∣xt−1​)服从高斯分布,它的均值是它的均值是 
 
  
   
    
     
     
       1 
      
     
       − 
      
      
      
        β 
       
      
        t 
       
      
     
    
   
     ∗ 
    
    
    
      x 
     
    
      t 
     
    
   
  
    \sqrt{1-\beta_{t} } *x_{t} 
   
  
1−βt​​∗xt​,方差是 
 
  
   
    
     
     
       β 
      
     
       t 
      
     
    
   
  
    \sqrt{\beta_{t} } 
   
  
βt​​。

要怎么计算

     q 
    
   
     ( 
    
    
    
      x 
     
    
      t 
     
    
   
     ∣ 
    
    
    
      x 
     
    
      0 
     
    
   
     ) 
    
   
  
    q(x_{t} \mid x_{0} ) 
   
  
q(xt​∣x0​)呢,我们想象中是图片下面表示的这样,是一步一步依次产生的。

实际上这个概率是可以直接计算出来的。

依照上面,我们把

      x 
     
    
      1 
     
    
   
  
    x_{1} 
   
  
x1​和 
 
  
   
    
    
      x 
     
    
      2 
     
    
   
  
    x_{2} 
   
  
x2​分别用图示表示出来,他们彼此的噪声的分布是相互独立的,没有关系的。

接下来我们把第一行的

      x 
     
    
      1 
     
    
   
  
    x_{1} 
   
  
x1​带入第二行的 
 
  
   
    
    
      x 
     
    
      1 
     
    
   
  
    x_{1} 
   
  
x1​;

这样得到

      x 
     
    
      2 
     
    
   
  
    x_{2} 
   
  
x2​和 
 
  
   
    
    
      x 
     
    
      0 
     
    
   
  
    x_{0} 
   
  
x0​的表达式,也就是第三行。

这样我们得到了

      x 
     
    
      2 
     
    
   
  
    x_{2} 
   
  
x2​的表示,后面两项的分布是一样的,只是系数不同,我们可以只采样一次,把系数合并就可以了,得到黄色噪声图前面的系数。


依此类推,整个过程可以全部合起来,得到

      x 
     
    
      t 
     
    
   
  
    x_{t} 
   
  
xt​的表示。

为了简化,我们把

      α 
     
    
      t 
     
    
   
  
    \alpha _{t} 
   
  
αt​写成 
 
  
   
   
     1 
    
   
     − 
    
    
    
      β 
     
    
      t 
     
    
   
  
    1-\beta _{t} 
   
  
1−βt​, 把 
 
  
   
    
     
     
       α 
      
     
       ˉ 
      
     
    
      t 
     
    
   
  
    \bar{ \alpha }_{t} 
   
  
αˉt​写成 
 
  
   
    
    
      α 
     
    
      1 
     
    
    
    
      α 
     
    
      2 
     
    
   
     . 
    
   
     . 
    
   
     . 
    
    
    
      α 
     
    
      t 
     
    
   
  
    \alpha _{1}\alpha _{2}...\alpha _{t} 
   
  
α1​α2​...αt​, 这样就可以把红色方框里面的数值用方框下面的符号简化表达。

二、DDPM:lower bound of logP(x)

我们需要优化的是右上角方框,经过推导可以转换为最下面的式子,这个过程来自右下角的论文。

我们把上一页ppt中最后得到的公式放大来分析一下。
一共是3项,

  • 第一项是概率分布 q ( x 1 ∣ x 0 ) q(x_{1}\mid x_{0} ) q(x1​∣x0​)对 l o g P ( x 0 ∣ x 1 ) logP(x_{0}\mid x_{1}) logP(x0​∣x1​)取期望值,
  • 第二项是 q ( x T ∣ x 0 ) q(x_{T}\mid x_{0} ) q(xT​∣x0​)和 P ( x T ) P(x_{T}) P(xT​)的KL散度,这一项其实是不需要管的,它和网络的参数没有关系,我们的目标是找到合适的 θ \theta θ来最小化这个式子,这一项和 θ \theta θ和网络结构没有关系, P ( x T ) P(x_{T}) P(xT​)是sample出来的全部是杂训的图片,这个 q ( x T ∣ x 0 ) q(x_{T}\mid x_{0} ) q(xT​∣x0​)是diffusion过程,是人工定义的,和网络也没有关系。
  • 第三项,先看求和后面的表达,概率分布 q ( x t ∣ x 0 ) q(x_{t}\mid x_{0} ) q(xt​∣x0​)对两个分布取KL散度之后的期望值。其中第二项 P ( x t − 1 ∣ x t ) P(x_{t-1}\mid x_{t}) P(xt−1​∣xt​)是和网络结构有关系的,要十分在意,第一项是需要想办法计算出来的。

第三项后半部分和第一项十分相似,所以这里不再细讲第一项,来仔细看看第三项。

我们先来看看蓝色方框里面的

     q 
    
   
     ( 
    
    
    
      x 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     ∣ 
    
    
    
      x 
     
    
      t 
     
    
   
     , 
    
    
    
      x 
     
    
      0 
     
    
   
     ) 
    
   
  
    q(x_{t-1}\mid x_{t},x_{0} ) 
   
  
q(xt−1​∣xt​,x0​),这一项乍一看不容易,我们之前知道怎么计算  
 
  
   
   
     q 
    
   
     ( 
    
    
    
      x 
     
    
      t 
     
    
   
     ∣ 
    
    
    
      x 
     
    
      0 
     
    
   
     ) 
    
   
  
    q(x_{t}\mid x_{0} ) 
   
  
q(xt​∣x0​), 
 
  
   
   
     q 
    
   
     ( 
    
    
    
      x 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     ∣ 
    
    
    
      x 
     
    
      0 
     
    
   
     ) 
    
   
  
    q(x_{t-1}\mid x_{0} ) 
   
  
q(xt−1​∣x0​), 
 
  
   
   
     q 
    
   
     ( 
    
    
    
      x 
     
    
      t 
     
    
   
     ∣ 
    
    
    
      x 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     ) 
    
   
  
    q(x_{t}\mid x_{t-1} ) 
   
  
q(xt​∣xt−1​),但是我们不会直接计算 
 
  
   
   
     q 
    
   
     ( 
    
    
    
      x 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     ∣ 
    
    
    
      x 
     
    
      t 
     
    
   
     , 
    
    
    
      x 
     
    
      0 
     
    
   
     ) 
    
   
  
    q(x_{t-1}\mid x_{t},x_{0} ) 
   
  
q(xt−1​∣xt​,x0​)。

下面我们用图示表达了这一项的具体含义,就是给定

      x 
     
    
      0 
     
    
   
  
    x_{0} 
   
  
x0​, 
 
  
   
    
    
      x 
     
    
      t 
     
    
   
  
    x_{t} 
   
  
xt​的情况下求 
 
  
   
    
    
      x 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
  
    x_{t-1} 
   
  
xt−1​的分布。

实际上我们把这个式子展开正好可以用之前提到的这三项计算这个结果。

我们知道

     q 
    
   
     ( 
    
    
    
      x 
     
    
      t 
     
    
   
     ∣ 
    
    
    
      x 
     
    
      0 
     
    
   
     ) 
    
   
  
    q(x_{t}\mid x_{0} ) 
   
  
q(xt​∣x0​), 
 
  
   
   
     q 
    
   
     ( 
    
    
    
      x 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     ∣ 
    
    
    
      x 
     
    
      0 
     
    
   
     ) 
    
   
  
    q(x_{t-1}\mid x_{0} ) 
   
  
q(xt−1​∣x0​), 
 
  
   
   
     q 
    
   
     ( 
    
    
    
      x 
     
    
      t 
     
    
   
     ∣ 
    
    
    
      x 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     ) 
    
   
  
    q(x_{t}\mid x_{t-1} ) 
   
  
q(xt​∣xt−1​)这三项都是已知的高斯分布,经过这样一番推倒后我们看到 
 
  
   
   
     q 
    
   
     ( 
    
    
    
      x 
     
     
     
       t 
      
     
       − 
      
     
       1 
      
     
    
   
     ∣ 
    
    
    
      x 
     
    
      t 
     
    
   
     , 
    
    
    
      x 
     
    
      0 
     
    
   
     ) 
    
   
  
    q(x_{t-1}\mid x_{t},x_{0} ) 
   
  
q(xt−1​∣xt​,x0​)实际上也是一个高斯分布。

我们可以看到这个高斯分布的均值和方差分别在图中显示,可以看出这个均值是

      x 
     
    
      0 
     
    
   
  
    x_{0} 
   
  
x0​和 
 
  
   
    
    
      x 
     
    
      t 
     
    
   
  
    x_{t} 
   
  
xt​的一个加权组合的结果。

接下来我们看看这个KL散度怎么计算,两个高斯分布的KL散度是可以用公式解的,下面黑色方框。
第一项的均值和方差我们已经得到了,他们是固定的;第二项的方差也是固定的,但是均值是取决于denoise的模型,我们为了让这两个分布约接近越好,最简单的方法就是把右边的这个均值挪到和左边图形里均值一样的位置。

黄色图形的均值我们知道怎么计算了,蓝色图形的均值是从Denoise模型中输出的,实际上我们要做的就是训练这个Denoise模型,让它输出的分布的均值和给出的均值约接近越好。

我们继续看看红色方框要怎么最小化,给定

      x 
     
    
      0 
     
    
   
  
    x_{0} 
   
  
x0​的条件下,需要把 
 
  
   
    
    
      x 
     
    
      t 
     
    
   
  
    x_{t} 
   
  
xt​sample出来,右边图片直观地表达了这个过程。

接下来Denoise模型要做的是,输入

      x 
     
    
      t 
     
    
   
  
    x_{t} 
   
  
xt​和 
 
  
   
   
     t 
    
   
  
    t 
   
  
t,输出的结果要和KL散度的第一项的均值约接近越好,这个均值是 
 
  
   
    
    
      x 
     
    
      0 
     
    
   
  
    x_{0} 
   
  
x0​和 
 
  
   
    
    
      x 
     
    
      t 
     
    
   
  
    x_{t} 
   
  
xt​的加权组合。

再来看看Denoise出来的这个结果,这里的

      x 
     
    
      0 
     
    
   
  
    x_{0} 
   
  
x0​和 
 
  
   
    
    
      x 
     
    
      t 
     
    
   
  
    x_{t} 
   
  
xt​的关系我们是知道的,图片左边给出了,这样我们把 
 
  
   
    
    
      x 
     
    
      0 
     
    
   
  
    x_{0} 
   
  
x0​带入上面这个式子然后进过化解得到最后这个表达。

我们看这个式子里面只有

     ε 
    
   
  
    \varepsilon 
   
  
ε是网络需要预测的,其他几项都是常数,事先设定好的,计算出来就可以。

我们发现这个式子和之前sampling算法里面的式子是一模一样的。

讲到这里还没有解决的问题是,为什么这里还要多加一个噪声。Denoise模型算出来的是高斯分布的均值,做sample的时候考虑需要加上一个噪声,代表说考虑高斯分布的方差这一项。为什么不直接取均值呢,下一篇博客详解。


本文转载自: https://blog.csdn.net/qq_30262201/article/details/136157940
版权归原作者 大数据AI笔记 所有, 如有侵权,请联系我们删除。

“生成式 AI - Diffusion 模型的数学原理(4)”的评论:

还没有评论