在本文中,作者将简要介绍什么是强化学习,以及他如何将其应用于国际足联足球比赛。由于我们无法访问游戏代码,我们只能使用我们在游戏屏幕上看到的内容。在这篇文章中,作者将尝试教机器人踢30码的任意球。可以修改一下试试其他球法。首先让我们对强化学习有一个基本的了解,如何通过强化学习制定我们的任意球计划。   

  

  什么是强化学习?   

  

  与监督学习不同,在强化学习中我们不需要手动标注训练数据。相反,我们应该与我们的交互环境进行交互,并观察我们交互的结果。我们多次重复这个过程,以获得好的或坏的例子(经验)。这是我们的训练数据。换句话说,我们通过实验而不是模仿来学习。   

  

  假设我们的环境处于特殊状态S,当采取行动A时,它将改变到状态S’。对于这种特定的行为,你在环境中直接通过观察得到的反馈是r,任何动作后都会有即时反馈,除非你停止互动。因此,对于当前状态S,我们会尝试从所有可能的行动中估计哪些行动会给我们带来最大的近期/未来回报,即Q(s,A),也称为Q函数。Q(s,a)=r * Q(s ',a ')表示我们的期望最终收益。这里是一个未知因子,表示未来预测的不确定性。   

  

     

  

  深度学习是一种特殊的强化学习技术,是深度神经网络学习Q函数的一种特殊方法。它以给定环境的状态作为网络的图像输入,试图预测所有可能行为(如回归问题)的期望最终收益。选择具有最大预测Q值的行动作为我们想要在环境中采取的行动。因此得名“深度Q学习”。   

  

  如何在FIFA中把深度Q学习和任意球相结合   

  

  状态:通过MobileNet CNN处理游戏截图给出128维平面特征图。128维扁平化特征映射   

  

  动作:采取以下可能的动作:shoot _ low、shoot _ high、move _ left、move _ right。   

  

  反馈:如果你按了踢球键,游戏的分数会增加200以上,说明你踢进了对方的球门。r=1。如果你踢进我们的球门,比分保持不变,r=-1。R=0表示双方都没有得分。   

  

  要求:两层稠密网络,以特征图为输入,预测所有四种行为的最终收益。   

  

  深度Q学习是机器人与游戏环境交互的强化学习过程的核心,它还负责预测机器人可以采取的所有可能行动的预期未来回报。这个模型在整个过程中得到了不断的训练和更新。   

  

     

  

  注意:如果我们有更多关于国际足联踢球方式的数据,我们就可以‘踢’整场比赛,而不仅仅是任意球。但这可能需要访问我们没有的游戏内部代码。无论如何,让我们充分利用我们拥有的资源。   

  

  具体操作代码   

  

  我们将使用深度学习工具如Python中的Tensorflow(Keras)和OCR中的pytesseract工具来实现代码操作。下图提供了一个git链接,存储库的描述提供了设置需求的说明。   

  

  具体链接:   

  

  https://github.com/ChintanTrivedi/DeepGamingAI_FIFARL   

  

  作者推荐以下代码。只是为了方便读者,也为了简洁起见,作者删除了一些不重要的代码。请在运行时使用git中的完整代码。现在让我们看看下面代码的四个主要部分。   

  

  1.与游戏环境的互动   

  

  我们没有任何现成的API允许我们访问代码。然后,我们自己做API吧!我们会使用游戏的截图来观察状态,在游戏环境中模拟按钮采取行动,通过光学角色识别来读取我们在游戏中得到的反馈。在FIFA中,我们有三个主要方法:observe()、act()、_get_reward()和一个附加方法is_over()来检查是否有任意球。   

  

     

  

     

  

  2.收集培训数据   

  

  在整个训练过程中,我们希望存储我们获得的所有信息。我们会把它作为深度Q学习模型的训练数据。因此,对于我们采取的每个动作,我们将把S,A,R,S '和game_over标志存储在一起。深度学习模型学习的目标标签是每个动作的最终反馈信息。这也是我们回归问题的实数。   

ic/img.php?k=q版足球人物,q版足球图片6.jpg">

  

  

3.训练过程

  

现在让我们开始训练我们的深度Q学习模型。首先,我们得在探索(在游戏中采取随机行动)和开发(采用我们的模型预测行动)中保持平衡。这样,我们就可以在游戏中进行反复试验,以获得不同的体验。而参数epsilon就是平衡探索和开发的呈指数下降的因素。起初,当我们什么都不知道的时候,我们想做更多的探索。然而随着经验的增加,我们现在更多是想做开发。

  

  

  

在本文中,作者只对模型进行了训练。由于时间和性能的限制,作者只做了1000代的训练。但在未来,作者想把它推向至少5000代。

  

4.模型定义和训练过程

  

深度Q学习的过程核心是具有ReLU激活的双层密集/完全连接网络。它将128维特征映射作为输入状态,并为每个可能的动作输出4个Q值。具有最大预测Q值的动作是根据网络针对给定状态的策略所需采取的行动。

  

  

这是执行此代码的起点,但你必须确保FIFA在第二台显示器上以窗口模式运行,并且在技能中:射击菜单下加载了任意球练习模式。确保游戏控件与你在FIFA.py脚本中硬编码的密钥同步。

  

结果

  

虽然机器人尚未掌握所有不同类型的任意球,但它已经很好地学习了一些情况。它几乎可以在没有球员的情况下射进球门。然而,在面对少数情况时,它还会不断出错。不过这种情况发生的次数正在下降。

  

  

如上图所示,训练1000次后,平均进球率从30%提高到50%。这意味着目前的机器人在其所尝试的任意球中大约有一半得分(作为参考,一个人的平均得分在75%-80%之间)。的确,足球运动有太多不确定的因素,这使得学习变得非常困难。

  

结语

  

总的来说,作者认为即使没有达到人类的表现水准,结果也是相当令人满意的。从监督学习到强化学习有助于减轻收集训练数据的痛苦。如果有足够的时间去探索,它将表现得更好。然而,当遇到不熟悉的情况时,它并不能很好的应对。

  

这使作者相信,将其作为一个回归问题来表述,既不能外推,也不能作为监督学习中的分类问题。也许两者的结合可以解决这两种方法的弱点。也许这就是我们在为游戏构建人工智能的时候看到的最好的结果。