扩散与 flow:学习从噪声出发的路径
交互教程
生成模型可通过多次小修正产生图像;训练目标决定每次修正的含义。
之前已经能做什么
Section titled “之前已经能做什么”AE 将输入映射到紧凑编码后解码。概率生成器还要描述不确定性:同一类别或文字可对应多张图。去噪模型在不同噪声级学习局部预测,而非直接从单个编码输出最终像素。
改变了什么,为什么
Section titled “改变了什么,为什么”DDPM 通过前向过程加入高斯噪声,并学习反向转移。Flow matching 沿选定概率路径回归速度场。两者属于相关方法族,但目标与求解器不能随意互换。这里用直线插值构造可完整计算的 flow 例子。
阅读顺序从左到右。点击模块,将它与计算和代码对应。代码为教学伪代码;来源链接提供论文方法或已核查的实现。
构造带噪样本
训练有干净图像,因此目标已知。
xt = (1-t)*x + t*noise
target = noise - x学习向量场
条件 c 可为类别、文字或重建编码。
prediction = model(xt, t, condition)
loss = mean((prediction-target)**2)反向积分
按本文约定使用递减时间。
state = noise
for t, t_next in schedule:
state += (t_next-t)*model(state,t,condition)逐步理解机制
Section titled “逐步理解机制”设干净值 x=2、噪声 ε=−1。约定 t=0 为数据,t=1 为噪声。于是 xₜ=(1−t)x+tε=2−3t,目标速度 ε−x=−3。生成时让时间后退:下个时刻的值等于当前值加上负时间步长乘预测速度。
t=0.5 时 xₜ=0.5。若剩五步 Euler,Δt=−0.1,下一值为 0.8。演示知道真实恒定速度;训练网络只见带噪输入与条件,不知道干净端点,因此估计可能有误。这个精确直线例子中,多走几步不会改善质量。
改变参数,查看计算值,再把它与上方的真实模型说明对照。
解析教学模型 · 控件改变的是例子,不是训练后的研究模型。
直线路径速度已知;学习模型需要估计速度,本演示不衡量其误差。
| 量 | 值 |
|---|---|
| t | 0.500 |
| x_t = (1 − t) × 2 + t × (−1) | 0.500 |
| v = ε − x | -3 |
| Δt = −t / steps | -0.100 |
| 一次反向更新 | 0.800 |
训练与采样的区别
Section titled “训练与采样的区别”训练时采样 x、ε、t,构造 xₜ,用平方误差回归已知目标,不必为每个训练样本运行整条采样轨迹。采样从噪声开始反复调用网络,调用次数称为 NFE。随机扩散采样器与确定性 ODE 求解器需要不同更新规则。
这些结果不能证明什么
Section titled “这些结果不能证明什么”模型可能预测噪声、干净数据、速度或 score,转换需要匹配的噪声调度与时间约定。混抄不同实现的速度目标和更新符号,可能让过程方向反转。重建解码器会额外输入压缩图像编码;无条件生成则没有观测输入图像。
展开公式推导
固定采样端点,对构造的直线路径求 t 导数,得到速度监督目标。学习场对与输入及条件兼容的条件目标进行估计。
Euler 用当前速度乘区间长度近似短区间积分。时间递减时 Δt 为负。恒速例子中近似是精确的,学习得到的非线性场通常不是。
为什么训练可只采样一个时间,而生成需要多步?
构造的训练样本对在任意采样时刻都有已知目标速度;生成时,未知数据端点需要通过积分学习场到达。
来源与后续阅读
Section titled “来源与后续阅读”本页图形与伪代码为教学重绘。论文报告、固定实现观察和解析示例分别标记;未运行研究模型。