初探Diffusion modelDiffusion model生成方法 - Diffusion ModelDiffusion model的发展路径OpenAI
DELL·E(2021.01)

GoogleImagenGLIDE(2021.12)(2022.05)

DELL·E 2(2022.04)

VAE基础

海德堡大学
Runway.ML/stability.AI

DDPM(Ho et al.,2020)
第一篇做work的扩散模型

理论优化
DDIM

Analytic-DPM(2020)(2022)DPM-Solver(2022)……

GuidedDiffusion

Stable Diffusion(2022)

VQGAN(2021)

VAE
Variational Auto-Encoder 2013.12

苏剑林. (Mar. 18, 2018). 《变分自编码器（一）：原来是这么一回事 》[Blog post]. Retrieved from https://kexue.fm/archives/5253

VAE – 分布变换
• 生成样本• 从一个采样的隐变量𝑍生成目标样本𝑋:
𝑋෠ = 𝑔 𝑧• 一般假设Z服从某些分布（正态分布、均匀分布）

VAE – 分布变换
• 如何让生成样本的分布符合真实样本的分布？
• 对于一个真实样本𝑋𝑘 ，假设𝑝 𝑍 𝑋𝑘 符合正态分布• 最小化𝑋෠𝑘 = 𝑔 𝑍 与𝑋𝑘 的重构误差• 相当于对于每一个样本都有一个自己的专属正态分布𝑝 𝑍 𝑋𝑘

VAE – 分布变换
• 如何得到正态分布的参数（均值、方差）？
➢ 直接用两个神经网络去拟合！
𝜇𝑘 = 𝑓1 𝑋𝑘 , log 𝜎𝑘2 = 𝑓2 𝑋𝑘

VAE – 分布标准化2෠෠• 流程：𝑋𝑘 → 𝜇𝑘 , 𝜎𝑘 → 𝑍𝑘 → 𝑋𝑘 → 𝐷 𝑋𝑘 , 𝑋𝑘

• 采样𝑍𝑘 的过程包含噪声𝜎𝑘 ，噪声太大会增加重构难度，噪声太小会让生成模型丧失随机性➢ VAE让所有的𝑝 𝑍 𝑋𝑘 都向标准正态分布看齐，利用KL散度来监督𝑓1 , 𝑓2 ：

VAE – 分布标准化VAE – 训练技巧2෠෠
• 流程：𝑋𝑘 → 𝜇𝑘 , 𝜎𝑘 → 𝑍𝑘 → 𝑋𝑘 → 𝐷 𝑋𝑘 , 𝑋𝑘

• 问题：采样过程不可导➢ 重参数技巧（ reparameterization trick ）• 从𝒩 𝜇, 𝜎 2 中采样一个𝑍，相当于从𝒩(0, 𝑰)中采样一个𝜀，然后让 𝑍 = 𝜇 + 𝜀 ∗ 𝜎。
• 可使采样过程下放到标准正态分布，让全流程可导。

Variational Auto-Encoder 总结• 与以往的AE不同的是，VAE的Encoder是用与计算均值和方差• 重构的过程是希望没噪声的，而KL loss则希望有高斯噪声的DDPM
Denoising Diffusion Probabilistic Models NeruIPS 2020.06
Deep Unsupervised Learning using Nonequilibrium Thermodynamics
ICML 2015.03
苏剑林. (Jun. 13, 2022). 《生成扩散模型漫谈（一）：DDPM = 拆楼 + 建楼 》[Blog post]. Retrieved from https://kexue.fm/archives/9119

DDPM 生成效果

DDPM 生成效果

VAE存在的问题• 从贝叶斯观点来看，VAE同时优化条件分布𝑝θ 𝑥 𝑧 和变分后验𝑝(𝑧|𝑥)生成器• 同时优化两个目标导致候选搜索空间极大，难以优化。

均值方差估计

VAE存在的问题• 怎么把变分后验的搞掉？
• 生成器的目的是为了将标准正态分布的𝑍变成数据分布的𝑋，变分后验的目的是为了将
数据𝑋𝑘 映射到标准正态分布。

﹖有没有什么操作能够在不需要优化的情况下，将某个数据分布映射到标准正态分布？
➢ 利用马尔科夫链的平稳分布性质，构造一个平稳分布为标准正态分布的马尔科夫链即可。
𝑥 = 𝑥0 → 𝑥1 → 𝑥2 → ⋯ → 𝑥𝑇−1 → 𝑥𝑇 = 𝑧• 其中每一小步都可以近似为高斯分布

DDPM 拆楼-建楼• 生成模型类比拆楼：𝑥 = 𝑥0 → 𝑥1 → 𝑥2 → ⋯ → 𝑥𝑇−1 → 𝑥𝑇 = 𝑧

DDPM 拆楼-建楼• VAE中的变分后验优化采用了概率论的采样给替代了𝑥 = 𝑥0 → 𝑥1 → 𝑥2 → ⋯ → 𝑥𝑇−1 → 𝑥𝑇 = 𝑧• 相当于我们得到了很多个pair：{𝑥𝑡−1 , 𝑥𝑡 }，如何构造生成器？

➢ 用生成器模拟拆楼的每一步的逆过程，即建楼的每一步！
𝑥𝑡 → 𝑥𝑡−1
𝑥𝑡−1 = 𝜇 𝑥𝑡
• 重复这一过程就能够从𝑧一步步采样得到𝑥

DDPM 拆楼𝑥 = 𝑥0 → 𝑥1 → 𝑥2 → ⋯ → 𝑥𝑇−1 → 𝑥𝑇 = 𝑧• 对于每一个𝑥𝑡−1 → 𝑥𝑡 :𝑥𝑡 = 𝛼𝑡 𝑥𝑡−1 + 𝛽𝑡 𝜀𝑡 ,𝜀𝑡 ∼ 𝒩 0, 𝑰𝛼𝑡 , 𝛽𝑡 > 0且𝛼𝑡2 + 𝛽𝑡2 = 1

DDPM 拆楼DDPM 建楼• 学模型𝑥𝑡−1 = 𝜇 𝑥𝑡 ，目标为
𝑥𝑡−1 − 𝜇 𝑥𝑡

21
• 重参数技巧：根据𝑥𝑡 = 𝛼𝑡 𝑥𝑡−1 + 𝛽𝑡 𝜀𝑡 ，将𝜇 𝑥𝑡 表示为
𝛼𝑡

ҧ 𝜀𝑡−1• 带入𝑥𝑡 = 𝛼𝑡 𝑥𝑡−1 + 𝛽𝑡 𝜀𝑡 = 𝛼ത𝑡 𝑥0 + 𝛼𝑡 𝛽𝑡−1
ҧ + 𝛽𝑡 𝜀𝑡𝑥𝑡 − 𝛽𝑡 𝜖𝜃 𝑥𝑡 , 𝑡DDPM 建楼• 推导：
2𝑥𝑡−1 − 𝜇 𝑥𝑡

11由𝑥𝑡 = 𝛼𝑡 𝑥𝑡−1 + 𝛽𝑡 𝜀𝑡 ，我们可以设计𝜇 𝑥𝑡 = 𝛼 𝑥𝑡 − 𝛽𝑡 𝜀𝜃 𝑥𝑡 , 𝑡𝑡

11𝑡𝑡

将𝑥𝑡−1 = 𝛼 𝑥𝑡 − 𝛽𝑡 𝜀𝑡 和𝜇 𝑥𝑡 = 𝛼 𝑥𝑡 − 𝛽𝑡 𝜀𝜃 𝑥𝑡 , 𝑡 代入优化目标(1)，得11𝑥𝑡 − 𝛽𝑡 𝜀𝑡 −𝑥 − 𝛽𝑡 𝜀𝜃 𝑥𝑡 , 𝑡𝛼𝑡𝛼𝑡 𝑡2𝛽𝑡=𝜀 𝑥 , 𝑡 − 𝜀𝑡𝛼𝑡 𝜃 𝑡𝛽𝑡2= 2 𝜀𝑡 − 𝜀𝜃 𝑥𝑡 , 𝑡𝛼𝑡22

DDPM 建楼
ҧ 𝜀𝑡−1• 带入𝑥𝑡 = 𝛼𝑡 𝑥𝑡−1 + 𝛽𝑡 𝜀𝑡 = 𝛼ത𝑡 𝑥0 + 𝛼𝑡 𝛽𝑡−1
ҧ + 𝛽𝑡 𝜀𝑡 ，得• 降低方差• 上式需要采样4个变量𝑥0 , 𝜀𝑡−1
ҧ , 𝜀𝑡 , 𝑡，会影响优化效果• 经过一系列的数学技巧，最终目标函数为

DDPM 建楼
• 一系列的数学技巧：(2)继续简化(2)式：
利用22页的计算展开𝑥𝑡 = 𝛼ത𝑡 𝑥0 + 𝛽𝑡ҧ 𝜀𝑡ҧ ，但(2)中已采样了𝜀𝑡 ，与𝜀𝑡ҧ 不独立，将𝑥𝑡 倒退一步：ҧ 𝜀𝑡−1𝑥𝑡 = 𝛼𝑡 𝑥𝑡−1 + 𝛽𝑡 𝜀𝑡 = 𝛼ത𝑡 𝑥0 + 𝛼𝑡 𝛽𝑡−1
ҧ + 𝛽𝑡 𝜀𝑡代入(2)，忽略常数项，得：DDPM 建楼
• 一系列的数学技巧：(3)

如何降低采样方差？
目的是希望将采样的两个随机变量𝜀𝑡 , 𝜀𝑡−1ҧ 变成一个
根据正态分布的叠加性，我们有以下结论：ҧ 𝜀𝑡−1
ҧ 𝜀~𝒩 0, 𝑰
𝛼𝑡 𝛽𝑡−1
ҧ + 𝛽𝑡 𝜀𝑡 等价于𝛽𝜀,ҧ 𝜀𝑡 等价于𝛽𝜔,ҧ 𝜔~𝒩 0, 𝑰𝛽𝑡 𝜀𝑡−1ҧ − 𝛼𝑡 𝛽𝑡−1证明：
先看第一个结论，两边都是正态分布，且均值为0，计算方差是否相等：222
ҧ
𝛼𝑡 𝛽𝑡−1+ 𝛽𝑡2 = 𝛼𝑡2 1 − 𝛼ത𝑡−1+ 𝛽𝑡2 = 𝛼𝑡2 − 𝛼𝑡2 𝛼ത𝑡−1+ 𝛽𝑡2 = 1 − 𝛼ത𝑡2 = 𝛽𝑡ҧ 2
意味着方差也相同，结论得证。第二个结论类似。

DDPM 建楼
• 一系列的数学技巧：(3)

根据上一页的结论，我们可以得到一个二元一次方程组：ҧ 𝜀𝑡−1ҧ𝛼𝑡 𝛽𝑡−1
ҧ + 𝛽𝑡 𝜀𝑡 = 𝛽𝜀൝ҧ 𝜀𝑡 = 𝛽𝜔ҧ𝛽𝑡 𝜀𝑡−1
ҧ − 𝛼𝑡 𝛽𝑡−1

将𝜀𝑡 解出来，得：ҧ 𝜔𝛽𝑡 𝜀 − 𝛼𝑡 𝛽𝑡−1
𝜀𝑡 =𝛽𝑡ҧ带入式(3)，由于训练过程是不断sample随机变量，所以我们将总的损失函数用期望表示：
𝐸𝜀𝑡 ,ത𝜀𝑡−1 ~𝒩 0,𝑰ҧ 𝜀𝑡−1𝜀𝑡 − 𝜀𝜃 𝛼ത𝑡 𝑥0 + 𝛼𝑡 𝛽𝑡−1
ҧ + 𝛽𝑡 𝜀𝑡 , 𝑡= 𝐸𝜀𝑡,ത𝜀𝑡−1 ~𝒩 0,𝑰ҧ 𝜔𝛽𝑡 𝜀 − 𝛼𝑡 𝛽𝑡−1− 𝜀𝜃 𝛼ത𝑡 𝑥0 + 𝛽𝑡ҧ 𝜀𝑡 , 𝑡𝛽𝑡ҧ22

DDPM 建楼
• 一系列的数学技巧：(3)

由于𝜔~𝒩 0, 𝑰 ，且与𝜃模型无关，可以展开直接算出𝜔相关项的期望，是一些常数。所以有𝐸𝜀𝑡,ത𝜀𝑡−1 ~𝒩 0,𝑰ҧ 𝜔𝛽𝑡 𝜀 − 𝛼𝑡 𝛽𝑡−1− 𝜀𝜃 𝛼ത𝑡 𝑥0 + 𝛽𝑡ҧ 𝜀, 𝑡𝛽𝑡ҧ

= 𝐸𝜀~𝒩 0,𝑰𝛽𝑡 𝜀 − 𝜀𝜃 𝛼ത𝑡 𝑥0 + 𝛽𝑡ҧ 𝜀, 𝑡2

变化一下就得到了，再去除常数系数，可得最终损失函数：
𝐸𝜀~𝒩 0,𝑰𝛽𝑡ҧ𝜀 − 𝜀𝜃 𝛼ത𝑡 𝑥0 + 𝛽𝑡ҧ 𝜀, 𝑡𝛽𝑡

22

DDPM 损失函数直观理解• 初始损失函数：(2)• 递推到𝑥0 的损失函数：(3)• 简化后的损失函数：(4)• 直观的理解还是需要带入“拆楼+建楼”的过程，对于拆楼的每一对{𝑥𝑡−1 → 𝑥𝑡 }，我们希望用生成器𝑥𝑡−1 = 𝜇(𝑥𝑡 )模拟逆过程{𝑥𝑡 → 𝑥𝑡−1 }。
• 但根据𝑥𝑡 = 𝛼𝑡 𝑥𝑡−1 + 𝛽𝑡 𝜀𝑡 ，这里面𝑥𝑡 , 𝛼𝑡 , 𝛽𝑡 都是已知的，𝜀𝑡 是未知的。直接让模型重构图片也许不太容易，但让模型拟合一个服从正态分布的噪声是不是容易得多？
• 我们知道𝑥𝑡 可以理解为𝑥𝑡−1 添加了一小点“料”（随机噪声𝜀𝑡 ），只要我们能拟合第𝑡步采样的噪声𝜀𝑡 ，就可以根据公式还原{𝑥𝑡 → 𝑥𝑡−1 }这一建楼过程。相当于我们期望模型拟合的是第𝑡步加了什么“料”，然后可以知道我们在第𝑡步去噪（建楼）应该减去什么噪声。于是可以理解式(3)中重参数技巧的含义：• 尽管式(3)中的𝜀𝑡 是随机采样得到的噪声，但它的含义应该是模型在拆楼的第𝑡步中加的那个特定的“料”，模型想要去拟合的恰好是第𝑡步的噪声𝜀𝑡 。

DDPM 损失函数直观理解• 初始损失函数：(3)• 递推到𝑥0 的损失函数：(4)• 简化后的损失函数：(5)• 至于为什么可以去sample任意的𝑡，因为任意一个𝑥𝑡 的表达式都可以推导为仅依赖𝑥0 的形式。
• 于是每一步的训练我们只需要去采样𝑡, 𝑥0 , 𝜀即可。

DDPM 生成流程• 从一个随机噪声𝑥𝑇 ∼ 𝒩(0, 𝑰)出发执行𝑇步
1𝑥𝑡−1 =𝑥𝑡 − 𝛽𝑡 𝜖𝜃 𝑥𝑡 , 𝑡𝛼𝑡• Random Sampling:
1𝑥𝑡−1 =𝑥𝑡 − 𝛽𝑡 𝜖𝜃 𝑥𝑡 , 𝑡
𝛼𝑡+ 𝜎𝑡 𝑧, 𝑧 ∼ 𝒩(0, 𝑰)• 通常𝜎𝑡 = 𝛽𝑡 ，使正向和反向的方差保持一致

DDPM 超参设置• 𝑇 = 1000，生成过程是串行的，采样速度是DDPM的一个瓶颈
• 𝛼𝑡 :

单调递减• 𝑇 = 1000, 𝛼ത𝑡 ≈ 𝑒 −5 ，符合之前所说的要求DDPM 总结• 优点：训练简单• 从VAE中难以优化的变分后验出发，利用马尔科夫过程直接减少了一个优化维度。
• 每一步“拆楼”的过程近似为一个高斯分布采样，让模型学习逆过程的难度大大降低。
• 过程中仍然会遇到优化困难的点，但可以借助概率推导降低优化复杂度。

• 缺点是采样时间过长

Detection -> DiffusionDet
Q: Is there a simpler approach that does not even need the surrogate of learnable queries
A: Detect objects from random boxes
noise-to-box
Training:
gaussian noise added to gt -> noise boxes -> crop ROI features -> decoder for predict
Inference:
random boxes
1. Dynamic boxes
2. Progressive refinement

Detection -> DiffusionDetDetection -> DiffusionDetSeg - > denoising pretrain for seg

Seg - > ICLR 22Few-shot segmentation
1. Train unsupervised diffusion model
2. Extract pixel-level representation of labeled
3. Concat reshape features
4. MLP for predict

DDPM 总结• 目前主要研究方向：• 综述：• Diffusion Models: A Comprehensive Survey of Methods and Applications. https://arxiv.org/abs/2209.00796• 降低diffusion模型的采样步长• Analytic-DPM. https://arxiv.org/abs/2201.06503• DPM-Solver. https://arxiv.org/abs/2206.00927• On Fast Sampling of Diffusion Probabilistic Models. https://arxiv.org/pdf/2106.00132.pdf• 探索guided diffusion• Diffusion Models Beat GANs on Image Synthesis.
https://proceedings.neurips.cc/paper/2021/file/49ad23d1ec9fa4bd8d77d02681df5cfa-Paper.pdf• More Control for Free! Image Synthesis with Semantic Diffusion Guidance. https://arxiv.org/pdf/2112.05744• Classifier-Free Diffusion Guidance. https://arxiv.org/pdf/2207.12598.pdf• 大模型、大语料• GLIDE. https://arxiv.org/pdf/2112.10741.pdf• 用于NLP生成• Diffusion-LM Improves Controllable Text Generation. https://arxiv.org/abs/2205.14217