学界丨从一个失败的强化学习训练说起:OpenAI 探讨应该如何设计奖励函数?

AI科技评论按:在当下,强化学习算法以一种惊奇、不可思议的方式进入到了我们的视野中。AI 科技评论此前也做过不少相关的覆盖和报道,而在 OpenAI 的这篇文章中,Dario Amodei 与 Jack Clark 将会探讨一个失败的强化学习模型。这个模型为何失败?原因就在于你没有指明你的奖励函数。本文由 AI 科技评论进行编译。

我们最近在 OpenAI 上使用 Universe 来进行强化学习的实验。Universe是我们使用的一款软件,可以用它来测试和训练AI代理。实验显示,有时候我们在使用强化学习进行训练时,会出现一些问题。在接下来的例子当中,我们将针对这种情况进行说明:我们将一个模糊的奖励函数应用于一个强化学习的代理,而这导致了我们的代理对优先级的处理是错误的,这也就违反了背景的设定。

要想设计安全的AI系统,我们的算法就不能容忍这种情况的发生。我们必须确定目标,不能使我们的AI代理误解目标。

我们正在 CoastRunners 上训练我们的 AI 代理。正如大多数人类所理解的那样,游戏的目标是快速并且完美的在其他玩家之前完成游戏。在比赛过程中,CoastRunners 并不会对玩家的游戏进程进行奖励。相反,玩家会因为不断地完成目标而获得更高的分数。

我们假设玩家所获得的分数并不是玩家完成比赛的关键,对此我们在这个游戏当中设置一个内部基准,使用这个基准来衡量强化学习系统在这个竞赛中的表现。然而结果表明,强化学习代理为了获得更高分数,而不去完成游戏。这表明,在我们使用强化学习来训练代理玩这个游戏的时候,导致了意想不到的情况。

这个强化学习代理找到了一个孤立的咸水湖,它可以不断地绕圈并不断地完成三个任务来获得分数,当这个三个任务被重现之后,该代理就再次重复它的行动来完成这三个任务。不在乎一味的着火、冲撞其他的船只、进入错误的航道,我们所训练的代理通过使用这种方式来获得更高的分数,而不是使用正常的策略来完成比赛。我们的AI代理获得的分数,平均下来比其他的人类玩家高20%。

尽管在电子游戏的环境中,这种行为是无害并且有意思的,然而这种行为表明广泛存在于强化学习当中的一个问题:精准地使代理按照我们人类的意愿来做事,是很困难或者说是不可能的。我们得到的结果往往是,我们所训练出的是一个不完美而又易受影响的代理。在更广范围来说,它违背了基本的工程学原理,即系统必须是可信并且可以预测的。我们也在我们的实验论文《聚焦AI系统安全问题》中,进行了更深入的探讨。

我们该如何避免这些问题?除了谨慎地设计奖励函数之外,OpenAI 对一些研究方向的探索,可能会有助于减少使用那些错误的奖励函数。

  • 示范训练将会帮助我们避免使用直接指定奖励,相反它会帮助我们训练的代理学习如何模仿一个人来完成任务。在本例中,由于大部分的人类玩家都在试图完成游戏,因此我们的强化学习算法也会这样做。
  • 除此之外,或者说除了人类的示范作用之外,我们可以通过估计游戏进行的环节,或者以一种交互的方式来控制我们的代理,并将其视为人的反馈。非常小的评价反馈可能会帮助代理避免进入死循环。
  • 使用迁移学习的方式来训练众多相似的游戏,并推断对于这种游戏有一个共同的奖励函数,是有可能的。一个典型的游戏更多的是为了完成比赛,而不是为了获得游戏当中的特殊奖励,在基于这个事实的基础之上,我们的奖励函数会将完成游戏列为最高优先级。这看上去和人类玩游戏的方式一样。

但是这种方法可能存有弊端。例如,假如许多相似的环境拥有类似的奖励函数,我们也许能够将这种奖励函数应用到到一个新的环境。但是。这种应用有可能会引发错误。例如,我们使用许多竞赛类的游戏(这些游戏对于开出跑道的惩罚很小)来训练我们的代理,这将会使我们的代理错误的认为在一个全新的、代价更高的背景下,开出跑道也没什么大不了的。更微妙的是,假如应用这种奖励函数的过程涉及到了神经网络,在该网络中那些互斥的例子,有可能导致奖励函数在非正常的区域内来获得高额的奖励,这种现象并不是我们乐意见到的。

解决这类问题是复杂的。我们希望 Universe可以帮助我们快速地发现并解决这些新的错误,最终使我们的系统可信。AI 科技评论也将持续关注强化学习领域的相关内容。

原文发布于微信公众号 - AI科技评论(aitechtalk)

原文发表时间:2016-12-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏成长道路

JDBC动态SQL语句连接orcale数据库的工具类

import java.sql.Connection; import java.sql.DriverManager; import java.sql.P...

2470
来自专栏海说

Java应用中常见的JDBC连接字符串(SQLite、MySQL、Oracle、Sybase、SQLServer、DB2)

Java应用中常见的JDBC连接字符串 Java应用中连接数据库是不可或缺的,于是便整理一些可能用到的JDBC的jar包及其相匹配的URL,以备日后查阅。 1)...

2720
来自专栏菩提树下的杨过

遍历文件夹所有文件(示例)

//要引用 using System.Collections.Specialized; public StringCollection GetAllFile...

2159
来自专栏互联网开发者交流社区

WinForm之窗体应用程序

1853
来自专栏Pulsar-V

C#下各种获取时间的姿势

直接贴代码吧 DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21...

3206
来自专栏C/C++基础

C#获取系统当前时间

ystem.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=Sy...

1153
来自专栏听雨堂

想修改CSS

      下载了一个“通用”的CSS文件,本来想偷懒的,结果发现有问题,就是它用的颜色是变量定义的,无法识别。我又找不到在哪里可以定义。 BODY{     ...

20410
来自专栏码匠的流水账

聊聊spring cloud的LoadBalancerAutoConfiguration

本文主要研究一下spring cloud的LoadBalancerAutoConfiguration

1032
来自专栏xingoo, 一个梦想做发明家的程序员

windows程序设计-第四章 system1.c

/*---------------------------------------------------- SYSMETS1.C -- System M...

23610
来自专栏跟着阿笨一起玩NET

C# Stream 和 byte[] 之间的转换

611

扫码关注云+社区