0%

论文阅读[粗读]-Improved Denoising Diffusion Probabilistic Models

这篇论文探索了DDPM对于NLL指标效果不好的原因,并且从实际训练的角度给出了很多可行的改进。

这篇论文是21年的NIPS,作者来自OpenAI,其实就是后面GLIDE的作者。我理解大概是OpenAI看到了DDPM的论文,然后用”财大气粗“的方式来了一波复现和改进。这篇论文其实更偏向于分析性文章。另外,这篇论文的方法的代码和复现性很好。

发现一个讲IDDPM代码的是视频

本文大概探索了这个几个问题:

  • DDPM的训练object
  • $\beta_t$的选取
  • 训练的采样方法
  • DDPM模型的可扩展性

Denoising Diffusion Probabilistic Models

这里重新梳理了一遍DDPM,我就说几个新颖的地方

Definition

作者写出了$L_{VLB}$的形式

可以看出中间的项都是KL散度,可以通过前后两个高斯分布的均值和方差直接计算出来:

  • 正常的DDPM模型$p_\theta$模型的均值由模型得出,而方差是确定性的
  • $q(x_{t-1} | x_t, x_0)$的均值方差均可以被代数表示

Training in Practice

这一部分,作者说到了三种模型目标:

  • 生成 $\mu\theta(x_t,t)$,预测$x{t-1}$的均值
  • 预测$x0$,采样时根据公式10线性拟合出$x{t-1}$进行去噪
  • 预测加噪时的噪声$\epsilon$,去噪根据下式和公式10拟合出$x_{t-1}$

DDPM在训练过程中使用最后一种,表现最好

作者把$L_{VLB}$进行了一波reweight,得出下式作为训练loss进行训练

同时,作者说到在predict阶段,使用下面两种方差效果很接近

  • $\sigma_t^2 = \beta_t$
  • $\sigma_t^2 = \tilde\beta_t$

Improving the Log-likelihood

这里作者提到Log-likelihood这个指标在图像生成也很重要,但DDPM在这个指标的效果不好(虽然FID不错)。

learning $\Sigma_\theta(x_t,t)$

作者思考为什么DDPM的两个方差效果接近

  • 图一可以发现两种方差只在$t$很小的时候有差距,别的时候基本一致

  • 图二可以发现$t$小的时候对NLL的影响是最大的

综合上面观点,作者觉得NLL效果差的重要原因就是对方差的估计有偏差(上面两种$\sigma$都是估计的形式)。因此作者想要找到更好的方差,作者希望通过网络拟合它,看做两种$\sigma$的拟合

其中v是可学习的参数。作者在这里没有对v的范围做限制,但实际训练还是控制在0-1内。说明DDPM作者选取的两个估计还是很靠谱的

想要学习这个v,就只能把loss直接表示成$L_{VLB}$,才能反向传播到v,因此作者选择了最终的loss函数

其中$\lambda=0.001$

Improving the Noise Schedule

这一部分,作者探索了$\beta$的选取

DDPM使用linear来选取,作者采用新的cosine的公式选取

这中选取方式比linear更稳定。同时作者指出,类似cosine的这种形状的,最后效果都差不多

Reducing Gradient Noise

第三个改进是让训练更稳定

作者发现直接优化$L{VLB}$的训练非常不稳定,比起优化$L{simple}$。作者发现这是由于$L_{VLB}$参数对梯度更分散。

进一步分析,发现是在训练时平均的选取t导致训练额外的噪声,实际上的选取应该是:

对于每个t,在训练过程中都可以维护$L_t$,只要训练开始一段时间以后。

  • 先平均选取t,直到每个t都有10个$L_t$的历史数据为止
  • 接下来,按照前10个历史数据的平均作为目前$L_t$情况的估计,进而带入公式来采样下一个t的选取

最终的训练变得很稳定,如上图的绿线

Improving Sampling Speed

这一部分提到了可以加速采样

这里主要对比的是DDIM,方法也差不多:采样一个$1,2,…T$的长度为K子序列进行sample

可以发现,DDIM的没有IDDPM好:

  • DDIM没有做IDDPM里这些改进。
  • 作者提到没法做改进,这是因为DDIM的公式里的方差项没了

    Scaling Model Size

这一部分是分析DDPM模型在加大size以后会不会变得更好,因此作者直接加参数

  • FID得分和模型的参数(计算量)基本呈线性关系。满足power law,因此扩大规模是个好选择
  • NLL得分不满足线性关系,扩大规模效果不好,可能原因有:
    • 很快过拟合
    • loss不稳定
    • 作者没有直接优化降低NLL用的$L{VLB}$,而是一个$L{\text{hybrid}}$

我的思考

  • 总体而言,这篇文章更像是分析性文章,复习笔记。主要方法还是DDPM。
  • OpenAI研究员解决问题的眼光真的很高明呀,尤其是关于改变t选取和分析scale能力这一部分。