Eureka:通过编码大型语言模型实现人类水平的奖励设计(ICLR 2024)
大型语言模型(LLMs)在顺序决策任务中作为高级语义规划器表现出色。然而,如何利用它们学习复杂的低级操作任务(如灵巧的笔旋转)仍是一个开放的问题。我们弥补了这一根本差距,并提出了Eureka,一种由LLMs驱动的人类水平奖励设计算法。Eureka利用最先进的LLMs(如GPT-4)在零样本生成、代码编写和上下文改进方面的卓越能力,对奖励代码进行上下文进化优化。然后可以使用生成的奖励通过强化学习获得复杂技能。Eureka生成的奖励函数优于专家人工设计的奖励,无需任何特定任务提示或预定义奖励模板。在包含10种不同机器人形态的29个开源强化学习环境中,Eureka在83%的任务中优于人类专家,平均标准化改进达到52%。Eureka的通用性还实现了一种新的基于人类反馈的无梯度强化学习(RLHF)方法,可以轻松地结合人类监督来改善生成奖励的质量和安全性。最后,在课程学习设置中使用Eureka奖励,我们首次展示了一个模拟的五指Shadow手能够以人类速度灵活地操纵笔进行旋转技巧。
安装
Eureka需要Python ≥ 3.8。我们已在Ubuntu 20.04和22.04上进行了测试。
-
使用以下命令创建新的conda环境:
conda create -n eureka python=3.8 conda activate eureka
-
安装IsaacGym(已测试"Preview Release 4/4")。按照说明下载软件包。
tar -xvf IsaacGym_Preview_4_Package.tar.gz
cd isaacgym/python
pip install -e .
(测试安装) python examples/joint_monkey.py
- 安装Eureka
git clone https://github.com/eureka-research/Eureka.git
cd Eureka; pip install -e .
cd isaacgymenvs; pip install -e .
cd ../rl_games; pip install -e .
- Eureka目前使用OpenAI API进行语言模型查询。您需要在这里获取OpenAI API密钥。然后,在终端中设置环境变量
export OPENAI_API_KEY= "YOUR_API_KEY"
开始使用
导航到eureka
目录并运行:
python eureka.py env={environment} iteration={num_iterations} sample={num_samples}
{environment}
是要执行的任务。选项列在eureka/cfg/env
中。{num_samples}
是每次迭代生成的奖励样本数。默认值为16
。{num_iterations}
是要运行的Eureka迭代次数。默认值为5
。
以下是一些尝试Eureka的示例命令:
python eureka.py env=shadow_hand sample=4 iteration=2 model=gpt-4-0314
python eureka.py env=humanoid sample=16 iteration=5 model=gpt-3.5-turbo-16k-0613
每次运行都会在eureka/outputs
中创建一个时间戳文件夹,保存Eureka日志以及所有中间奖励函数和相关策略。
其他命令行参数可以在eureka/cfg/config.yaml
中找到。支持的环境列表可以在eureka/cfg/env
中找到。
Eureka笔旋转演示
我们已在isaacgymenvs/isaacgymenvs/checkpoints
中发布了Eureka笔旋转策略。使用以下命令可视化它:
cd isaacgymenvs/isaacgymenvs
python train.py test=True headless=False force_render=True task=ShadowHandSpin checkpoint=checkpoints/EurekaPenSpinning.pth
请注意,此脚本使用默认的Isaac Gym渲染器,而不是论文视频中的Omniverse渲染。
在新环境中运行Eureka
- 创建新的IsaacGym环境;说明可以在这里找到。
- 验证标准强化学习是否适用于您的新环境。
cd isaacgymenvs/isaacgymenvs
python train.py task=YOUR_NEW_TASK
- 在
eureka/cfg/env
中创建新的yaml文件your_new_task.yaml
:
env_name: your_new_task
task: YOUR_NEW_TASK
description: ...
- 构建作为Eureka上下文的原始环境代码以及将附加Eureka奖励的骨架环境代码:
cd eureka/utils
python prune_env.py your_new_task
- 尝试Eureka!
python eureka.py env=your_new_task
致谢
我们感谢以下开源项目:
- 我们的环境来自IsaacGym和DexterousHands。
- 我们的强化学习训练代码基于rl_games。
许可证
本代码库根据MIT许可证发布。
引用
如果您觉得我们的工作有用,请考虑引用我们!
@article{ma2023eureka,
title = {Eureka: Human-Level Reward Design via Coding Large Language Models},
author = {Yecheng Jason Ma and William Liang and Guanzhi Wang and De-An Huang and Osbert Bastani and Dinesh Jayaraman and Yuke Zhu and Linxi Fan and Anima Anandkumar},
year = {2023},
journal = {arXiv preprint arXiv: Arxiv-2310.12931}
}
免责声明:本项目仅用于研究目的,不是NVIDIA的官方产品。