来自 论文《 Denoising Diffusion Probabilistic Model》(DDPM)
 论文链接: https://arxiv.org/abs/2006.11239
 Hung-yi Lee 课件整理
文章目录
- 一、图像生成模型本质上的共同目标
 - 二、最大似然估计
 - 三、和VAE的关联
 - 四、概率计算
 
一、图像生成模型本质上的共同目标
 
图像生成模型共同的特征是,在输入端有一个简单的分布,从里面sample出一个向量出来,然后把这个向量输入到神经网络里面,这个神经网络我们用G来表示,它的输入是x,输出是z,这个x就是一张图片,我们每次从这个简单的分布里面sample一个向量出来,通过神经网络把它变成一张图片,图中标记了四个图片。这些图片会组成一个十分复杂的分布,右边绿色的形状表示。而我们期待的是找到一个神经网络,使得形成的分布和真实图片形成的分布(蓝色形状表示)越接近越好。
 
通常我们的任务还需要一段输入的文字描述,我们称之为Condition,生成的图片是根据condition产生的图片,但是它仍然是一个分布,目标一样是让产生的分布和真实的分布越接近越好,所以有没有这个Condition,原理上没有本质的差别,下面的讲解暂时不考虑Condition,这样表达式更简洁,便于理解。
二、最大似然估计
 我们期望绿色的分布和蓝色的分布越接近越好,但是怎么衡量呢,多数的深度学习模型都采用最大似然估计。 
假设神经网络的参数用 
     
      
       
       
         θ 
        
       
      
        \theta 
       
      
    θ表示,通过这个神经网络产生的分布我们用 
     
      
       
        
        
          P 
         
        
          θ 
         
        
       
      
        P_{\theta } 
       
      
    Pθ 来表示,真正的分布我们用 
     
      
       
        
        
          P 
         
         
         
           d 
          
         
           a 
          
         
           t 
          
         
           a 
          
         
        
       
      
        P_{data } 
       
      
    Pdata 来表示。
 首先我们从 
     
      
       
        
        
          P 
         
        
          θ 
         
        
       
      
        P_{\theta } 
       
      
    Pθ 里面sample出 
     
      
       
        
        
          x 
         
        
          1 
         
        
       
      
        x_{1} 
       
      
    x1 到 
     
      
       
        
        
          x 
         
        
          m 
         
        
       
      
        x_{m} 
       
      
    xm。
我们通过输入 
     
      
       
        
        
          x 
         
        
          i 
         
        
       
      
        x^{i} 
       
      
    xi来计算 
     
      
       
        
        
          P 
         
        
          θ 
         
        
       
         ( 
        
        
        
          x 
         
        
          i 
         
        
       
         ) 
        
       
      
        P_{\theta }(x^{i}) 
       
      
    Pθ(xi)是十分复杂的,复杂的难以想象。但是没有关系,我们先假设可以做到,可以算出产生这张图片的概率。
 我们需要找一个 
     
      
       
       
         θ 
        
       
      
        \theta 
       
      
    θ使得 
     
      
       
        
        
          P 
         
        
          θ 
         
        
       
         ( 
        
        
        
          x 
         
        
          i 
         
        
       
         ) 
        
       
      
        P_{\theta }(x^{i}) 
       
      
    Pθ(xi)最大,那么目标函数如右边公式所示。
 我们需要学习到的使得 
     
      
       
        
        
          P 
         
        
          θ 
         
        
       
         ( 
        
        
        
          x 
         
        
          i 
         
        
       
         ) 
        
       
      
        P_{\theta }(x^{i}) 
       
      
    Pθ(xi)最大的 
     
      
       
       
         θ 
        
       
      
        \theta 
       
      
    θ就是 
     
      
       
        
        
          θ 
         
        
          ∗ 
         
        
       
      
        \theta^* 
       
      
    θ∗。
 
接着前面的讲解,
 第二行,我们对 
     
      
       
        
        
          P 
         
        
          θ 
         
        
       
         ( 
        
        
        
          x 
         
        
          i 
         
        
       
         ) 
        
       
      
        P_{\theta }(x^{i}) 
       
      
    Pθ(xi)做取对数操作,对结果没有影响,为了方便计算。
 第三行,对数计算,把求积转换为求和,这个式子近似于 从 
     
      
       
        
        
          P 
         
         
         
           d 
          
         
           a 
          
         
           t 
          
         
           a 
          
         
        
       
      
        P_{data } 
       
      
    Pdata中取出 
     
      
       
       
         x 
        
       
      
        x 
       
      
    x, 然后计算 
     
      
       
        
        
          P 
         
        
          θ 
         
        
       
         ( 
        
       
         x 
        
       
         ) 
        
       
      
        P_{\theta }(x) 
       
      
    Pθ(x)取对数,在计算 
     
      
       
       
         x 
        
       
      
        x 
       
      
    x从 
     
      
       
        
        
          P 
         
         
         
           d 
          
         
           a 
          
         
           t 
          
         
           a 
          
         
        
       
      
        P_{data } 
       
      
    Pdata中取出的期望。
 第四行,这个式子等同于对 
     
      
       
       
         x 
        
       
      
        x 
       
      
    x做积分,这里没有好解释的,右边减去的部分有点令人匪夷所思,这一项不会影响我们的结果,对 
     
      
       
       
         θ 
        
       
      
        \theta 
       
      
    θ不产生影响,只和data本身有关,但是加入这一项有一个好处,可以进行后续的合并。
 第五行,合并后得到这一步,这一项正好是 
     
      
       
        
        
          P 
         
        
          θ 
         
        
       
      
        P_{\theta } 
       
      
    Pθ 和 
     
      
       
        
        
          P 
         
         
         
           d 
          
         
           a 
          
         
           t 
          
         
           a 
          
         
        
       
      
        P_{data} 
       
      
    Pdata的KL Divergence。
KL Divergence越大表示这两个分布的差异越大。这样我们可以看到最大似然估计和最小化KL Divergence是等价的。
三、和VAE的关联
 
这里之所以讲VAE是为了说明其实它和Diffusion model非常相似,之前也提到过,很多在VAE里面推导过的东西在Diffusion model里面是不需要再推导的。
按理说我们要定义 
     
      
       
        
        
          P 
         
        
          θ 
         
        
       
         ( 
        
       
         x 
        
       
         ) 
        
       
      
        P_{\theta }(x) 
       
      
    Pθ(x)应该写成右边第一个式子,
  
     
      
       
       
         P 
        
       
         ( 
        
       
         z 
        
       
         ) 
        
       
      
        P(z) 
       
      
    P(z)是从原始分布计算出来的,很容易得到,但是后面的部分怎么办,如果我们按照第二行的式子进行处理的话这样算出来的概率几乎都是0了。
实际上在VAE里面是这样假设的,假设输入一个z输出是G(z),G(z)实际上是高斯分布的均值,这样我们就可以用右边的式子近似代替。
 
通常我们需要最小化的是 
     
      
       
       
         P 
        
       
         ( 
        
       
         x 
        
       
         ) 
        
       
      
        P(x) 
       
      
    P(x)的下界。
 第一行,这里的 
     
      
       
       
         q 
        
       
         ( 
        
       
         z 
        
       
         ∣ 
        
       
         x 
        
       
         ) 
        
       
      
        q(z\mid x ) 
       
      
    q(z∣x)是什么并不重要;
 第二行,分解展开 
     
      
       
       
         P 
        
       
         ( 
        
       
         x 
        
       
         ) 
        
       
      
        P(x) 
       
      
    P(x);然后在分子分母同时乘以 
     
      
       
       
         q 
        
       
         ( 
        
       
         z 
        
       
         ∣ 
        
       
         x 
        
       
         ) 
        
       
      
        q(z\mid x ) 
       
      
    q(z∣x);
 第三行,log相乘拆成相加,第二项是 
     
      
       
       
         q 
        
       
         ( 
        
       
         z 
        
       
         ∣ 
        
       
         x 
        
       
         ) 
        
       
      
        q(z\mid x ) 
       
      
    q(z∣x)和 
     
      
       
       
         P 
        
       
         ( 
        
       
         z 
        
       
         ∣ 
        
       
         x 
        
       
         ) 
        
       
      
        P(z\mid x ) 
       
      
    P(z∣x)的KL divergence,而且这一项一定是正数;
 第四行,这个积分形式可以写成期望的形式,这就是这个概率的下界,即下限。我们要最大化的就是这个下限。
 在VAE里面 
     
      
       
       
         q 
        
       
         ( 
        
       
         z 
        
       
         ∣ 
        
       
         x 
        
       
         ) 
        
       
      
        q(z\mid x ) 
       
      
    q(z∣x)实际上就是Encode。
四、概率计算
 
现在来看看 
     
      
       
        
        
          P 
         
        
          θ 
         
        
       
         ( 
        
       
         x 
        
       
         ) 
        
       
      
        P_{\theta }(x) 
       
      
    Pθ(x)是怎么计算的。
 生成图片的过程如图所示,可以把Denoise的过程想成是产生一个高斯分布的均值,如果 
     
      
       
        
        
          x 
         
         
         
           t 
          
         
           − 
          
         
           1 
          
         
        
       
      
        x_{t-1} 
       
      
    xt−1和产生的分布很接近,那么这个概率就很大,反之很小。
  
     
      
       
        
        
          x 
         
        
          0 
         
        
       
      
        x_{0} 
       
      
    x0被产生的概率就可以用下面这个很长的式子表示,从 
     
      
       
        
        
          x 
         
        
          1 
         
        
       
      
        x_{1} 
       
      
    x1到 
     
      
       
        
        
          x 
         
        
          T 
         
        
       
      
        x_{T} 
       
      
    xT对所有的可能做积分。
 
DDMP和VAE的下限其实是一样的,推导的过程也是一模一样。
 唯一的不同就是把一些符号换了一下,
 把 
     
      
       
       
         x 
        
       
      
        x 
       
      
    x换成了 
     
      
       
        
        
          x 
         
        
          0 
         
        
       
      
        x_{0} 
       
      
    x0,
 把 
     
      
       
       
         q 
        
       
         ( 
        
       
         z 
        
       
         ∣ 
        
       
         x 
        
       
         ) 
        
       
      
        q(z\mid x) 
       
      
    q(z∣x)换成了 
     
      
       
       
         q 
        
       
         ( 
        
        
        
          x 
         
        
          1 
         
        
       
         : 
        
        
        
          x 
         
        
          T 
         
        
       
         ∣ 
        
        
        
          x 
         
        
          0 
         
        
       
         ) 
        
       
      
        q(x_{1} :x_{T} \mid x_{0} ) 
       
      
    q(x1:xT∣x0),
 把 
     
      
       
       
         P 
        
       
         ( 
        
       
         x 
        
       
         ∣ 
        
       
         z 
        
       
         ) 
        
       
      
        P(x\mid z) 
       
      
    P(x∣z)换成了 
     
      
       
       
         P 
        
       
         ( 
        
        
        
          x 
         
        
          0 
         
        
       
         : 
        
        
        
          x 
         
        
          T 
         
        
       
         ) 
        
       
      
        P(x_{0} :x_{T} ) 
       
      
    P(x0:xT)。
 VAE里面的Encoder和DDPM里面的forward process也是对应的。
最下面给出了 
     
      
       
       
         q 
        
       
         ( 
        
        
        
          x 
         
        
          1 
         
        
       
         : 
        
        
        
          x 
         
        
          T 
         
        
       
         ∣ 
        
        
        
          x 
         
        
          0 
         
        
       
         ) 
        
       
      
        q(x_{1} :x_{T} \mid x_{0} ) 
       
      
    q(x1:xT∣x0)的计算公式。
 下一篇博客会进一步解释这个公式具体的计算方法。


















