任务:用容易得到的条件标签学习可采样的边缘速度
现在返回项目约定: 是标准正态噪声, 是四簇二维目标。从相互独立的端点 构造 ,每条已知端点的条件路径速度为 。训练可以抽到两个端点,生成只能访问当前状态。Flow Matching 的关键不是把真实数据偷偷放进采样器,而是用这些条件标签拟合一个仅接受 的速度网络 。
把同一时刻所有可能路径混合后,多个端点对可以经过同一个位置,并带来不同方向的速度。一个确定函数不可能同时输出所有条件速度,因此不能把逐样本训练误差非零立即当成实现失败。我们首先推导它究竟应该输出哪个平均量,再说明这个平均量为何能搬运正确的边缘密度。平方误差回归在这里不是经验口号,而有一个可展开验证的投影恒等式。
一、条件期望是平方误差的最优预测
记边缘速度 。任意候选函数 的误差可写成 。平方展开有两项平方和一个交叉项;给定 后,第一个因子是确定量,而第二个因子的条件平均为零,所以交叉项期望消失。余下第二项不依赖候选网络,于是条件标签回归与直接回归未知边缘速度拥有相同的理想最优函数。
这条等式没有说两个训练损失的数值相同,也没有保证一个有限网络已达到最优。它还依赖时间采样与端点耦合:改变采样权重或把独立端点改成某种匹配端点,会改变回归问题。项目固定时间均匀采样、端点独立、按样本和两个坐标平均。训练器直接使用差值标签,不调用解析教师更新参数;教师只在独立验证和数值测试中提供参考,避免把学习结果与人工答案混为一谈。
算例一:相遇路径不要求逐条复制
在一维时刻一半,考虑两个等概率端点对:第一对从负二到正二,条件速度四;第二对从正二到负二,条件速度负四。二者都位于零。若只看这个离散条件例子,一个只接收当前位置和时间的确定函数在零处应输出零。输出四会让第一例误差零、第二例平方误差六十四,平均三十二;输出零则两例各误差十六,平均十六。这正是平均速度的平方损失更小。
这个离散例子只解释回归冲突,不能拿两条原子路径交叉去证明平滑ODE的全局唯一性。实际项目有非零高斯簇宽,内部密度光滑为正。对称分布的精确中心仍可能具有零边缘速度,但初始噪声恰好等于某一点的概率为零。不能看到中心静止就断言整个分布都静止,也不能强迫一个确定流把完全同一个初始点同时送到两个模式。
二、从条件路径推到边缘连续性方程
取任意光滑且有紧支撑的测试函数 。沿已知端点路径对 求导,链式法则给出梯度与条件速度的内积。再取端点期望,并把速度换成给定当前位置的条件平均,得到期望导数等于对 的积分。做一次分部积分且边界项消失,就得到连续性方程。它描述概率质量守恒,不是每个点上的密度数值保持不变。
这一步把训练与采样接起来:采样器从 抽初始噪声,使用网络近似的边缘速度积分到一。它不需要任何端点数据输入,也不保证恢复训练时随机配对的那条直线。某些直线条件路径混合后,边缘ODE轨迹仍会弯曲,因为当前点的后验端点权重不断改变。训练里的“直线”与生成里的“直线”属于不同条件层级。
三、项目的解析速度教师怎样算
给定目标类别 ,干净端点为中心 加标准差 的独立噪声。线性桥在该类别下仍是高斯,均值为 ,每坐标方差记作 。条件速度与当前位置的协方差记作 。这个协方差来自两份独立端点:数据噪声贡献正的 ,初始噪声因速度中带负号贡献负的 。
第一式是联合高斯的条件平均,可以由两变量联合二次密度完成平方得到;其形式是速度均值加协方差除位置方差乘位置偏差。第二式再对未知类别取条件平均。因为簇内标准差为零点三, 在整个闭区间严格为正,解析公式没有人为加小常数;换成零宽点簇时,端点处的正则性会改变,不能声称同一个数值程序仍有同样保证。
算例二:单高斯桥的速度不是终点减当前位置
为便于手算,暂取一维初始分布为标准正态,目标是均值二、方差一的正态,且端点独立。在四分之一时刻,位置条件均值为零点五,方差为零点七五平方加零点二五平方,即零点六二五;速度均值为二,协方差为负零点五。观察位置一点五,残差为一,于是边缘速度为二减零点五除零点六二五,得到一点二。它既不是终点均值减当前点的零点五,也不是所有位置上都为二。
在同一例子的中间时刻,协方差为零,所以速度恰好处处为二;这是该时刻方差达到最小、瞬时不再变化造成的特殊情况,并不是整段路径的速度恒定。端点处可以独立检查:零时刻边缘速度为目标均值减当前位置,即二减当前位置;一时刻为当前位置,因为初始噪声与已知终点独立且均值零。两个端点极限能抓住协方差符号写反的问题。
同一条线性桥上的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日程的网络来替换。
用第一式解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)或端点耦合后,要重新求导与条件平均,不能只改式子的时间标签。
手算单高斯例: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时也不应借条件噪声为零的式子跳过极限论证。本项目的高斯混合宽度非零,解析速度在端点另有良好公式;交叉检查使用内部时刻。
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)
四、能否把训练目标改成终点位置
若把标签从 换成 ,对本课线性桥而言,新标签等于 。把这个网络输出直接作为速度积分,会在靠近终点时错误地减小步幅;即使回归拟合很好,也是在解另一个微分方程。可以设计预测终点的另一种参数化,但必须除以相应系数并处理终点极限,且重新说明损失权重。改变标签不是一个无须重推的接口替换。
时间输入也不是装饰。对同一个空间位置,早期可能需要收缩噪声,晚期可能需要把模式内部展开;没有时间条件的网络只能把多种任务折中平均。本项目把时间本身以及正弦、余弦作为三个数拼入输入,没有采用复杂架构。这是可运行的教学选择,不声称最佳。独立测试会检查梯度进入全部参数,且用真实训练下降证明网络确实被更新,而不是把解析教师包装成“训练后模型”。
连续性方程本身不一定唯一确定速度场。例如标准二维正态是径向对称的,零速度场能保持它不变;旋转速度“负纵坐标、横坐标”也能保持同一密度。因为旋转速度与密度梯度正交,自身散度又为零,所以概率通量散度仍为零。两者单时刻边缘相同,轨迹却不同。条件Flow Matching通过选定端点耦合和回归目标选出一个具体场,不能仅凭最终分布相同就说学到了唯一真实的运输路径。
这也解释为什么场误差需要明确教师。项目相对解析教师的平方误差是在同一条独立线性桥下定义的;若改用另一种耦合或概率路径,就不能沿用这个教师当作唯一正确答案。一个场可能在自己的路径下生成合理终端,却在本课教师指标上有偏差。这里先冻结路径和教师,是为隔离学习实现的问题,不是断言所有生成方法都必须匹配这一场。
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
练习三|设计一项标签阳性对照
把项目速度标签误写为目标点减当前插值点。写出它与正确速度的关系,并指出在哪个时间错误会被端点测试发现。