David Silver1*, Aja Huang1*, Chris J. Maddison1, Arthur Guez1, Laurent Sifre1, George van den Driessche1,
因为围棋巨大的搜索空间和对棋盘位置和走子精确评估的困难,在很长时间里围棋被视作人工智能最具有挑战性的传统游戏。在这里我们将介绍一种通过使用“估值网络(value networks)”估计棋盘位置以及通过“策略网络(policy networks)”选择走子动作(Action)的新的电脑围棋算法实现。这些深度神经网络创造性的通过合并了监督式学习(通过人类专家棋手的棋谱学习)和强化式学习(通过自我对弈的方式)来训练。没有任何的超前搜索,这些神经网络已经通过自我对弈的方式模拟成千上万的对局并使自己下围棋的水平相对于使用蒙特卡洛树搜索(Monte Carlo tree search)程序来说达到了世界计算机围棋顶级水平。我们也将介绍一种新颖的算法,即通过合并蒙特卡洛树搜索和估值网络、策略网络来构建围棋程序。通过使用该算法,程序AlphaGo与其他围棋对弈达到了99.8%的胜率,以5:0的成绩击败欧洲围棋冠军(樊辉)。这是有史以来计算机程序第一次在全盘对弈中击败人类专业棋手,这个突破以前被认为需要十年以上的时间。
所有完备信息与策略的游戏都有一个最优的估值函数 决策棋盘位置和状态
的收益。这些游戏都可以通过递归在一个逼近
( b:搜索宽度, d: 搜索深度)树搜索序列中计算最优估值函数。但是像计算复杂度高的游戏,象棋(b ≈ 35, d ≈ 80),尤其是围棋(b ≈ 250, d ≈ 150)详尽的搜索是不可能的,但是可以通过两个通用的原则有效的缩小搜索空间。第一个原则,位置估计可以减少搜索的深度,即在状态
截断搜索,使用近似的估值函数
替代
状态后子树的状态去预测在状态
的收益;这种方式可以在国际象棋,西洋棋,黑白棋游戏中达到超越人类的水平,但是因为围棋的计算复杂度,这种方法很难在围棋中有效。第二条原则,通过在一个策略在
(
|
) 上的采样减少搜索的宽度,策略
(
|
) 为在所有可能的位置
上走子动作
的概率分布。如,蒙特卡洛Rollouts搜索(Monte Carlo rollouts search)可以通过在策略
上对所有玩家在长序列走子动作的采样,不扩展分支搜索出最大深度。在这样展开(Rollout)的节点上求平均可以获得位置的有效估计,这种方法可以取得超过人类水平的游戏能力,如:西洋双陆棋,拼字游戏,但是在围棋中只能达到弱业余水平。
蒙特卡洛树搜索(MCTS)使用蒙特卡洛Rollouts的方法估计搜索树中每个状态的值。随着模拟的进行,搜索树变得越来越大,相关的值将变得越来越精确。通过选择较大值的子节点可以使选择走子的策略精度随模拟的进行提高。渐渐的,下棋的策略将会收敛到最优,估值函数也会收敛到最优。当今最强的围棋程序是建立在蒙特卡洛树搜索中通过预测人类专家棋手的走子策略来提高自己的。这些走子策略被用来窄化搜索到高概率走子的动作以及在展开中采样。这种程序的实现已经达到了强业余水平。但是,前人的工作受限于基于线性的输入特征的浅的策略和估值函数。
最近,深度卷积网络已经在机器视觉领域达到了超过预期的效果,例如:图像分类,人脸识别,玩Atari游戏。他们使用多层神经元去构建图像更加的抽象的局部表达。我们也在围棋游戏中使用了一个相似的架构。我们用19 × 19的图片去表示围棋棋盘的盘面位置,用卷积层去构建出围棋位置的神经网络表示。我们使用这些网络减少了搜索树有效的深度和宽度,即通过估值网络去评估下棋的位置,通过策略网络采样走子的动作。
我们使用流水线的方式分阶段训练神经网络(图1)。我们通过人类专家棋手的走子动作直接利用监督式学习(SL)方式训练策略网络,这种方式可以提供直接的快速反馈以及高质量的梯度。和前人的工作相同,我们也训练了一个快速Rollout走子策略 ,它可以在 展开中快速采样。下一步,我们训练了一个强化学习式的策略网络(RL)
通过优化最终游戏受益的方式提高监督式策略网络的能力,这种调节可以使策略正确的向游戏胜利的方向优化,而不是通过最大化预测精度的方式去优化。最后我们训练了一个估值网络 去预测自我对弈中游戏的胜利方。我们的程序AlphaGo有效的结合了策略网络和估值网络以及蒙特卡洛树搜索。
图1 :神经网络训练流水线及架构
a.快速Rollout走子策略策略 和通过一个下棋位置的数据集训练监督式策略网络
去预测人类专家棋手的走子动作。强化学习式策略网络
初始化为监督式策略网络
,然后通过和前面的策略网络的对弈的方式策略梯度学习并且最大化收益以提高策略的精度,新的对弈数据集将通过其网络的自我对弈产生。最后估值网络 使用网络自我对弈的数据集通过回归方式去训练预测期望收益。
b.表示AlphaGo使用的网络架构原理图。策略网络使用棋盘位置
作为输入,并与监督式策略网络参数
或强化式策略网络参数
作用,在合法的走子动作
上输出走子动作的概率分布
(
|
)或者
(
|
)。估值网络也是使用卷积网络,其参数为
,但是其输出为一个标量( ),该标量表示在位置预测的期望收益。
训练的第一阶段,我们通过监督式学习来预测专家棋手在围棋的走子动作。监督式策略网络(
,
)交替的通过参数
以及非线性压缩函数,最后通过softmax层输出在移动
上的合理概率分布。策略网络的输入
仅仅简单表示为棋盘盘面状态。策略网络用随机采样的 State-Action (
,
)训练,并使用随机梯度下降法最大化似然函数:
我们在KGS围棋服务器上通过3000万个位置数据训练了一个13层的监督式策略网络。这个网络在测试集上使用所有的输入特征的预测人类专家棋手走子动作精度为57.0%,只使用棋盘位置和历史走子记录作为输入时精度为55.7%,而其他研究团队提交的世界水平最好的精度为44.4%。精度略微的提高能使棋力提高不少;在搜索中更大的网络可以获得更高的精度但是会更慢。我们也使用了一个线性的softmax训练快速Rollout走子策略( |
) ,但是训练精度更低,只有24.2%,但每一步只需用2微秒,而监督式策略网络用了3毫秒。
训练的第二阶段,训练旨在通过策略梯度的强化学习提高策略网络走子能力。强化学习式策略网络在结构上和监督式网络是相同的,其参数
被初始化为相同的监督式网络的参数,即:我们随机的选择先前迭代的策略网络和当前策略网络
下棋。随机的从对抗池中选择对弈方训练才能使训练稳定并防止当前的策略过拟合。我们使用一个回报函数,在所有棋局的非终结时间步
< T 时其回报为零。而收益
是棋局结束时的回报,在时间步
棋局结束时: +1标记赢棋,而-1表示输棋。然后使用随机梯度上升更新每一个时间终结时间步
的参数,最大化期望收益:
我们评估了强化式策略网络在游戏中的表现,从输出分布中的走子动作中采样。当相互对弈时强化式策略网络相比于监督式策略网络而言赢了超过80%的棋局。我们也测试对抗当前最强的开源围棋软件Pachi(一个复杂的蒙特卡洛树搜索程序,在KGS上排名业余2段,每走一步执行10万次模拟)。使用无搜索的情况下,强化式策略网络相比于Pachi赢了85%的棋局。在比较中,先前顶级水平监督式策略网络对比 Pachi 赢了11%的棋局,对比轻量级的更弱的程序 Fuego 赢了12%的棋局。
训练的最后阶段,关注于训练位置评估,估计所有玩家在状态 使用策略
时收益的估值函数
理想情况下我们应该知道在完备下子动作下的最优估值函数;而在实践中我们使用策略网络产生的估计代替理想情况下的策略。我们使用估值网络
去逼近估值函数,即:
≈
≈
。这个估值网络和策略网络的架构相同,但是输出值是一个单一的预测标量而不是概率分布。我们通过在数据(
,
)上回归的训练估值网络,训练使用梯度下降法最小化收益
和
均方误差(MSE)
这种幼稚(naive)的实现在预测整个游戏数据的收益时将导致过拟合。过拟合是因为后继位置和当前位置强相关及回归目标在整个下棋中是共享的,这和只有一个子的情况是不同的。当我们通过KGS的数据用这种方式训练的时候,估值网络记住了游戏的收益而不能在新的位置泛化,训练的网络在测试集上实现了0.37的均方误差,在训练集的均方误差为0.19。为了减轻这个问题,我们在自我对弈中,从不同棋局中采样不同位置生成3000万个新的训练数据。其中每一局游戏都是强化式网络自我对弈直到游戏结束为止。在新生成的训练数据上的训练误差为0.226,而测试误差为0.234,这两个数据表明只有极小的过拟合。图2b显示了估值网络对于位置的估计精度,对比于蒙特卡洛Rollouts使用的快速Rollout走子策略,估值函数一致的变得更精确。使用强化式策略网络,
的单一的估计也达到了蒙特卡洛Rollouts的精度,但是减少了15000倍的运算量。
图2 策略网络及估值网络的强度和精度
图3 AlphaGo中的蒙特洛树搜索
a,每次模拟选择最大走子动作值Q的边遍历搜索树,增加的奖励值依赖于该边存储的先验概率 P
b,左叶节点可能被扩展;新的节点只被策略网络处理一次,且策略网络输出的每个走子动作的概率被存储为先验概率。
c,模拟的最后,左叶节点被估值网络和快速Rollout走子策略两种方式评估,然后通过函数 计算胜利者
d,走子动作值Q通过更新来跟踪所有在该动作下子树的评估和的平均值
AlphaGo将策略和估值网络混合进蒙特卡洛树搜索算法(通过超前搜索选择走子动作),图3。搜索树的每个边 ( ,
) 都存储了一个动作的值Q(
,
),访问次数N(
,
)以及先验概率 P(
,
)。通过从根状态开始模拟(即,在整个游戏中向下展开分支但不备份分支)遍历整棵搜索树。在每个模拟的每一个时间步
,从状态
中 选择一个走子动作
为了最大化走子动作的值加了一个奖励值:
即:与先验概率成正比,和重复访问成反比以鼓励搜索。当遍历在步到达一个左叶节点,这个节点有可能被扩展。左叶节点位置只被监督式策略网络
执行一次,对于一个合理的下子动作
,输出的概率将被存储为先验概率 P ,P(
,
)=
(
|
)。左叶节点被两种不同的方式评估:第一个是估值网络
评估,第二个是被快速Rollout走子策略在游戏终止 T 时的收益评估。这两个评估使用混合参数
合并为叶节点评估
,
在模拟的最后,所有遍历的边的动作值和访问次数被更新。每个边累积所有穿过这个边的访问次数和平均模拟估计
其中 是叶节点的第
次模拟。
表示这个边
是否在第
次模拟中被穿过。一旦搜索完成,算法从根位置(root position)选择访问次数最多的下子动作。
很值得说,监督式策略网络比强化式策略网络
更强。大概因为人类棋手会选择了不同的容许的下子动作,而强化式策略网络只选择最优的一个下子动作。然而来源于强化式策略网络的估值函数
比来源于监督式策略网络的估值函数
更好。
评估策略和估值网络需要更多的计算要求相对于传统的启发式搜索而言。为了有效的合并蒙特卡洛树搜索和深度神经网络,AlphaGo在CPU上使用了异步的多线程搜索执行模拟,而在GPU上并行的计算策略网络和估值网络。最终版本的AlphaGo使用40个搜索线程,48个CPU和8个GPU。我们也实现了一个分布式版本的AlphaGo,他可以利用多个机器,40个搜索线程,1202个CPU和176个GPU。后面的章节“方法”将会提供异步计算和分布式的蒙特卡洛树搜索的细节。
为了估计AlphaGo的棋力,我们在不同版本的AlphaGo间及其他的围棋程序,包括现在最强的商业程序Crazy Stone、Zen,最强的开源程序Pachi、Fuego比赛。所有这些程序都基于高性能蒙特卡洛树搜索算法。额外的,我们也对比了开源程序GnuGo(用了一个当前最高水平的搜索算法的围棋程序,其能力超过了蒙特卡洛树搜索的程序)。所有的程序都要求在5秒内完成下子。
这个比赛的显示出单机版的AlphaGo比前面的所有的围棋程序的段位排名更高,在495次游戏中赢得了494次(赢得99.8%的比赛)。为了加大挑战难度我们让四个子和其他程序比赛,AlphaGo分别赢得77%,86%,99%的游戏,分别和Crazy Stone,Zen 和Pachi在各自的比赛中。分布式版本的AlphaGo异常的强大,对比单机版的AlphaGo赢得的77%的棋局,完胜其他围棋程序。
我们也评估了不同的AlphaGo只使用估值网络( = 0)或者快速Rollout走子策略(
= 1)评估位置。即使没有快速Rollout走子策略 AlphaGo仍然超过了其他所有的围棋程序,这个表明有估值网络时蒙特卡洛估计可能是可选的。然而混合估计(
= 0.5)的AlphaGo表现最佳,赢了95%其他不同
的AlphaGo。这个说明两个位置估计的机制是补充性的:估值网络用精确但速度比较慢的
去逼近游戏的收益,然而Rollout方法可以通过稍弱但更快的策略 精确的评估游戏得分和游戏收益。图5显示了实际游戏同AlphaGo的估计。
最后,我们评估了分布式版本的AlphaGo对抗樊辉(职业2段,2013,2014,2015欧洲围棋冠军)的比赛。在2015年10月5-9日AlphaGo和樊辉进行了一个正式的五番棋比赛,AlphaGo赢得了五盘所有的比赛。这是第一次计算机打败人类职业棋手,没有任何的让子,在整个比赛中完胜对手,以前被认为要至少10年以上的时间。
参考:Mastering the game of Go with deep neural networks and tree search
后记:
虽然这篇文章或许没有太多算法的创新,但是也许开启了人工智能的新的征程。尤其是监督式强化学习(也可以说是监督式探索学习,结合了有教师的监督训练及无教师时的自我探索学习),是个人比较欣赏的(虽然以前有带神经网络的强化学习,一个是深度比较浅一个是没有提监督式强化学习),因为自己觉得这篇文章对于世界及国内的人工智能发展有比较大的意义以及不是所有国内的从业者英文水平都很好,所以冒昧翻译。确实中文和英文有些词差异比较大比较难翻译,如果有问题请不吝留言或指出。