蒙特卡洛树搜索(MCTS)——AlphaGoGoZero的核⼼算法蒙特卡洛树搜索( Monte-Carlo Tree Search,简称MCTS)
这是许多游戏的核⼼算法。顾名思义,这是⼀种常见的数据结构——树。这棵树的每⼀个节点都代表游戏的⼀个当前局⾯的确定状态。在每局游戏过程中,每⼀步落⼦前,蒙特卡罗树搜索都会模拟游戏多次,就像⼈类思考的⽅式⼀样(⽐如职业棋⼿在每⼀步落⼦前都会预测若⼲步接下来的落⼦),通过模拟游戏的发展⽅向,观察每⼀步可以落⼦的位置是否会导致最终胜利。并试图根据模拟结果预测最有希望的落⼦动作,因此可将游戏选择落⼦看作是 “最有希望的下⼀步⾏动”的问题。下图显⽰了MCTS算法的⼀次迭代。
在MCTS的⼀次模拟中,游戏将按照某种策略进⾏到底,直到平局或分出胜负。每次模拟时落⼦的选择在不同版本的MCTS有不同的实现,在普通的MCTS算法中,默认是⼀种称为RolloutPolicy的策略,通过
tcl电视遥控器随机选择下⼀步来完成游戏,由于它⾮常快,因此有了⼤量的样本,最终得到明智的决策,纯MCTS算法对叶⼦节点进⾏评估时,使⽤到了这⼀策略。另外,MCTS算法的⼀个⾮常流⾏的变体是树的上置信限(Upper Confidence Bounds for Trees,简称为UCT )。使⽤的公式如下所⽰,
它是两个组件的总和,每次移动都是选取这两个组件和的最⼤值的节点进⾏移动。
Q(s, a) 称作开发组件,是节点的平均⾏为价值,它是⼀个0到1间的值,简单地说,这就是动作a在从状态s开始执⾏游戏(模拟步骤)并⾸先选择该动作时的胜率估计。氮污染
第⼆个部分名为名为探索组件,是为了避免开发组件贪婪地只搜索那些在开始时很早就能带来获胜的节点,探索组件⽀持那些相对较少访问的节点,其中,N(s)是算法访问状态s的次数,N(s, a)是动作a从状态s中采样的次数。
参数c控制蒙特卡罗树搜索中的开发组件和探索组件之间的权衡[]。
相似的算法还有极⼤极⼩算法(min-max)和 -β 剪枝算法,min-max需要展开树的全部节点,导致搜索空间太⼤; -β 是改进版的min-max,可以通过减去部分⽆效树枝来减少搜索空间,但在搜索深度增⼤时,其算法复杂度仍不可⼩觑[]。
⼀次MCTS运⾏的部分python代码:
def _playout(lf, state):
"""
从根到叶⼦运⾏⼀个单⼀的蒙特卡罗模拟,在叶⼦上获取⼀个值,并通过其⽗节点将其传播回去。状态被就地修改,因此必须提供⼀个副本。
参数:状态——状态的副本。
"""
node = lf._root
ipad开不开机while(1):境外汇款手续费
if node.is_leaf(): # 遇到叶⼦节点本次模拟结束
break
# 贪婪法选择下⼀步。
action, node = node.lect(lf._c_puct) # 在⼦节点中选择Q+U最⼤的节点返回
state.do_move(action) # 前进⼀步,继续搜索
# 策略价值⽹络返回⼀个⾛⼦概率向量p和局⾯评估值v[-1,1]来评估叶⼦节点
action_probs, leaf_value = lf._policy(state)
# 判断游戏是否结束
乌枣的功效end, winner = state.game_end()
if not end: # 未结束:通过展开计算叶⼦节点来扩展节点
el:
# 棋局结束,得到该叶⼦节点的局⾯评估值 v,并以此作为模拟对局落⼦⾏为价值 z
if winner == -1: # 平局
leaf_value = 0.0dj串烧歌曲
el: # 当前玩家视⾓下,胜利返回1,失败返回-1.
leaf_value = 1.0 if winner == _current_player() el -1.0
# 更新遍历中节点的值和访问计数。
node.update_recursive(-leaf_value)
AlphaGo Zero核⼼技术
AlphaGo Zero通过对当前局⾯状态进⾏评估,使⽤MCTS和DRL这两种⽅法的组合来选定最佳的落⼦位置。在对弈落⼦时,先是通过模拟游戏⾛势来进⾏预判,从⽽了解哪些位置最有可能在未来成为⼀个“好”位置,也就是多看⼏步,我们使⽤MCTS来完成这个游戏预判动作。然后预判时我们结合深度强化学习训练出的神经⽹络模型来判断可⾏的落⼦位置是“好”还是“坏”,这些落⼦会导致游戏是胜是负或是平局。
在AlphaGo Zero中使⽤的MCTS,树遍历遵循最⼤化以下UCT变体的节点,参数c仍然是控制MCTS中的开发组件和探索组件之间的权衡系数。将公式的第⼆部分简称为U,如下公式所⽰,
所以每次模拟是选择节点都是选取Q+U值最⼤的节点进⾏模拟落⼦。过程如下图所⽰:
让茄子对于神经⽹络模型的结构设计来讲,AlphaGo Zero使⽤单⼀的神经⽹络,⽽不是像AlphaGo中使⽤分离的策略⽹络和价值⽹络。同时,以“⾃学成才”的⽅式来训练这个⽹络,并⾮采⽤AlphaGo中利⽤⼤量⼈类棋谱数据进⾏训练的⽅法,AlphaGo Zero在训练过程中只通过强化学习进⾏训练,从随机⾛⼦开始,⽆须使⽤任何⼈类数据的指导,通过不断收集⾃我对弈数据来更新⽹络参数,最终得到⼀个强⼤的神经⽹络模型[]。
参考⽂献:
Silver D, Schrittwier J, Simonyan K, et al. Mastering the game of Go without human knowledge[J]. Nature, 2017,
550(7676).
[[i]]Jim van Eeden. Analysing And Improving The Knowledge-bad Fast Evolutionary MCTS Algorithm[A]. Utrecht University Repository, Faculty of Science Thes, 2015:3-10.
原来这么简单作文600字[[ii]]夏定纯,徐涛.⼈⼯智能技术与⽅法[M]. 武汉:华中科技⼤学出版社, 2004:125-128.
[[iii]]李⽟鑑等.深度学习:卷积神经⽹络从⼊门到精通[M] .北京:机械⼯业出版社,2018.7,380-383.