只强化机器人真正执行的动作:SmoothRL 异步在线强化学习拆解

机器人基础模型越做越大,推理也越来越慢。真实部署为了不掉帧,普遍改用异步推理:机器人在执行当前动作段(action chunk)的同时,模型在后台算下一段。控制是流畅了,但这也悄悄破坏了在线强化学习。

问题在于:异步执行下,模型「计划的」动作和机器人「真正做的」动作不再一致。新 chunk 算好时,机器人已经走完了旧指令的一部分;新 chunk 还没执行完,下一轮推理结果又来覆盖它的后半段。如果对整段动作统一做梯度更新,就会把机器人改不掉的、甚至根本没执行的动作也算进成功或失败里。

这就是星尘智能基座模型团队发布的 SmoothRL(arXiv:2608.29768)要解决的问题。它是一个能在异步推理循环内部微调预训练策略的在线 RL 框架,核心思路一句话:只对机器人真正执行过的动作做强化学习。

三段划分,一条梯度通路

SmoothRL 按帧把每段 action chunk 按真实执行状态切成三个区域:

  • 已提交区域(committed)——上一轮推理已锁定、不可更改且必然执行。
  • 执行区域(execution)——本轮新生成、机器人将真实执行的动作。
  • 丢弃区域(discarded)——生成了但从未执行,会被下一轮推理覆盖。

训练时三者不能一视同仁。SmoothRL 的关键洞察:只让价值梯度穿过执行区域,让优化目标和机器人运行时真实经历的轨迹分布对齐。

Reinforce in Deployment(在部署中强化)

第二个原则是时间节奏。SmoothRL 在训练 rollout 阶段就直接用异步推理——模型计算与机器人执行并行,replay buffer 记录的是这种实时关系下的轨迹。而不是「先在理想同步环境训练好,再切到异步部署」。从第一步梯度开始,就直面部署时会遇到的执行动态。

具体实现

逐任务用微调后的 π0.5 作为基础策略,沿用 RLT 骨架,加一个轻量的 TD3 风格 actor-critic,在原始动作空间预测残差修正。训练循环的伪代码结构:

# SmoothRL 每段 chunk 的更新伪代码
for chunk in rollout:
    committed, execution, discarded = split_chunk(chunk, execution_frames)

    # 残差策略在原始动作空间修正基础策略
    residual = actor_critic.policy(base_policy(obs))
    a = base_policy(obs) + residual

    # 价值梯度,但只穿过真正执行的帧
    q = critic(obs, a)
    actor_loss = -q.mean()          # 梯度只经过 execution
    masked = execution_frames_mask(actor_loss)

    update_actor(actor_loss * masked)
    update_critic(replay_buffer.sample())

在绳驱 S1 机器人上:动作 30 Hz、推理请求 5 Hz(每 200 ms 得到一个新 chunk)。基础策略每次预测 32 帧;在固定延迟预算下,Committed + Execution 共占 12 帧,其中 6 帧属于本轮真正执行的 Execution 区域——其余 20 帧在执行前就被覆盖。

真机结果

  • 动态投掷:39% → 94%——需要持续加速并在准确时刻释放,任何停顿都会泄掉积累的速度。
  • 给笔戴帽:8% → 83%——双臂相对位姿误差需控制在约 5mm 内。
  • 快递开箱:30% → 90%——把约 1mm 宽的刀片插入 2–3mm 宽的箱盖接缝。

不止成功率。在线 RL 后的一次真实自主投掷 rollout 中,右端执行器的加速度 RMS 下降 52%、jerk 下降 47%。机器人既更准,也更顺滑。

失败样本的变化更有说服力:RL 前三个任务都存在固定系统性偏差(释放速度对不上目标距离、开箱刀片偏左、戴帽动作过于相似)。在线 RL 正是用真实执行结果把这些偏差一点点修正回来——这是部署问题,不是从零重学。

实践要点

  • 异步推理与在线 RL 并不冲突,前提是建模时序:把梯度 mask 到真正执行的帧上。
  • 用与部署相同的异步节奏训练——replay buffer 记录的是实时关系,而不是理想化的。
  • 在冻结的基础策略上加轻量残差策略(TD3 风格)是务实折中;但基础策略若根本不对,残差也救不回来。
  • 学习曲线未必单调。真实在线探索(开箱一度 30%→20% 再回升)不会稳步上升。

资源

滚动至顶部