在这篇文章中,作者将提供一个简短的描述什么是强化学习,以及他如何将它应用于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()来检查是否有任意球。