Eureka: Human-Level Reward Design via Coding Large Language Models
作者 / 机构:Yecheng Jason Ma, William Liang, Guanzhi Wang, De-An Huang, Osbert Bastani, Dinesh Jayaraman, Yuke Zhu, Linxi "Jim" Fan, Anima Anandkumar(NVIDIA / UPenn / Caltech / UT Austin)
发表:ICLR 2024(arXiv 2023.10)
arxiv:2310.12931 · 代码:github.com/eureka-research/eureka · 项目页:eureka-research.github.io
在线索中的位置:属于 T03「Reward 设计的演化」,是第三次转折「LLM 自动写 reward」的开山作
一句话定位:第一次让 LLM(GPT-4)自动生成 reward 函数代码,在 29 个任务中的 83% 任务上达到或超过人类专家手写——reward 设计的「黑魔法」开始被自动化。
动机
强化学习最痛苦的环节是设计 reward 函数:
- 太稀疏学不出来,太密集会被 hack
- 每个任务要研究者反复试错几周
- 经验不可复现,换个机器人要重来
NVIDIA 的 question:GPT-4 既然会写代码、会推理,能不能让它直接写 reward 函数?
方法核心
Eureka 是一个 LLM 进化搜索 + RL 训练闭环(论文 Alg. 1,三组件:environment as context + evolutionary search + reward reflection)。
形式化:Reward Generation Problem(论文 Def. 2.1)
论文先把 reward design 形式化成 RDP(Reward Design Problem):$\mathcal{P}=\langle M, R, \mathcal{A}_M, F\rangle$
- $M=(S,A,T)$:环境(状态/动作/转移)
- $R$:reward 函数空间
- $\mathcal{A}_M(\cdot): R\to\Pi$:RL 算法,给定 reward 输出 policy $\pi$
- $F:\Pi\to\mathbb{R}$:fitness function——只能通过 policy query 评估(即用 ground-truth reward 跑 policy 算分数)
Eureka 的目标:输出 reward 代码 $R$,让 $\mathcal{A}_M(R)$ 训出的 policy 在 $F$ 上得分最高,即 $\max_R F(\mathcal{A}_M(R))$。
⚠️ 关键:$F$ 和 $R$ 是不同的——$F$ 是 ground-truth task metric(如稀疏 success 指示),用于评估;$R$ 是 LLM 生成的 dense shaped reward,喂给 PPO。Eureka 用 $F$ 选最好的 $R$,但不能用 $F$ 直接训 RL(太稀疏)。
组件 1 · Environment as Context(论文 Sec. 3.1)
LLM 输入 = 任务描述 $l$ + 环境源代码 $M$(抠掉已有 reward 代码,只保留 expose state/action 变量的代码片段,自动抽取脚本处理——见 App. D)。这是「reward 是 state/action 变量的函数」的直接利用:环境代码已经把 state 变量 expose 出来,LLM 不需要环境 API、不需要任务特定 prompt template。
LLM 输出 = 可执行 Python reward 代码,要求把 reward 拆成多个命名 component用 dictionary 返回(关键设计——见组件 3)。零样本即可生成 plausible reward。
组件 2 · Evolutionary Search(论文 Sec. 3.2,精确流程)
每轮采样 K 个 i.i.d. reward 候选,跑 RL 评估 fitness,选最好的进入下一轮。论文精确超参:
| 超参 | 值(论文 Sec. 3.2) |
|---|---|
| 每轮 batch size K | 16 |
| 搜索 iteration N | 5 |
| 每个环境的 random restart 数 | 5 independent runs |
精确算法(Alg. 1):
for n in 1..N:
R_1,...,R_K ~ LLM(l, M, prompt) # K=16 i.i.d. reward candidates
s_i = F(R_i) for i in 1..K # 每个 reward 训 RL,跑 fitness
best = argmax(s_1,...,s_K)
prompt += Reflection(R_best^n, s_best^n) # reward reflection 反馈
R_Eureka = R_best^n if s_best^n > s_Eureka # 更新全局最优
return R_Eureka
- 首轮($n=1$):用 initial prompt 采 K=16 个 zero-shot 奖励。论文实测:「sampling just a modest number of samples (16) contains at least one executable reward code in the first iteration」——i.i.d. 采样让全 buggy 的概率指数下降。
- 后续轮($n\geq 2$):in-context reward mutation——把上一轮 best reward + reward reflection + mutation prompt 喂回 LLM,再采 K=16 个改进版。论文 Fig. 3 列出三种 mutation 类型:① 改 component 超参;② 改 component 函数形式;③ 加新 component。
- 5 independent runs per environment:standard random restart 防止局部最优。
组件 3 · Reward Reflection(论文 Sec. 3.3)
只给 fitness 标量反馈不够——LLM 不知道「为什么这个 reward 好/差」。Reward reflection 解决此问题:
- 因为 reward 代码被要求拆成命名 component,reflection 能 track 训练中每个 component 的标量值。
- 反馈 = 在中间 policy checkpoint 记录每个 reward component 的 scalar 值 + task fitness $F$ 的值,用文本汇总喂回 LLM。
- 论文指出 fitness $F$ 缺 credit assignment(不知道哪个 component 起作用),reflection 提供 fine-grained 信号。
Policy Learning(论文 Sec. 4.2)
每个 final reward 用同一套 PPO + 同一 task-specific 超参(IsaacGym/Dexterity 公开实现,原任务作者调过参)。每个 reward 跑 5 个 independent PPO run,从 10 个固定间隔 checkpoint 中取最大 task metric 平均。Fitness $F$:
- Isaac 任务:human-normalized score $\frac{\text{Method}-\text{Sparse}}{\text{Human}-\text{Sparse}}$
- Dexterity 任务:binary success rate
评估环境(论文 Sec. 4 Environments)
- 10 种机器人 + 29 个任务,全部 IsaacGym 实现
- Isaac:9 个原 IsaacGym 环境(quadruped, bipedal, quadrotor, cobot arm, dexterous hands)
- Dexterity:20 个 bi-manual 任务(Chen et al. 2022,两只 Shadow Hand 做 handover、转杯 180° 等)
- 关键抗作弊设计:这些 benchmark 在 GPT-4 知识截止(2021.09)前后发布,GPT-4 不太可能记忆 → 测的是真正的生成能力而非背诵。
为什么重要
1. 83% 任务达到或超过人类专家(最关键的实验结论,论文 Sec. 4.3)
在 29 个任务(10 种机器人,IsaacGym + Dexterity benchmark) 上:
- Eureka 在 83% 的任务上达到或超过 human-expert 手写 reward(论文 abstract + Sec. 4.3:Isaac 全部达标 + Dexterity 15/20)。
- 平均 normalized improvement = 52%(abstract)。
- L2R baseline(Yu et al. 2023,给 L2R 额外提供 human reward 组件作为 API 优势)仍显著落后,特别在高维 dexterity 任务上。
- GPT-3.5 替换 GPT-4:Eureka 仍能 match/exceed human on most Isaac 任务,说明算法不依赖最强 LLM。
Pen spinning 突破(论文 abstract + Sec. 4.4):第一次让五指人形手实现 rapid pen spinning(在预定义旋转配置中转笔,越多圈越好)。Eureka + curriculum learning 解锁此前需大量专家工程的任务。
Evolution 消融(论文 Fig. 5):去掉 evolution(用 32 samples 一次性生成,不分迭代)显著差于完整 5-iter evolutionary search——证明迭代 mutation 的必要性。
2. 揭示了 reward 设计的「可程序化」本质
Eureka 成功说明:reward 设计的「黑魔法」其实是可以被语言描述、可以被代码生成的。LLM 不需要真懂物理,只需要在代码空间里搜索。
3. 开创了「LLM 作为 RL 工程助手」方向
后续 DrEureka(把 reward + DR 参数一起让 LLM 写,支撑 sim-to-real)、VLM 反馈 reward(用视觉判断动作自然度)、RLHF for VLA(reward 微调 VLA)都源自这个思想。
局限
- 生成的 reward 不一定能 sim-to-real:Eureka 只在仿真里验证。真机部署要解决 sim-real gap——这是 DrEureka(2024)的工作。
- 需要明确任务描述:LLM 要知道「在做什么任务」。对模糊任务(如「自然地走路」)效果差。
- 物理直觉仍弱:对接触、摩擦、形变这类需要物理理解的 reward,LLM 容易写出看起来对但实际不 work 的代码。
- 算力成本:每轮要跑 K 个 RL 训练 × N 轮,算力消耗不小。
复现要点
- 复现门槛:⭐⭐⭐
- 官方代码 github.com/eureka-research/eureka,基于 IsaacGym(Makoviychuk et al. 2021)+ PPO。
- LLM 用 GPT-4 gpt-4-0314 variant(论文 Sec. 4 明示)。可替换 GPT-3.5(性能下降但 match human on most Isaac)/ 开源 LLM(效果会差一些)。
- 关键超参(论文 Sec. 3.2 + 4.2):K=16 候选/iteration,N=5 iteration/run,5 independent runs/environment。每个 final reward 跑 5 个 PPO seed,取 10 个 checkpoint 平均。
- PPO 超参用各任务原 author 调好的,不改(论文 Sec. 4.2 明示,体现「只换 reward 不动 RL」的干净对比)。
- 推荐起点:先在简单任务(如 ant/cheetah locomotion)跑通,再挑战 dexterity。
相关
- 建立在:LLM 代码生成能力、Isaac Gym 大规模 RL、reward shaping 理论
- 引出:DrEureka(LLM 写 reward + DR,支撑 sim-to-real)、VLM reward feedback、RLHF for VLA
- 本仓库线索:T03 Reward 设计的演化 第三次转折
- 本仓库概念:C-sim2real-methods.md(DrEureka 把 reward 和 DR 绑定)