返回Blog

机器人操纵的奖励塑造:什么是有效的,什么是不有效的

实用指南对机器人操纵的奖励工程 密集与稀少的奖励,基于潜力的塑造,课程奖励进展,模拟到真实的差距以及如何避免奖励黑客攻击.

机器人武器指南

T9)

奖励设计是课本未能解释和实践者通过痛苦的经验学习的RL的一部分.

密集与稀少奖励:核心交易

利回报 完成任务,没有中间信号 理论上是干净的,不能被黑客攻击.但由于信用分配,利回报超过10个连续步骤的操纵任务灾难性失败:当政策只看到一个回报在完结节目时,它没有信号解释了前200项行动中哪些贡献成功. 样本效率随着稀少的回报下任务视野而呈指数级下降.

密集奖励 基于某种代理任务进步的步骤进步信号 显著提高样本效率.一个学习密集距离到目标奖励的对象将在1050x少于稀有的环境步骤中相近.成本是奖励黑客:代理人会找到方法来最大化你的代理,而不解决实际任务.

为了把数字放在这个上:在我们艾萨克实验室对模拟的 [OpenArm]T10的选定和位置任务的基准中,稀有奖励需要大约200M环境步骤 (在RTX 4090上约8小时,并行环境有4,096个) 达到70%的成功. 但密集奖励代理还在这个过程中发现了三个独立的奖励黑客,这需要反复的奖励重新设计.在操纵RL中的实际技能是建立密集奖励,以捕捉任务而不打开漏洞.

** 指规则:** 只需使用稀少的奖励,只需任务视野低于50步,目标配置是明确的.其他所有事情都需要,组装,工具使用,任何多阶段的东西,需要密集的形状,并且在训练开始之前需要预算25个奖励重设计演变.

基于潜力的塑造:理论上安全的密集奖励

基于潜力的奖励塑造的Ng,Daswani,Russell (1999) 定理提供了一个数学上基础的方法,可以在不改变最佳政策的情况下添加密集奖励. 构建是:T2,其中 Φ 是任何值实的潜在函数.添加F到你的基本奖励 r产生了一个形状的奖励 r + F,共享相同的最佳政策组,如r单独.

对于操纵,最自然的潜在函数是负距离到目标: T3. 这产生了一个塑造术语,当代理移动对象向目标时会给予积极的回报,而移动时会带来负面的回报,而没有以此回报代理人仅仅因为靠近对象而没有抓住它 (这将是一个基于非潜力的密集的回报,并且会改变最佳行为).

实际上实施基于潜力的塑造

理论是清洁的.实施不是.主要的细致:基于潜力的塑造只能保持优势,只能在未折扣或正确折扣的无限视线的情况下.实际上,你运行有限的集节,提前终止,这违反了理论的保证. 塑造术语现在可以创造刺激来延长事件 (积累更多积极的塑造) 而不是快速完成任务.

解决方案是将基于潜在的塑造结合到每步的时间罚款和主导终端奖励.时间罚款确保节目不会拖延,终端奖励确保任务完成总是占据了任何累积的塑造信号.在我们的标准配置中:

def compute_reward(self, obs, action, next_obs, done, info):
    # Potential-based shaping (preserves optimal policy)
    phi_current = -torch.norm(obs["object_pos"] - obs["target_pos"], dim=-1)
    phi_next = -torch.norm(next_obs["object_pos"] - next_obs["target_pos"], dim=-1)
    shaping = self.gamma * phi_next - phi_current

    # Grasp bonus: activated only on first contact
    grasp_reward = 0.0
    if info["contact_force"] > self.contact_threshold and not info["has_grasped"]:
        grasp_reward = 0.5

    # Sparse task completion (dominates all dense signals)
    success = next_obs["object_at_target"].float()
    task_reward = 10.0 * success

    # Time penalty (discourages episode prolongation)
    time_penalty = -0.01

    # Action smoothness penalty
    jerk = torch.norm(action - 2 * obs["prev_action"] + obs["prev_prev_action"], dim=-1)
    smooth_penalty = -0.02 * jerk

    total = task_reward + 0.3 * shaping + grasp_reward + time_penalty + smooth_penalty
    return total

关键比例:任务完成奖励 (10.0) 应该至少是10x一个集中的最大累积形状.工作空间的角形为 ~ 1.0m,剧情为 200 步,最大累积形状是大约 0.3 × 1.0 = 0.3 每个阶段,或者 60 个集中的任务奖励.所以一个任务奖励为 10.0 实际上太低了 你想要 100+ 才能确保主导地位. 我们在此使用10.0来提供清晰度;在生产中,应适当的规模化.

多阶段潜在功能

许多操纵任务有多个连续阶段:接近,抓住,运输,位置.一个潜在函数 (距离到最终目标) 没有为接近和抓住阶段提供塑造信号.解决方案是基于任务进展的相识性潜在函数,它们交换:

  • ** 阶段 1 方法:** Φ(s) = −d(终点_效应,对象). 提供对象的梯度.
  • 第二阶段 掌握: Φ(s) = −d(终点_效应,对象) +掌握_质量(s). 奖励稳定接触.
  • 第三阶段 运输: Φ(s) = −d(对象,目标).
  • 阶段4 位置: Φ(s) = −d(对象,目标) −导向_错误(对象,目标_导向). 当对象距离目标不到5厘米时,是活跃的.

时段过渡应通过物理信号 (接触力门值,对象高度变化) 检测而非时间步骤.基于时间的阶段创造了利用机会,使代理学会过早触发相过渡.

操纵特定奖励组件

Component Normalization Weight Activate When Purpose
EE-to-Object Distance 工作空间 diagonal (0.8–1.2m) 0.1–0.3× Before first contact Encourage approach
Object-to-Target Distance 工作空间 diagonal 0.4–0.6× After grasp detected Primary transport signal
Grasp Quality [0, 1] continuous 0.1–0.2× During contact Prevent dragging
Orientation Alignment 四元数 error [0, π] 0.1–0.2× Last 20% of transport Correct placement angle
Action Smoothness (jerk) Max expected jerk −0.05–0.1× Always Hardware-safe motions
Joint Limit Penalty Binary per joint −0.1× per violation Always Stay within workspace
Collision Penalty Binary −1.0 terminal Self-collision or table Physical safety
Time Penalty Constant per step −0.01× Always Discourage stalling

** 终极效应对象距离:** 通过工作空间对角 (通常0.81.2m) 规范化,以保持组件在 [0, 1).重量:0.10.3×总奖励尺度.目的:鼓励接近对象.在第一次接触后禁用以避免在对象附近浮动. 在实践中,我们使用衰变激活权重:没有接触时的全权重,在第一次接触后10步后线性衰变到零,然后永久停.

目标距离的对象: 只有检测到抓取后才会激活 (接触力 > 门).按工作空间进行正常化.重量:0.40.6×.这是运输阶段的主要密度信号.对于具有紧张放置宽度 (<2mm) 的任务,在最后5cm中添加指数额外奖励:T4,d是米. 这为精确放置阶段创造了强大的梯度,而不会影响更广泛的运输行为.

Grasp质量: 接触稳定性的二进制或连续测量,例如,接触正常是否形成正力封闭,或者GQ-CNN分数,如果你有它.重量:0.10.2×.没有它,代理学会拖动物体而不是抓住它们.在模拟中,你可以从物理引擎提供的接触点和正常计算抗脚抓质量. 在MuJoCo中:检查对象的相对侧面至少存在2个接触点,正常角度差别超过150度.

** 行动顺度:** 惩罚 (联合位置的第三衍生) 阻止损硬件的动. 计算为T5. 体重:0.050.1×作为负罚款. 对真实转移至关重要,因为由于未建模的联合弹性,真实硬件上的sim政策失败. 特别是在OpenArm上,我们发现,没有罚的训练导致手腕关节的伺服器在15分钟内变热.

奖励黑客:一个领域指南

操作奖励设计中,以下黑客反复出现.它们列为警告,而不是发现.

Hack Name Mechanism Frequency Fix
Hover Exploitation EE hovers near object, accumulating proximity reward without grasping Very common Disable EE-proximity after first contact; add time penalty for non-contact phases
Table Push for Termination Pushes object off table to trigger early episode end (less accumulated negative reward) Common Large negative terminal reward (−10×) for out-of-bounds; verify termination conditions
Success Oscillation Rapidly oscillates object through target zone to trigger success on rolling window check Common Require success maintained for 10+ consecutive steps
Gravity Exploitation Drops object near target from height, scoring placement reward during free-fall Moderate Check that EE is within 5cm of object at success time; require low object velocity (<0.05 m/s)
Contact Cycling Repeatedly touches and releases object to accumulate first-contact bonus Moderate Make grasp bonus one-time per episode using a boolean flag
Joint Limit Surfing Jams joints against limits to achieve workspace positions unreachable with smooth motion Occasional Add continuous joint-limit proximity penalty, not just at-limit penalty
Sim Physics Exploitation Exploits penetration or tunneling bugs to teleport objects Rare but catastrophic Validate object positions between steps; flag teleports >5cm as invalid

防黑客设计原则

  • **终端奖励主导地位:**任务完成终端奖励应至少为10x一个集中的最大可能的累积密集奖励. 这确保政策总是更喜欢实际完成任务,而不是利用密集的奖励积累.计算最大: (每步最大的形状) × (最大的集长度) × (形状重量). 你的终极奖励必须超过这个数量.
  • ** 组件正常化:** 保持所有密集奖励组件在 [-1, 1] 和设置明确的权重.不同尺度的非正常化奖励组件相互作用不可预测,使奖励函数对实施细节非常敏感. 记录每个组件的运行统计数据在训练中如果任何组件的差异是>10×另一个,你有一个正常化问题.
  • ** 逆境测试:** 在完整的训练之前,用编写的逆境政策测试你的奖励功能,它故意试图最大化奖励,而不完成任务.如果对手发现一个高奖励路径,而不是完成任务,在浪费GPU时间之前重新设计.在RCSV,我们为常见的操纵任务维护了20个逆境脚本库. 运行它们需要5分钟,节省了几天.
  • 奖励组件记录: 记录每一个奖励组件在训练期间,不仅仅是总数.当奖励曲线看起来健康,但成功率停滞,组件分类显示代理正在利用哪个术语.使用TensorBoard或权重和偏差来跟踪每个组件作为单独的尺度.

学历奖励进步

对于复杂的多阶段任务, 组装一个设备,插入一个宽度 <1mm的,分类混合物, 单个静态奖励功能很少工作. 持续成功的方法是课程奖励进展:从一个简化奖励开始,使任务可学习,然后逐渐增加难度和精度要求.

阶段1:粗的到达 (步骤05M)

奖励仅对象的最终效应器接近. 没有抓取质量要求,没有放置精度. 目标是学习基本的手臂控制和工作空间导航. 成功门:EE在对象的5厘米范围内.

阶段2:获得学士学位 (5M20M步骤)

增加抓质量奖励. 紧缩接近门. 代理现在需要实际地关闭对象周围的手指并建立稳定的接触. 成功门:对象在桌面表面上升10厘米.

阶段3:交通 (步骤20M50M)

激活对象到目标距离奖励. 代理必须抓住,抬起,移动对象到目标. 成功门:对象距离目标5厘米.

阶段4:精确的放置 (步骤50M100M)

缩小所有门. 添加方向对齐奖励. 启用指数精度奖励. 成功门:目标距离2毫米以下的对象,方向错误 <5度. 这就是你需要最耐心和最谨慎的奖励调整的地方.

class CurriculumRewardManager:
    """Manages reward curriculum progression based on training progress."""

    def __init__(self, env_cfg):
        self.stages = [
            {"name": "reach",     "threshold": 0.70, "min_steps": 2_000_000},
            {"name": "grasp",     "threshold": 0.60, "min_steps": 5_000_000},
            {"name": "transport", "threshold": 0.50, "min_steps": 10_000_000},
            {"name": "precise",   "threshold": None, "min_steps": 0},
        ]
        self.current_stage = 0
        self.total_steps = 0

    def maybe_advance(self, success_rate, steps_in_stage):
        stage = self.stages[self.current_stage]
        if (stage["threshold"] is not None
            and success_rate >= stage["threshold"]
            and steps_in_stage >= stage["min_steps"]
            and self.current_stage < len(self.stages) - 1):
            self.current_stage += 1
            print(f"Advancing to stage: {self.stages[self.current_stage]['name']}")

    def get_reward_weights(self):
        """Returns reward component weights for current curriculum stage."""
        if self.current_stage == 0:   # reach
            return {"ee_dist": 1.0, "grasp": 0.0, "obj_dist": 0.0, "orient": 0.0}
        elif self.current_stage == 1: # grasp
            return {"ee_dist": 0.5, "grasp": 0.5, "obj_dist": 0.0, "orient": 0.0}
        elif self.current_stage == 2: # transport
            return {"ee_dist": 0.2, "grasp": 0.3, "obj_dist": 0.5, "orient": 0.0}
        else:                          # precise
            return {"ee_dist": 0.1, "grasp": 0.2, "obj_dist": 0.4, "orient": 0.3}

您希望政策在每个阶段学习了基本行为后,继续前进,而不是在它已经适应了简单版本后.如果您在进步之前等待95%的成功,则政策会发展出优化习惯,以便获得简单的回报,而在精度要求增加时很难放弃.

现实奖励差距

在模拟中完美运行的奖励函数可能会在实际硬件上产生完全不同的行为,即使是域名随机化.

联系动力不匹配

模特接触模型 (MuJoCo的软接触,Isaac Sim的GPU加速硬体) 在摩擦系数,接触硬度和变形行为方面与现实不同.取决于细粒度的接触状态的奖励 (抓质,滑动摩擦) 将在sim vs.真实中产生不同的梯度. 减轻:在训练期间随机定制摩擦系数 (0.31.2×名义),接触硬度 (±50%),对象质量 (±30%).RCSV的 [RL环境]T11) 包含这些随机定制范围作为默认.

2 观察延迟

实际机器人观测可变延迟 (115ms用于联合编码器,3080ms用于摄像头框架).从不同数量的陈旧观测计算的奖励组件产生不一致的信号.在sim中,所有观测都同步.减缓:在训练期间添加随机观测延迟 (02控制步骤) 由于观察延迟,我们已经看到的政策实现了90%的成功,

3. 动机模型不匹配

模拟发动机对命令的反应是即时和准确的.真正的伺服器具有带宽限制 (通常是515Hz的位置控制伺服器),反响 (0.10.5度在典型的和驱动器上),和扭矩波动.依赖于精确的终端效应器定位的奖励受到影响,因为真正的机器人无法达到模拟政策预期的位置. 减轻:作为一级低通行过器的模型动力学,频率在520Hz之间随机排序,并增加每关节的均反响噪音 ±0.3度.

实用测试: 在部署一个模拟训练的政策之前,在模拟中评估它,并将所有随机定位到其极端同时 (最糟糕的摩擦,最大的延迟,最低的执行器带宽).如果成功率保持在50%以上,则该政策很可能足够强大,以实现实际部署.如果它下降到30%以下,在训练期间添加更多的随机定位.

特定任务的奖励功能

下面是用于常见操纵任务的现场测试奖励规格,通过RCSV进行多次设计代调整:

选择和放置 (简单)

两阶段:接近 + 运输.EEE距离塑造 (重量0.3) 直到接触,然后在抓住后塑造对象距离 (重量0.5).终端:10步程的目标3厘米内对象+100.时间罚款: -0.01/步骤.总训练:在艾萨克实验室 (4096 envs) ~15M步骤,在RTX 4090上 ~45分钟.

插 (强度耐受度 < 1mm)

需要四阶段的课程. 方法,抓住,粗的对齐 (轴在洞轴10度内),细插入.关键的见解:在最终插入阶段使用基于力的奖励而不是基于位置的奖励.原因是,在微米位置的准确性是视觉上不可靠的,但在成功插入时的力配置是独特的和一致的. 奖励特征的力量签名 (Z-力量增加与有限的XY-力量) 而不是位置.

目标重定向 (手动)

单阶段,但需要精巧的指控.奖励:在电流和目标方向之间进行导向错误,以SO (SO) 3测量为地质距离).关键补充:惩罚对象线性速度 (对象应在位置旋转,而不是飞过工作空间). 预计200万+步骤,即使有精心设计的奖励率也达到4060%.在真实硬件上,影子手的触觉反有助于,但引入传感器噪音.

双手会议

需要每个手臂的分别奖励流,加上协调奖励.每个手臂都获得了自己的方法/抓取/运输阶段.协调奖励奖励是两个手臂在合适的相对配置的组装步骤. 这就是奖励设计真正的困难:协调的重量太多,使两臂在正确的相对姿势中结,而实际上没有完成任务;重量太小,而双臂碰撞.

奖励设计常见的错误

  1. 观察奖励,不要说: 计算奖励来自摄像头观测 (有噪音) 而不是特权的Sim状态 (这是确切的).在Sim训练期间,总是从地面真实状态计算奖励.政策观察噪音传感器,但奖励应该是干净的.
  2. **忘记节目界限:**基于潜力的塑造需要正确处理节目重置.如果在节目开始时不零化潜力,每个节目的第一步将从终端状态潜力和初始状态潜力之间的差异中获得虚假的大型塑造信号.
  3. 奖励延迟不匹配: 如果你的奖励取决于接触检测,并且你的接触检测有2步延迟,奖励信号会迟到2步.政策学习在"应该"时提前行动2步,导致振荡.确保奖励计算和观察时间均齐.
  4. **不测试在边界:**你的奖励可能适用于工作空间中心的对象,但在边缘附近的对象 (距离正常化行为不同的地方) 或机器人的联合界限附近 (可达性限制与奖励梯度相互作用的地方) 时,可能会断裂.
  5. **单种子评估:**RL对种子敏感.一个种子中90%的成功率可能会在另一个种子中产生20%的成功率. 在完成奖励工作之前,总是通过至少3种种子进行评估.在RCSV,我们使用5种子作为标准,并报告平均 ± std.

工具和框架

下列框架为操纵RL提供奖励功能基础设施:

  • Isaac Lab (NVIDIA): GPU平行化环境,内置的奖励功能类.适合尺寸 (4.09616,384个平行环境). T6类支持权重多组件奖励,每个组件的登录是出盒子的. 建议用于生产培训.
  • MuJoCo + Gymnasium: 更准确的接触物理,较少的平行环境 (通常是164与CPU).更适合进行奖励原型设计,需要详细检查个别事件. T7对于诊断奖励黑客的价值不. T7在0.1x速度观察代理人的行为时揭示了奖励曲线隐藏的内容.
  • robosuite (斯坦福): 预先构建的操纵任务,具有标准的奖励功能. 奖励设计的良好起点.
  • RCSV RL环境: 预先配置了使用OpenArm和其他RCSV硬件模型,验证的奖励功能和域名随机定位预设的Isaac Lab环境.

相关阅读

模仿学习中的常见错误 · 行为政策解释 · 机器人创业技术堆 · 机器人词典 · RCSV RL环境

根据RCSV的模拟环境,标准操纵任务的参考奖励实现包括了与反黑客安全措施的内置.

模拟环境用于操纵RL

对于常见的操纵任务,RCSV提供预先配置的模拟环境,具有验证的奖励功能.开始使用经过验证的奖励设计,而不是从零开始构建.

T20) [与解决方案工程师谈话]T21)