0x01 真机 RL 的"最后一公里"

1.1 为什么需要人类在环?

强化学习的理想非常诱人:机器人在环境中试错、得到奖励、再更新策略,逐渐变强。但真实机器人不是仿真器。每一次碰撞都可能损伤硬件,每一次失败都可能需要人工重置,而任务本身的难度又层层叠加:

  • 动态操作:在锅里翻转物体
  • 精密装配:RAM、SSD、USB、汽车仪表盘、IKEA 板件装配
  • 双臂协作:物体交接、双臂装配
  • 高速接触任务:Jenga whipping
  • 长程多阶段任务:IKEA shelf 组合装配

这些任务覆盖了动态、精密、柔性物体、多阶段、双臂协调等不同难点。其问题不只是"动作要准",而是同时要求视觉、力觉、时序、接触、恢复能力都在线工作。纯模仿学习(BC)容易在分布偏移时崩溃,纯自主 RL 又很难在稀疏奖励下探索到成功。

具体来说,HIL-SERL 要面对的是三座大山:

1. 探索瓶颈:精密任务中,成功区域非常窄。RAM 插入、USB 装配这类任务,机械臂的 6D 位姿、夹爪状态、接触力稍微偏一点就失败。如果让机器人靠随机探索寻找成功路径,就像在撒哈拉沙漠里找一枚特定的回形针。更麻烦的是,真机探索不是免费的——每一次错误接触都可能弯折插针、损坏部件。

2. 信用分配:长程任务中,失败往往不是最后一步突然发生的。IKEA shelf assembly 中,前面侧板装得略微歪一点,后面顶板就很难对齐。问题是:最终失败时,算法要判断到底哪一步该负责。稀疏奖励只在最后告诉你"成功/失败",但真正需要修正的动作可能发生在几十秒甚至几分钟前。

3. 分布偏移:行为克隆假设机器人执行时仍然处在专家演示覆盖的状态分布里。现实中,机器人第一步偏 1mm,第二步偏 3mm,几步之后就进入了专家从未演示过的状态。模型不知道怎么恢复,只能继续沿着错误方向输出动作。这就是 compounding errors。

1.2 HIL-SERL 的解决方案:四条腿的凳子

HIL-SERL 的解决方案,是让人类在这些 OOD 错误状态中介入,直接提供"从错误状态恢复"的动作数据,将人类在线纠正融入 off-policy RL。这套方案由四个核心模块共同支撑:

  1. Pretrained visual backbone:降低视觉学习难度,提高真实图像的泛化能力
  2. RLPD-based off-policy RL:利用 prior data(演示+纠偏)和 online replay(自主探索)的 50/50 混合采样,提高样本效率
  3. Human corrections:在策略出错时提供高价值纠偏轨迹
  4. Binary reward classifier + low-level controller:用视觉分类器提供稀疏奖励,用阻抗控制器保证物理安全

这四个模块缺一不可。没有 pretrained backbone,模型要在真实图像上从零学起,数据效率太低;没有 RLPD,离线演示数据和在线干预数据无法被高效吸收;没有 human corrections,探索瓶颈和分布偏移问题无法突破;没有 reward classifier 和底层控制器的配合,奖励设计无法自动化、硬件安全无法保证。

1.3 论文的核心成果

HIL-SERL 在实验上给出了非常强的结果:在动态操作、精密装配、双臂协调等多类 dexterous manipulation 任务上取得 near-perfect success rates,训练时间通常在 1 到 2.5 小时,相比 imitation learning baseline 平均成功率约 2x improvement,执行速度约 1.8x faster

其中多个任务是首次在真实机器人上实现的:双臂协调 + 图像输入 + 真实世界 RL,以及 Jenga whipping、正时皮带装配等高速接触任务。

0x02 设计哲学:三句话讲清 HIL-SERL 怎么想

在进入架构和代码之前,我们先讲清楚 HIL-SERL 的设计者是怎么思考问题的。

2.1 真实世界优先

HIL-SERL 砍掉了 SERL 中的仿真环境(franka_sim)、SmallEncoder、MobileNet 等面向快速迭代的组件。默认编码器改为 resnet-pretrained(冻结 ResNet-10 + SpatialLearnedEmbeddings),牺牲计算效率换取真实场景的视觉泛化能力。所有设计决策围绕"在真实 Franka 机器人上跑通"这一目标。

2.2 人类干预是数据,不是异常

人类干预不是"策略失败的补救",而是"高质量训练信号的来源"。干预数据被独立存储(intvn_data_store),与在线数据享有同等训练地位。HG-DAgger 范式下,干预数据甚至是唯一的训练信号。在这种视角下,每一次人类接手都是在给 RL 算法注入最稀缺的信息——在策略最薄弱的状态下,什么动作是有效的。

2.3 工程实用主义

统一配置系统替代 SERL 的 per-task 脚本硬编码;混合动作空间(SAC + DQN)解决夹爪离散控制的实际问题;纯稀疏奖励 + 分类器替代手工奖励工程;不做置信度预测、不做平滑控制权切换——够用就好。这种"够用就好"的态度贯穿了整个实现,避免了研究性组件对工程稳定性的干扰。

2.4 为什么这套哲学能落地?

这三个设计哲学能行得通,依赖于三个工程前提:

  • 增量控制 + 低频策略(10Hz):硬切换人类干预不会导致控制信号的跳变或震荡
  • 人类干预提供正例:纠偏数据直接弥补了稀疏奖励的信息不足
  • 50/50 采样 + 大容量 buffer:冗余的自主探索数据被自然稀释,不会淹没高价值的干预信号

0x03 SERL vs HIL-SERL:演进了什么

HIL-SERL 建立在 SERL 的工程和算法基础之上,但两者有明确的差异。

3.1 设计差异

HIL-SERL 的关键增强是:在 SERL 的 RLPD / Actor-Learner / 视觉奖励 / 控制系统之上,引入 human corrections。论文中也明确区分了二者:SERL 主要使用 human demonstrations,而 HIL-SERL 同时使用 human demonstrations 和 corrections。这个差异看似很小,但对于困难任务非常关键,因为 correction 数据恰好出现在策略最薄弱的位置。

我们可以这样理解:

SERL:先给机器人一批示范,然后让它强化学习微调。
HIL-SERL:机器人一边学,一边允许人类在错误状态中把它拉回来。

这使得 HIL-SERL 不只是“更会模仿”,而是更会从错误中恢复。

3.2 演化关系

两者的演化关系如下:

SERL (ICRA 2024, Luo et al.)
    · 仅离线 Demo (20条) + 在线自主探索
    · 简单短 horizon 任务 (PCB,线缆,搬运)
    · 单臂,25~50 min 训练
    · 100% 成功率 (简单任务)
            |
            | 问题:复杂任务(双臂/动态/长horizon)学不动
            | 原因:纯探索在高维空间样本复杂度爆炸,策略陷入局部最优无法脱困
            |            
            v
HIL-SERL (arXiv 2024, Luo et al.)
    核心改进:
       + 人类在线纠正 (最关键)
         · 策略卡住时人类接管 -> 注入高质量 off-policy 数据
         · 纠正数据同时进 Demo Buffer + RL Buffer
         · 干预频率随策略提升逐渐降为零
       + DQN 夹爪 Critic
         · 分离连续/离散动作空间 -> 简化多阶段任务学习
       + 双臂支持 (12D twist)
         · 统一框架处理单臂/双臂协调
       + 动态任务支持 (前馈力矩控制)
         · 不仅是精密操作,也能学 open-loop 动态行为
       = 同样保留:RLPD + 预训练视觉 + 阻抗控制 + 相对坐标

3.3 核心差异:一条数据通道到两条

SERL 把所有数据(包括干预数据)通过同一个 data_store 传输,Learner 端无法区分数据来源。干预数据混入 replay buffer,与在线自主数据同等对待。

而 HIL-SERL 使用两个独立通道——data_store 传输在线数据,intvn_data_store 单独传输干预数据——使 Learner 能将干预数据作为高质量的 demo 独立管理,实现 50/50 的混合采样。

维度 SERL HIL-SERL
数据通道 1 个(actor_env) 2 个(actor_env + actor_env_intvn)
干预数据 混入同一 buffer,无区分 独立存储,独立管理
Demo 来源 仅离线 pickle 预加载 离线 pickle + 在线干预动态注入
干预统计 intervention_count/steps
Buffer 持久化 定期 dump pickle

3.4 系统维度对比

SERL 和 HIL-SERL 的系统维度对比如下:

维度 SERL HIL-SERL
定位 研究框架(多算法、多编码器、仿真支持) 工程系统(专注真实机器人部署)
Agent 类型 4 种(SAC/DrQ/VICE/BC) 3 种(SAC/SAC_Hybrid/BC)
编码器 3 种(Small/ResNet/MobileNet) 1 种(ResNet-pretrained only)
动作空间 纯连续 连续 + 离散混合
配置系统 per-task 脚本 + FLAGS 硬编码 统一 DefaultTrainingConfig
奖励学习 VICE Agent(内嵌分类器) Wrapper 外挂分类器
双臂支持 不支持 支持(SAC_Hybrid_Dual)
仿真支持 支持(franka_sim) 不支持

3.5 设计取舍

SERL 和 HIL-SERL 的设计取舍如下:

SERL 的取舍:灵活性 > 易用性
    └ 保留:多算法、多种编码器、仿真、分布式 Critic
    └ 代价:用户需要自己组装,per-task 脚本维护高

HIL-SERL 的取舍:实用性 > 灵活性
    └ 保留:人类干预闭环、混合动作空间、统一配置、多阶段奖励
    └ 代价:砍掉了研究性组件,编码器选择受限,无仿真
    └ 核心增强:
      - 干预双通道:独立管理干预数据和在线探索数据
      - 统一配置系统:通过配置类管理多种训练模式
      - 混合动作空间:SAC + DQN 分离连续/离散控制
      - 更强的实时性:SpaceMouse 改用子进程避免 GIL 阻塞
支持的功能
功能 背后思路
SpaceMouse 人类干预 真实部署中策略必然犯错,人类纠正是最直接的高质量信号
独立干预 Buffer 干预数据与在线数据分离,RLPD 中 50/50 采样保证干预信号不被稀释
HG-DAgger 训练 有些任务 RL 探索代价太高,纯模仿学习更高效
RLPD 混合训练 结合 RL 自探索和人类演示的优势
双臂操作 物体交接等任务需要双臂协调
混合动作空间(SAC+DQN) 夹爪是离散的(开 / 关 / 保持),用 DQN 比 SAC 的连续输出更合理
夹爪惩罚 避免策略频繁切换夹爪,减少机械磨损和无效动作
多阶段奖励分类器 复杂任务(如先抓取再插入)需要分阶段判定成功
多相机奖励分类器 单相机视角有限,多相机融合提高判定准确性
奖励偏置(reward_bias) 稀疏奖励下适当偏置帮助早期学习
预训练 ResNet 编码器 真实图像复杂度高,从头训练编码器数据效率太低
Buffer 持久化 训练中断可恢复,长期积累演示数据
干预统计追踪 监控人类工作量,评估策略改进效果
不支持的功能
不支持 背后思路
仿真环境 真实世界部署不需要 sim2real,砍掉减少维护负担
DrQ Agent 数据增强功能已内化到 SAC 的 augmentation_function 回调,无需独立 Agent
VICE Agent 奖励分类器已通过 Wrapper 实现,不需要在 Agent 内部耦合
SmallEncoder / MobileNet 真实场景视觉复杂度高,轻量编码器不够用
DistributionalCritic / ContrastiveCritic 研究性组件,工程系统不需要
平滑控制权切换 硬切换实现简单,实际效果足够,避免引入额外超参
置信度预测 / 转折点识别 工程复杂度高,收益不确定,当前阈值方案够用
RLDS 数据集支持 面向研究的数据格式,工程系统用 pickle 足够
状态输入(create_states) 真实部署依赖视觉,纯状态输入无实际用途

0x04 系统架构:两个进程 + 三层 Wrapper

HIL-SERL-arch

4.1 HIL-SERL 总体支柱

采样效率的"核动力":UTD

  • 观点:"高 UTD(Update-to-Data)的暴力计算"是采样效率的第一功臣。
  • 实现:通过 cta_ratio(如 20:1),每一步物理交互对应 20 次 Critic 更新。这让网络在极短的时间内"吃透"少量物理数据。
  • 稳定性:引入 LayerNorm 防止高频更新导致的 Q 值爆炸。

机器人的"手感":SAC vs DQN

  • SAC(连续控制):负责机械臂的 6D 空间平滑移动。由于输出是正态分布,它具备极细微的调优能力。
  • DQN(离散控制):负责夹爪的开关。"非黑即白"的离散 Q 值比连续分布更适合处理二进制动作,避免了夹爪在开关之间的犹豫。

人在回路(HIL):指路与纠错

  • 解决"怎么去",把机器人从迷茫中拉回正轨。

HG-DAgger 的"门控"逻辑

  • 事先预防:不同于原版 DAgger 的事后补救,HG-DAgger 通过 Human Gating 在错误发生前瞬间拦截。
  • 代码证据:info.pop("intervene_action")。系统只在人类干预时记录数据,实现了"只学错题"的高效策略。

4.2 Actor-Learner 架构

HIL-SERL 由两个主要组件组成:Robot Side(Actor Process)和 GPU Server(Learner Process),中间通过 agentlace 通信。

Actor Process 的主要功能是:

  • 在机器人上执行当前策略与环境进行交互,并将数据发送回重放缓冲区replay buffer。
  • 人类通过使用 “遥操作工具 SpaceMouse” 干预操作机器人,从而将从RL策略中接管对机器人的控制。

Learner Process 的功能是:

  • 从demo buffer 和replay buffer中等量采样数据,使用RLPD优化策略进行训练,并定期将更新的策略发送给Actor Process。

HIL-SERL-Actor-Learner 架构

交互关系:Actor 向 Learner 发送 transition 数据,Learner 向 Actor 发布更新后的策略参数。各组件间的通信有三条路径:

  • Actor → Learner:通过 ZMQ 上传 transition 数据(data_store 和 intvn_data_store 两个通道)
  • Learner → Actor:通过 ZMQ 下发策略参数(BroadcastServer → BCClient)
  • Actor → Robot Server:通过 HTTP POST 发送动作指令、获取观测状态

4.3 多层 Wrapper 链

我们来看 Actor 端的环境层是如何组织的。每个 wrapper 都有其不可替代的职责,从内到外依次是:

底层 — FrankaEnv:通过 Flask HTTP API 与真实机器人通信,发送动作指令、获取观测和状态信息。这是对机器人硬件的直接封装。

第二层 — 坐标转换(Quat2EulerWrapper / RelativeFrame):将四元数姿态表达转换为欧拉角或 6D 旋转矩阵,将绝对坐标系转换为 end-effector 相对坐标系。这部分继承自 SERL,但 HIL-SERL 做了简化——只保留 ResNet 编码器和相对坐标的固定组合。

第三层 — 奖励分类器(RewardClassifierWrapper):将环境的原始奖励替换为分类器给出的二元奖励(成功=1,失败=0)。这种替换使得奖励设计完全自动化——不需要手工设计密集奖励函数,只需采集成功/失败图像训练一个 ResNet-10 分类器。

第四层 — 人类干预(SpacemouseIntervention):利用 SpaceMouse 6DoF 输入设备实现人类随时接管。当人类推动 SpaceMouse 的力超过阈值时,策略动作被替换为人类动作。切换是硬切换(没有平滑过渡),但实际效果足够。

最外层 — GripperPenaltyWrapper:对频繁切换夹爪的行为施加罚分,减少机械磨损和无效动作。

4.4 双通道数据流

这是 HIL-SERL 与 SERL 最根本的设计差异。

SERL 干预数据流:在 SERL 中,所有数据(包括干预数据)都通过同一个 data_store 传输,Learner 端无法区分数据来源。干预数据被当作高质量的 transition 混入 replay buffer。

HIL-SERL-serl-数据流

HIL-SERL 使用两个独立的数据通道:

  • 普通的 data_store 传输在线探索数据
  • 独立的 intvn_data_store 传输人类干预数据

这种双通道设计让 Learner 能够区分数据来源,将干预数据作为高质量的 demo 独立管理。

HIL-SERL-双数据流

为什么需要双通道? 如果干预数据混入在线数据的单一通道,Learner 无法区分数据来源。SERL 的做法是把所有数据混在一起,用静态 pickle 预加载 demo。而 HIL-SERL 需要动态管理干预数据——干预数据不仅需要优先训练,还需要随训练进程持续注入和更新。

SERL 和 HIL-SERL两者对比如下:

维度 SERL HIL-SERL
数据通道 1 个(actor_env) 2 个(actor_env + actor_env_intvn)
干预数据 混入同一 buffer,无区分 独立 intvn_data_store,Learner 端独立 demo_buffer
Demo 来源 仅离线 pickle 预加载 离线 pickle + 在线干预数据动态注入
干预统计 ❌无 ✅ intervention_count/steps
Buffer 持久化 ❌无 ✅ 定期 dump pickle
QueuedDataStore 容量 2000 50000

4.5 训练范式数据流

两种训练范式的数据流差异如下

  • RLPD(默认):data_store 插入所有数据(包括自主交互和干预),intvn_data_store 额外插入干预数据。Learner 端从 replay_buf(在线 50%)和 demo_buf(干预数据 50%)混合采样。
  • HG-DAggerintvn_data_store 是唯一的数据来源,data_store 完全不使用。Learner 只在 demo_buf 中采样,做纯行为克隆。

综合两个范式之后,数据流图如下:

HIL-SERL-数据流

Logo

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

更多推荐