2016版Alphago的方法简析
最近入坑用AI打游戏,决定先去扒alphagao是怎么做的
围棋AI早期利用围棋知识、棋谱进行特征匹配之后拥抱蒙特卡洛树搜索,在Alphago中在蒙特卡罗树搜索的框架下,使用了监督学习和增强学习的方法。数据来自160,000盘6-9段玩家的围棋对战,共29,400,000个棋局
下面是算法大致构架
说明:
蒙特卡罗树搜索
个人认为蒙特卡洛树搜索是逻辑最为复杂的地方
首先熟悉一下蒙特卡罗方法
蒙特卡罗方法是一种统计模拟方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。它是一种有偏估计。
举个栗子:
希望得到π值的估计,那么就在一个圆的外切正方形内随机放置100000个点,通过坐落在园内的点与全部点的比来得到π的估计。
再如计算积分,通过模拟点落在积分曲线内部的概率得到这部分面积的估计。
蒙特卡罗树搜索和蒙特卡罗方法还是不一样的,前者没有是无偏的。蒙特卡罗方法做的是概率估计而蒙特卡罗树搜索却可以做到局面估计。
蒙特卡洛树搜索主要涉及到选择、扩展、模拟以及反向更新四个步骤
选择过程会兼顾胜率和多样性
具体到Alphago的算法:
选择:
有兼顾到reward和多样性
扩展:
如果到达的叶子节点访问次数不足阈值,是不做扩展的,仅仅更新价值估计
如果超过了阈值,则做拓展,拓展节点访问次数置为0,并用SL Policy Network求取落字先验
模拟:
使用value net进行估计
使用rollout net快速走子进行估计
综合二者得到扩展的叶节点的价值
反向更新:
各节点的访问次数更新
各节点的价值更新(取均值)
落子选择:
选择访问次数最多的