AI Hero Club

扩散模型与 Flow Matching · 第 5 章

已自行标记完成0 / 8

仅保存在当前浏览器;完成标记不代表通过项目验收。

本章提纲 9 个小节
全课目录 8 章
完整课程计划 ↗
扩散模型与 Flow Matching / 课程计划 ↗

CHAPTER 05 / 8建议学习 180 分钟

条件Flow Matching与边缘速度场

每条条件直线路径都有自己的速度,只回归这些标签为什么能得到总体分布的速度场?

本章要解决的 3 个问题
  • 证明条件回归与边缘速度回归的投影关系
  • 由测试函数推导边缘连续性方程
  • 独立计算高斯混合教师并守住采样信息边界
课程项目 ZIP ↓

任务:用容易得到的条件标签学习可采样的边缘速度

现在返回项目约定:t=0t=0 是标准正态噪声,t=1t=1 是四簇二维目标。从相互独立的端点 X0,X1X_0,X_1 构造 Xt=(1−t)X0+tX1X_t=(1-t)X_0+tX_1,每条已知端点的条件路径速度为 U=X1−X0U=X_1-X_0。训练可以抽到两个端点,生成只能访问当前状态。Flow Matching 的关键不是把真实数据偷偷放进采样器,而是用这些条件标签拟合一个仅接受 (x,t)(x,t) 的速度网络 vθ(x,t)v_\theta(x,t)。

把同一时刻所有可能路径混合后,多个端点对可以经过同一个位置,并带来不同方向的速度。一个确定函数不可能同时输出所有条件速度,因此不能把逐样本训练误差非零立即当成实现失败。我们首先推导它究竟应该输出哪个平均量,再说明这个平均量为何能搬运正确的边缘密度。平方误差回归在这里不是经验口号,而有一个可展开验证的投影恒等式。

一、条件期望是平方误差的最优预测

记边缘速度 v∗(x,t)=E[U∣Xt=x,t]v_*(x,t)=\mathbb E[U\mid X_t=x,t]。任意候选函数 vv 的误差可写成 (v−v∗)+(v∗−U)(v-v_*)+(v_*-U)。平方展开有两项平方和一个交叉项;给定 Xt,tX_t,t 后,第一个因子是确定量,而第二个因子的条件平均为零,所以交叉项期望消失。余下第二项不依赖候选网络,于是条件标签回归与直接回归未知边缘速度拥有相同的理想最优函数。

E∥v(Xt,t)−U∥2=E∥v(Xt,t)−v∗(Xt,t)∥2+E∥U−v∗(Xt,t)∥2\mathbb E\|v(X_t,t)-U\|^2=\mathbb E\|v(X_t,t)-v_*(X_t,t)\|^2+\mathbb E\|U-v_*(X_t,t)\|^2
第二项是该耦合下不可约的条件速度方差;有限样本实测值不必逐次精确满足总体分解。

这条等式没有说两个训练损失的数值相同,也没有保证一个有限网络已达到最优。它还依赖时间采样与端点耦合:改变采样权重或把独立端点改成某种匹配端点,会改变回归问题。项目固定时间均匀采样、端点独立、按样本和两个坐标平均。训练器直接使用差值标签,不调用解析教师更新参数;教师只在独立验证和数值测试中提供参考,避免把学习结果与人工答案混为一谈。

算例一:相遇路径不要求逐条复制

在一维时刻一半,考虑两个等概率端点对:第一对从负二到正二,条件速度四;第二对从正二到负二,条件速度负四。二者都位于零。若只看这个离散条件例子,一个只接收当前位置和时间的确定函数在零处应输出零。输出四会让第一例误差零、第二例平方误差六十四,平均三十二;输出零则两例各误差十六,平均十六。这正是平均速度的平方损失更小。

这个离散例子只解释回归冲突,不能拿两条原子路径交叉去证明平滑ODE的全局唯一性。实际项目有非零高斯簇宽,内部密度光滑为正。对称分布的精确中心仍可能具有零边缘速度,但初始噪声恰好等于某一点的概率为零。不能看到中心静止就断言整个分布都静止,也不能强迫一个确定流把完全同一个初始点同时送到两个模式。

二、从条件路径推到边缘连续性方程

取任意光滑且有紧支撑的测试函数 ϕ(x)\phi(x)。沿已知端点路径对 ϕ(Xt)\phi(X_t) 求导,链式法则给出梯度与条件速度的内积。再取端点期望,并把速度换成给定当前位置的条件平均,得到期望导数等于对 pt(x)∇ϕ(x)⋅v∗(x,t)p_t(x)\nabla\phi(x)\cdot v_*(x,t) 的积分。做一次分部积分且边界项消失,就得到连续性方程。它描述概率质量守恒,不是每个点上的密度数值保持不变。

ddtE[ϕ(Xt)]=E[∇ϕ(Xt)⋅U]=∫pt∇ϕ⋅v∗ dx⟹∂tpt=−∇⋅(ptv∗)\frac{d}{dt}\mathbb E[\phi(X_t)]=\mathbb E[\nabla\phi(X_t)\cdot U]=\int p_t\nabla\phi\cdot v_*\,dx\quad\Longrightarrow\quad\partial_t p_t=-\nabla\cdot(p_tv_*)
在正则条件和相同初始密度下,积分边缘速度的ODE可复现这条概率路径的边缘。

这一步把训练与采样接起来:采样器从 p0p_0 抽初始噪声,使用网络近似的边缘速度积分到一。它不需要任何端点数据输入,也不保证恢复训练时随机配对的那条直线。某些直线条件路径混合后,边缘ODE轨迹仍会弯曲,因为当前点的后验端点权重不断改变。训练里的“直线”与生成里的“直线”属于不同条件层级。

三、项目的解析速度教师怎样算

给定目标类别 K=kK=k,干净端点为中心 μk\mu_k 加标准差 σ\sigma 的独立噪声。线性桥在该类别下仍是高斯,均值为 tμkt\mu_k,每坐标方差记作 st2=(1−t)2+t2σ2s_t^2=(1-t)^2+t^2\sigma^2。条件速度与当前位置的协方差记作 ct=tσ2−(1−t)c_t=t\sigma^2-(1-t)。这个协方差来自两份独立端点:数据噪声贡献正的 tσ2t\sigma^2,初始噪声因速度中带负号贡献负的 1−t1-t。

vk(x,t)=μk+ctst2(x−tμk),v∗(x,t)=∑krk(x,t)vk(x,t)v_k(x,t)=\mu_k+\frac{c_t}{s_t^2}(x-t\mu_k),\qquad v_*(x,t)=\sum_k r_k(x,t)v_k(x,t)
r_k 是该时刻高斯混合的后验责任度,按各分量密度乘先验权重再归一化。

第一式是联合高斯的条件平均,可以由两变量联合二次密度完成平方得到;其形式是速度均值加协方差除位置方差乘位置偏差。第二式再对未知类别取条件平均。因为簇内标准差为零点三,st2s_t^2 在整个闭区间严格为正,解析公式没有人为加小常数;换成零宽点簇时,端点处的正则性会改变,不能声称同一个数值程序仍有同样保证。

算例二:单高斯桥的速度不是终点减当前位置

为便于手算,暂取一维初始分布为标准正态,目标是均值二、方差一的正态,且端点独立。在四分之一时刻,位置条件均值为零点五,方差为零点七五平方加零点二五平方,即零点六二五;速度均值为二,协方差为负零点五。观察位置一点五,残差为一,于是边缘速度为二减零点五除零点六二五,得到一点二。它既不是终点均值减当前点的零点五,也不是所有位置上都为二。

在同一例子的中间时刻,协方差为零,所以速度恰好处处为二;这是该时刻方差达到最小、瞬时不再变化造成的特殊情况,并不是整段路径的速度恒定。端点处可以独立检查:零时刻边缘速度为目标均值减当前位置,即二减当前位置;一时刻为当前位置,因为初始噪声与已知终点独立且均值零。两个端点极限能抓住协方差符号写反的问题。

同一条线性桥上的score与速度可以交叉复算

第四章和本章用了不同时间方向来解释两种生成方法。现在不更换路径,就在本项目Xt=(1−t)X0+tX1上联系它们:X0为独立标准正态,X1为数据。固定X1时,Xt的条件均值为tX1,噪声标准差为1−t。因此内部时刻的条件score是−[x−tX1]/(1−t)²;由于残差等于(1−t)X0,后验平均得到s_t(x)=−E[X0|Xt=x]/(1−t)。这里的score是这条桥在t时刻的密度梯度,不是直接拿第四章任意r日程的网络来替换。

(1−t)E[X0∣x]+tE[X1∣x]=x,E[X0∣x]=−(1−t)st(x)(1-t)\mathbb E[X_0\mid x]+t\mathbb E[X_1\mid x]=x,\quad \mathbb E[X_0\mid x]=-(1-t)s_t(x)
第一式来自给定Xt后的插值恒等式取条件期望;第二式来自条件高斯score。

用第一式解E[X1|x],再减E[X0|x]得到边缘速度。先写E[X1|x]=[x−(1−t)E[X0|x]]/t;两项相减后,E[X0|x]的总系数是−[(1−t)/t+1]=−1/t。代入score式就得到下式。每一个系数都来自实际路径;改成别的a(t)、b(t)或端点耦合后,要重新求导与条件平均,不能只改式子的时间标签。

v∗(x,t)=E[X1−X0∣Xt=x]=x+(1−t)st(x)t,0<t<1v_*(x,t)=\mathbb E[X_1-X_0\mid X_t=x]=\frac{x+(1-t)s_t(x)}{t},\qquad 0<t<1
这不是把FM训练说成已训练score网络,而是同一路径上两个解析量之间的恒等关系。

手算单高斯例:X1~N(2,1)。t=.25时均值.5、方差.625;观察x=1.5,score=−(1.5−.5)/.625=−1.6,所以速度为[1.5+.75×(−1.6)]/.25=1.2,与前面的联合高斯条件速度一致。t=.5时同位置score=−(1.5−1)/.5=−1,速度为[1.5+.5×(−1)]/.5=2。两个时刻不能共用同一个score值。

不要在t=0直接除零。精确模型中分子会同步趋零,但浮点score误差δs会被(1−t)/t放大;很小t处这个重建式可能比直接速度教师更不稳定。t趋近1时也不应借条件噪声为零的式子跳过极限论证。本项目的高斯混合宽度非零,解析速度在端点另有良好公式;交叉检查使用内部时刻。

独立运行不用项目oracle,独立计算同路径score与FM速度并检测错误时间系数。
import numpy as np
# 单高斯桥,独立由条件协方差计算速度,再由score重建。
for t,x in [(.25,1.5),(.5,1.5),(.8,-.7)]:
    variance=(1-t)**2+t*t
    score=-(x-2*t)/variance
    conditional_velocity=2+(2*t-1)/variance*(x-2*t)
    reconstructed=(x+(1-t)*score)/t
    assert abs(reconstructed-conditional_velocity)<1e-12
    wrong=(x+t*score)/(1-t)  # 故意把两个时间系数调换
    if t==.25:assert abs(wrong-conditional_velocity)>.1
    print(t,score,conditional_velocity,reconstructed)

四、能否把训练目标改成终点位置

若把标签从 X1−X0X_1-X_0 换成 X1−XtX_1-X_t,对本课线性桥而言,新标签等于 (1−t)(X1−X0)(1-t)(X_1-X_0)。把这个网络输出直接作为速度积分,会在靠近终点时错误地减小步幅;即使回归拟合很好,也是在解另一个微分方程。可以设计预测终点的另一种参数化,但必须除以相应系数并处理终点极限,且重新说明损失权重。改变标签不是一个无须重推的接口替换。

时间输入也不是装饰。对同一个空间位置,早期可能需要收缩噪声,晚期可能需要把模式内部展开;没有时间条件的网络只能把多种任务折中平均。本项目把时间本身以及正弦、余弦作为三个数拼入输入,没有采用复杂架构。这是可运行的教学选择,不声称最佳。独立测试会检查梯度进入全部参数,且用真实训练下降证明网络确实被更新,而不是把解析教师包装成“训练后模型”。

连续性方程本身不一定唯一确定速度场。例如标准二维正态是径向对称的,零速度场能保持它不变;旋转速度“负纵坐标、横坐标”也能保持同一密度。因为旋转速度与密度梯度正交,自身散度又为零,所以概率通量散度仍为零。两者单时刻边缘相同,轨迹却不同。条件Flow Matching通过选定端点耦合和回归目标选出一个具体场,不能仅凭最终分布相同就说学到了唯一真实的运输路径。

这也解释为什么场误差需要明确教师。项目相对解析教师的平方误差是在同一条独立线性桥下定义的;若改用另一种耦合或概率路径,就不能沿用这个教师当作唯一正确答案。一个场可能在自己的路径下生成合理终端,却在本课教师指标上有偏差。这里先冻结路径和教师,是为隔离学习实现的问题,不是断言所有生成方法都必须匹配这一场。

独立运行检验条件投影和单高斯条件速度;不需要torch。
def risk(value):return ((value-4)**2+(value+4)**2)/2
assert risk(0)==16 and risk(4)==32
t=0.25;mu=2.0;sigma2=1.0;x=1.5
variance=(1-t)**2+t*t*sigma2
covariance=t*sigma2-(1-t)
velocity=mu+covariance/variance*(x-t*mu)
assert abs(velocity-1.2)<1e-12
assert abs((mu-x)-velocity)>0.1
print(risk(0),risk(4),velocity)

练习与逐步解答

TRY IT YOURSELF

练习一|完整展开投影误差

条件标签以四分之一概率为六、四分之三概率为负二。求最佳常数预测及最小平方损失,再比较预测一。

提示 1
平方损失的最佳常数先从条件均值找,而非从损失能否为零判断。
提示 2
对两种标签分别算加权平方误差,再把候选与最佳预测的差平方同损失增量核对。
对照参考解答
条件平均是六乘四分之一加负二乘四分之三,正好为零,所以最佳常数为零。最小平方损失是三十六乘四分之一加四乘四分之三,得到十二。预测一时,两种误差平方为二十五和九,加权得到十三。二者差一等于候选预测一与最佳预测零之间的距离平方,验证投影恒等式。最小损失十二不是网络未训练的证据,而是隐藏条件在相同输入下带来的不可约方差。

TRY IT YOURSELF

练习二|从责任度算混合速度

某个二维位置两类责任度为0.8和0.2,类速度分别为(1,−1)与(−3,2),边缘速度是什么?若硬选最近类会发生什么?

提示 1
边缘速度是给定当前位置后的条件速度平均,不是最近类标签。
提示 2
按责任度逐坐标求和;在类别边界比较硬选择是否出现跳变,以及生成时能否读取真类。
对照参考解答
逐坐标加权,第一坐标为零点八减零点六,得到零点二;第二坐标为负零点八加零点四,得到负零点四。边缘速度是零点二、负零点四。硬选第一类会输出一、负一,忽略了第二类仍有的后验质量,尤其在类别边界附近造成不连续跳变。责任度需由当前时间下的位置密度计算,不能直接使用训练样本的真实类别编号,因为生成时没有这个隐藏标签。

TRY IT YOURSELF

练习三|设计一项标签阳性对照

把项目速度标签误写为目标点减当前插值点。写出它与正确速度的关系,并指出在哪个时间错误会被端点测试发现。

提示 1
先把当前插值点写成(1−t)x0+t x1,再整理x1−xt。
提示 2
将它与路径对t的导数比较,分别检查t=0、内部和t=1,避免仅起点测试漏检。
对照参考解答
正确速度为终点减初始点。当前点是初始点乘一减时间加终点乘时间,因此终点减当前点恰为一减时间乘正确速度。在零时刻两者相同,仅检查起点发现不了;在内部时刻已有缩放错误,在一时刻错误标签总为零,而正确条件速度通常不是零。应同时验证路径有限差分导数、内部时刻和终点性质。训练下降无法替代这个标签检查,因为错误目标也能被网络拟合。

CHECK YOUR UNDERSTANDING

检验理解

先作答,再决定是否展开解析。选择题用于发现理解缺口;独立实现与迁移任务仍需另行检验。

1. FM条件标签的最优回归量是?

查看解析平方损失条件投影给出边缘速度。
2. 条件路径直线意味着生成轨迹直线吗?

查看解析条件路径与边缘流不是同一对象。
3. 项目训练反传使用什么标签?

查看解析解析教师只用于参考,训练用可采样的条件差值。
4. 端点耦合改变会怎样?

查看解析相同边缘并未固定联合端点分布。

自行标记用于记录学习进度,不代表通过项目验收。