跳转到内容
English

扩散与 flow:学习从噪声出发的路径

交互教程

生成模型可通过多次小修正产生图像;训练目标决定每次修正的含义。

前置阅读:概率与张量 · 自编码器

AE 将输入映射到紧凑编码后解码。概率生成器还要描述不确定性:同一类别或文字可对应多张图。去噪模型在不同噪声级学习局部预测,而非直接从单个编码输出最终像素。

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)

查看固定版本来源

xt=(1−t)x+tϵ,v∗=ϵ−x,xt+Δt≈xt+Δt vθ(xt,t,c)x_t=(1-t)x+t\epsilon,\quad v^*=\epsilon-x,\quad x_{t+\Delta t}\approx x_t+\Delta t\,v_\theta(x_t,t,c)

设干净值 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。演示知道真实恒定速度;训练网络只见带噪输入与条件,不知道干净端点,因此估计可能有误。这个精确直线例子中,多走几步不会改善质量。

改变参数,查看计算值,再把它与上方的真实模型说明对照。

解析教学模型 · 控件改变的是例子,不是训练后的研究模型。

x = 2, t = 0ε = −1, t = 1

直线路径速度已知;学习模型需要估计速度,本演示不衡量其误差。

当前例子的计算值
量值
t0.500
x_t = (1 − t) × 2 + t × (−1)0.500
v = ε − x-3
Δt = −t / steps-0.100
一次反向更新0.800

训练时采样 x、ε、t,构造 xₜ,用平方误差回归已知目标,不必为每个训练样本运行整条采样轨迹。采样从噪声开始反复调用网络,调用次数称为 NFE。随机扩散采样器与确定性 ODE 求解器需要不同更新规则。

模型可能预测噪声、干净数据、速度或 score,转换需要匹配的噪声调度与时间约定。混抄不同实现的速度目标和更新符号,可能让过程方向反转。重建解码器会额外输入压缩图像编码;无条件生成则没有观测输入图像。

展开公式推导

固定采样端点,对构造的直线路径求 t 导数,得到速度监督目标。学习场对与输入及条件兼容的条件目标进行估计。

ddt[(1−t)x+tϵ]=ϵ−x\frac{d}{dt}[(1-t)x+t\epsilon]=\epsilon-x

Euler 用当前速度乘区间长度近似短区间积分。时间递减时 Δt 为负。恒速例子中近似是精确的,学习得到的非线性场通常不是。

x(t+Δt)−x(t)=∫tt+Δtv(x(s),s) ds≈Δt v(x(t),t)x(t+\Delta t)-x(t)=\int_t^{t+\Delta t}v(x(s),s)\,ds\approx\Delta t\,v(x(t),t)
为什么训练可只采样一个时间,而生成需要多步?

构造的训练样本对在任意采样时刻都有已知目标速度;生成时,未知数据端点需要通过积分学习场到达。

返回学习地图

本页图形与伪代码为教学重绘。论文报告、固定实现观察和解析示例分别标记;未运行研究模型。