在这篇文章中,作者将供应一个简短的描述什么是强化学习,以及他如何将它运用于FIFA足球游戏。由于我们无法访问游戏代码,因此我们只能利用我们在游戏屏幕上看到的内容。在这篇文章中,作者将考试测验教机器人学会\"大众踢\公众30码任意球,你可以修正它来考试测验其他球法。首先,让我们对强化学习先有个基本的理解,以及如何通过强化学习来制订我们的任意球方案。
什么是强化学习?
与监督学习不同,我们不须要人工标注强化学习中的演习数据。相反,我们要与我们的交互环境进行互动,不雅观察我们互动的结果。我们多次重复这一过程,得到或好或坏的例子(履历)。这便是我们的演习数据。换句话说,我们通过实验而不是模拟来学习。
假设我们的环境处于一种分外状态S。在采纳行动a时,它将变为状态S'。对付这个特定的行为,你在环境中直接不雅观察得到的反馈是R。任何行动过后都会有即时的反馈,除非你停滞互动。因此,对付当前状态S,我们将考试测验从所有可能的操作来估算出哪些行动将为我们带来最大的近期/未来回报,即Q(s,a),又称Q函数。Q(s,a) = r + γ Q(s',a')表示我们预期的终极回报。在这里,γ是一个未知成分,表示对未来预测的不愿定性。
深度Q学习是一种分外的强化学习技能,它是深度神经网络学习Q函数的一种分外方法。它通过给定环境的状态作为该网络的图像输入,试图预测所有可能的行为(如回归问题)的预期终极回报。选择最大预测Q值的动作来作为我们在环境中要采纳的行动。因此就有了\公众深度Q学习\"大众这个名字。
如何在FIFA中把深度Q学习和任意球相结合
状态:通过MobileNet CNN处理游戏截图给出了128—维平面特色图。128-dimensional flattened feature map
操作:采纳以下可能的操作shoot_low, shoot_high, move_left, move_right。
反馈:如果按下踢球键,比赛得分增加超过200,表示踢进对方球门,r = + 1。如果踢进我方球门,得分保持不变,r = -1。r=0表示双方都没进球。
哀求:双层密集网络,以特色图为输入,预测所有4个动作的终极回报。
在机器人与游戏环境交互的强化学习过程中,深度Q学习是它的核心,并还卖力预测机器人可以采纳的所有可能的行动的预期未来回报。这一模式在全体过程中不断得到演习和更新。
注:如果我们有关于FIFA中踢球办法更充足的数据,我们可以\"大众玩\"大众全体游戏了,而不是仅限于任意球。但那或许须要访问我们没有的游戏内部代码。无论如何,让我们充分利用我们所拥有的资源吧。
详细操作代码
我们将在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标志一起存储。深度Q学习模型学习的目标标签是每个动作的终极反馈信息。这也是我们回归问题的实数。
3.演习过程
现在让我们开始演习我们的深度Q学习模型。首先,我们得在探索(在游戏中采纳随机行动)和开拓(采取我们的模型预测行动)中保持平衡。这样,我们就可以在游戏中进行反复试验,以得到不同的体验。而参数epsilon便是平衡探索和开拓的呈指数低落的成分。起初,当我们什么都不知道的时候,我们想做更多的探索。然而随着履历的增加,我们现在更多是想做开拓。
在本文中,作者只对模型进行了演习。由于韶光和性能的限定,作者只做了1000代的演习。但在未来,作者想把它推向至少5000代。
4.模型定义和演习过程
深度Q学习的过程核心是具有ReLU激活的双层密集/完备连接网络。它将128维特色映射作为输入状态,并为每个可能的动作输出4个Q值。具有最大预测Q值的动作是根据网络针对给定状态的策略所需采纳的行动。
这是实行此代码的出发点,但你必须确保FIFA在第二台显示器上以窗口模式运行,并且在技能中:射击菜单下加载了任意球练习模式。确保游戏控件与你在FIFA.py脚本中硬编码的密钥同步。
结果
虽然机器人尚未节制所有不同类型的任意球,但它已经很好地学习了一些情形。它险些可以在没有球员的情形下射进球门。然而,在面对少数情形时,它还会不断出错。不过这种情形发生的次数正不才降。
如上图所示,演习1000次后,均匀进球率从30%提高到50%。这意味着目前的机器人在其所考试测验的任意球中大约有一半得分(作为参考,一个人的均匀得分在75%-80%之间)。的确,足球运动有太多不愿定的成分,这使得学习变得非常困难。
结语
总的来说,作者认为纵然没有达到人类的表现水准,结果也是相称令人满意的。从监督学习到强化学习有助于减轻网络演习数据的痛楚。如果有足够的韶光去探索,它将表现得更好。然而,当碰着不熟习的情形时,它并不能很好的应对。
这使作者相信,将其作为一个回归问题来表述,既不能外推,也不能作为监督学习中的分类问题。大概两者的结合可以办理这两种方法的弱点。大概这便是我们在为游戏构建人工智能的时候看到的最好的结果。