Euphonium: Steering Video Flow Matching via Process Reward Gradient Guided Stochastic Dynamics
Authors: Ruizhe Zhong, Jiesong Lian, Xiaoyue Mi, Zixiang Zhou, Yuan Zhou, Qinglin Lu, Junchi Yan Affiliations: Shanghai Jiao Tong University, Huazhong University of Science and Technology, University of Chinese Academy of Sciences, Tencent Hunyuan arXiv: 2602.04928 GitHub: zerzerzerz/Euphonium
1. Motivation (研究动机)
现有方法的问题:
流匹配(Flow Matching)模型已成为高质量视频生成的主流范式(Sora、Veo、Wan、Kling 等均基于此)。为了让这些模型与人类偏好对齐,研究者将强化学习(RL)引入后训练阶段。然而,将在线 RL 算法(如 GRPO)适配到流匹配模型面临核心困难:流匹配的采样过程本质上是一个确定性的概率流 ODE,需要人为注入随机性才能进行策略探索。
现有方案(Flow-GRPO、DanceGRPO)的根本缺陷:
- 依赖无向随机性(undirected stochasticity):通过随机扰动隐空间来探索,噪声方向完全随机,无法保证探索方向朝向高奖励区域。
- 奖励信号稀疏:只在完整视频生成后才能获得反馈(结果级奖励),难以为中间去噪步骤提供密集信号。
- 探索效率低下:随机游走很难找到高质量样本,导致正向监督信号稀少,训练数据效率差、收敛慢。
本文要解决的问题:
如何让流匹配模型的采样过程本身就具有目标导向性——而不是靠随机噪声碰巧找到高奖励区域——从而实现高效、数据友好的对齐训练?
为什么值得研究:
视频生成的后训练对齐是产品落地的关键环节,而现有方法的低效探索严重制约了训练速度和最终效果。一个能在每一步采样中主动引导方向的框架,可以将训练收敛速度提升 1.66 倍,对工业实践具有重要意义。
2. Idea (核心思想)
核心洞见:
将流匹配的采样过程重新诠释为一个随机微分方程(SDE),并在 SDE 的漂移项(drift)中显式注入过程奖励模型(PRM)的梯度。这样,采样轨迹在每一步都被主动引导向奖励更高的方向,而不是依赖随机噪声的被动探索。
1-3 句话概括关键创新:
Euphonium(Exploration Utilizing Process Heuristics Over Non-equilibrium Sampling)将采样过程建模为非平衡传输采样(NETS)框架下的 SDE,通过将 PRM 梯度注入漂移项实现**奖励梯度引导(Reward Gradient Guidance, RGG)**的有向探索;同时引入双奖励 GRPO(过程奖励 + 结果奖励)提供密集的信用分配;最后通过策略蒸馏将引导信号内化到流网络权重中,使推理时无需外部奖励模型。
与现有方法的根本区别:
| 对比维度 | Flow-GRPO / DanceGRPO | Euphonium |
|---|---|---|
| 探索机制 | 无向随机噪声 | PRM 梯度引导的有向探索 |
| 奖励信号 | 仅结果奖励(稀疏) | 过程奖励 + 结果奖励(密集) |
| 推理依赖 | 无额外开销 | 训练后蒸馏,推理时无 PRM |
| 理论基础 | 启发式 SDE 注入 | NETS 框架,严格推导 |
3. Method (方法)
3.1 整体框架
Figure 1 解读: 该图展示了 Euphonium 的完整 pipeline。左侧是训练奖励对比曲线,显示 Euphonium 以 1.66× 的速度收敛至更高奖励。右侧展示了系统架构:SDE 采样阶段将 PRM 梯度注入漂移项进行有向探索;双奖励模型(Latent Reward Model + RGB Reward Model)分别在隐空间和像素空间提供密集奖励信号;GRPO 优化阶段通过带 PRM 优势的 Group Relative Policy Optimization 更新模型参数。
整体框架分为两个交替阶段:
- Phase 1 - 有向探索(Guided Exploration):使用 SDE + RGG 生成多条轨迹
- Phase 2 - 优化(Optimization):使用双奖励 GRPO 更新模型参数
3.2 理论基础:流匹配与 NETS
流匹配(Flow Matching)基础:
设数据分布 ,源分布 。线性最优传输路径定义为:
流匹配训练向量场 来近似最优速度场 ,满足 ODE:
关键命题(Score-Velocity 关系):在线性 OT 路径下,边际密度 的分数函数与最优速度场满足:
非平衡传输采样(NETS):
将采样问题建模为从目标密度 采样,NETS 控制的 SDE 为:
其中 提供基础速度, 为保守力引导粒子远离低势能区域, 为时间相关扩散系数。
3.3 奖励梯度引导(Reward Gradient Guidance, RGG)
从 KL 约束优化到 SDE:
在 KL 散度约束下最大化期望奖励的目标为:
最优解为 Boltzmann 分布:
在时步 处,将参考策略 与流边际 对应,奖励与 PRM 对应,目标密度为:
代入 NETS 框架,势能函数为:
关键 SDE 方程(Euphonium 核心):
漂移项分为两部分:
- 参考动力学:恢复流模型的内在随机动力学(当无外部奖励时退化为 DanceGRPO/Flow-GRPO)
- 奖励梯度引导(RGG):主动将采样轨迹推向高奖励区域
实践中引入标量系数 (对应 )控制引导强度:
Euler-Maruyama 离散化:
总漂移:
3.4 过程奖励模型(Process Reward Model, PRM)
设计动机: PRM 需要在中间噪声状态 (隐空间)直接估计质量,而不是等到完整视频生成。传统做法在像素空间做 PRM 需要通过 VAE 解码器反向传播,内存代价极高(零阶梯度估计方差也大),因此 Euphonium 在隐空间设计 PRM。
架构:
- 输入:噪声视频隐变量 、时间步 、文本嵌入
- 初始化自 HunyuanVideo DiT 的预训练层(取子集以减少计算开销,仅 8 层)
- 轻量 MLP head 将隐状态投影为标量奖励分数
- VAE 和文本编码器冻结
噪声扰动训练策略:
给定干净视频隐变量 ,随机采样时间步 ,按线性 OT 路径(公式 2)构造带噪声隐变量 。这确保 PRM 在整个概率路径上的奖励面 都有良好定义,可在任意噪声水平可靠估计梯度。
训练目标(Bradley-Terry 偏好学习):
给定偏好对 (),采样共享时间步 和噪声 构造 ,用配对排序损失训练:
3.5 双奖励 GRPO 优化
双奖励设计:
同时使用两个独立奖励信号:
- 过程奖励(PRM):每一步的隐空间质量评分(密集信号,高效信用分配)
- 结果奖励(ORM):完整视频的像素级视觉质量评分(稀疏信号,保证视觉保真度)
优势函数计算:
对于第 个样本在步骤 处,总优势为过程优势与结果优势之和:
其中 为组内样本的均值和标准差。
GRPO 目标函数:
重要性权重 ,GRPO 目标:
对数概率计算(策略蒸馏关键):
在计算 时,无论是行为策略还是目标策略,均用不含 RGG 的纯流动力学评估:
由于 是由含 RGG 的动力学生成的,残差 隐式编码了奖励信号——最小化该残差等价于让学生速度场 内化引导,实现无 PRM 推理的策略蒸馏。
3.6 完整训练算法
# Algorithm 1: RGG Sampling & Distillation Training
# Input: pre-trained u_theta, PRM r_p, ORM r_o
def euphonium_training(u_theta, r_p, r_o, prompts, G, M, T):
for iteration in range(1, M + 1):
theta_old = copy(u_theta.params)
# === Phase 1: Guided Exploration ===
trajectories = []
for prompt_c in prompts:
for sample_i in range(G):
X = sample_noise() # X_0 ~ N(0, I)
traj = []
log_probs_old = []
process_rewards = []
for k in range(T):
t_k = timestep_schedule[k]
# 1. Compute base flow drift
D_flow = flow_drift(X, t_k, theta_old)
# 2. Compute PRM gradient for RGG
r_val, grad_rp = r_p.compute_with_grad(X, t_k, prompt_c)
# 3. Total drift = flow + reward gradient guidance
D_total = D_flow + (epsilon_t / beta) * grad_rp
# 4. Euler-Maruyama step with RGG
Z = sample_normal()
X_next = X + D_total * dt + sqrt(2 * epsilon_t * dt) * Z
# 5. Log prob uses flow-only dynamics (for distillation)
mu_old = X + D_flow * dt
log_pi_old = gaussian_log_prob(X_next, mu_old, 2 * epsilon_t * dt)
traj.append((X, X_next, t_k))
log_probs_old.append(log_pi_old)
process_rewards.append(r_val)
X = X_next
# 6. Compute outcome reward on final frame
r_outcome = r_o.compute(X, prompt_c)
# 7. Compute dual advantage (process + outcome, group-normalized)
A = compute_dual_advantage(process_rewards, r_outcome, group_stats)
trajectories.append((traj, log_probs_old, A))
# === Phase 2: Optimization via GRPO ===
for minibatch in batch_sampler(trajectories):
total_loss = 0.0
for (X_k, X_k1, t_k), log_pi_old, A_ki in minibatch:
# Recompute log prob with current policy (flow-only)
D_flow_theta = flow_drift(X_k, t_k, u_theta.params)
mu_theta = X_k + D_flow_theta * dt
log_pi_theta = gaussian_log_prob(X_k1, mu_theta, 2 * epsilon_t * dt)
# Importance weight
omega = exp(log_pi_theta - log_pi_old)
# Clipped PPO loss
loss_unclipped = -A_ki * omega
loss_clipped = -A_ki * clamp(omega, 1 - eps_clip, 1 + eps_clip)
total_loss += mean(max(loss_unclipped, loss_clipped))
# Optional KL regularization
total_loss += kl_coef * kl_divergence(u_theta, ref_model, minibatch)
total_loss.backward()
optimizer.step()
return u_thetaPRM 训练伪代码:
# Process Reward Model Training (Bradley-Terry)
def train_prm(r_phi, preference_dataset, epochs):
for epoch in range(epochs):
for (video_win, video_lose, caption) in preference_dataset:
# Encode to latent space (VAE frozen)
X1_w = vae.encode(video_win)
X1_l = vae.encode(video_lose)
# Sample shared timestep and noise
t = uniform(0, 1)
epsilon = normal(0, I)
# Construct noisy latents via Linear OT path
Xt_w = (1 - t) * noise + t * X1_w
Xt_l = (1 - t) * noise + t * X1_l
# Pairwise ranking loss (Bradley-Terry)
score_w = r_phi(Xt_w, t, caption)
score_l = r_phi(Xt_l, t, caption)
loss = -log(sigmoid(score_w - score_l))
loss.backward()
optimizer.step()双奖励优势计算伪代码:
# Dual Reward Advantage Computation
def compute_dual_advantage(process_rewards, outcome_reward, G, mode='both'):
# process_rewards: [T] per-step PRM scores for this sample
# outcome_reward: scalar ORM score for this sample
# G: group of samples from same prompt
# Group-normalize outcome rewards
group_outcomes = [sample.outcome_reward for sample in prompt_group]
mu_o = mean(group_outcomes)
sigma_o = std(group_outcomes)
outcome_adv = (outcome_reward - mu_o) / (sigma_o + 1e-8)
advantages = []
for k, rp_k in enumerate(process_rewards):
# Group-normalize process reward at step k
group_step_rewards = [s.process_rewards[k] for s in prompt_group]
mu_p = mean(group_step_rewards)
sigma_p = std(group_step_rewards)
process_adv = (rp_k - mu_p) / (sigma_p + 1e-8)
if mode == 'both':
A_k = process_adv_coef * process_adv + outcome_adv_coef * outcome_adv
elif mode == 'only':
A_k = process_adv
else: # 'none'
A_k = outcome_adv
advantages.append(A_k)
return advantages3.7 代码与论文对应表
| 论文概念 | 对应代码文件 | 关键函数/类 |
|---|---|---|
| SDE 采样 + RGG | euphonium/grpo/grpo_sampling/sampling.py | run_sample_step() |
| GRPO 训练步 | euphonium/grpo/grpo_training/grpo_step.py | grpo_one_step() |
| 训练主循环 | euphonium/grpo/grpo_training/trainer.py | 主 training loop |
| 双优势计算 | euphonium/grpo/grpo_training/trainer.py | process_reward_advantage_mode 分支 |
| KL 散度 | euphonium/grpo/grpo_training/kl_divergence.py | KL 计算 |
| PRM(隐空间) | euphonium/reward_models/trl_reward/latent_sub_reward.py | compute_process_reward() |
| ORM(像素空间) | euphonium/reward_models/trl_reward/video_align_sub_reward.py | compute() |
| 总奖励聚合 | euphonium/reward_models/trl_reward/trl_core_reward.py | compute() |
| HunyuanVideo 主模型 | euphonium/models/hunyuan/modules/models.py | DiT 主干 |
| 调度器 | euphonium/models/hunyuan/diffusion/schedulers/scheduling_flow_match_discrete.py | 离散 Flow Match 调度 |
| GRPO 超参数 | euphonium/grpo/grpo_config/grpo_args.py | GRPOArgs |
| 奖励梯度配置 | euphonium/grpo/grpo_config/reward_args.py | PROCESS_LATENT_REWARD_* 环境变量 |
4. Experimental Setup (实验设置)
后训练骨干模型:
- HunyuanVideo(Kong et al., 2024),14B 参数,开源视频生成模型
- 所有对比方法在相同骨干上实现,确保公平对比
对比基线:
- Base Model(HunyuanVideo,无后训练)
- Flow-GRPO(Liu et al., 2025b)
- DanceGRPO(Xue et al., 2025)
奖励模型训练数据:
- 策划数据集:200,000 个视频样本,来自 20,000 个独特提示词
- 标注协议:基于视觉质量和运动保真度的逐点二元标注(正/负)
- 偏好对构建:对比正负实例对,用于偏好学习
PRM 训练设置:
- 初始化自 HunyuanVideo DiT 预训练层子集(仅 8 层 DiT 层,相比 14B 参数主模型)
- 在隐空间直接预测质量分数
- 固定 VAE 和文本编码器
ORM 训练设置:
- 基于 InternVL3-1B(Zhu et al., 2025)微调的评分模型
- Bradley-Terry 目标在配对偏好标注上优化
GRPO 训练数据:
- 10,000 条提示词,来自 DanceGRPO 及内部人像相关源
- 严格与奖励模型训练集隔离
评估指标:
- VBench2(Zheng et al., 2025b)总分及全部 5 个子维度:
- Creativity(创造性)
- Commonsense(常识性)
- Controllability(可控性)
- Human Fidelity(人像保真度)
- Physics(物理一致性)
计算环境:
- 单节点/多节点训练,使用 H800 GPU
- CUDA 12.4
时序激活窗口:
- RGG 激活于后半段时间步(,即步骤 ,共 16 步)
5. Experimental Results (实验结果)
5.1 主要结果(VBench2)
Table 1: VBench2 定量对比
| 方法 | Total Score | Creativity | Commonsense | Controllability | Human Fidelity | Physics |
|---|---|---|---|---|---|---|
| Base Model | 51.09 | 40.18 | 62.87 | 23.95 | 83.30 | 45.15 |
| Flow-GRPO | 51.52 | 42.42 | 62.86 | 24.41 | 85.41 | 42.48 |
| DanceGRPO | 51.85 | 40.93 | 61.99 | 25.08 | 88.10 | 43.14 |
| Euphonium (Ours) | 54.24 | 41.42 | 67.17 | 26.88 | 88.91 | 46.84 |
- Euphonium 在 Total Score 上超越第二名 DanceGRPO 2.39 分
- 在 5 个维度中的 4 个(Commonsense、Controllability、Human Fidelity、Physics)均排名第一
- Creativity 维度略低于 Flow-GRPO(41.42 vs 42.42),但仍排名第二
5.2 训练效率(收敛速度)
Figure 1 Left 解读: 训练奖励随步骤的对比曲线。Euphonium(红色)在约 250 步达到 DanceGRPO(绿色)约 400 步才达到的奖励水平,收敛速度提升 1.66×。这验证了 PRM 梯度引导的有向探索相比无向随机探索的效率优势。
5.3 计算开销(Table 2: RGG 开销分析)
| 指标 | 基线 | w/ RGG | 开销 |
|---|---|---|---|
| Latency (ms/step) | 1005.6 | 1030.1 | +2.4% |
| Peak VRAM (GB) | 32.9 | 35.7 | +8.5% |
轻量级隐空间 PRM 设计(8 层 DiT vs 主模型 14B 参数)将额外开销控制在极低水平:每步仅多 2.4% 延迟、8.5% 显存占用,验证了 RGG 的实用性。
5.4 消融实验(Table 3)
| 消融设置 | VBench2 Total Score |
|---|---|
| Euphonium(完整) | 54.24 |
| w/o Active Steering(去除 RGG 梯度引导) | 53.61 |
| w/o PRM Advantage(去除过程奖励优势) | 53.95 |
| w/o ORM Advantage(去除结果奖励优势) | 53.59 |
关键发现:
- 去除 RGG(Active Steering):分数从 54.24 降至 53.61(-0.63),证明有向探索对导航高质量样本稀疏流形的必要性
- 去除 PRM Advantage:分数降至 53.95(-0.29),说明密集步骤级反馈带来细粒度信用分配
- 去除 ORM Advantage:分数降至 53.59(-0.65),这一降幅与去除整个 RGG 相当,说明像素级评估对感知质量至关重要,隐空间 PRM 无法完全替代
- ORM 消融的影响与 Active Steering 消融相当,两者共同构成系统的关键支柱
5.5 RGG 超参数敏感性(Table 4 & 5)
引导系数 (Table 4):
| VBench2 Total | |
|---|---|
| 0.01 | 53.61 |
| 0.1 | 54.24 |
| 1.0 | 52.86 |
中等引导强度()最优:过弱则引导不足,过强()会过度修正,扭曲流动力学,降低多样性。
时序激活窗口(Table 5):
| 引导窗口 | 步骤范围 | VBench2 Total |
|---|---|---|
| None(基线) | - | 53.61 |
| Full Trajectory | 53.64 | |
| Latter Half | 54.24 | |
| Late Stage | 54.14 |
后半段激活最优:早期步骤()建立全局结构,激进引导会引起时序不一致;后期步骤具备足够的优化空间用于精细调整。
5.6 PRM 准确性分析
Figure 3 解读: 隐空间 PRM 在不同噪声时间步(0-49)和像素空间 ORM 的配对比较准确率。PRM 在所有噪声水平上保持 >70% 的准确率(ORM 为 0.783,PRM 最高为 0.725),验证了隐空间 PRM 在中间噪声状态下的可靠评估能力,证明其可作为视觉质量的有效代理。
5.7 定性结果

Figure 2 解读: 四种方法(Baseline、Flow-GRPO、DanceGRPO、Ours)在两个测试提示词上的视频帧对比。左列(“A group of people eat pizza at a table”)中,基线和对比方法出现人脸形变、画面不一致等伪影,Euphonium 生成的人脸更真实、画面更连贯。右列(“A woman walks through a field of sunflowers”)中,Euphonium 的人物与背景交互更自然,运动物理更合理。
5.8 局限性与未来工作
- PRM 泛化性:隐空间 PRM 与特定 VAE 的隐空间耦合,限制了跨不同视频生成架构的迁移能力
- PRM 鲁棒性:相比基于像素的模型,隐空间 PRM 的鲁棒性仍需进一步研究
- 未来方向:探索使用 Representation Autoencoders(RAE)定义通用共享隐空间,实现骨干无关的 PRM,可跨不同视频生成模型推广
总体结论:
Euphonium 通过将 PRM 梯度显式注入流匹配采样的 SDE 漂移项,从理论上严格推导出有向探索框架,结合双奖励 GRPO(密集过程奖励 + 稀疏结果奖励)和策略蒸馏,实现了:在 VBench2 上达到 54.24 总分(超越当前最优 DanceGRPO 的 51.85),训练收敛速度提升 1.66×,且推理时无额外计算开销。