揭秘“强化学习”:只要有奖励,计算机也能玩游戏
科技
科技 > 互联网 > 正文

揭秘“强化学习”:只要有奖励,计算机也能玩游戏

本文由中信前沿综编自谷歌前工程专家、机器学习博士肖恩·格里什的力作《智能机器如何思考:深度神经网络的秘密》,中信出版集团2019年6月出版。

近年来,深度强化学习方法在人工智能方面取得了瞩目的成就。作为AlphaGo的开发者,谷歌旗下的DeepMind公司已经成为强化学习领域的明星。DeepMind将机器学习和系统神经科学的最先进技术结合起来,建立强大的通用学习算法。

而在因为AlphaGo一战成名之前,DeepMind的强化学习技术最初的舞台,则是训练计算机攻克经典的雅达利游戏。

DeepMind玩雅达利游戏

2014 年初,谷歌公司掀起了一场收购狂潮,吞并了多家人工智能和机器人公司。在此期间,他们以超过5 亿美元的价格收购了一家名为DeepMind的神秘小公司。谷歌收购DeepMind几个月后,有关DeepMind 将在全员会议亮相的消息传遍了公司。终于,谷歌的每个人都能了解这个秘密部门在这段时间里的工作了。

DeepMind在会议上解释说,他们已经找到了让计算机程序自学玩各种雅达利游戏的方法。DeepMind让他们的程序玩了数百万局游戏之后,程序的游戏水平通常会比人类玩家优秀很多。

随后,DeepMind向观众展示了计算机程序玩《太空入侵者》的一段视频,在这款游戏中,玩家必须移动屏幕底部的一艘宇宙飞船来射击外星人,阻止外星人降落到底部。图7.1 分别是《太空入侵者》和《打砖块》的游戏截图,你或许认识。

观众全神贯注地观看着计算机程序无可挑剔地玩着游戏。它发射的每一枚导弹都击中了目标。随着一局游戏接近尾声,只剩下了一个外星人。当外星人一步一步地远离导弹,向屏幕右侧移动时,计算机程序发射了一枚偏离轨道的导弹。房间里的人们稍微松了口气,或许这个人工智能终究还是威胁不到人类的生存。

然后,观众继续往下看,只见外星人从屏幕的一侧反弹回来, 开始向屏幕中央移动。此时,程序的策略变得一目了然。外星人直接进入了刚刚射偏的导弹的轨道,然后被摧毁了。计算机完美地赢了一局游戏。房间里爆发出一阵欢呼。

为什么围观的谷歌工程师如此兴奋? IBM难道不是早在近 20 年前的1997 年就创造了“深蓝”,击败了世界上最好的国际象棋棋手加里·卡斯帕罗夫吗?谷歌的工程师难道不知道他们的自动驾驶汽车已经在道路上行驶了近70 万英里?如果连自动驾驶汽车都是可能的,那为什么所有人都对计算机攻克一款简单的电子游戏啧啧称奇?

这个计算机程序之所以让人赞叹,是因为它学会了在没有人类指导的情况下玩游戏。对于自动驾驶汽车,人类需要精心开发探测可行驶地形的功能,自动驾驶汽车其实尚未在反复试错中学会如何自动行驶。

相比之下,程序员从来没有告诉过DeepMind程序任何《太空入侵者》的规则和操作。雅达利游戏智能体的唯一输入是屏幕上的原始像素,以及当前的得分。更令人赞叹的是,DeepMind使用相同的程序来学习全部49 款雅达利游戏,无须任何手动调整。

DeepMind通过一种叫强化学习的思想实现了这一目标,强化学习是人工智能的一个领域,致力于赋予计算机程序从经验中学习的能力。

教导智能体强化学习

这篇文章将解释 DeepMind 如何使用强化学习来掌握这些雅达利游戏。使用强化学习技术的计算机程序通过得到偶然的奖励或惩罚来学习做事情。因此,要训练它们,我们只需要对它们进行编程,让它们寻求这些激励。然后,当它们做出我们希望它们做的事情时,我们就给予它们这些激励,就像当你给宠物狗食物的时候它会学会听从命令一样。

强化学习智能体似乎太智能了,不可能是自动机,但是,它们仍然遵循确定性的程序。例如,经过训练的雅达利游戏智能体玩游戏时,会计算一个数学函数来选择一个操纵杆动作。然后,它一遍又一遍地重复这个过程。然而,正如你可能猜到的那样,神奇之处并不在于它如何玩游戏,而在于它如何学会玩游戏。我们将从这个问题开始:一个智能体如何根据其过去的经验来学习应该采取哪些行动?

我将用一个虚拟的高尔夫球游戏来阐述强化学习的工作原理。我们在图7.3(a)所示的球场上进行游戏,智能体的目标是用尽可能少的杆数将高尔夫球打进球洞。我们感兴趣的是设计一个智能体,当它在高尔夫球场的不同位置时,它能够学习应该朝哪个方向挥杆,才能让球更接近球洞。

现在,假设你是智能体,你要在如图7.3(a)所示的球场上打高尔夫球。你可以瞄准任意主要方向(东、西、南、北)或其中间方向(东北、东南、西北、西南)挥杆。如果你击球成功, 球就会沿着你瞄准的方向移动一个小方格,如图7.3(b)所示, 你希望用尽可能少的击球次数把球打进球洞。还要注意的是,这个球场很大,所以可能需要大约150 杆才能打满一局。

还有两件事会让这个高尔夫球游戏变得有趣。首先,也是最重要的是,球场上到处都有会爆炸的地雷,如图7.3(c)所示。玩游戏的时候,你知道这些地雷的位置,而且每次玩的时候它们都是固定不动的,但是你必须不惜一切代价避免踩到它们。

这里还有最后一个规则来增加游戏难度:球并不总是朝你瞄准的方向移动。有时它会停在旁边的另一个方格中,有时它可能会原地不动。这其中包含了一些随机性,但你可能会怀疑,球在艰难的地形(比如长草区)比在容易的地形(比如果岭)上更难打,这些都是你需要从经验中学习的细节。

为智能体编写程序

我们该如何训练智能体?当它到达终点位置(高尔夫球场尽头的球洞)时,游戏结束,我们立即给它一块巧克力作为奖励(价值为1)。如果智能体踩到地雷,我们会用电击惩罚它,相当于减去半块巧克力(价值为–1/2)。如果智能体踏入其他方格,就既不奖励也不惩罚。

我们需要回答一个更有趣更具技术挑战性的问题:如何创建可以从这些奖励中进行学习的智能体?我们不能指望只给智能体巧克力就能让它做我们希望的事。我们还要让它知道巧克力是值得追求的。

有两个观察可以帮助我们回答这个问题。第一个观察涉及我们如何让智能体存储它的环境模型。我们让智能体把它的环境模型存储在一个巨大的数字立方体中,如图7.4 所示。

这个立方体中的每个小块都会存储一个数字,该数字会告诉智能体在球场不同位置执行特定动作时可以抱有的期望价值,即它应该得到多少块巧克力。每当智能体需要决定采取的动作时, 它都会查看当前位置的所有8 个可能动作,然后它会选择数值最高的动作。如果立方体已经被填入了正确的数值,那么这个策略似乎是可行的。但我们如何确定在立方体的每个小块中应该填入什么数值?

为了回答这个问题,我们就需要另一个关键的观察了,这个观察是关于立方体中的数值应该代表什么的。请注意,如果智能体移动到不是最终目标的状态,那么它就不会得到巧克力。这是有问题的,因为缺乏奖励对智能体而言没有多少进步感。我们可以说,放眼一望,高尔夫球场上奖励的布局实在太平坦了。如果智能体在这种环境中盲目地追求奖励,那么它很难取得进步。

这就引出了我们设计“强化学习智能体”所需要的最终观察结果:即使智能体没有因某个特定状态获得巧克力,它仍然有机会最终因那个状态得到巧克力。立方体中的数值至少应该直观地体现出这个机会的概念。

我们可以将希望由立方体的每个小块表示的价值形式化,形式化的方法是将其定义为智能体可以期望得到的未来所有巧克力的总数,总数随着智能体得到这些巧克力所需要的时间而调整。遥远未来的巧克力应该比当前的巧克力价值更低。

这种时间调整的效果很像你对金钱的估价。比方说,你把一张10 美元的钞票塞进零钱机里换零钱。如果这台机器有一天的延迟,也就是说,你今天投入10 美元,明天得到10 美元零钱,你可能不会认为这是一笔好买卖,因为你已经放弃了在这段时间里花这些钱的权利,而且你明天是否能收回这笔钱还有一些不确定性。所以,或许你只愿意今天往机器里塞8 美元,明天拿到10 美元零钱。得到奖励需要等待的时间越长,通常分配给奖励的价值就越低。从现在起,我将其称为“时间调整”。

为了让智能体去寻找得到巧克力的机会,我们需要开发一种方法,估算出智能体在采取行动时期望得到的巧克力总数,以此填充立方体的每个小块。立方体中数值更高的动作表示有更大、更早、更频繁的巧克力回报。而数值低的动作则意味着更小、更晚、更稀少的巧克力回报。

通过经验填充数据

到目前为止,我们仍然没有具体的方法来填充多维数据集(即数字立方体)中的数值。如果我们有关于这款游戏的完美信息,例如我们在球场的每个区域朝某个方向击球的可能性有多大,那么就可以使用强化学习领域的一些数学公式来计算整个多维数据集的数值。但是这种完美信息是我们没有的奢侈品。

DeepMind解决这个问题的方法是,通过让智能体反复试错来学习多维数据集中的数值。首先,我们让智能体玩一局游戏,让它每次需要移动时都选择随机动作。这会生成一系列的“状态—动作对”,如图7.5 的左侧框图所示。在智能体玩完一局游戏之后,我们需要使用智能体在游戏中的经验来更新多维数据集中的数值。

我们可以将智能体的经验分成几个组块来总结,每个组块都有若干信息:智能体在选择和执行一个动作时处于什么状态,选择哪个动作(北、东北、东等),在执行动作后最终处于哪种状态,以及它到达下一个状态时是否会得到或失去巧克力。你可以在图7.5 的左侧框图中看到这样的一个组块。智能体将从这些经验金块中学习它所需要的一切。

我们需要一些方法来更新多维数据集中的数值,以便把这些经验金块具体化。如果智能体在经历了一些“状态—动作对”之后,最终到达了它的目的地(即球洞),那么我们就把多维数据集中的“状态—动作对”的数值稍微向奖励1 推进一点。我们并不把它设置为1,只是把它向1 稍微推进一点。如果一个“状态—动作对”通向球场上有地雷的位置,我们就把“状态—动作对”的数值向–1/2 稍微推进一点。否则,我们就让“状态—动作对”的数值向0 接近。

当我们第一次开始训练智能体时,多维数据集中的数值是毫无意义的。再加上智能体从选择随机动作开始,我们很难相信它能够学习到好的策略。但是随着时间的推移,学习的质量会逐渐提高。

在每一局高尔夫球游戏中,智能体访问的状态序列都会在高尔夫球场上形成一条“轨迹”。你可以在图7.6 中看到其中一些轨迹。如图7.6(a)所示,最开始,智能体完全随机移动,需要很多杆才能到达最后的球洞。玩过几局游戏之后,智能体就可以跌跌撞撞地向球场末端的球洞移动了。然而,一旦玩过几千局游戏, 它就会精确地绕着地雷移动。如图7.6(b)所示,你可以看到, 智能体甚至在离地雷很远时就预测到地雷,并转向避开了它。

用奖励教导计算机

在高尔夫游戏和玩雅达利游戏的智能体之间,还有需要解决的问题,例如,它的多维数据集要比我们玩高尔夫球游戏的智能体大很多个数量级。即使我们有足够的时间填充多维数据集,或者即使我们只需要填充多维数据集的一小部分,它的大小也会超出计算机内存的限制。DeepMind需要一些其他方式来表示我们放入多维数据集中的信息。

尽管如此,上文描述的是在实践中最常用的强化学习方法之一。这种用奖励教导计算机的概念,奠定了机器在自己所处的环境中学习从而适应各种不同情况的基础,这一点是无法仅仅通过人工预先编程做到的。

亲爱的凤凰网用户:

您当前使用的浏览器版本过低,导致网站不能正常访问,建议升级浏览器

第三方浏览器推荐:

谷歌(Chrome)浏览器 下载

360安全浏览器 下载