1、整体解读
AlphaGo Zero中使用的是强化学习方法,使用的深度神经网络记为 (其中 是网络的参数)。网络的输入是棋盘状态(中表示了当前玩家落子的信息,对手的落子信息,棋盘最后一步落子的信息,当前的棋盘转态谁是先手等信息,即棋盘的历史信息和当前信息)。网络的输出是,其中是当前玩家在局面状态下,即将要选择落子到每一步的概率,所以是一个向量,假设局面是8*8的五子棋,则是长度为64的向量,而则是一个标量的评估值,估计当前玩家从状态 获胜的概率,的取值范围是,从当前玩家的角度看,分别代表当前玩家输了,平局,赢了(为了方便描述,下面的解读都以8*8的五子棋作为说明实例。)值得注意的是,这个网络将策略网络(输出的部分)和价值网络(输出的部分)结合在一起而形成单一架构。该网络由许多具有批量归一化的卷积层和残余块等组成。
如图.1所示,在每一个的状态中都首先执行蒙特卡洛(MCTS)搜索得出每次即将要移动的概率(跟前面介绍的其实意义相同,只不过是MCTS输出的结果,而是神经网络输出的结果),这里的MCTS跟纯的MCTS搜索不同,它是在神经网络 的指导下进行的搜索。(下面部分详细讲解)。
图1.a.Self-Play表示的过程如下:
假设是初始棋盘状态,当前玩家是1,玩家1在棋盘状态下准备落子,它不知道走哪一步是最佳的落子位置,所以先在的棋盘状态下,执行n次MCTS搜索,根据MCTS搜索得出的移动概率进行落子(这里的计算:(1)根据n次MCTS模拟对局产生的每个节点的访问次数得出概率向量p1,即访问最多的p1向量对应那个节点的概率就越大,p1中每个节点概率之和为1,(2)然后经过公式1的计算,即将每个节点的访问次数N通过公式(1)的变换在进行计算其概率,那么最终的概率是p2,如果一直取值1,则p2其实就是p1,其中为温度参数,控制探索的程度, 越大,不同走法间差异变小,探索比例增大,反之,则更多选择当前最优操作(3)将p2的每个节点概率即进行公式(2)变换,其中在论文中,是dirichlet分布,如公式(3)所示,这样做的目的是在一定程度上有助于覆盖到更多的局面)。当前玩家1在棋盘状态经过以上的执行n次MCTS搜索得出后,选择落子的方法就是按照概率的分布取出下一步移动,然后进入下一个棋盘状态,当前玩家交换为玩家2,不断重复上面步骤直到状态分出胜负,这里只有3种可能,赢,平局,输,分别对应1,0,-1。收集到的数据形式是。
图1.b.Neural Network Training表示的过程如下:
上面收集到的数据,实际上这里可以看出是监督学习的训练了,目标就是让策略网络输出的概率拟合,价值网络的输出拟合的过程。因为是在神经网络的指导下进行的,随着神经网络训练的增加,的结果也越来越可靠,可以认为比稍微强些。
2、棋盘的表示
以8*8五子棋为例,假设的矩阵表示,用来表示当前玩家走过的位置,从棋盘状态为0到目前状态为止,走过的位置设置1,其他位置为0;用来表示当前玩家的对手走过的位置,类似;表示lastmove,即上一步落子的位置(上一步落子的一定是当前玩家的对手落子),即只有lastmove设置1,其他位置都是0;表示当前玩家是否是先手,全部的位置要么设置1,要么设置0.
3、MCTS搜索
这里的MCTS搜索相比于纯MCTS搜索,最大的区别是当遇到叶子节点node(在纯MCTS中对应于一个子节点也未访问的节点)时候,(1)这里的MCTS搜索是在深度神经网络 的指导下进行的,即未访问的节点的子节点的初始化为 ;此时,叶子节点node被展开,其价值为,下一步即将要走的概率为,然后叶子节点node用这个值反向传播去更新从node节点到根节点的一条路径。如果在node节点处,当前局面已经是分出胜负的局面,即node节点还没落子就结束局面,那么赢的一方就是上一个玩家,那么用值反向传播去更新从node节点到根节点的一条路径,即对于上一个玩家来说,node节点是价值很高的一步落子。由于玩家是交叉进行的,node节点用更新,那么node的父节点用更新,依次类推。(2)纯MCTS搜索则是在遇到叶子节点node时,判断在node节点下,哪些子节点是可以落子的,选择一个可以落子的子节点进行随机走,直到在node选择的该子节点中分出胜负,然后反向传播去更新从node节点到根节点的一条路径,注意更新的开始是node节点,如果结果是赢,则node节点的。当下一次模拟在遇到node时候,则还是选择一个node的子节点进行随机走直到分出胜负。纯MCTS搜索相比于借助神经网络的MCTS搜索,其效率比较低,因为一次模拟对局,它只展开node节点的一个子节点,而借助神经网络的MCTS搜索一次可以展开node所有子节点,然后下一次遇到node之后,则可以node是完全展开的节点了,可以继续往下走,走哪一步根据计算得出,Q,初始值都是0。其中U(s,a)正比于,如公式(4),该方法是PUCT算法的变种,这种搜索策略刚开始偏向高先验概率低访问频率的行动,后来逐渐偏好高行动价值的动作。而纯MCTS搜索需要将所有子节点访问后才可以。
总结MCTS搜索:
如图.2所示:
(1)Select选择阶段:
起始于树的根节点,当遇到叶子节点后终止,选择落子的依据是值最大的节点
(2)Expand and evaluate扩展评估阶段:
遇到叶子节点node,则把当前输入神经网络得出node节点的信息,然后反向传播更新
(3)Backup回传阶段:
从叶子结点node开始回传边的统计量,其中搜索树中每一节点s针对合法操作保存以下数据结构。其中是记录边的访问次数,是合计的行动价值,是平均行动价值,是选择该条边的先验概率。
(4)Play落子阶段:
搜索结束后AlphaGo Zero在根节点 s 处选择a操作进行落子,在AlphaGo Zero论文中,每一个self-play对局的前30步,action是根据正比于MCTS根节点处每个分支的访问次数的概率采样得到的,即落子概率与访问次数成幂指数比例。其中 为温度参数,控制探索的程度, 越大,不同走法间差异变小,探索比例增大,反之,则更多选择当前最优操作。而之后的exploration则是通过直接加上Dirichlet noise的方式实现的,如公式(2)(3),即在温度计算公式后进行公式(2)(3)的变换(在自我对弈收集数据时有这个操作,为了增加数据的多样性,在训练好的网络中不需要这一步)。最终得出,根据的概率分布选择落子。即,经过n次MCTS搜索模拟对局后,真正走出的一步落子。
4、优化的目标
第一项:通过最小二乘最小化获胜概率误,第二项:通过交叉熵最大化先验走子概率与提升后走子概率一致性;第三项:L2范数权值衰减防止过拟合。
参考
1.AlphaGo Zero论文笔记
2.AlphaZero实战
3.Masteing the game of Go without human knowledge