🗽Denoising Diffusion Probabilistic Models (Part 1)
type
status
date
slug
summary
tags
category
icon
password
“The sculpture is already complete within the marble block, before I start my work. It is already there, I just have to chisel away the superfluous material.” — Michelangelo
目前主流的生成模型有以下几种(‣)

Introduction
论文中描述 diffusion model 为 ”a parameterized Markov chain trained using variational inference to produce samples matching the data after finite time“。这条马尔科夫链反向学习扩散过程(一条逐渐往原始数据里加噪声的马尔科夫链),目的是从完全噪声中还原出原始数据。
论文把加入的噪声看做是 Gaussian noise,那么自然可以用条件概率来建模去噪过程中的转移,即给定当前状态作为条件,通过 condition Gaussian 还原前一时刻的状态。而这个 condition Gaussian 就可以用一个神经网络来 parameterization。

Diffusion models and denoising autoencoders
Model Structure
扩散模型包括两个部分:Forward process 和 Reverse process

- Forward process
从 加噪到 的过程。从 到 的加噪可以描述为
其中, 就是加入的 Gaussian noise,
也就是说, 可以通过采样一个正态分布得到,即状态转移可以用条件概率密度函数 来描述
整个 forward process 可以描述为
一组 称为 variance schedule,是预先定义好的一组 0 到 1 之间的数(逐渐增大,后面会讲)。
- Reverse process
同理,反向过程可以描述为
实际上,整个 forward process 可以简化为一步加噪。我们令 ,将递推式展开,再利用正态分布的性质,可以得到
也就是说,现在我们已经从一张原始图像 通过一步加噪得到了全噪声 ,接下来我们要想办法确定 和 以执行 reverse process(这也是整个流程的关键)。
首先根据贝叶斯公式(逆概的含金量)
其中,三个概率密度函数分别满足
把这三个高斯分布写开,暴力计算一把,可以得到 满足的高斯分布概率密度函数
其中
但很明显这个 reverse process 的状态转移函数有个很大的问题,式子中含有 。我们使用一步加噪公式替换掉这个
带入我们就可以得到
这个式子里唯一的未知数是噪声 ,所以我们用一个神经网络(论文里称为 function approximator) 去预测这个噪声,得到 parameterization 后的 。
整个 Denoise 过程可抽象简化为下图

Loss Function
那么显然,我们的优化目标是让 Noise Predicter 预测的噪声和 ground truth 的噪声尽可能接近, 而 ground truth 就是 forward process 中加入的噪声。
生成模型的优化目标

生成模型可以简化为一个简单分布 (如高斯分布),通过一个神经网络 ,一一映射到图像(或其他)分布 上,目标是是让生成图像的分布和实际图像的分布尽可能接近。衡量二者接近程度一般采用最大似然估计。

更直观一些,生成模型让训练数据分布 映射到一个简单分布(Encoder),再从简单分布映射到观测数据分布 (Decoder),这样做推理时,就只需要在这个简单分布上做采样。
从训练数据分布 中采样一组 ,根据最大似然估计,我们希望这些采样出来的(观察到的)真实数据概率最大,即
根据 ELBO(Evidence Lower Bound),
其中, 称为 evidence(似乎是个定值?), 称为 KL 散度,表征两个概率密度函数的相似程度。最小化 KL 散度可以转化为最大化 ELBO。
挖坑,这里涉及到复杂的数学推导
关于变分推断和 KL 散度
接下来我们盯着损失函数 看,最大化 ELBO 可以转化为最小化 ELBO 的相反数,即
对这个损失函数一通爆算(原论文 Appendix A 给出了详细推导),可以得到
一个个来看这个式子的三个部分。
其中, 是 forward process 的终点, 是 reverse process 的起点,直观来讲就是希望两个高斯噪声尽可能接近,这是显然的
直观来讲是希望 和 尽可能接近,这也是可以通过设置超参数来做到的
现在的问题就聚焦在了 上。这个 KL 散度中,前半部分 由前文公式 1 给出,后半部分 由前文公式 2 定义。两部分实际都是高斯分布,我们有公式可以直接计算两个高斯分布的 KL 散度。
由此我们算一把推出
这里其实将 的方差取了与 相等的值,即 。
最后,在经过一些 离谱的 巧妙的变换,可以最终得到
上面这一系列的数学推导其实就是从数学上描述了为什么是 noise predictor,为什么我们的优化目标是让生成的 noise 和 ground truth 的 noise 尽量接近。比较两个 noise 的接近程度实际上是十分自然的,因此 loss function (实际上是 MSE loss)的推导在实际应用中其实没有太大作用。
Training & Sampling

值的注意的是,论文作者发现不带系数做训练的效果更好,所以在伪代码中没有我们推出的损失函数的系数部分。

由于 ,对 采样可以用如下公式
整个 training 过程可以这样描述
- Randomly select a time step and encode it

- Add noise to image

- Train the UNet

整个 sampling 过程可以这样描述
- Iteratively denoise the image (T = 1000)

- Iteratively denoise the image (T = 999~2)
- Iteratively denoise the image (T = 1)

完整且极为详细的公式推导可以参看 “Understanding Diffusion Models: A Unified Perspective”。
b 站上的讲解视频
一个可视化的 blog(这个博主有多个模型的可视化 blog)
上一篇
Attention Is All You Need
下一篇
Denoising Diffusion Probabilistic Models (Part 2)
Loading...






