POLICY IMPROVEMENT BY PLANNING WITH GUMBEL


发表时间:2022(ICLR 2022)
文章要点:AlphaZero在搜索次数很少的时候甚至动作空间都不能完全被访问到,这个时候AlphaZero的效果是不好的。文章提出了Gumbel AlphaZero算法,利用policy improvement的思想不重复的采样动作,来替代原始的MCTS的搜索方式,在模拟次数很少的情况下提高了性能。改进主要在于:
AlphaZero通过给policy网络添加Dirichlet noise来搜索,但是这个方式不能保证policy improvement,本文提出了用Gumbel-Top-k trick来无放回的采样动作。
AlphaZero用PUCB来选择动作,最终的动作选择只和最终的访问次数有关,和中间结果无关,作者提出用Sequential Halving algorithm来选择动作。
AlphaZero最终选择执行的动作是基于访问次数的softmax选择,作者改为了Sequential Halving algorithm的结果选择唯一的一个动作。
AlphaZero的policy网络的更新用的根节点访问次数的概率,作者改为了基于root action value来做policy improvement的更新。
具体的,Gumbel-Max trick如下

具体的解释可见这个链接Gumbel-Softmax Trick
然后Gumbel-Top-k trick就是选最大的n个,这里的命名有点奇怪,其实叫top n可能更容易理解

Planning的动作就是这n个动作。等planning结束后,真正选动作就是这个n个里面最大的。选择的式子为

可以看到这里多了一项\(\sigma (q(a))\),其中\(q(a)\)是动作\(a\)对应的planning的\(Q\) value,\(\sigma\)是一个单调增函数,这可以保证policy improvement

这部分的伪代码如下

上面这部分已经解释了search/planning之后的流程,接着就是怎么做search。作者提出了Sequential Halving with Gumbel
具体就是在根节点的地方,用Gumbel-Top-k trick选m个动作(这里数量用的m表示,有点混乱),然后用Sequential Halving算法来做simulation,总共做n次simulation。完了之后就有了每个动作的\(q(a)\),接着就用algorithm 1的方式选值最大的动作。具体伪代码如下

这里


接着的问题就是Sequential Halving是啥,如下图

最开始有m个动作,这m个动作先被同时访问\(n/(\log_2(m)m)\)取下整次,然后根据访问结果,淘汰掉一半的动作,接着剩下的\(m/2\)个动作又被同时访问\(n/(\log_2(m)(m/2))\)取下整次,以此类推一直到最后只剩一个动作。根节点的动作选择好了之后,后面的搜索用了一个确定性的方式来选动作

到这里search就结束了,剩下的问题是如何训练。作者使用了KL散度来训练

其中


总结:相当于先将搜索空间限定住,然后探索是通过gumbel noise在根节点加的,非根节点没有噪声,然后更新也算是监督学习,只是监督的对象变成了\(Q\),和访问次数无关了。
疑问:感觉这个Gumbel-Top-k trick,其实直接对着policy net做无放回采n个动作是一样的,可能是这个方式能更好利用\(\sigma (q(a))\),优于policy net加dirichlet noise?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章