Eureka: Human-Level Reward Design via Coding Large Language Models 阅读

王 茂南 2023年10月29日07:18:03
评论
1 2567字阅读8分33秒
摘要论文 Eureka: Human-Level Reward Design via Coding Large Language Models 的阅读,主要是利用 LLM 来给强化学习生成 reward。

简介

本文提出了,EUREKA,利用 LLM 来帮助提供强化学习的奖励设计。EUREKA 利用最先进的大语言模型(如 GPT-4)卓越的零样本泛化、代码编写和上下文改进能力,对奖励代码进行渐进优化。由此产生的奖励可用在强化学习中学习复杂的技能。没有任何特定任务的提示或预定义的奖励模板,EUREKA 生成的奖励函数优于专家设计的奖励(核心就是直接把环境代码和任务描述给 GPT,然后让 GPT 根据任务描述生成奖励函数的代码)。

我感觉可以参考一下这篇文章的 prompt,在写环境的时候,可以把 reward 设计的更加好。特别本文最后给了完整的与 LLM 的完整对话,可以模仿这个对话来调试自己的环境。

参考资料

 

论文背景及主要贡献

问题背景

目前大语言模型在高级语义规划方面表现出色,但它们是否可以用于学习复杂的低级操作,比如灵巧的转笔,仍然是一个有待解决的问题。

对于强化学习,目前可以在许多领域取得了令人印象深刻的成果,前提是人类设计师能够仔细构建奖励函数,准确地编纂并提供所需行为的学习信号(强化学习的奖励构建是困难的)。

 

本文的方法

于是考虑到奖励设计的重要性,本文尝试使用最先进的大语言模型(如 GPT-4)开发一种通用的奖励编程算法。理想情况下,这种奖励设计算法应该达到人类级别的奖励生成能力,可以扩展到广泛的任务范围,在没有人类监督的情况下自动执行繁琐的试错过程,并且与人类监督兼容,以确保安全性和一致性。他的主要贡献为:

  • 在 29 个不同的开源强化学习环境中实现人类水平的奖励设计。在没有任何任务特定提示或奖励模板的情况下,EUREKA 自动生成的奖励在 83%的任务上优于专家的奖励,实现了 52%的平均标准化改进。
  • 解决了以前无法通过人工奖励工程实现的灵巧操作任务。文章考虑转笔任务,在这种情况下,一只五指手需要在预先定义的旋转配置中快速转笔,以实现尽可能多的循环。将 EUREKA 与课程学习相结合,我们首次在模拟的拟人化 Shadow Hand 上演示了快速的转笔操作。
  • 为基于人类反馈的强化学习(RLHF)提供了一种新的无梯度上下文学习方法,可以基于各种形式的人类输入生成更高效、更符合人类设计的奖励函数。我们证明 EUREKA 可以很容易地从现有的人类奖励函数中受益并改进。同样,我们展示了 EUREKA 使用人类文本反馈来辅助驾驶员奖励函数设计的能力,这些函数设计捕捉了智能体行为中细微的人类偏好。

 

方法

EUREKA 由三个算法组成:1) 环境作为上下文,能够零样本生成可执行奖励,2) 以迭代方式提出并改进奖励候选项的进化搜索,以及 3) 可以进行细粒度奖励改进的奖励反思。下面是一个流程图:

  • 左侧输入环境代码和任务的描述;
  • 右侧,多次迭代 LLM 生成的 reward 的代码,同时对奖励进行评估并修改;
Eureka: Human-Level Reward Design via Coding Large Language Models 阅读

 

环境作为上下文

首先第一步需要让 LLM 知道环境是什么。这里作者直接将原始的环境代码(如果有的话,不包括奖励代码)直接用作上下文。他解释了两个原因:

  • LLM 目前是有使用 native code 进行训练的。因此,我们可以合理期待,当我们允许代码 LLMs 直接以它们在训练中接触到的风格和语法进行代码组合时,它们生成代码的能力将更为强大。
  • 环境源代码通常反映了环境在语义上包含的信息,以及用于构建特定任务的奖励函数时,应该使用哪些变量。利用这些原理,EUREKA 指导代码 LLM 直接返回可执行的 Python 代码。

然而,需要注意的是,在第一次尝试时,生成的奖励可能无法执行,即使可以执行,也可能相对于任务适应度度量 F(这里 F 任务的成功率) 而言效果不佳。于是本文在后面解决了单个样本奖励生成不够理想的情况。

 

进化搜索

这里作者使用了进化搜索来解决了前述的执行错误和不够理想的挑战。在每次迭代中,EUREKA 从 LLM 中采样了若干独立的输出。由于这些生成是独立同分布的,随着样本数量的增加,一个迭代中所有奖励函数都有错误的概率会呈指数级下降。本文发现,对于我们考虑的所有环境来说,即使在第一次迭代中仅采样了一小部分(16 个)输出,都会至少会包含一个可执行的奖励代码。

EUREKA 在获得可执行的奖励函数之后,就会根据文本反馈,从现有奖励函数生成新的改进奖励函数。通过变异,新的 EUREKA 迭代将上一个迭代中表现最佳的奖励作为上下文,并从 LLM 中生成更多的独立同分布奖励输出,数量为 K。这种迭代的优化会一直持续,直到达到指定的迭代次数。下面是 EUREKA 算法的伪代码:

  • 使用 LLM 独立采用得到 N 个奖励函数的设计;
  • 评估这 N 个奖励函数;
  • 对这 N 个奖励函数给出文字的反馈,并更新 prompt;
  • 保存目前测试结果最好的 reward 的设计,最后就是返回这个 reward 的设计;
Eureka: Human-Level Reward Design via Coding Large Language Models 阅读

 

奖励反思

为了使得 LLM 可以对 reward 进行更好的修改,我们需要用文字来表达生成奖励的质量。这里的文本会包含奖励函数的组成部分的元素,使用这个奖励函数得到策略的评分。

通过提供详细的信息,说明强化学习算法如何优化各个奖励组成部分,奖励反思使 EUREKA 能够更有针对性地编辑奖励,从而生成与特定的强化学习算法更好协同的奖励函数。

下面是一个生成的的奖励函数的代码,可以看到 EUREKA 可以完成下面的操作,(1)更改现有奖励部分的参数,(2)更改现有奖励部分的函数形式,和(3)引入新的奖励部分。

Eureka: Human-Level Reward Design via Coding Large Language Models 阅读

下面是奖励反馈的模板,会把这个给 LLM,并让其对奖励进行修改:

Eureka: Human-Level Reward Design via Coding Large Language Models 阅读

 

实验结果

这里就先不罗列数值实验的结果了,我们来看两个详细使用 EUREKA 的例子。分别是奖励反馈的例子,和将人类加入进行,给出人类的反馈来帮助对奖励函数进行修改。

 

奖励反馈例子

这里首先 EUREKA 会给出一个初始的奖励函数(可能会有若干个奖励函数),如下图所示:

Eureka: Human-Level Reward Design via Coding Large Language Models 阅读

接着我们会生成的奖励进行评估,给出成功率等指标。

Eureka: Human-Level Reward Design via Coding Large Language Models 阅读

接着 EUREKA 会根据反馈进一步对奖励函数进行修改(完整的对话可以查看原文)。

 

EUREKA 结合人类反馈

对于一些任务,我们可以使用人类的语言直接进行反馈。下面是一个例子:

Eureka: Human-Level Reward Design via Coding Large Language Models 阅读

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2023年10月29日07:18:03
  • 转载请务必保留本文链接:https://mathpretty.com/16445.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: