在AlphaGo Zero里,依然使用MCTS,但是去掉了每一次simulation中rollout的过程,因为这步很费时。可以看到有ab两部分,分别为自我博弈和神经网络训练。
在self-Play中,每次move都要进行一次完整的MCTS,因为对传统的MCTS进行了改进,引入edge的概念,存储Q、P、N值,用于选择节点。因为没有rollout,所以进行一次完整的MCTS速度很快。MCTS的具体步骤看下图:
每次选择best_child的依据是 M a x ( Q ( s , a ) + U ( s , a ) ) Max(Q(s,a)+U(s,a)) Max(Q(s,a)+U(s,a)), 其中:
Q ( s , a ) = 1 / N ( s , a ) ∑ s ′ ∣ s , a → s ′ V ( s ′ ) Q(s,a)=1/N(s,a)\sum_{s'|s,a\rightarrow s'}V(s') Q(s,a)=1/N(s,a)s′∣s,a→s′∑V(s′),
U ( s , a ) ∝ P ( s , a ) / ( 1 + N ( s , a ) ) U(s,a)\propto P(s,a)/(1+N(s,a)) U(s,a)∝P(s,a)/(1+N(s,a))
Q代表Action-value,U则代表探索性,和传统的MCTS的UCT的形式很相似。
假设每次MCTS需要进行1000次simulation,结束后,MCTS返回一个概率模型 π t \pi_t πt ,其中 π t = α θ i − 1 ( s t ) ∝ N ( s , a ) 1 / t \pi_t = \alpha_{\theta_i-1}(s_t) \propto N(s,a)^{1/t} πt=αθi−1(st)∝N(s,a)1/t, 这个策略是基于MCTS的,将用于校正随机初始化的神经网络。 π t \pi_t πt是作用于第t个状态的,根据这个概率采样选择一个行动,这个和RL中的随机策略梯度是类似的。然后到T次结束,则完成一次iteration,有了结果Z,根据第一张图,这个时候就要和self-play结合起来,存储为 ( s t , π t , z t ) (s_t, \pi_t, z_t) (st,πt,zt), zt就是最后的输赢状况,每步都是一样的,+1或是-1。
( p , v ) = f θ ( s ) , L o s s = ( z − v ) 2 + π T l o g P + c ∣ ∣ θ ∣ ∣ 2 (p, v) = f_\theta(s), Loss=(z-v)^2+\pi^TlogP+c||\theta||^2 (p,v)=fθ(s),Loss=(z−v)2+πTlogP+c∣∣θ∣∣2 每一次iteration,就是一次完整的游戏过程后,对神经网络进行梯度下降。
总之,还是要看原论文,网上有些没说全很容易搞糊涂。