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