π0、π0.5 这类 VLA 依靠 Flow Matching 生成连续动作,动作质量高,也适合一次输出一段 action chunk。但它们的采样过程本来是确定性的 ODE:没有天然的探索噪声,最终动作的对数概率又很难直接计算。PPO 需要的恰好就是可探索的策略和可计算的概率比,因此过去很多 VLA 强化学习方法只能较容易地用在离散动作或显式高斯策略上。

πRL 解决的不是如何重新设计一个 VLA,而是如何把已经完成 SFT 的流式 VLA 改造成可做在线强化学习的随机策略。论文给出两条路线:Flow-Noise 学习每一步去噪转移的噪声,Flow-SDE 则把确定性 ODE 转成具有相同边缘分布的 SDE,再用混合 ODE-SDE 采样降低训练成本。

先给出结论:

  • Flow-Noise 把完整去噪链当作一个可求概率的离散过程,概率计算直接,但训练时需要处理整条链。
  • Flow-SDE 把去噪过程和机器人环境交互写成两层 MDP;工程实现只随机选择一个去噪步,其余步骤仍走 ODE,速度更快。
  • RL 阶段默认冻结 VLM,只训练约 300M 参数的动作专家和 critic;训练完成后移除探索随机性,部署时仍使用确定性动作生成。
  • πRL 的提升主要体现在动作执行、视觉扰动和相近任务上。面对全新的任务目标,MetaWorld ML45 的结果没有稳定提升,不能把它理解为 RL 自动获得了新的高层语义能力。

在这里插入图片描述

论文: πRL: Online RL Fine-tuning for Flow-based Vision-Language-Action Models
源码: RLinf/RLinf
官方文档: RL on π0 and π0.5 Models
模型权重: RLinf on Hugging Face

1、πRL 要解决的是 Flow Matching 与策略梯度之间的接口问题

1.1、普通流式 VLA 为什么不能直接套 PPO

π0 一类模型接收多视角 RGB、语言指令和机器人状态,由 VLM 提取视觉语言特征,再由动作专家从高斯噪声逐步生成未来动作块。论文把动作块写成 A t = [ a t , 0 , … , a t , H − 1 ] A_t=[a_{t,0},\ldots,a_{t,H-1}] At=[at,0,,at,H1],其中 H H H 是预测动作长度。

SFT 阶段采用 Conditional Flow Matching。对真实动作 A t A_t At 和高斯噪声 ϵ \epsilon ϵ 做线性插值:

A t τ = τ A t + ( 1 − τ ) ϵ A_t^\tau=\tau A_t+(1-\tau)\epsilon Atτ=τAt+(1τ)ϵ

模型学习向量场 v θ v_\theta vθ,目标是逼近真实速度 u ( A t τ ∣ A t ) = A t − ϵ u(A_t^\tau|A_t)=A_t-\epsilon u(AtτAt)=Atϵ

L C F M = E [ ∥ v θ ( A t τ , o t ) − u ( A t τ ∣ A t ) ∥ 2 2 ] \mathcal{L}_{\mathrm{CFM}}= \mathbb{E}\left[ \left\|v_\theta(A_t^\tau,o_t)-u(A_t^\tau|A_t)\right\|_2^2 \right] LCFM=E[vθ(Atτ,ot)u(AtτAt)22]

这里:

符号 含义 在模型中的作用
o t o_t ot 环境时刻 t t t 的观测 包含图像、语言和本体状态
A t A_t At 真实动作块 SFT 的监督目标
A t τ A_t^\tau Atτ 流时间 τ \tau τ 上的带噪动作 动作专家的输入
ϵ \epsilon ϵ 标准高斯噪声 生成流的起点
v θ v_\theta vθ 模型预测的速度场 推动噪声逐步变成动作
t t t / τ \tau τ 环境时间 / 去噪时间 两者不能混为同一个时间轴

推理时,从噪声开始做若干次 Euler 更新,最后得到连续动作。问题在于:确定性 ODE 不会主动探索;而 PPO 的概率比 π θ n e w ( a ∣ s ) / π θ o l d ( a ∣ s ) \pi_{\theta_{new}}(a|s)/\pi_{\theta_{old}}(a|s) πθnew(as)/πθold(as) 又要求策略具有可计算的动作概率。πRL 的两个方法,本质上都在为这个确定性生成过程补上可控随机性和显式概率。

1.2、两条路线的关系

在这里插入图片描述

方法 随机性从哪里来 MDP 建模 概率计算对象 训练后的推理
Flow-Noise 动作专家特征经过可学习噪声网络 一层环境 MDP 整条去噪轨迹的联合概率 移除噪声网络,走确定性 ODE
Flow-SDE ODE-to-SDE 转换得到固定噪声 去噪内层 + 环境外层的两层 MDP 随机去噪转移的高斯概率 关闭 SDE 噪声,走确定性 ODE

简单来说,Flow-Noise 更像给每一步去噪加一个可学习的方差头;Flow-SDE 更像从数学上把采样方程改写成随机过程。两者最终都把难算的最终动作概率,替换为容易计算的高斯转移概率。

2、Flow-Noise 与 Flow-SDE 的具体做法

2.1、Flow-Noise:为去噪步骤学习方差

Flow-Noise 把第 τ \tau τ 个去噪状态到下一状态的转移写成高斯分布:

p ( A τ + δ ∣ A τ , o ) = N ( μ τ , Σ τ ) p(A^{\tau+\delta}|A^\tau,o)=\mathcal{N}(\mu_\tau,\Sigma_\tau) p(Aτ+δAτ,o)=N(μτ,Στ)

μ τ = A τ + v τ δ , Σ τ = d i a g ( σ θ ′ 2 ) \mu_\tau=A^\tau+v^\tau\delta,\qquad \Sigma_\tau=\mathrm{diag}(\sigma_{\theta'}^2) μτ=Aτ+vτδ,Στ=diag(σθ2)

δ = 1 / K \delta=1/K δ=1/K 是单次去噪步长, K K K 是去噪步数; v τ v^\tau vτ 是动作专家预测的速度; σ θ ′ \sigma_{\theta'} σθ 由额外噪声网络输出,并由当前带噪动作和观测特征决定。由于每一步都是显式高斯转移,整条去噪链的联合对数概率可以写成:

log ⁡ π ( A ∣ o ) = log ⁡ [ π ( A 0 ∣ o ) ∏ k = 0 K − 1 π ( A τ k + 1 ∣ A τ k , o ) ] \log\pi(\mathcal{A}|o)= \log\left[ \pi(A^0|o)\prod_{k=0}^{K-1} \pi(A^{\tau_{k+1}}|A^{\tau_k},o) \right] logπ(Ao)=log[π(A0o)k=0K1π(Aτk+1Aτk,o)]

其中 A = ( A 0 , … , A 1 ) \mathcal{A}=(A^0,\ldots,A^1) A=(A0,,A1) 表示完整去噪轨迹,不是机器人在环境中的动作序列。这样,PPO 更新的是生成一条去噪轨迹的概率,而这条轨迹最终对应一个可执行动作块。

论文特别说明,噪声网络只服务于 RL 探索。RL 完成后将它丢弃,部署策略恢复为确定性流模型。因此 Flow-Noise 并不会让真机动作长期带随机抖动。

2.2、Flow-SDE:把 ODE 变成可探索的 SDE

Flow-SDE 从确定性方程 d A τ = v τ d τ dA^\tau=v^\tau d\tau dAτ=vτdτ 出发,引入扩散项,同时修正漂移项,使随机过程保持与原 ODE 相同的边缘分布。论文给出的最终形式是:

d A τ = [ v τ + σ τ 2 2 τ ( A τ + ( 1 − τ ) v τ ) ] d τ + σ τ d w τ dA^\tau= \left[ v^\tau+ \frac{\sigma_\tau^2}{2\tau} \left(A^\tau+(1-\tau)v^\tau\right) \right]d\tau +\sigma_\tau dw_\tau dAτ=[vτ+2τστ2(Aτ+(1τ)vτ)]dτ+στdwτ

这里 d w τ dw_\tau dwτ 是 Wiener 过程增量, σ τ \sigma_\tau στ 控制探索强度。离散化后,每一步仍然是高斯分布:

μ τ = A τ + [ v τ + σ τ 2 2 τ ( A τ + ( 1 − τ ) v τ ) ] δ \mu_\tau=A^\tau+ \left[ v^\tau+ \frac{\sigma_\tau^2}{2\tau} \left(A^\tau+(1-\tau)v^\tau\right) \right]\delta μτ=Aτ+[vτ+2τστ2(Aτ+(1τ)vτ)]δ

Σ τ = σ τ 2 δ I \Sigma_\tau=\sigma_\tau^2\delta I Στ=στ2δI

I I I 是单位矩阵,因此协方差为各向同性; μ τ \mu_\tau μτ 决定下一步的平均去噪方向, Σ τ \Sigma_\tau Στ 决定探索范围。代码里的 noise_level 就是控制这部分噪声尺度的主要参数。

Flow-SDE 的完整表述是两层 MDP:内层状态为 ( o t , A t τ ) (o_t,A_t^\tau) (ot,Atτ),内层动作是下一个去噪状态;当 τ \tau τ 到达终点,最终动作才进入外层机器人环境并获得奖励。完整展开所有去噪步会显著拉长 horizon,因此论文和代码采用混合采样:每个环境时刻只随机选一个去噪步走 SDE,其余去噪步仍走 ODE。这使训练保留了可计算的随机转移,同时避免每次更新都处理完整随机链。

2.3、PPO、动作块与 critic

πRL 把一个动作块看成一次宏观动作。若实际执行 H ′ H' H 个控制步,则该宏观动作的奖励为这些控制步奖励之和。critic 用 GAE 估计优势,actor 再使用 PPO 的裁剪目标更新:

ρ t ( θ ) = π θ n e w ( a ˉ t τ ∣ s ˉ t τ ) π θ o l d ( a ˉ t τ ∣ s ˉ t τ ) \rho_t(\theta)= \frac{\pi_{\theta_{new}}(\bar a_t^\tau|\bar s_t^\tau)} {\pi_{\theta_{old}}(\bar a_t^\tau|\bar s_t^\tau)} ρt(θ)=πθold(aˉtτsˉtτ)πθnew(aˉtτsˉtτ)

J ( π θ ) = E t [ min ⁡ ( ρ t ( θ ) A ^ t , c l i p ( ρ t ( θ ) , 1 − ε , 1 + ε ) A ^ t ) ] J(\pi_\theta)= \mathbb{E}_t\left[ \min\left( \rho_t(\theta)\hat A_t, \mathrm{clip}(\rho_t(\theta),1-\varepsilon,1+\varepsilon)\hat A_t \right) \right] J(πθ)=Et[min(ρt(θ)A^t,clip(ρt(θ),1ε,1+ε)A^t)]

s ˉ t τ = ( o t , A t τ ) \bar s_t^\tau=(o_t,A_t^\tau) sˉtτ=(ot,Atτ) 是 Flow-SDE 内层状态, a ˉ t τ \bar a_t^\tau aˉtτ 是采样得到的下一去噪状态, A ^ t \hat A_t A^t 是 GAE 优势, ε \varepsilon ε 是 PPO 裁剪范围,论文实验统一使用 0.2。对于 Flow-Noise,概率比可改用整条去噪链的联合概率。
在这里插入图片描述

π0 和 π0.5 的 critic 接法不同。π0 的机器人状态进入动作专家,因此论文默认从动作专家特征估计价值,并对整条去噪轨迹上的价值取平均;π0.5 将状态信息合并进 VLM 侧,critic 可以直接接 VLM 输出。消融结果显示,VLM 后的 critic 更容易优化,但作者最终仍根据模型的信息流选择对应位置,而不是只追求曲线最高。

3、训练流、推理流与一个抓取例子

3.1、完整训练流

  1. 使用官方配置对 3.3B 的 π0 或 π0.5 做任务 SFT,得到在目标机器人和场景中具备非零成功率的初始策略。
  2. RL rollout 时输入相机图像、语言指令和机器人状态。π0.5 在论文配置中不使用显式本体状态,这一点与 π0 不同。
  3. 动作专家从高斯噪声生成动作块。Flow-Noise 对所有去噪步注入可学习噪声;Flow-SDE 随机挑一个去噪步注入 SDE 噪声。
  4. 环境执行动作块中的前 H ′ H' H 步,记录奖励、终止状态、旧策略 log probability、critic value 和去噪链中间状态。
  5. 根据 chunk-level reward 计算 GAE,再重新计算新策略 log probability,构造 PPO 概率比并更新模型。
  6. 论文默认冻结 VLM,只更新动作专家、critic,以及 Flow-Noise 中的噪声网络。这样既节省显存,也避免视觉语言能力在窄场景 RL 中被过度改写。
  7. 更新后的 actor 权重同步给 rollout 模型,继续采样,直到评测成功率收敛。

以指令 pick up the black bowl and place it on the plate 为例,SFT 策略可能已经会接近黑碗,但偶尔抓偏或提前松爪。在线 RL 不需要新的人工示范:策略在仿真中尝试不同的去噪轨迹,成功放到盘子上获得奖励。PPO 随后提高这些随机转移的概率,降低导致抓偏、抛掷或超时的转移概率。反复更新后,动作专家学到的是更稳的接近、闭合和放置动作,而不是重新学习黑碗和盘子的语言含义。

3.2、部署推理流

  1. 输入当前多视角 RGB、指令和模型配置要求的本体信息。
  2. VLM 编码视觉和语言,动作专家从标准高斯噪声开始迭代去噪。
  3. 关闭 Flow-SDE 随机噪声,或直接移除 Flow-Noise 噪声网络。
  4. 用确定性 ODE 得到动作块,只执行其中前 H ′ H' H 步,然后重新观察和规划。

因此,训练阶段的探索噪声、critic 和环境奖励都不是部署输入;推理也不依赖世界模型、未来图像或深度图。πRL 是给流式动作策略做在线后训练的方法,不是世界模型或视频预测方法。

4、源码如何实现论文方法

本文检查的是 RLinf main 分支,commit 9ad44393d15b0e93461d7415591110678ae17ef6,提交日期为 2026-08-15。仓库在论文发表后仍持续扩展,因此当前代码不等同于论文冻结版本。

4.1、与 πRL 直接相关的目录

RLinf/
├── examples/embodiment/
│   ├── run_embodiment.sh
│   ├── train_embodied_agent.py
│   └── config/
│       ├── model/pi0.yaml
│       ├── model/pi0_5.yaml
│       ├── libero_spatial_ppo_openpi.yaml
│       └── maniskill_ppo_openpi.yaml
├── rlinf/models/embodiment/
│   ├── openpi/openpi_action_model.py
│   └── modules/
│       ├── explore_noise_net.py
│       └── value_head.py
├── rlinf/runners/embodied_runner.py
├── rlinf/workers/actor/embodied_fsdp_actor_worker.py
└── rlinf/algorithms/
    ├── advantages.py
    └── losses.py

4.2、论文模块到源码的映射

论文概念 源码位置 实际作用
π0/π0.5 RL 主模型 openpi_action_model.py / OpenPi0ForRLActionPrediction 构建动作专家、噪声头、value head,并统一 rollout 与 PPO 前向
Flow-Noise ExploreNoiseNetsample_mean_var_val() 从 action expert 特征预测有界标准差
Flow-SDE sample_mean_var_val() 按 SDE 公式计算均值和标准差
混合 ODE-SDE _sample_actions_with_prefix_cache() 随机选择一个 denoise index,其余步骤使用 flow_ode
联合轨迹概率 joint_logprob=True 对初始噪声和各去噪转移求 log probability 并聚合
critic ValueHead_compute_value_from_suffix()get_value_from_vlm() 从动作专家或 VLM 特征估计状态价值
GAE compute_advantages_and_returns() 用 reward、done 和旧 value 计算优势与回报
PPO 损失 compute_ppo_actor_loss() 由新旧 log probability 构造 ratio 和 clipped loss
训练调度 EmbodiedRunner.run() 权重同步、rollout、优势计算、actor 更新、评测与保存

动作采样的关键逻辑可以压缩成下面几行:

if self.config.joint_logprob:
    denoise_inds = torch.arange(num_steps)
else:
    denoise_inds = random_one_step(num_steps)

for idx in range(num_steps):
    method = self.config.noise_method if is_selected(idx) else "flow_ode"
    mean, std, value, velocity = self.sample_mean_var_val(..., method, ...)
    x_t = mean + torch.randn_like(x_t) * std
    log_prob = self.get_logprob_norm(x_t, mean, std)

joint_logprob=True 时,代码保存整条去噪链,符合 Flow-Noise 的联合概率思路;为 False 时只选一个随机去噪步,符合 Flow-SDE 的混合 ODE-SDE rollout。get_logprob_norm() 对随机步计算逐元素高斯对数概率,对标准差为 0 的 ODE 步返回 0,避免数值发散。

Flow-Noise 的方差也不是无限制学习。ExploreNoiseNet 先用 MLP 输出 log variance,再经过 tanh 映射到配置给出的上下界:

noise_logvar = torch.tanh(self.mlp_logvar(noise_feature))
noise_logvar = logvar_min + (logvar_max - logvar_min) * (noise_logvar + 1) / 2
noise_std = torch.exp(0.5 * noise_logvar)

这对应论文中 σ θ ′ \sigma_{\theta'} σθ 的实现,默认范围由 noise_logvar_range 控制。限制方差范围很重要,否则噪声头可以通过极小或极大方差破坏 PPO 的概率比。

4.3、训练入口与最小启动方式

官方入口是:

git clone https://github.com/RLinf/RLinf.git
cd RLinf
bash requirements/install.sh embodied --model openpi --env maniskill_libero
source .venv/bin/activate

bash examples/embodiment/run_embodiment.sh \
  libero_spatial_ppo_openpi_quickstart

启动脚本最终进入 train_embodied_agent.py,再由 EmbodiedRunner 循环完成权重同步、环境交互、GAE 和 actor 更新。模型与数据路径必须在 YAML 中改成实际位置;这不是下载仓库后即可在普通显卡上直接跑通的轻量示例。官方 quickstart 仍以 4 张 H100 为参考,完整实验使用 8 张 H100 80GB。

4.4、论文与当前开源实现的差异

项目 论文 v3 当前主分支
核心算法 以 PPO 为主,附录补充 GRPO 文档和配置同时支持 PPO、GRPO,并扩展 Async PPO 等能力
基准 LIBERO、ManiSkill、MetaWorld、CALVIN,另有 SIMPLER 和 Real2Sim2Real 在此基础上继续扩展更多环境与模型,不能把新增结果倒算成论文结论
时间记号 论文用 τ : 0 → 1 \tau:0\rightarrow1 τ:01 表示噪声到动作 OpenPI 代码内部 timestep 从 1 递减到 0;是参数化方向不同,不是算法冲突
π0.5 状态输入 论文实验明确说明 π0.5 不使用显式 state 当前通用 YAML 仍保留 use_proprio 等接口,实际输入应以具体 checkpoint 和 dataconfig 为准
LIBERO π0 Flow-SDE 均值 论文表 3 为 96.1% 当前文档汇总页写作 96.0%,属于版本或汇总口径差异
Flow-Noise 支持 原始 OpenPI 路径完整支持联合 log probability 新增的 openpi_rlinf PyTorch 移植路径明确只支持单随机步 Flow-SDE;不能把两条实现路径混用

5、实验结果说明了什么

5.1、域内结果:少样本 SFT 可以被 RL 大幅补强

在这里插入图片描述

论文在四个基准上都报告了明显提升。π0 的平均成功率从 51.1% 提升到最高 80.3%,π0.5 从 55.6% 提升到最高 86.6%。不同基准上 Flow-Noise 和 Flow-SDE 没有绝对胜负:Flow-Noise 在 π0 的 LIBERO、MetaWorld 上更高,Flow-SDE 在 π0.5 的 ManiSkill、MetaWorld、CALVIN 上更高。

在这里插入图片描述

LIBERO 的数据效率最亮眼。π0 只用 58 条少样本轨迹完成 Spatial、Object、Goal 的 SFT,Long 使用 208 条;π0.5 使用 40 条轨迹形成统一初始 checkpoint。论文表 3 显示,少样本 π0.5 + Flow-Noise 达到 98.3%,超过全量数据 SFT 的 96.9%。不过正文随后出现 single trajectory for SFT 的表述,与前文 40 条轨迹设置不一致,应以实验设置与表格为准,不能据此宣称只用一条轨迹即可复现 98.3%。

ManiSkill 包含 16 类物体、17 个容器和 16 个桌面场景,共 4,352 个组合任务。π0.5 从 40.1% 提升到 90.9%。这里使用了 16,384 个规划器合成 episode 进行 SFT,并非纯粹靠在线 RL 从零学会抓放。

5.2、OOD 结果:动作泛化增强,不等于任务泛化增强

在这里插入图片描述

ManiSkill 将 OOD 分成视觉语言变化、语义干扰和动作执行变化。RL 后视觉与执行类扰动普遍提升,语义类仍明显偏低。CALVIN 从 ABC 场景训练后零样本迁移到 D 场景,π0.5 成功率从 61.3% 提升到 79.1%,说明相同任务下的视觉与布局变化可以受益于 RL。

但 MetaWorld ML45 用 45 个任务训练、5 个全新任务测试时,OOD 曲线持续震荡,没有稳定改善。作者自己的总结很克制:RL 能把低层动作表示练得更稳,并保留 SFT 阶段已有的 OOD 能力,但尚不能稳定迁移到全新的任务目标。

5.3、消融给出的工程经验

在这里插入图片描述

混合两层 MDP 与完整两层 MDP 最终成功率接近,但单次更新时间从 814.2 秒降到 428.6 秒,接近 2 倍加速。一层 MDP 收敛更快,却因为需要重算完整去噪链的概率,总墙钟时间没有优势。
在这里插入图片描述

噪声强度存在明显折中。噪声太大会破坏原策略,导致 rollout 初期成功率下降;噪声太小虽然接近确定性策略,却带来更大的梯度和更高的 clip fraction,训练反而不稳定。LIBERO-Spatial 中 a = 0.5 a=0.5 a=0.5 是作者采用的主要平衡点,但不是所有环境的通用最优值。
在这里插入图片描述

去噪步数太少会放大 ODE-to-SDE 离散误差, K = 1 K=1 K=1 时训练 rollout 明显变差;步数增大又会拉长计算链。动作块更长可以提高 SFT 起点,但会降低策略与环境交互频率,使 reward credit assignment 变粗,critic 的 explained variance 下降。因此长任务是否应该增加 action chunk,要同时看初始成功率和 RL 上限。

5.4、仿真到真机只是案例验证

在这里插入图片描述

SIMPLER 上,π0 和 π0.5 的平均成功率分别提高 19.5 和 19.9 个百分点。Real2Sim2Real 案例使用 Franka Panda、RealSense D435、ManiSkill 刚体动力学和 3D Gaussian Splatting 渲染;20 条规划器轨迹完成少样本 SFT,再做 100 次 RL 迭代,最终零样本真机成功率为 40%,而 SFT 基线为 0%。这是一个单任务案例,能证明路线可行,但还不足以说明 πRL 已具备通用真机在线学习能力。

6、方法价值、限制和工程判断

πRL 最有价值的地方,是把流式 VLA 与 PPO 之间缺失的概率接口补齐了。它没有改变 π0 的基础感知结构,也不要求重新收集大规模真人示范;只要 SFT 策略已经有一定成功率,就可以在并行仿真中利用环境反馈继续提升动作质量。

如果准备在项目中尝试,建议按下面顺序推进:

  1. 先保证 SFT 在每个子任务上都有非零成功率。稀疏奖励下,完全失败的策略很难产生有效优势信号。
  2. 第一版优先用 Flow-SDE 和混合 ODE-SDE rollout。它不需要学习噪声网络,计算链也更短,适合先验证 PPO 闭环。
  3. 重点监控随机 rollout 与确定性 eval 的成功率差距、KL、clip fraction 和 explained variance。只看训练成功率容易误判。
  4. 从中等噪声开始;若 SFT 切到随机 rollout 后性能断崖下降,先减小噪声或增加去噪步数。
  5. 窄场景中先冻结 VLM。只有视觉或语言域偏移确实是瓶颈,并且可以使用更小学习率和更少 update epoch 时,再尝试 LoRA。
  6. 真机阶段不要直接在线探索。论文自己也把低样本效率列为限制,现阶段更现实的路线仍是仿真 RL、域随机化或 Real2Sim2Real,再做确定性真机部署。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐