详见:https://int8.io/monte-carlo-tree-search-beginners-guide/
https://blog.csdn.net/ljyt2/article/details/78332802
Model-free:
类似monte carlo control, sarsa, q-learning, ac算法都是model-free算法。样本完全从经验中获得。从来不利用对于下一个状态,下一个reward的预测
model-based:
MCTS是一种典型的model-based算法。因为MCTS在模拟的过程中,用到了模型的对下一个state或者reward的预测
蒙特卡洛方法。随机抽样来预估实际分布。
蒙特卡洛树搜索
游戏里有个min-max策略:假设对手会采用最优策略的情况下,最大化自己的收益(即假设对手会采用某种策略使你收益最小的前提下,寻求该情形下收益最大化的策略)。min-max策略需要遍历所有状态至终局。
v函数是A,B两个收益者的收益函数。eval是评价一个最终状态的函数。
指到达某终止点的最终状态。两个eval函数的正负号表示这是一场零和博弈。一般我们有限地遍历最大深度n层。因此需要一个值函数评估非终局状态。节点的子节点数目被称为分支因子(branching factor)。分支因子是变化的,它依赖于搜索树的深度。
蒙塔卡洛树搜索的搜索是,从根结点到某未完全展开节点的遍历过程。
未完全展开节点指至少有一个子节点未遍历。对于未完全展开节点,蒙特卡洛树会采取模拟的方法,并将模拟结果反响传播给父节点。
MCTS可以概括伟四个方面:selection,expansion,evaluation,backup
- 选择:在已访问节点中,如何选择下一个要访问的节点(未完全展开节点)。方法:用一个函数来进行选择。
uct函数:
左边是exploitation 右边是exploration。N(v)是根节点总访问次数。
模拟:rollout策略。可以是随机游走,也可以是符合服从均匀分布的随机采样。在alpha go中,deepmind的人设计了一个快速走子网络来进行rollout。rollout中经过的节点并不会被标记为访问,只有模拟开始的根结点会被标记为访问
expansion:一般是随机选择一个未展开节点。
反向传播:反向传播会在从根节点到当前节点上更新两个值。 Q(node)和N(node)。
Q(node)表示该节点的模拟总奖励。一般情况来说,是模拟结果的总和。
N(node)表示该节点的访问次数(反向传播次数)。可以反映该节点对根节点总奖励的贡献。这两个值反映了该节点的价值以及探索程度
alphago
alphago zero
用预测出来的落子概率p,状态函数v来反推行动值函数q
搜索结束之后,得到policy , 这个值被保存,后面加入到神经网络的训练。
总结一下:
Alpha go:
Slow Policy network(expansion)
进一步提高:rl policy network(mcts中未用到)
Rollout network (对应simulation)
Value network(对应simulation)
alphago zero 在alpha go的基础上进一步改进:
两个网络换成一个网络两个头。输出落子概率p和价值评估v。
Cnn升级成resnet。
alphago 还用人类棋谱来训练策略网络policy network。alpha zero完全是自我学习。在self-play中用mcts前向搜索,同时将mcts的结果保存下来做network training