论文《Masteing the game of Go without human knowledge》解读

1、整体解读

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

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

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

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

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

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

ηDir(0.3)(3) η ∼ D i r ( 0.3 ) ( 3 )

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

2、棋盘的表示

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

3、MCTS搜索

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

at=argmaxa(Q(st,a)+U(st,a)) a t = a r g max a ( Q ( s t , a ) + U ( s t , a ) )

U(s,a)=cputP(s,a)bN(s,b)1+N(s,a)4 U ( s , a ) = c p u t ∗ P ( s , a ) ∗ ∑ b N ( s , b ) 1 + N ( s , a ) ( 4 )

Q(st,at)=W(st,at)N(st,at) Q ( s t , a t ) = W ( s t , a t ) N ( s t , a t )

N(st,at)=N(st,at)+1 N ( s t , a t ) = N ( s t , a t ) + 1

W(st,at)=W(st,at)+v W ( s t , a t ) = W ( s t , a t ) + v

总结MCTS搜索:
如图.2所示:
这里写图片描述

图.2 MCTS搜索

(1)Select选择阶段:
起始于树的根节点,当遇到叶子节点后终止,选择落子的依据是 Q(s,a)+U(s,a) Q ( s , a ) + U ( s , a ) 值最大的节点
(2)Expand and evaluate扩展评估阶段:
遇到叶子节点node,则把当前 s 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 ) 。其中 N(s,a) N ( s , a ) 是记录边的访问次数, W(s,a) W ( s , a ) 是合计的行动价值, Q(s,a) Q ( s , a ) 是平均行动价值, P(s,a) P ( s , a ) 是选择该条边的先验概率。
Q(st,at)=W(st,at)N(st,at) Q ( s t , a t ) = W ( s t , a t ) N ( s t , a t )

N(st,at)=N(st,at)+1 N ( s t , a t ) = N ( s t , a t ) + 1

W(st,at)=W(st,at)+v W ( s t , a t ) = W ( s t , a t ) + v

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

4、优化的目标

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值