AI程序通过Q-learning,可以完成对于一个游戏从无到有的策略学习。其策略,即Q-table是一个由状态(state)和动作(action)组成的表格,里面记载了每个状态对应动作的收益预期。然而基于Q-table的学习却只能处理比较简单的游戏任务。2015年,DeepMind团队在Q-learning基础之上,加入了神经网络(neural network),并命名新的算法叫做Deep Q-learning。出人意料的是,加入所谓的deep后,算法竟有了突破性进展,取得了非凡的成绩。今天我们就要去挖掘这里的Deep所代表的秘密以及其算法成功的原因。
什么是Deep
简单而言,Deep的意思的深度,取自于深度学习(Deep Learning)。
说到深度学习,我们不得不介绍神经网络。早在上世纪八九十年代,神经网络早已经被发明并投入使用。但是受限于数据量和计算能力,大家并不认为神经网络可以很好地满足我们的需求,解决很大的问题。当我们把时间拨到14年左右,大家开始逐渐意识到,如果把神经网络的层数加多,也就是下图当中从左边寥寥几层的网络扩展到右边很多层数,神经网络竟然可以击败其他有力竞争对手,取得前所未有的成功。
正是把层数加多这一操作,神经网络又重新回归到大家的视野,并持续发挥着它奇妙的作用。人们把层数很多的神经网络叫做深度神经网络,并将相关应用叫做深度学习(deep learning)。足以见得,人们对于深度的喜爱程度。也是因为这个原因,加入神经网络的Q-learning算法,才被叫做Deep Q-learning。
为什么要Deep
介绍完Deep的原始含义,我们试图去理解为什么Q-learning算法需要引入神经网络。还没看过或者对于Q-learning了解不多的同学,请参考 原来AI也会通过记小本本来玩游戏。不难发现,限制Q-learning算法能力的正是其中的核心---攻略Q-table。我们知道Q-table的大小由游戏中的状态和动作共同决定,大小是二者相乘。理想情况下,状态和动作的数目是有限的,比如我们前面提到过的Maze迷宫游戏:用Python实战Q-learning,里面的状态和动作都是寥寥无几。然而,大部分游戏,其中的状态和动作可能多到我们无法想象。比如围棋中状态就多如牛毛,黑白棋子的组合实在是多得数不过来,根本不是一个Q-table所能容纳下的。
有限大小的Q-table和日益发展的游戏产生了矛盾和冲突,于是,人们想到了用强大的神经网络其代替腐朽的Q-table。
首先,神经网络可以接收一个游戏状态,而这个状态,不论是表达形式还是数目都可以远远超过Q-table。比如,围棋中当前黑白棋子的分布可以是一个状态;打砖块游戏中,当前砖块,小球,以及平板的位置加起来是一个状态。
其次神经网络可以对于一个状态下采取的行动进行打分,这一点和Q-table是类似的。但是,神经网络对于相应Q值,即打分的估计能力更强。我们可以将神经网络看成一个大脑,根据眼睛观察到的状态,评估下一步各种行动的收益大小,最终做出决策。我们通过不断学习,让大脑对于行动收益的估计能力越来越强,最终可以出色完成游戏任务。
如何Deep
我们已经基本了解了如何用神经网络替换Q-table。但是,这还是不够。真正成功的秘诀却还有一个重要因素,相关性。我们在更新神经网络的时候,希望神经网络对于动作收益的估计越来越接近于事实。这里的事实便是我们通过玩游戏切身接收到的收益。比如你这一步动作造成游戏角色死亡,我们就要让神经网络对于这个动作的打分降低;相反,如果你这一步动作赢得了游戏胜利,我们便希望神经网络对于这个动作的打分提高。所以,现在的关键问题变成了如何去改变。
一个好的策略是,每次更新的时候, 我们都可以随机抽取一些之前的经历进行学习. 随机抽取这种做法打乱了经历之间的相关性, 也使得神经网络更新更有效率. 想象一下,你正在探索一个迷宫,你如你每一次更改策略都是在上一次的基础上,你有可能非常正确且快速地走向一个很深的死胡同,这便是学习的经历相关性过高导致的问题。因此打乱学习经历的相关性,有助于我们提高Deep Q-learning的学习效率,使得这个基于神经网络的方法更上一层楼。