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

符号约定

符号 含义
q 正向过程的分布(加噪,数据→噪声,是已知的)
 p_\theta 反向过程的分布(去噪,噪声→数据,由神经网络学习,模型学习的过程,需要训练)

:加噪过程,是已知的

:"正向加噪过程的反转",即真实的去噪分布。此处不用p,是因为:

符号 含义
q 是“真实但不可直接用来采样”的分布,是真相(但不好用)
 p_\theta 是训练出来的模型,是近似(但可用)

已知: x0 → x1 → ... → xT (q)
要做的:xT → ... → x0 (pθ 来学)

时间步的选取

扩散模型的训练 vs 推理

训练时,每个 batch 中的时间步 t 是随机采样的:

t = torch.randint(0, T, (batch_size,))  # 从 [0, T] 均匀随机采样
  • 对同一张图片,这次可能采样 t=200,下次可能采样 t=850
  • 目的是让模型学会处理任意噪声程度,不依赖顺序
  • 每个样本独立地加噪到对应的 t 步( q(x_t|x_0) 一步到位)
推理(生成)阶段:按时间递减顺序

推理时是严格有序的,从高噪声到低噪声逐步去噪

x_T(纯噪声) → x_{T-1} → x_{T-2} → ... → x_1 → x_0(生成图像)

即 t:T→T−1→⋯→1→0,每一步都依赖上一步的输出。


为什么训练可以随机、推理必须有序?
训练 推理
输入来源 原始图 x_0直接加噪到任意 t 上一步去噪结果 x_{t+1}
t 的顺序 随机打乱 严格 T→0
原因

闭合公式(可以用一个直接的数学表达式一步算出结果

不需要迭代或递推)可跳步加噪,步骤间无依赖

每步去噪依赖前一步,必须串行

训练的核心技巧是:不需要真正做 T步马尔可夫链,可以用:

q(x_t | x_0) = \mathcal{N}(\sqrt{\bar\alpha_t}\, x_0,\ (1-\bar\alpha_t)\mathbf{I})

直接从x_0一步采样出任意 t 时刻的 x_t,所以各时间步之间训练完全独立、可并行、可随机

其中 bar\alpha_t = \prod_{s=1}^{t} \alpha_s 是提前算好的常数。

给定 x_0 和 t,代入公式立刻得到 x_t,完全跳过中间所有步骤。

扩散模型理论依据:随机梯度朗之万动力学(SGLD)

一种用于从复杂概率分布 p(x) 中采样的方法

一、核心思想:

1、结合梯度信息 + 随机噪声 2、构造一个马尔可夫链来逼近目标分布

二、更新公式


马尔可夫链

核心思想:下一个状态只取决于当前状态,与过去的历史无关。

P(x_t \mid x_{t-1}, x_{t-2}, \ldots, x_0) = P(x_t \mid x_{t-1})

直觉例子:天气

假设天气只有晴/雨两种状态,且转变概率固定:

晴 --70%--> 晴
晴 --30%--> 雨
雨 --40%--> 晴  
雨 --60%--> 雨

今天是否下雨,只看昨天的天气,不管前天、大前天怎样。

扩散模型里的马尔可夫链

扩散模型的加噪过程正是一条马尔可夫链:

x_0 \to x_1 \to x_2 \to \cdots \to x_T

每一步只在上一步的基础上再加一点点高斯噪声

x_t = \sqrt{\alpha_t}\, x_{t-1} + \sqrt{1-\alpha_t}\, \epsilon   ϵ∼N(0,I) 是标准高斯噪声

x_t 依赖 x_{t-1} ​,不直接依赖 x_0, x_1, \ldots 符合马尔可夫性质。

正因为每步都是"只看上一步加噪"的马尔可夫结构,叠加之后才能推导出前面说的闭合公式——把多步高斯噪声合并成一步。

扩散模型成功的秘诀在于扩散过程的迭代本质。

在每一步中,模型都会估计如何从当前的输入生成完全去噪的结果,早期阶段(预测最终输出实际上非常困难),这个估计中的任何 error 都可以在以后的更新中得到纠正。

训练步骤:

1.从训练数据中加载一些图像

2.添加不同级别的噪声。希望模型在面对添加了极端噪声和几乎没有添加噪声的带噪图像时,都能够很好地估计如何去噪。

3.将带噪数据输入模型

4.评估模型对这些输入去噪的效果,使用此信息更新模型权重

从完全随机的输入开始,反复将其输入模型,每次根据模型预测进行少量更新


高斯分布的性质

一个随机变量如果满足:

X \sim \mathcal{N}(\mu, \sigma^2)

表示:均值:μ    方差:σ2

标准高斯:Z \sim \mathcal{N}(0,1)

\epsilon_t就是这种标准高斯噪声

关键性质1:线性缩放

如果:X \sim \mathcal{N}(0,1)    那么 aX \sim \mathcal{N}(0, a^2)

乘一个系数 → 方差变成系数平方

高斯分布在线性变换下仍然是高斯

关键性质2:线性组合仍是高斯

如果X_1, X_2 是高斯,那么aX_1 + bX_2仍然是高斯

关键性质3:方差计算公式

对于任意随机变量:

\text{Var}(X+Y) = \text{Var}(X) + \text{Var}(Y) + 2\text{Cov}(X,Y)

特殊情况:独立

如果 X⊥Y(独立)那么\text{Cov}(X,Y)=0

于是:\text{Var}(X+Y) = \text{Var}(X) + \text{Var}(Y)

关键性质4:高斯中“独立 ⇔ 不相关”

对于一般变量:不相关 ≠ 独立

但对于高斯变量: 不相关 = 独立

所以 \epsilon_{t-2}, \epsilon_{t-1}独立 ⇒ 可以直接加方差


把这些性质对应回的推导

式子本质:A = a \epsilon_{t-2}, \quad B = b \epsilon_{t-1}  其中:\epsilon_{t-2}, \epsilon_{t-1} \sim \mathcal{N}(0,1),且独立

各自方差  \text{Var}(A) = a^2,\text{Var}(B) = b^2

相加 ,因为独立:\text{Var}(A+B) = a^2 + b^2

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐