这篇发表在nature 2016年1月27日上的文章题目为:"Mastering the game of Go with deep neural networks and tree search"来自Google deep mind,它阐述了AlphaGo的模型过程和训练方法,让我们对这篇论文进行解读,看看为何AlphaGo可以成为迄今最强大的围棋对弈程序吧。
论文地址为:Mastering the game of Go with deep neural networks and tree search - nature
在进行棋牌游戏的时候,最理想的玩法是先得知棋盘上所有状态的完美状态值函数v∗(s),然后根据收益最大的状态来进行游戏。但是问题在于有时候棋盘的所有状态规模非常大,在围棋游戏中,这种方法的复杂度是250^150,这显然是做不到的,但是可以通过两种方式来减少搜索空间,一个是通过位置评估的方式,使用近似的值函数来代替完美状态值函数,以此来减少搜索树的深度。另一种方式是通过一个策略来对可能性更大的动作进行采样,这样可以减少搜索树的宽度。本文以这两种策略为基础,结合目前在视觉等领域已经取得突出成果的深度卷积神经网络和强化学习技术,设计了史上最强大的围棋AI程序。
本文的AlphaGo一共有三个阶段。它的大体流程是这样的:首先训练一个有监督学习的策略网络p_σ ,其样本来自人类棋手的围棋历史数据,AlphaGo将会在这个阶段进行快速高效的学习,得到一个初步的策略网络。接着应用强化学习对程序自己对弈的游戏收益进行优化,得到一个优化的策略网络p_ρ,最后根据p_ρ自己对弈的游戏结果,训练一个可以预测对弈胜者的值网络v_θ。其流程结构如图1所示。
图1. AlphaGo的总体流程 接下来详细解释各个阶段的网络学习和训练的过程以及他们的含义。
A. 使用有监督学习的策略网络
根据前人工作中的方法,AlphaGo首先使用有监督学习神经网络得到一个快速的策略网络。学习器的输入是棋盘的状态,来自大量的人类玩家的对弈动作历史数据,然后它将随机从动作状态空间的状态-值对(s,a)中选取一个动作a,然后神经网络通过随机梯度下降的算法最大化在状态s下与人类玩家动作的相似度。换句话说,这个学习的目的就是使得AlphaGo的对弈动作拟合人类对弈的动作。神经网络学习的结果如下表所示。
从表中可以看出通过初步的有监督学习,AlphaGo已经获得了与人类玩家平起平坐的实力。
B. 使用强化学习的策略网络
C. 使用强化学习的值网络
D. 使用策略网络与值网络进行搜索
AlphaGo使用蒙特卡罗树搜索的方式将策略网络与值网络进行结合。其流程示意如图2所示。
图2. AlphaGo中的蒙特卡罗树搜索
值得一提的是,在AlphaGo中监督学习的策略网络表现要比强化学习的策略网络要好,或许是因为人类在对弈的过程中会选择更多可能的下法(监督学习正是模拟人类的下棋行为),然而强化学习的策略只会选择最优的一种下法。但是呢,强化学习的策略网络也不是完全没用,通过它导出的值网络表现要比通过监督学习导出的值网络要好。AlphaGo将蒙特卡罗树搜索与深度学习结合了起来,通过异步多线程的方法在CPU上运行模拟,然后在GPU上并行地计算策略网络和值网络。
E. AlphaGo在比赛中的表现
图3展示了AlphaGo在与现在最高水平的围棋程序和人类棋手对弈的能力排名,这些围棋程序都是基于高性能的蒙特卡罗树搜索算法的。可以看出AlphaGo的能力远在其他对手之上。
下图展示了AlphaGo在与人类棋手樊麾下棋的其中一个过程。
首先AlphaGo会对以该状态s为根节点的树的所有后续节点进行评估,用值网络v_θ (s)估计每个子节点的获胜概率。图4b展示的是以当前状态s为根节点的搜索树各个边的动作值Q(s,a),而图4c展示的是以当前状态s为根节点的搜索树各个边的rollout评估值。然后通过监督学习的策略网络预测下一步动作,以概率分布来表示。
F. 总结与感想
可以看到,AlphaGo综合使用了监督学习、强化学习和蒙特卡罗树搜索等多种算法,通过复杂的训练过程才获得了它足以傲视群雄的实力,相比于之前基于蒙特卡罗搜索树的其他围棋程序,AlphaGo多了强化学习导出值网络的过程,这也使他比之前的程序高出一筹。文中提到,由监督学习得到的策略网络的表现甚至要比强化学习得到的策略网络更好,这一点有点超出我的意料,因为强化学习的策略网络从一开始是与监督学习的策略网络一致的,在多轮强化学习之后,其性能居然没有监督学习的效果好,这是否说明在某种特定任务中强化学习会使学习到的东西更加片面,还是说这是强化学习的一个过拟合现象呢?