Back
Featured image of post Denoising Diffusion Probabilistic Models

Denoising Diffusion Probabilistic Models

论文精读第六周 | 2020年 | 作者 Ho,al

This is a note
本文同时是 神经科学22-23秋季 郝荣乔老师课程作业.

前情提要

先简要说明为什么我会选择这样的一篇文章,要求的范围是视觉与美学(visual procession、aesthetic、visual cognition、art),同时这个时期,大量的基于Diffusion Model的文字-图片生成模型工作出现在人们视野中并引起广泛讨论(特别是商业美术从业者,很多朋友因此改变了职业规划)。 从GAN 的时代我就非常关注图像生成模型(爱好画画的缘故),近一个月来的进展给我带来了极大的震撼,我研究并尝试了Midjourney (托管在discord上)、Stable DiffusionDreamStudio、 百度的文心、Waifu DiffusionNovelAiDiffusion

下面列出了几张我使用这些Ai生成的图片。

Midjourney
Midjourney
Waifu Diffusion
Waifu Diffusion
Waifu Diffusion
Waifu Diffusion
DreamStudio
DreamStudio
文心
文心

国庆发现的NovelAiDiffusion,和WD一样也是基于SD,使用要10$/月订阅,所以我拿了别人生成的三张图。非常nb,在我这儿是能通过图灵测试的,我能联想到几个画风类似的画师,但我并不能分辨出来区别。(这个AI当天引起了我们一小撮人关于未来的激烈讨论(失业淘汰、自由画师赚钱吃饭、版权、未来职业形态等等),在惊叹之余都挺受打击,纯粹的画工门槛已经没有意义)

NovelAiDiffusion
NovelAiDiffusion
NovelAiDiffusion
NovelAiDiffusion
NovelAiDiffusion
NovelAiDiffusion

大概几周前我简单的用PS组合了一张艺术摄影和用AI生成的平面素材,制作了下面这张海报。很酷不是么,AI终究会给美术艺术带来第二次摄影冲击, 所以我打算阅读DDPM模型的重要文章。

文章背景

(去噪)扩散模型有两个过程,前向过程(diffusion,不断添加高斯噪声)和反向过程(reverse,去噪过程,用来生成数据),是一个参数化的马尔可夫链。

扩散过程

扩散过程是指的对数据逐渐增加高斯噪音直至数据变成随机噪音的过程。

对于原始数据 $x_0$ ,扩散过程的每一步都是对上一步得到的数据以如下方式增加高斯噪音 ($q(x_t|x_{t-1})$是变分推理引入的用于近似后验分布的分布,可以看我之前的笔记变分自编码器) :
$\beta_t$ 是第$t$ 步采用的方差,DDPM会预先定义好一个线性的方差序列。因此扩散过程可以直接基于$x_0$对任意 $t$ 步的$x_t \thicksim q(x_t|x_0)$进行采样得到:

$\alpha_t = 1-\beta_t \qquad \overline{\alpha}t = \prod^t{i=1}\alpha_i$
$\alpha_t = 1-\beta_t \qquad \overline{\alpha}t = \prod^t{i=1}\alpha_i$

$$q(x_t|x_{0}) = \mathcal{N}(x_{t};\sqrt{\overline{\alpha_t}}x_{0},(1-\overline{\alpha}_t) I)$$

反向过程

反向是从一个随机噪音逐渐去噪以生成一个真实的样本。

这一过程需要我们知道每一步的真实分布 $q(x_{t-1}|x_{t})$,似然地估计这个分布 $p_\theta(x_{t-1}|x_{t})$ 就需要用到整个训练样本,由一系列神经网络参数化的高斯分布 ( 均值和方差由训练网络$\mu_\theta(x_t,t)$和$\Sigma_\theta(x_t,t)$ 给出 ) 组成。

在得知$x_0$时估计条件后验分布$q(x_{t-1}|x_{t},x_0)$: $$q(x_{t-1}|x_{t},x_0) = \mathcal{N}(x_{t-1};\widetilde{\mu}(x_t,x_0),\widetilde{\beta}_t I)$$

推导

根据贝叶斯公式: $$ q(x_{t-1}|x_t,x_0) = q(x_t|x_{t-1},x_0) \frac{q(x_{t-1}|x_0)}{q(x_t|x_0)}$$ 由扩散过程知道 $q(x_t|x_{t-1},x_0) = q(x_t|x_{t-1}) = \mathcal{N}(x_{t};\sqrt{1-\beta_t}x_{t-1},\beta_t I) $ , 也得出了:

$$q(x_t|x_{0}) = \mathcal{N}(x_{t};\sqrt{\bar{\alpha}_t}x_{0},(1-\bar{\alpha}_t) I)$$

$$q(x_{t-1}|x_{0}) = \mathcal{N}(x_{t-1};\sqrt{\bar{\alpha}_{t-1}}x_{0},(1-\bar{\alpha}_{t-1}) I)$$

$$\therefore q(x_{t-1}|x_t,x_0) \varpropto exp(-\frac{1}{2} (\frac{(x_t-\sqrt{\alpha_t} x_{t-1})^2}{\beta_t} +\frac{(x_{t-1}-\sqrt{\bar{\alpha}_{t-1} } x_{0})^2}{1-\bar{\alpha}_{t-1} } - \frac{(x_{t}-\sqrt{\bar{\alpha}_t}x_0)^2}{1-\bar{\alpha}_{t}}))$$

能化成$x_{t-1}$的二次式
能化成$x_{t-1}$的二次式
上面括号最里面等于 $\frac{(x_{t-1}-\widetilde{\mu}_t(x_t,x_0))^2}{\widetilde{\beta}_t}$, 就能得到这两个值的表示。

优化目标

这个设置非常像VAE,通过优化负对数似然的变分下界(ELBO)来进行训练 (最大化log形式的产生真实数据的可能性( $log p_\theta(x)$), 最小化真实后验分布和估计的后验分布的差异(KL散度)),其训练目标是 $-L_{VLB}$:

$$L = -L_{VLB}= \mathbb{E}_{q(x_{1:T}|x_0)}[-log\frac{p_\theta(x_{0:T})}{q(x_{1:T}|x_0)}] = \mathbb{E}_{q(x_{1:T}|x_0)}[log\frac{q(x_{1:T}|x_0)}{p_\theta(x_{0:T})}] $$

这样就得到了论文第三页怼脸上的公式5.

贡献

就是说上面那些,是之前的文章(概念最早是在2015年)提出 Diffusion models 所带来的公式,其网络架构和训练方法也比较简陋。这两年的大部分扩散模型相关工作都是基于两个模型:DDPM和DDIM。

那么这 T+1 个优化目标要怎么算呢?

  • $L_T$ (最后得到的噪音的分布和先验分布的KL散度): 因为将前向过程的方差固定了,这个KL散度没有训练参数,在学习过程该项为常量,忽略。

  • $L_0$ (原始数据重建): 这里用了一个编码器来计算(文章认为这部分简单,留给未来的工作优化)

  • $L_{1:T-1}$ (估计分布 $p_\theta(x_{t-1}|x_{t})$ 和真实后验分布 $q(x_{t-1}|x_{t},x_0)$ 的KL散度) : 希望估计的去噪过程和依赖真实数据的去噪过程近似一致,

    • 首先是会设置固定方差 $\Sigma_\theta(x_t,t) = \sigma^2_t \quad x_0=\mathcal{N}(0,I)$ , 根据文章的实验 $\sigma^2_t = \beta_t$ 还是 $\sigma^2_t = \widetilde{\beta}_t$ 结果都差不多。

    两个高斯分布的KL散度计算结果,推导可见

    原本这个参数在$\mu$底下,预测的是均值,文章重新参数化方程 $$q(x_t|x_{0}) = \mathcal{N}(x_{t};\sqrt{\overline{\alpha_t}}x_{0},(1-\overline{\alpha}_t) I) \to x_t(x_0,\epsilon_t) = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\epsilon_t \quad \epsilon_t \thicksim \mathcal{N}(0,I)$$

    将 $x_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}(x_t-\sqrt{1-\bar{\alpha}_t}\epsilon)$ 代入 $\widetilde{\mu}_t(x_t,x_0)$ 得到:

    因为 $x_t$ 在训练时可以作为输入,所以我们可以重新参数化高斯噪声项 $\epsilon_\theta(x_t,t)$,让它从步$t$时的输入$x_t$学得,这样就从原来的预测均值变为预测高斯噪声。

    代入优化目标可得(上面的$L_{t-1}$ 和下面的 $L_t$ 意义相同,都是代表当 $t \neq 0 、T$ ):

    DDPM近一步对上述目标进行了简化,去掉了权重系数

代码实现

暂时放放

参考

Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme designed by DeathSprout