1、整体解读

AlphaGo Zero中使用的是强化学习方法,使用的深度神经网络记为fθ (其中θ 是网络的参数)。网络的输入是棋盘状态s(s中表示了当前玩家落子的信息,对手的落子信息,棋盘最后一步落子的信息,当前的棋盘转态谁是先手等信息,即棋盘的历史信息和当前信息)。网络的输出是(p,v),其中p是当前玩家在局面s状态下,即将要选择落子到每一步的概率,所以p是一个向量,假设局面是8*8的五子棋,则p是长度为64的向量,而v则是一个标量的评估值,估计当前玩家从状态s 获胜的概率,v的取值范围是v[1,1],从当前玩家的角度看,v=101分别代表当前玩家输了,平局,赢了(为了方便描述,下面的解读都以8*8的五子棋作为说明实例。)值得注意的是,这个网络将策略网络(输出p的部分)和价值网络(输出v的部分)结合在一起而形成单一架构。该网络由许多具有批量归一化的卷积层和残余块等组成。
论文《Masteing the game of Go without human knowledge》解读

图.1 AlphaGo Zero的自我对弈与训练过程

如图.1所示,在每一个s的状态中都首先执行蒙特卡洛(MCTS)搜索得出每次即将要移动的概率π(π跟前面介绍的p其实意义相同,只不过π是MCTS输出的结果,而p是神经网络fθ输出的结果),这里的MCTS跟纯的MCTS搜索不同,它是在神经网络fθ 的指导下进行的搜索。(下面部分详细讲解)。

图1.a.Self-Play表示的过程如下:
假设s1是初始棋盘状态,当前玩家是1,玩家1在棋盘状态s1下准备落子,它不知道走哪一步是最佳的落子位置,所以先在s1的棋盘状态下,执行n次MCTS搜索,根据MCTS搜索得出的移动概率π进行落子(这里π的计算:(1)根据n次MCTS模拟对局产生的每个节点的访问次数得出概率向量p1,即访问最多的p1向量对应那个节点的概率就越大,p1中每个节点概率之和为1,(2)然后经过公式1的计算,即将每个节点的访问次数N通过公式(1)的变换在进行计算其概率,那么最终的概率是p2,如果τ一直取值1,则p2其实就是p1,其中τ为温度参数,控制探索的程度, τ 越大,不同走法间差异变小,探索比例增大,反之,则更多选择当前最优操作(3)将p2的每个节点概率即pa进行公式(2)变换,其中在论文中ε=0.25ηa是dirichlet分布,如公式(3)所示,这样做的目的是在一定程度上有助于覆盖到更多的局面)。当前玩家1在棋盘状态s1经过以上的执行n次MCTS搜索得出π1后,选择落子的方法就是按照概率π1的分布取出下一步移动a1,然后进入下一个棋盘状态s2,当前玩家交换为玩家2,不断重复上面步骤直到状态st分出胜负z,这里z只有3种可能,赢,平局,输,分别对应1,0,-1。收集到的数据形式是(si,πi,z)

N(s,a)1/τ(1)

p(s,a)=(1ε)pa+εηa(2)

ηDir(0.3)(3)

图1.b.Neural Network Training表示的过程如下:
上面收集到的数据(si,πi,z),实际上这里可以看出是监督学习的训练了,目标就是让策略网络输出的概率p拟合π,价值网络的输出v拟合z的过程。因为π是在神经网络的指导下进行的,随着神经网络训练的增加,π的结果也越来越可靠,可以认为比p稍微强些。

2、棋盘的表示

以8*8五子棋为例,假设s=488的矩阵表示,s[0]用来表示当前玩家走过的位置,从棋盘状态为0到目前状态为止,走过的位置设置1,其他位置为0;s[1]用来表示当前玩家的对手走过的位置,类似s[0]s[2]表示lastmove,即上一步落子的位置(上一步落子的一定是当前玩家的对手落子),即只有lastmove设置1,其他位置都是0;s[3]表示当前玩家是否是先手,全部的位置要么设置1,要么设置0.

3、MCTS搜索

这里的MCTS搜索相比于纯MCTS搜索,最大的区别是当遇到叶子节点node(在纯MCTS中对应于一个子节点也未访问的节点)时候,(1)这里的MCTS搜索是在深度神经网络fθ 的指导下进行的,即未访问的节点的子节点的初始化为fθ(s)=(p,v) ;此时,叶子节点node被展开,其价值为v,下一步即将要走的概率为p,然后叶子节点node用这个v值反向传播去更新从node节点到根节点的一条路径。如果在node节点处,当前局面s已经是分出胜负的局面,即node节点还没落子就结束局面,那么赢的一方就是上一个玩家,那么用v=1值反向传播去更新从node节点到根节点的一条路径,即对于上一个玩家来说,node节点是价值很高的一步落子。由于玩家是交叉进行的,node节点用v=1更新,那么node的父节点用v=1更新,依次类推。(2)纯MCTS搜索则是在遇到叶子节点node时,判断在node节点下,哪些子节点是可以落子的,选择一个可以落子的子节点进行随机走,直到在node选择的该子节点中分出胜负,然后反向传播去更新从node节点到根节点的一条路径,注意更新的开始是node节点,如果结果是赢,则node节点的v=1。当下一次模拟在遇到node时候,则还是选择一个node的子节点进行随机走直到分出胜负。纯MCTS搜索相比于借助神经网络的MCTS搜索,其效率比较低,因为一次模拟对局,它只展开node节点的一个子节点,而借助神经网络的MCTS搜索一次可以展开node所有子节点,然后下一次遇到node之后,则可以node是完全展开的节点了,可以继续往下走,走哪一步根据Q(s,a)+U(s,a)计算得出,Q,初始值都是0。其中U(s,a)正比于P(s,a)/(1+N(s,a)),如公式(4),该方法是PUCT算法的变种,这种搜索策略刚开始偏向高先验概率低访问频率的行动,后来逐渐偏好高行动价值的动作。而纯MCTS搜索需要将所有子节点访问后才可以。

at=argmaxa(Q(st,a)+U(st,a))

U(s,a)=cputP(s,a)bN(s,b)1+N(s,a)4

Q(st,at)=W(st,at)N(st,at)

N(st,at)=N(st,at)+1

W(st,at)=W(st,at)+v

总结MCTS搜索:
如图.2所示:
论文《Masteing the game of Go without human knowledge》解读

图.2 MCTS搜索

(1)Select选择阶段:
起始于树的根节点,当遇到叶子节点后终止,选择落子的依据是Q(s,a)+U(s,a)值最大的节点
(2)Expand and evaluate扩展评估阶段:
遇到叶子节点node,则把当前s输入神经网络得出node节点的(p,v)信息,然后反向传播更新
(3)Backup回传阶段:
从叶子结点node开始回传边的统计量,其中搜索树中每一节点s针对合法操作保存以下数据结构N(s,a),W(s,a),Q(s,a),P(s,a)。其中N(s,a)是记录边的访问次数,W(s,a)是合计的行动价值,Q(s,a)是平均行动价值,P(s,a)是选择该条边的先验概率。
Q(st,at)=W(st,at)N(st,at)

N(st,at)=N(st,at)+1

W(st,at)=W(st,at)+v

(4)Play落子阶段:
搜索结束后AlphaGo Zero在根节点 s 处选择a操作进行落子,在AlphaGo Zero论文中,每一个self-play对局的前30步,action是根据正比于MCTS根节点处每个分支的访问次数的概率采样得到的,即落子概率与访问次数成幂指数比例π(a|s)=N(s,a)1/τ/bN(s,b)1/τ。其中 τ为温度参数,控制探索的程度, τ越大,不同走法间差异变小,探索比例增大,反之,则更多选择当前最优操作。而之后的exploration则是通过直接加上Dirichlet noise的方式实现的,如公式(2)(3),即在温度计算公式后进行公式(2)(3)的变换(在自我对弈收集数据时有这个操作,为了增加数据的多样性,在训练好的网络中不需要这一步)。最终得出π,根据π的概率分布选择落子。即,经过n次MCTS搜索模拟对局后,真正走出的一步落子。

4、优化的目标

loss=(zv)2πTlog(p)+c||θ||
第一项:通过最小二乘最小化获胜概率误,第二项:通过交叉熵最大化先验走子概率与提升后走子概率一致性;第三项:L2范数权值衰减防止过拟合。

参考
1.AlphaGo Zero论文笔记
2.AlphaZero实战
3.Masteing the game of Go without human knowledge

相关文章:

  • 2021-11-19
  • 2021-08-02
  • 2021-06-03
  • 2021-04-20
  • 2022-12-23
  • 2021-06-17
  • 2021-07-30
  • 2021-04-05
猜你喜欢
  • 2021-08-29
  • 2021-12-12
  • 2021-05-19
  • 2021-12-15
  • 2021-04-22
  • 2021-06-15
  • 2021-06-26
相关资源
相似解决方案