BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

如何训练智能体Agent玩毁灭战士ViZDoom?

| 作者 武维 关注 5 他的粉丝 发布于 2018年6月26日. 估计阅读时间: 12 分钟 | 都知道硅谷人工智能做的好,你知道 硅谷的运维技术 也值得参考吗?QCon上海带你探索其中的奥义

前言

毁灭战士(Doom),是由 ID Software 开发的第一人称射击游戏,是第一人称射击游戏的开拓者。ViZDoom是基于 Doom 游戏的人工智能研究平台,主要针对的是深度强化学习的研究。ViZDoom平台允许人工智能 Bot 使用游戏图像信息进行对战,与传统游戏内置Bot的区别在于,传统游戏内置Bot对整个游戏的信息都是知道的。而基于人工智能的Agent获得的游戏信息和人是相同的,需要不断地探索地图及执行相应的行动。本节主要介绍ViZDoom中的两个场景:射击场景,使用了Deep Q-learning算法;收集医药箱场景,使用了Policy Gradients算法。两个场景如下图所示:

在射击场景中,怪物随机地出现在界面的一端,智能体有左、右移动和射击三个动作,怪物只要被击中一次,就会被杀死。当怪物被杀死或执行100次行动后怪物还没被杀死,则游戏结束。当怪物被杀死,智能体得到101奖励分数;当执行射击后,怪物没有被击中,智能体得到-5分的奖励;当执行向左或向右行动后,怪物还在存活,智能体得到-1分的奖励。

在收集医药箱的场景中,整个地图是矩形的,地面上是酸性的腐蚀液体,液体会周期性地腐蚀智能体的生命值。地图上随机分布着一些医药箱,并且会时不时地出现一些新的医药箱。智能体为了在地图上生存下去,需要捡起医疗包,回复生命值。当智能体死亡或时间到了,游戏结束。智能体有三个行动,向左、向右及前进。每个行动后,如果智能体生存下来,获得1奖励分数,如果死亡获取100惩罚分数。

本文主要基于ViZDoom中的两个场景,讲解强化学习的基本思想,Q-Learning算法,Deep Q-Learning算法如何应用于射击场景及Policy Gradient算法如何应用于收集医药箱场景。

强化学习

强化学习是机器学习的一个重要分支,目前已经广泛应用于游戏博弈,机器人控制,自动驾驶,人机对话,优化调度等领域。目前,常使用的深度强化学习算法主要有Deep Q-learning, Policy Gradients, Actor Critic, and PPO(Proximal Policy Optimization)。强化学习的基本思想为在一个环境中,智能体(agent)不断地和环境交互,执行不同的行动,然后获取到相应的奖励。这样,智能体在不断的尝试过程中,学习到完成目标的最优策略,从而获取到最高的累积奖励。

强化学习的架构中主要包含的元素为:智能体(agent),环境(env),状态(state)行动(action)及奖励(reward)。如下所示:

上图中环境(env)为超级玛丽昂这个经典游戏(Super Mario);智能体(agent)可以认为是一个AI机器人,在不断尝试玩这个游戏,实现智能体的自我进化;状态(State)为智能体(Super Mario Bros)在特定时间点的游戏界面中的位置信息,可以认为是一张游戏界面的截图;行动(action)为智能体根据当前的状态信息,所采取的动作,比如上、下、左、右、跳,相当于智能体和环境在进行交互操作;当智能体执行完动作后,智能体会从当前状态转移到下个状态,即游戏的下一帧;奖励(reward)为智能体执行完动作后获得的分数,比如执行完向前动作后,如果智能体不死,则得分加1。强化学习的基本思想为智能体能够最大化期望的累积奖励,用数学公式可表示为:

Q-Learning

Q Learning主要用Q Table记录状态s下采取不同行动后,得到将来的期望奖励。如下所示:

其中,图中的每个小方格表示智能体的状态,共有5*5=20种状态,对应的每个状态智能体可采取4个行动,为向上,向下,向左,向右移动,如果为0表示不可以移动。这样依据状态和行动,可生成表格Q-Table,每个单元格中的分数表示对状态采取对应行动后产生最大期望奖励的度量值。表格中的4列,分别表示向左,向右,向上,向下移动;表格中的每行表示智能体的状态。对应于上节提到的老鼠吃奶酪的游戏,生成Q-Table后,选择对应状态的行,得分最高的行动。Q-Learning算法的主要目的是能够学习得到Q-function,如下所示:

Q-function以状态和行动作为输入参数,返回输入状态对应的期望累积奖励。Q-Learning算法通过迭代化地优化Q-Table得到Q-function,算法的学习流程如下所示:

Deep Q-Learning

Q-Learning算法主要是通过不断更新Q-Table来学习到优化的Q-function。但是,对于大的智能体状态空间,比如说围棋,射击游戏,很难定义和更新Q-Table,Q-Learning算法将不起作用。Deep Q-Learning算法,可对智能体的状态,通过神经网络算法,来逼近该状态下执行action后的Q-Value值。如下所示:

其中,Deep Q的输入为状态信息,可以是一系列图片,输出为执行不同动作后,Q值的期望。为了更好地利用观测到的经验数据,训练DQN的时候常采用经验回放机制Experience Replay,经验回复机制主要能够解决两个方面的问题,一个是避免网络忘掉以前学到的经验信息,二是神经网络的训练数据是独立分布的,而强化学习生成的数据一般是序列化的,通过经验回放机制可以打破这种顺序结构。经验回放机制如下所示:

其中,构建一个ReplyBuffer数据结构,把智能体和环境交互的信息(s,a,r,s’)放入Buffer中,然后随机采样生成Batch的训练数据,输入DQN网络中。DQN的优化目标,如下所示:

射击场景中,数据预处理如下所示:

其中,首先读取游戏界面图像,为了减少训练数据大小,经过图像预处理,把游戏图像转换成84*84大小的灰度图片;然后,为了处理智能体所处状态的时序变化,比如移动方向,把四张预处理后的图像堆叠起来,组成84*84*4大小的训练数据。

射击场景使用的Deep Q-learning的网络模型结构如下图所示:

其中,使用了3个卷积网络,每个卷积特征层的大小为20*20*32,9*9*64,3*3*128;然后,经过全链接层,最后输出执行每个action行动后的Q值。损失函数的计算方式如下所示,其中Qtarget可基于经验回放的方式和当前action的奖励,由Q-leaning中Q值的更新方式计算得到。

# Q is our predicted Q value.
self.Q = tf.reduce_sum(tf.multiply(self.output, self.actions_), axis=1)
# The loss is the difference between our predicted Q_values and the Q_target
# Sum(Qtarget - Q)^2
self.loss = tf.reduce_mean(tf.square(self.target_Q - self.Q))

Policy Gradient

Deep Q-Learning是基于值的强化算法,而Policy Gradients是基于策略的强化算法,目标是能够学习到策略方程policy function,直接实现智能体状态到行动的映射,优化的目标为策略方程π。在强化学习中有两种类型的策略:确定性策略和随机性策略。确定性策略使用在确定性的环境中,智能体执行完行动后有确定性的输出;随机性策略是输出智能体在当前状态,选择不同action的概率分布,随机性策略主要用于非确定性环境。

使用策略梯度算法主要有三个优点,第一:策略梯度算法有较好的收敛性,策略梯度算法会沿着梯度方向更新策略方程里面的参数,每个迭代下参数更新平稳,算法收敛性会比较好。第二:策略梯度算法在高维的action空间更有效果,策略梯度会直接根据根据智能体的状态输出要执行的action,不需要计算Q值。第三:策略梯度算法可以适用于非确定性环境。

策略梯度算法的主要思想为通过优化θ,改变策略的概率分布,从而使得智能体能取得高的期望奖励,优化方式如下所示:

收集医药箱的场景的数据预处理方式类似于射击场景,模型结构如下所示:

#与射击场景的模型的差异在于,输出为该状态下执行action的概率分布,如下所示:
self.action_distribution = tf.nn.softmax(self.logits)

#损失函数计算如下所示,其中,discounted_episode_rewards_为该状态下的累积奖励,logits为模型输出的logist值,actions为对应状态下选择执行的行动。
self.neg_log_prob = tf.nn.softmax_cross_entropy_with_logits_v2(logits = self.logits, labels = self.actions)
self.loss = tf.reduce_mean(self.neg_log_prob * self.discounted_episode_rewards_)

总结

本文首先介绍了Doom 游戏的人工智能研究平台ViZDoom,包括射击场景和医疗包收集场景;介绍了强化学习的基本思想,包括智能体,环境,状态,行动及奖励。然后,讲解了强化学习中常用的三个算法Q-Learning,Deep Q-Learning,Policy Gradient;应用Deep Q-Learning于射击场景;应用Policy Gradient于医药包收集场景。用户可把强化学习应用到游戏博弈,机器人控制,自动驾驶,人机对话,优化调度等工业领域中的相关场景。

参考文献

[1] https://simoninithomas.github.io/Deep_reinforcement_learning_Course.

作者简介

武维(微信:allawnweiwu):博士,现为IBM架构师。主要从事深度学习平台及应用研究,大数据领域的研发工作。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT