农企新闻网

基于TensorFlow的强化学习,在《消灭战士》游戏里训练Agent

发布者:陈熙林
导读雷锋网(大众号:雷锋网):本文原标题Reinforcement learning with TensorFlow,作者为Justin Francis,全文由雷锋字幕组编译。翻译/  林立宏  文加图校正/  Julia整理/  凡江深度强化学习(或许加强学习)是一个很难掌握的一个范畴。在众多各式各样缩写名词和学习模型中,我们一直还是很难找到最好的处理强化学习成绩的办法。强化学习实际并不是最近才呈现

雷锋网 (大众号:雷锋网) :本文原标题Reinforcement learning with TensorFlow,作者为Justin Francis,全文由雷锋字幕组编译。

翻译/  林立宏  文加图

校正/  Julia

整理/  凡江

深度强化学习 (或许加强学习)是一个很难掌握的一个范畴。在众多各式各样缩写名词和学习模型中,我们一直还是很难找到最好的处理强化学习成绩的办法。强化学习实际并不是最近才呈现的。实践上,一局部强化学习实际可以追溯到 1950年代中期 。假如你是强化学习的纯老手,我建议你先看看我后面的文章《 引见强化学习和OpenAI Gym 》来学习强化学习的根底知识。

深度强化学习需求更新少量梯度。有些深度学习的工具 ,比方 TensorFlow 在计算这些梯度的时分格外有用。 深度强化学习也需求可视化形态来表现得更笼统,在这方面,卷积神经网络表现最好。在这篇雷锋网译文中, 我们将会用到Python, TensorFlow和强化学习库 Gym 来处理3D游戏Doom(《消灭战士》)里医药包搜集的环境,想取得全部版本的代码和需求装置的依赖,请拜访我们的 GitHub仓库 和这篇文章的 Jupyter Notebook。

环境探测

在这个环境中,玩家将扮演一个站在强腐蚀性水中的人,需求找到一条搜集医药包并且平安分开的路途。

基于TensorFlow的强化学习,在《毁灭战士》游戏里训练Agent

图1. 环境, Justin Francis提供

我们可以处理这个成绩的一种强化学习办法是——结合基准算法的强化学习。这种强化会复杂点,它仅仅需求来自以后环境行为下的形态和奖励数据。强化也被称为一种 战略梯度办法 ,由于它仅仅评价和更新了智能体的战略。战略是以后形态下智能领会表现出的行为。 例如,在游戏pong(相似于打乒乓球)中, 一个复杂的战略是: 假如这个球以一定的角度挪动,那么最好的行为是对应这个角度挪动挡板。除了用卷积神经网络来评价给定形态下的最好的战略,我们也用到相反的网络依据给定形态来评价价值或许预测临时的奖励 。

首先,我们会用Gym定义我们的环境


在让Agent学习之前,我们看这个是察看一个随机挑选的Agent的基准,很分明我们还有很多需求学习的中央。

基于TensorFlow的强化学习,在《毁灭战士》游戏里训练Agent

图 2. 随机代理, Justin Francis提供

设置我们的学习环境

强化学习被以为是学习中的 蒙特卡洛办法 ,这意味着这个Agent将会在整个行为进程中搜集数据并且外行为完毕后开端计算。在我们的例子中,我们将会搜集多种行为来训练它。我们将会把我们的环境训练数据初始化为空,然后逐渐添加我们的训练数据。


接上去我们定义一些训练我们的神经网络进程中将会用到的超参数。

基于TensorFlow的强化学习,在《毁灭战士》游戏里训练Agent

Alpha 是我们的学习率, gamma 是奖励折扣率。奖励折扣是在给定智能体奖励历史的状况下评价将来能够的奖励的一种办法。假如奖励折扣率趋向于0,那么Agent只需求关注以后的奖励而不需求去思索将来的奖励。我们可以写一个复杂的函数来评价某个行为下的一系列奖励,上面是代码:

基于TensorFlow的强化学习,在《毁灭战士》游戏里训练Agent

计算奖励:

基于TensorFlow的强化学习,在《毁灭战士》游戏里训练Agent

你可以看到这些高折扣率的,由于前面有大的奖励,两头的大的负奖励就被无视了。我们还可以给我们的折扣奖励添加正轨化,来确保我们的奖励范围坚持在一定范围内。这在处理doom环境中十分重要的。

给定形态下我们的价值函数会不断将不时地试图接近折扣奖励。

树立卷积神经网络

下一步,我们将树立卷积神经网络来接纳形态,然后输入对应举措的能够性和形态值。我们会有三个可以选择的举措:向前、后左和向右。这个近似战略的设置和图像分类器是一样的,但是不同的是输出代表的是一个类的相信度,我们输入会表示一个特定举措的相信度。比照于大的图像分类模型,运用了加强学习,复杂的神经网络会更好。

我们会运用convnet ,和之前运用的著名DQN算法是相似的,我们的神经网络会输出一个紧缩大小为84X84像素的图像,输入一个16卷积4跨度的8X8内核,跟随32个卷积4跨度的8X8内核,以一个完全衔接的256层级的神经元完毕。关于卷积层,我们会运用 VALID 填充,会极大减少图像的大小。

我们的近似战略和我们的值战略,都会运用异样的卷积神经元网络去计算他们的值。

基于TensorFlow的强化学习,在《毁灭战士》游戏里训练Agent

在深度学习中,权重初始化是十分重要的,tf.layers默许会运用glorot uniform intializer,就是我们熟知的xavier初始化,来初始化权重。假如你用了太大的偏向来初始化权重的话,Agent会有有偏向,假如用了太小的偏向表现的极为随机。理想的情况是一开端的表现为随机,然后渐渐改动权重的值去最大化奖励。在加强学习中,这被称为勘探和开采,是由于初始的时分Agent会表现为随机探究环境,然后随着每个的更新他会把能够的行为渐渐朝向可以取得好的奖励的举措去靠。

计算和进步功能

如今我们树立了模型,但是我们要怎样让它开端学习呢?处理办法很复杂。我们想要改动神经网络的权重来进步我们采取举措的相信度,改动多少则是基于如何精确估量我们的价值的根底上。总体上,我们需求最小化我们的损失。

在TensorFlow下面完成,计算我们的战略损失可以运用 sparse_softmax_cross_entropy 函数 。稀疏意味着我们的行为标签是单个整数,而logits是我们最终的未激活的战略输入。这个函数计算了softmax和log 损失。这使得执行的举措的相信度接近1,损失接近0。

然后,我们将穿插熵损失乘以贴现奖励与我们的价值近似值的差值。 我们运用罕见的均匀误差损失来计算我们的价值损失。然后我们把损失加在一同来计算我们的总损失。

基于TensorFlow的强化学习,在《毁灭战士》游戏里训练Agent

训练Agent

我们如今曾经预备好去训练Agent了。我们运用以后的形态输出到神经网络中,经过调用tf.multinomial 函数获取我们的举措,然后指定该举措并保存形态,举措和将来的奖励。我们存储新的state2作为我们以后的形态,反复这样的步骤直到该场景的完毕。然后我们加上形态,举措和奖励数据到一个新的列表中,然后我们会用这些输出到网络中,用于评价批次。

依据我们的初始权重初始化,我们的Agent最终应该以大约200个训练循环处理环境,均匀奖励1200。OpenAI的处理这个环境的规范是在超越100次实验中能获取1000的奖励。允许Agent进一步训练,均匀能到达1700,但似乎没有击败这个均匀值。这是我的Agent经过1000次训练循环:

基于TensorFlow的强化学习,在《毁灭战士》游戏里训练Agent

图 3. 1,000遍后,Justin Francis提供

为了更好的测试Agent的相信度,在给定恣意帧图像你需求将形态输出到神经网络中并察看输入。这里,当遇到墙的时分,Agent有90%的相信度这个需求采取向右是最好的举措,当接上去的图像在左边时分,Agent有61%的相信度失掉向前是最好的举措。

基于TensorFlow的强化学习,在《毁灭战士》游戏里训练Agent

图4. 形态比拟,Justin Francis提供

细心考虑一下,你能够会以为,61%的决心似乎是一个分明的好举措,这并不是那么好,那你就是对的了。我疑心我们的Agent次要是学会了防止墙壁,而且由于Agent只收到幸存的奖励,它不是专门试图拿起医药包。随手捡起医药包,使得生活工夫更长。在某些方面,我不会以为这个Agent是完全智能的。Agent也简直无视了左转。Agent用了一个复杂的战略,它曾经会自我学习,还挺无效的。

基于TensorFlow的强化学习,在《毁灭战士》游戏里训练Agent

图 5. 损失和奖励比拟,Justin Francis提供

深化一步

如今,我希望你了解了战略梯度办法的根底知识。更优的Actor-Critic办法、 A3C 或许 PPO,这些都是推进战略梯度办法提高的基石。加强模型不思索形态转换,操作值或TD错误,也可以用于处置信誉分配的成绩。要处理这些成绩,需求多个神经网络和更多的智能训练数据。还有很多方式可以用来进步功能,比方调整超参数。经过一些小的修正,你可以运用相反的网络去处理更多的Atari游戏成绩。去试试吧,看看效果如何!

雷锋网(原作者注:这篇文章是由O'Reilly 和 TensorFlow. See our statement of editorial independence 协作完成。)

旧址: https://www.oreilly.com/ideas/reinforcement-learning-with-tensorflow


基于TensorFlow的强化学习,在《毁灭战士》游戏里训练Agent

基于TensorFlow的强化学习,在《毁灭战士》游戏里训练Agent

基于TensorFlow的强化学习,在《毁灭战士》游戏里训练Agent