1. DDPM扩散模型基础认知
第一次接触DDPM(Denoising Diffusion Probabilistic Models)时,我被它独特的"破坏-重建"机制所震撼。与常见的GAN或VAE不同,DDPM通过模拟物理中的扩散现象来实现图像生成——就像把一滴墨水慢慢扩散到清水中,再神奇地让墨水重新聚集成原来的形状。
这个看似违反热力学第二定律的过程,实际上建立在对马尔可夫链的巧妙运用上。模型在训练阶段学习如何逐步给图片添加噪声(正向过程),然后在生成阶段逆向执行这个过程(反向过程)。就像教一个机器人先学会如何把整齐的积木塔推倒,再学会如何根据倒塌的痕迹重建原貌。
我最初的手写推导笔记就是从最基础的扩散过程公式开始的。在咖啡渍和草稿纸的陪伴下,逐渐理清了那些看似复杂的数学符号背后的直观意义。这份笔记现在看起来可能有些凌乱,但正是这些涂改痕迹记录了一个个"顿悟时刻"。
2. 正向扩散过程详解
2.1 噪声调度策略
正向过程的核心是设计一个合理的噪声添加策略。在DDPM中,这通过预定义的方差调度表β_t来实现(t从1到T)。我的笔记第3页详细记录了不同调度方式的对比实验:
- 线性调度:β_t从0.0001线性增长到0.02
- 余弦调度:遵循半周期余弦曲线
- 自定义调度:根据图像内容动态调整
经过多次尝试,发现余弦调度在保持生成质量的同时,能更高效地覆盖数据分布空间。这就像调节水龙头的流量——开始时需要缓慢注入噪声(小β_t),后期可以加快破坏速度(大β_t)。
2.2 重参数化技巧
直接计算多个时间步的累积噪声会导致数值不稳定。笔记第5页推导了关键的重参数化公式:
q(x_t|x_0) = N(x_t; √(ᾱ_t)x_0, (1-ᾱ_t)I)
其中α_t=1-β_t,ᾱ_t=∏α_s。这个变换让我们可以一步计算出任意时间步的噪声图像,而不需要逐步模拟整个过程。就像知道了快递从北京到上海的总运输时间,就不需要跟踪每一公里的移动。
重要提示:ᾱ_t的乘积形式会导致数值下溢,实际实现时需要改用对数空间计算。
3. 反向生成过程推导
3.1 变分下界(VLB)构建
反向过程的目标是学习一个参数化的高斯转移:
p_θ(x_{t-1}|x_t) = N(x_{t-1}; μ_θ(x_t,t), Σ_θ(x_t,t))
我的笔记第7-9页详细展示了如何分解VLB:
L = E_q[-log p_θ(x_0|x_1)] + Σ D_KL(q(x_{t-1}|x_t,x_0) || p_θ(x_{t-1}|x_t)) + L_T
其中最关键的是中间的KL散度项,它迫使网络学习去噪步骤。推导过程中最烧脑的部分是要将条件概率q(x_{t-1}|x_t,x_0)转换为可计算的形式。
3.2 噪声预测参数化
实际实现时,我们让网络预测噪声ε而非均值μ。笔记第12页给出了这个关键转换:
μ_θ(x_t,t) = (x_t - β_t/√(1-ᾱ_t) ε_θ)/√(1-β_t)
这种参数化有三大优势:
- 数值稳定性更好
- 与UNet架构的输出范围匹配
- 便于实现Classifier-Free Guidance
4. 训练技巧与实现细节
4.1 损失函数简化
原始VLB包含多个复杂项,但笔记第15页显示可以简化为:
L_simple = E_{t,x_0,ε}[||ε - ε_θ(x_t,t)||^2]
这个惊人的简化意味着:我们只需要让网络预测添加到图像中的噪声!训练时随机采样时间步t,计算当前噪声图像x_t,然后让网络尝试预测这个噪声。
4.2 关键超参数设置
经过多次实验,笔记第18页总结了最佳配置:
- 总步数T:1000
- 学习率:2e-5(使用AdamW优化器)
- 批次大小:128(需要至少16GB显存)
- 梯度裁剪:1.0
特别要注意β_t的起始值——设置过大会导致早期步骤信息丢失过快,就像照片过度曝光无法修复。
5. 完整推导路线图
为了让推导过程更清晰,我将笔记中的关键步骤整理为以下路线图:
- 定义正向过程q(x_t|x_{t-1})
- 推导任意步采样q(x_t|x_0)
- 构造反向过程p_θ(x_{t-1}|x_t)
- 建立变分下界目标
- 重参数化条件概率q(x_{t-1}|x_t,x_0)
- 简化损失函数
- 实现噪声预测参数化
每个步骤在笔记中都有对应的图示和示例计算。例如在第21页,我用MNIST数字演示了不同时间步的噪声添加和去噪效果对比。
6. 常见推导陷阱解析
在推导过程中容易陷入的几个误区:
- 混淆α_t和ᾱ_t:前者是单步系数,后者是累积乘积
- 忽略马尔可夫假设:q(x_t|x_{t-1},x_0)=q(x_t|x_{t-1})
- 错误展开KL散度:需要始终保持概率分布的形式对称
- 忽视方差Σ的设定:早期工作使用固定方差,现代改进版学习时变方差
笔记第25-28页用红笔特别标注了这些易错点,并附上了修正后的正确推导。
7. 数学符号对照表
为方便查阅,笔记最后整理了完整的符号说明:
| 符号 | 含义 | 出现章节 |
|---|---|---|
| β_t | 噪声调度参数 | 2.1 |
| α_t | 1-β_t | 2.2 |
| ᾱ_t | ∏α_s | 2.2 |
| ε_θ | 噪声预测网络 | 3.2 |
| L_VLB | 变分下界目标 | 3.1 |
| T | 总时间步数 | 4.2 |
这个表格在复现论文时特别有用,可以快速定位各个数学符号的定义位置。
8. 手写笔记使用建议
这份50页的手写推导笔记最适合这样使用:
- 先通读红色标注的关键结论
- 对照符号表理解公式含义
- 选择特定章节深入推导
- 在空白处补充自己的理解
笔记边缘还记录了许多突发奇想的"如果...会怎样"问题,比如:
- 如果改变噪声分布类型会怎样?(实验证明高斯噪声效果最好)
- 如果使用非对称时间步会怎样?(后来有论文专门研究这个问题)
这些思考轨迹可能比完美推导更有启发价值。