扩散模型属于「生成模型」的一种,通过学习给定的训练样本,生成模型可以学会如何 生成 数据,比如生成图片或者声音。一个好的生成模型能生成一组 样式不同 的输出。这些输出会与训练数据相似,但不是一模一样的副本。

符号约定
| 符号 | 含义 |
|---|---|
| q | 正向过程的分布(加噪,数据→噪声,是已知的) |
| 反向过程的分布(去噪,噪声→数据,由神经网络学习,模型学习的过程,需要训练) |
:加噪过程,是已知的
:"正向加噪过程的反转",即真实的去噪分布。此处不用p,是因为:
| 符号 | 含义 |
| q | 是"真实但不可直接用来采样"的分布,是真相**(但不好用)** |
| 是训练出来的模型,是近似**(但可用)** |
|---|
已知: x0 → x1 → ... → xT (q)
要做的:xT → ... → x0 (pθ 来学)
时间步的选取
扩散模型的训练 vs 推理
训练时,每个 batch 中的时间步 t 是随机采样的:
t = torch.randint(0, T, (batch_size,)) # 从 [0, T] 均匀随机采样
- 对同一张图片,这次可能采样 t=200,下次可能采样 t=850
- 目的是让模型学会处理任意噪声程度,不依赖顺序
- 每个样本独立地加噪到对应的 t 步(
一步到位)
推理(生成)阶段:按时间递减顺序
推理时是严格有序的,从高噪声到低噪声逐步去噪:
x_T(纯噪声) → x_{T-1} → x_{T-2} → ... → x_1 → x_0(生成图像)
即 t:T→T−1→⋯→1→0,每一步都依赖上一步的输出。
为什么训练可以随机、推理必须有序?
| 训练 | 推理 | |
|---|---|---|
| 输入来源 | 原始图 |
上一步去噪结果 |
| t 的顺序 | 随机打乱 | 严格 T→0 |
| 原因 | 闭合公式(可以用一个直接的数学表达式一步算出结果, 不需要迭代或递推)可跳步加噪,步骤间无依赖 | 每步去噪依赖前一步,必须串行 |
训练的核心技巧是:不需要真正做 T步马尔可夫链,可以用:
直接从一步采样出任意 t 时刻的
,所以各时间步之间训练完全独立、可并行、可随机。
其中 是提前算好的常数。
给定 和 t,代入公式立刻得到
,完全跳过中间所有步骤。

扩散模型理论依据:随机梯度朗之万动力学(SGLD)
一种用于从复杂概率分布 p(x) 中采样的方法
一、核心思想:
1、结合梯度信息 + 随机噪声 2、构造一个马尔可夫链来逼近目标分布
二、更新公式
马尔可夫链
核心思想:下一个状态只取决于当前状态,与过去的历史无关。
直觉例子:天气
假设天气只有晴/雨两种状态,且转变概率固定:
晴 --70%--> 晴 晴 --30%--> 雨 雨 --40%--> 晴 雨 --60%--> 雨今天是否下雨,只看昨天的天气 ,不管前天、大前天怎样。
扩散模型里的马尔可夫链
扩散模型的加噪过程正是一条马尔可夫链:
每一步只在上一步的基础上再加一点点高斯噪声 :
ϵ∼N(0,I) 是标准高斯噪声
依赖
,不直接依赖
符合马尔可夫性质。
正因为每步都是"只看上一步加噪"的马尔可夫结构,叠加之后才能推导出前面说的闭合公式 ------把多步高斯噪声合并成一步。
扩散模型成功的秘诀在于扩散过程的迭代本质。
在每一步中,模型都会估计如何从当前的输入生成完全去噪的结果,早期阶段(预测最终输出实际上非常困难),这个估计中的任何 error 都可以在以后的更新中得到纠正。
训练步骤:
1.从训练数据中加载一些图像
2.添加不同级别的噪声。希望模型在面对添加了极端噪声和几乎没有添加噪声的带噪图像时,都能够很好地估计如何去噪。
3.将带噪数据输入模型
4.评估模型对这些输入去噪的效果,使用此信息更新模型权重
从完全随机的输入开始,反复将其输入模型,每次根据模型预测进行少量更新
高斯分布的性质
一个随机变量如果满足:
表示:均值:μ 方差:σ2
标准高斯:
就是这种标准高斯噪声
关键性质1:线性缩放
如果: 那么
乘一个系数 → 方差变成系数平方
高斯分布在线性变换下仍然是高斯
关键性质2:线性组合仍是高斯
如果 是高斯,那么
仍然是高斯
关键性质3:方差计算公式
对于任意随机变量:
特殊情况:独立
如果 X⊥Y(独立)那么
于是:
关键性质4:高斯中"独立 ⇔ 不相关"
对于一般变量:不相关 ≠ 独立
但对于高斯变量: 不相关 = 独立
所以 独立 ⇒ 可以直接加方差
把这些性质对应回的推导
式子本质: 其中:
,且独立
各自方差
相加 ,因为独立: