T03 · Reward 设计的演化:从手工 → motion prior → LLM 自动
核心问题:机器人 RL 最痛苦的环节是设计 reward 函数。这条线索追踪三年里 reward 设计怎么一步步被「自动化」「数据化」。
状态:🟡 趋稳(LLM 自动设计的出现大幅缓解,但未完全解决)
交叉线索:T01(sim2real)、T04(AMP/BFM,motion prior 是 reward 的替代)
🎯 你将学到什么
- 看懂 reward 设计如何从「黑魔法手工试错」一步步被自动化:手工工程化(legged_gym)→ 数据替代(AMP)→ LLM 自动写(Eureka / DrEureka)
- 掌握 legged_gym 把 ETH 多年 reward 配方固化为社区事实标准的意义,以及 AMP 用判别器 style-reward 替代手工 reward 的分水岭意义
- 能解释 Eureka 的「GPT-4 + URDF + 进化算法」机制为何在 29 个任务上超人类专家手写
- 理解 DrEureka 三阶段闭环(Safety Instruction + RAPP + LLM DR Generation),以及 RAPP = Reward-Aware Physics Prior 而非常见误传的 "Reward Augmentation for Policy Performance"
- 学会判断何时该用哪种 reward 范式:通用快速调参选 LLM、有 MoCap 参考选 AMP、需要可复现基线选 legged_gym 手工配方
本页内容
基础解释
一句话直觉
教机器人学技能,最难的环节是给它打分。
分设错了,它会专钻空子,不学真本事。
好比给员工定考核指标。
指标定偏了,员工就刷指标,不干真正的正事。
从基础理解
要解决的问题
强化学习靠一个打分信号教机器人。
但设计一个好打分,比训策略本身还难。
- 太稀疏(走到终点才给分):策略学不出来。
- 太密集(每一步都给分):策略会找漏洞刷分。
- 权重难调(速度、能耗、平滑,三项打架):一动全变。
经典翻车:只奖励前进速度,四足会趴在地上往前爬。
因为爬比走更快。
你得再补几条:别趴下、别太费电、别乱抖。
最后打分函数长得像一串咒语,一个团队几周耗在这上面。
演进脉络(三种解法)
- 手工工程化。把一个团队多年调出来的配方,固化成开源库,让大家终于有个能跑的基线 📎。
- 用数据替代。请人类动作当软打分,训一个风格裁判,从人类动作学什么叫自然 📎。
- 大模型自动写。把机器人说明和任务描述喂给大模型,让它直接写出打分代码,跑几轮看效果再反思改 📎。
方法核心(大白话)
第二条是分水岭,思路最巧。
问题是"自然"这种审美,写不进公式。
但人类动作数据里,全是这种信息。
于是训一个会打分的网络当裁判。
让它看很多人类动作片段,学会人类动作长什么样。
再让它给机器人当前的动作打分,越像人分越高。
这个分当奖励,驱动机器人一步步改动作。
妙在一个写不进公式的目标:自然。
裁判网络却从数据里,把它翻译成了能用的打分。
第三条让大模型写打分,把几周的手工活,压到一次模型调用。
它不改物理机制,改的是门槛。
一句话类比
用人类动作当软打分,之于机器人,就像请一位内行品鉴师给厨师打分。
不用写菜谱细则。
他尝一口,就知道这口像不像正宗味道。
一、这条线索在解决什么
RL 让机器人学技能,靠的是 reward 信号。但设计一个好的 reward 比训练 policy 还难:
- 太稀疏(「走到终点」)→ 学不出来
- 太密集(每一项都奖励)→ 策略会 hack reward,找到漏洞而非真技能
- 权重难调(前进速度 vs 能耗 vs 平滑度)→ 一个权重改一下,行为全变
一个经典例子:只奖励「前进速度」,四足会趴在地上向前爬——因为爬比走更快。你必须再加「高度惩罚」「能量惩罚」「动作平滑」……最后 reward 长这样:
r = w1·forward_velocity + w2·alive - w3·energy - w4·action_smoothness
- w5·orientation_penalty + w6·target_tracking + ...
每个 w 都要反复调,一个 robot 团队几周时间耗在这上面。
这条线索追踪三年里三种解法的演化:① 手工工程化(legged_gym 把经验固化)② 用数据替代 reward(AMP 用动捕当 soft reward)③ 用 LLM 自动写 reward(Eureka / DrEureka)。
二、时间线
2018-2021 年,reward 设计是「黑魔法」,每个团队自己的配方,靠手工反复试错。2021 年 ETH 的 Learning to Walk in Minutes([Rudin 2021, arXiv:2109.11978])把这套经验固化进 legged_gym 开源库——这是社区转折点,大家终于有了一个能跑的基线 reward。同年 AMP([Peng 2021, arXiv:2104.02180])从另一个角度提出:reward 这么难写,能不能用人类动捕数据当 reward?判别器输出「像不像人」就是 soft reward,不用手写。这是分水岭。
2022 年 AMP 工程化(AMP-Adroit),证明判别器 reward 能替代复杂手工 reward。但 AMP 依赖动捕数据,没数据的任务还是得手写。
2023 年 NVIDIA 的 Eureka([Ma 2023, arXiv:2310.12931])给出第三条路:让 LLM 写 reward。GPT-4 看 robot URDF + 任务描述,自动生成 reward 代码,用进化算法迭代。在多个任务上超越人类手写。
2024 年 DrEureka([Ma 2024, arXiv:2406.01967])把 LLM 写 reward 扩展到同时写 domain randomization 参数,并且第一次让 LLM 生成的 reward 支撑 sim-to-real(Unitree Go1 四足 + LEAP hand 灵巧手)。大幅降低调参门槛。
三、关键转折深度解析
转折 1:legged_gym 把手工 reward 工程化(2021)
前作缺陷:每个团队自己写 reward,没法复现、没法比较。ETH 自己用 RaiSim,外部人拿不到。
核心 idea:把 ETH 多年积累的 reward 配方、curriculum、domain randomization 全部固化进 legged_gym(基于 Isaac Gym)。开源、单 GPU、分钟级训练。
为什么是突破:第一次让任何人在家用 GPU 都能训出能走路的四足。社区事实标准。后续 Walk-These-Ways、Extreme Parkour 都建立在它上面。
留下的新问题:reward 还是手写的,换任务/换机器人要重新调。
转折 2:AMP 用数据替代 reward(2021)—— 分水岭
前作缺陷:手工 reward 学出来的动作「机器味」重——抖动、不自然、能耗高。因为 reward 只告诉「目标」,没告诉「人类怎么做」。
核心 idea:用 GAN 式判别器学一个 style reward。判别器从动捕片段学「人类动作分布」,输出「当前动作像不像人」的概率当 reward。和 task reward 相加:r_total = r_task + w·r_style。
为什么是突破:把 reward 设计从「写公式」变成「喂数据」。AMP-Adroit(2022)证明判别器 reward 能替代复杂手工 reward,在四足、人形上 work。
留下的新问题:① 依赖动捕数据,没数据的任务用不了;② mode collapse;③ 还是要手写 task reward。
💡 核心洞察:AMP 把 reward 设计从「写公式」变成「喂数据」——本质是用判别器把人类动捕隐式编码成 soft reward,让 reward 自动化第一次有了不依赖人手的路径,但「依赖动捕 + mode collapse + 仍要手写 task reward」三条局限正是 Eureka 出场的前提。
详见 P-AMP-2021.md 和线索 T04。
转折 3:Eureka 让 LLM 写 reward(2023)
前作缺陷:reward 设计是「黑魔法」,专家要几周。能不能自动化?
核心 idea:GPT-4 输入 robot URDF + 任务描述,输出 reward 代码(Python 函数)。用进化算法迭代:跑几轮训练,看效果,LLM 反思改 reward。关键 trick:让 LLM 输出多个候选 reward,用 RL 训练效果做 fitness 选择。
为什么是突破:第一次让 reward 设计自动化。在 29 个任务(10 种机器人,IsaacGym + Dexterity benchmark) 上,Eureka 在 83% 任务(Isaac 全部 + Dexterity 15/20)达到或超过人类专家手写,平均 normalized improvement 52%(含五指人形手 pen spinning 突破)。
💡 核心洞察:Eureka 的真正价值不在「LLM 写 reward」而在「进化算法 + RL 训练效果当 fitness」——把 reward 代码当可被实证检验的假设,让 LLM 从「一次出答案」升级为「假设-验证-修正」的搜索过程,这才是在 29 个任务上超人类的根。
留下的新问题:① 生成的 reward 不一定能 sim-to-real;② 还是要人写任务描述。
转折 4:DrEureka 把 LLM 写 reward 推到 sim-to-real(2024)
以下细节来自 PDF Sec.IV.B/C/D + Algorithm 1/2,详见 P-DrEureka-2024.md。注意纠正一处常见误读:RAPP 不是「在 reward 里加稳定项」,而是「为 LLM 限定 DR 参数范围」——名字 RAPP = Reward-Aware Physics Prior(不是网上常传的 "Reward Augmentation for Policy Performance")。
前作缺陷:Eureka 生成的 reward 在仿真里 work,但 sim-to-real 还没人验证过;且 Eureka 隐含假设 $M^* = M$(真机=训练仿真),导致 LLM 倾向生成「过度使劲、不安全但仿真分高」的 reward(Sec.IV.B 原话:"a higher simulation score can often be achieved by over-exerting the robot motors or learning unnatural behavior")。
核心 idea:DrEureka 是一个三阶段闭环(Sec.IV + Fig.2),每阶段用 LLM 一次:
Stage A · Safety Instruction(Sec.IV.B)
输入 l_task → 修改 prompt → l = l_task + l_safety
→ GPT-4 在 reward 代码里显式考虑 stability/smoothness/safety 项
→ R_DrEureka, π_initial := Eureka(M, l_task + l_safety) (Eq.6)
Stage B · RAPP(Sec.IV.C,Algorithm 2)
给定 R_DrEureka 和 π_initial,扫描每个 DR 参数的"可行值范围"
→ 输出每个参数 p 的 (l_p, h_p)
Stage C · LLM DR Generation(Sec.IV.D)
把所有参数 + RAPP 范围喂给 LLM,让 LLM (1) 选要随机的子集 {p} ⊆ P
(2) 决定每个参数的随机区间 → zero-shot 生成 m 个 DR 配置 T_1, ..., T_m
→ 对每个 (R_DrEureka, T_i) 跑 RL → π_final,i = A(M, T_i, R_DrEureka)
Stage A · Safety Instruction(Sec.IV.B):作者对比了两种加 safety 的方式——(i) post-hoc 把 safety 项加到 $R_{\text{Eureka}}$(手动定义 safety 项、且 safety 项尺度 dominates 时会过保守,论文 [61]);(ii) 直接利用 instruction-tuned LLM 的指令遵循能力([62]),在语言规范里加 $l_{\text{safety}}$,要求 LLM 显式考虑 stability / smoothness / task-specific 属性。DrEureka 选 (ii),让 LLM 自己平衡各 reward 分量的权重和非加性交互。
Stage B · RAPP 精确机制(Algorithm 2,PDF 原文):
- 动机(Sec.IV.C):仿真器物理参数都有内置 max/min,但「these ranges are too wide and may significantly hamper policy learning」——直接用 simulator 默认范围做 DR 会让 policy 学不出来。RAPP 的洞察是:DR 范围应该依赖任务 reward 并为 policy 量身定制("domain randomization should be dependent on the task reward function and customized to the policy behavior learned without domain randomization")。例如摩擦范围太宽会采到「policy 在该 reward 下根本学不动」的值。
- 高层目标:寻找「$\pi_{\text{initial}}$ 仍能 perform 的最大多样参数范围」("the maximally diverse range of environment parameters that $\pi_{\text{initial}}$ is still performant")。
- Algorithm 2 伪代码(逐行抄自 PDF):
Input: 物理参数集 P, R_DrEureka, π_initial
for each parameter p ∈ P:
l, h = +inf, -inf # 可行下/上界
for search value r ∈ R: # 扫描候选值
# 只改这一个参数,其他保持默认
S.p = r
# 在被扰动的仿真里 rollout π_initial
τ = S(π_initial)
# 命中成功准则 → r 可行
if F(τ):
l = min(l, r); h = max(h, r)
return (l, h) for p
即「one-at-a-time」扫描:每次只改一个参数(其他保持 default),用未重训的 $\pi_{\text{initial}}$ 直接 rollout,若满足成功准则 $F$(如前进速度阈值),就把该值标为 feasible;最后取所有 feasible 值的 min/max 作为该参数的 LLM 采样上下界。
- 关键设计:(a) 用 $\pi_{\text{initial}}$(Eureka 出来的、未做 DR 训练的 policy)当探针——便宜、快;(b) one-at-a-time 而非联合扫描——避免组合爆炸;(c) 只产出上下界给 LLM,不直接当 DR 范围用——Sec.IV.D 明确对比 automatic domain randomization(直接用),DrEureka 把 RAPP 范围当 guide for LLM,让 LLM 在此基础上再决定 subset 和区间,实验证明「base range 太宽会损害学习」。
Stage C · LLM 采样(Sec.IV.D):把所有 randomizable 参数 $P$ 及其 RAPP 范围塞进 LLM 上下文(Fig.3 是实际 prompt),LLM zero-shot 生成 $m$ 个独立 DR 配置 $T_1, \dots, T_m$。对每个组合 $(R_{\text{DrEureka}}, T_i)$ 跑 RL,得到一组 $\pi_{\text{final},i} = \mathcal{A}(M, T_i, R_{\text{DrEureka}})$(Eq.7)。不同于 reward design,DR 生成不迭代反思——LLM 一次出 $m$ 个候选,靠下游 RL 评估挑最好的。
实验任务(Sec.V)(平台细节核对自 P-DrEureka-2024.md):Unitree Go1 四足(12 DoF)——forward locomotion(平地 2 m/s)+ yoga ball balancing(四足踩瑜伽球)+ walking globe(踩滚动球)+ soccer(玩球),其中 walking globe / yoga ball 是论文新任务;LEAP hand 灵巧手(16 DoF,<10K USD 低成本手)——in-hand cube rotation(20 秒内转魔方越多越好,observation 仅 16 关节角 + GRU-encoded proprio history,无视觉)。
主结果(Table I):forward locomotion 上 DrEureka 平均/最佳 policy 超过 Human-Designed baseline 和 reward-design baseline。关键 ablation:
- No DR:去掉 domain randomization → 大幅退化(证明 DR 对 sim-to-real 必要)。
- CEM Random / CEM RAPP:用 CEM(covariance matrix adaptation)搜 DR 范围,Random(从宽范围采)失败,RAPP(从 RAPP 范围采)成功——直接证明 RAPP 的价值在「缩窄范围」而非「搜算法」。
- BayRn RAPP:Bayesian randomization + RAPP 范围——也 work,说明 RAPP 与下游搜索算法解耦。
为什么是突破:第一次让 LLM 生成的 reward 支撑真机部署(Unitree Go1 四足 + LEAP hand 灵巧手)。以前专家几周的活,LLM 几小时。RAPP 是关键工程贡献——把「DR 范围」从黑魔法变成可由 policy 探针自动标定的量。
💡 核心洞察:RAPP 的工程精髓是「用 π_initial 当 one-at-a-time 探针自动标定 DR 范围」——把 domain randomization 从黑魔法升级为可由未重训 policy 自动标定的量,消解了「simulator 默认范围太宽会让 policy 学不出来」这一长期痛点。
留下的新问题:剧烈动作的 sim-to-real 仍难;LLM 对物理直觉不够;RAPP 的 one-at-a-time 扫描忽略了参数交互(高维耦合时可能不准)。
四、三种方法的辨析
| 方法 | 谁设计 reward | 依赖什么 | 适用场景 | 局限 |
|---|---|---|---|---|
| 手工(legged_gym) | 人类专家 | 经验 | 通用,但调参痛苦 | 黑魔法,不可复现 |
| motion prior(AMP) | 判别器从动捕学 | 动捕数据 | 有参考动作的任务(locomotion、animation) | 没数据的任务用不了 |
| LLM 自动(Eureka/DrEureka) | GPT-4 生成 | URDF + 任务描述 | 通用,自动化 | 物理直觉弱,sim-to-real 不保证 |
三者不是互斥,是互补。实际系统常组合:LLM 生成 task reward + AMP 提供 style reward + 手工微调。
五、与其他线索的交叉点
- 与 T04(AMP/BFM):AMP 是 reward 设计演化的关键一环——用数据替代手工 reward。这条线索和 T04 在 AMP 处强交叉。
- 与 T01(sim2real):DrEureka 把 reward 设计和 domain randomization 绑定,是 sim2real 的工程突破。
- 与 T06(VLA):VLA 走另一条路——完全绕开 reward,用监督学习从演示学。但 RL finetune VLA(VLA-RFT 等)又把 reward 带回来了。
六、当前局限与开放问题
- LLM 写 reward 的物理直觉弱:对接触、摩擦、形变这类需要物理理解的 reward,LLM 容易写出「看起来对但实际不 work」的代码。
- 剧烈动作的 reward 仍难自动化:跳跃、翻滚的 reward 极敏感,DrEureka 也不保证 work。
- reward hacking 没有根本解法:无论手工、数据、LLM,策略都可能找到漏洞。AMP 的 mode collapse、Eureka 的「假成功」都是表现。
- 多目标 reward 的权重自动化:前进 vs 能耗 vs 平滑的权衡,目前还是手工。
可能的下一步:
- VLM 辅助 reward 设计:让视觉语言模型看训练视频,判断「动作自然吗」,反馈给 reward。
- RL finetune VLA:用 reward 微调 VLA,但 reward 本身怎么来?可能是 LLM 生成 + 人类偏好(RLHF)。
- world model 当 reward:用 world model 预测「这个动作的后果」,把后果当 reward。
📌 关键要点
- reward 设计三年三跳:legged_gym 把手工经验固化(2021)→ AMP 用判别器把 MoCap 蒸馏成 style reward(2021)→ Eureka / DrEureka 让 LLM 写 reward(2023-2024),每跳都把人工试错成本降一个数量级
- AMP 是分水岭:把 reward 设计从「写公式」变成「喂数据」,但依赖动捕、有 mode collapse、还是要手写 task reward——这三条局限正是 Eureka 出场的前提
- Eureka 在 29 个任务上 LLM 生成的 reward 超过人类专家手写,但 sim-to-real 不保证——这个 gap 由 DrEureka 补上
- DrEureka 的真正贡献是 RAPP(Reward-Aware Physics Prior):用未重训的 π_initial 当探针、one-at-a-time 扫描每个 DR 参数的可行范围,把 domain randomization 从黑魔法变成可自动标定的量
- 三种范式互补而非互斥:实际系统常组合 LLM 生成 task reward + AMP 提供 style reward + 手工微调;reward hacking 至今没有根本解法
七、涉及里程碑论文
- [Rudin 2021, arXiv:2109.11978] Learning to Walk in Minutes + legged_gym —— 手工 reward 工程化、训练民主化
- [Peng 2021, arXiv:2104.02180] AMP —— 用数据替代 reward,分水岭(详见 P-AMP-2021.md)
- [Escontrela 2022, arXiv:2203.15103] AMP-Adroit —— AMP 工程化到 Isaac Gym
- [Ma 2023, arXiv:2310.12931] Eureka —— LLM 自动写 reward,超人(详见 P-Eureka-2023.md)
- [Ma 2024, arXiv:2406.01967] DrEureka —— LLM 写 reward + DR,支撑 sim-to-real(详见 P-DrEureka-2024.md)
八、延伸
- 本仓库论文笔记:P-AMP-2021.md、P-Eureka-2023.md、P-DrEureka-2024.md
- 关联线索:T01 Sim-to-Real Locomotion、T04 Motion Prior
- 外部:Eureka 项目页有交互式 demo,可以看 LLM 生成的 reward 代码
可选复盘:常见误区
澄清:"打分设得越细越好" —— 错。太密集反而奖励钻空子。经典例:只奖励前进速度,四足就趴着爬。
"打分设得越细越好" —— 错。太密集反而奖励钻空子。经典例:只奖励前进速度,四足就趴着爬。
打分项多到互相冲突时,策略会找最省力的漏洞,而不是真技能。
澄清:"用人类动作当软打分,就不需要打分函数了" —— 半错。它替代的是"风格、自然度"那部分;任务目标(走到哪、搬到哪)往往还得手写。两者通常相加 。
"用人类动作当软打分,就不需要打分函数了" —— 半错。它替代的是"风格、自然度"那部分;任务目标(走到哪、搬到哪)往往还得手写。两者通常相加 📎。
风格裁判治"审美",治不了"目标"。
澄清:"大模型写的打分一定比人好" —— 不一定。它在不少任务上超人,但对接触、摩擦、形变这类需要物理直觉的,容易写出"看起来对、实际不灵"的代码 。
"大模型写的打分一定比人好" —— 不一定。它在不少任务上超人,但对接触、摩擦、形变这类需要物理直觉的,容易写出"看起来对、实际不灵"的代码 📎。
大模型赢在广度和试错速度,输在物理直觉。
可选复盘:检查点
用"考核指标"类比,向没学过机器人的朋友解释:为什么"只奖励前进速度"会让四足学会趴着爬?
查看参考答案
- 核心:reward 只规定了'目标'(前进速度),没规定'怎么做'。策略会找最省力的捷径去刷分。
- 类比锚:指标定偏了,员工就刷指标、不干正事——只奖励前进速度,趴着爬比走着走更快,所以策略选爬。
- 结论:这是 reward hacking(钻空子),打分设得太单一就会被策略钻漏洞。
三种解法(手工、用数据替代、大模型写),各自靠什么来定义"什么叫好动作"?
查看参考答案
- 手工:靠人类专家把经验写成公式(一堆加权项)。
- 用数据替代:靠人类动作数据,让裁判网络从中学会'像不像人'来定义好。
- 大模型写:靠大模型读任务描述后自己生成打分代码来定义好。
"风格裁判"是怎么从人类动作里,把"自然"这个写不进公式的目标,变成能用的分的?(用大白话说机制)
查看参考答案
- 机制:训一个会打分的网络当裁判,让它看很多人类动作片段,学会'人类动作长什么样'。
- 打分:再让它给机器人当前的动作打分,越像人分越高。
- 翻译:这个分当奖励驱动机器人改动作——于是'自然'这个写不进公式的目标,被裁判网络从数据里翻译成了强化学习能用的打分。
假如一个任务完全没有对应的人类动作数据,第二条思路还能用吗?为什么?那该走哪条?
查看参考答案
- 结论:不能(或效果很差)。第二条依赖人类动作数据教裁判'什么叫像人';没数据,裁判没参照、学不出风格。
- 类比锚:品鉴师只尝过波尔多,尝不出'这杯像勃艮第'——他脑子里没那个参照。
- 该走哪条:手工(写公式)或第三条(让大模型写打分代码)。
大模型写的打分,在仿真里表现很好。为什么还要担心它"看起来对、实际不灵"?
查看参考答案
- 原因:大模型对接触、摩擦、形变这类需要物理直觉的 reward,容易写出'形式上对、物理上错'的代码。
- 仿真表现好的假象:仿真本身也不精确,可能在仿真里侥幸跑通,到真机就失效。
- 结论:仿真高分 ≠ 真机可靠,大模型赢在广度和试错速度,输在物理直觉。