• AlphaGo论文解析-第01篇


    目录

      摘要

      围棋的困难点分析

      如何绕过困难点

      AlphaGo思想简介

      网络训练流程分析

      1.策略网络的监督学习

      2.策略网络的强化学习

      3.价值网络的强化学习

      4.策略网络、价值网络联合MCTS

      AlphaGo算法小结

      AlphaGo棋力评估

      Discussion

      AlphaGo中MCTS的细节*

      参考资料


     

    摘要

    用AI下围棋是一个非常大的挑战,因为围棋具有巨大的搜索空间,也难以评估棋面和动作的好坏。DeepMind提出了一种新的方法,即使用价值网络(value networks)来评估棋面好坏,使用策略网络(policy networks)来选择落子动作。这两个网络的训练过程有一些创新,使用的训练数据有人类高手的对弈数据以及AI左右博弈的数据。单纯的使用这两个网络,就可以达到蒙特卡洛树搜索(MCTS,以前的下棋程序主要用它)的水平。Deepmind又进行了创新,即把这两者(两个网络、MCTS)有机合并,最终达到了非常好的效果(打败欧洲冠军樊麾)。

     返回目录

     

    围棋的困难点分析

    具有完备信息的游戏都会有一个最优的价值函数(value function),,它能够在任何的状态s(棋面)下知道游戏的最终胜负。其实就是穷举的思想,做法就是在某个状态下,递归的向下展开游戏树,然后就知道所有落子位置的精确胜率。但是,展开一棵游戏树是不可能的,因为复杂度太高为,b表示游戏的宽度(可以落子的位置数),d是深度(游戏的长度)。

     返回目录

     

    如何绕过困难点

    所以就需要对价值函数进行近似,可以从两方面入手:

    1.减少搜索深度:

    通过位置评估的方式,对树的搜索进行截断。比如搜索到某个状态s,使用一个近似函数来预测当前价值,就不继续向下展开游戏树了。

    2.减少搜索宽度:

    在某个状态下,不对所有的可以落子的位置进行搜索,而是通过落子位置采样的方式,也就减小了搜索宽度。落子的采样可以服从策略的分布。

     返回目录

     

    AlphaGo思想简介

    使用残差网络的架构,将棋盘状态编码为19*19的张量(19是棋盘大小)作为输入,来训练价值网络和策略网络

    网络的训练分成了几个阶段:

    1.训练监督学习策略(SL)网络,使用的是人类围棋专家的对弈数据。使用相同的方法,再训练监督学习策略网络,该网络更小,推理速度更快。

    2.训练强化学习策略(RL)网络,该网络训练参数以的参数为起点,使用左右博弈产生的数据,进行强化学习,可以理解成对的进一步提升。这里补充一下,SL模型的输出是对准确率的预测(输入一个棋面,输入下一步落子位置),而RL模型就是要突破人类的经验,去探索对取胜更有价值的路数。

    3.训练一个价值网络,该网络输入的是棋面,输出的是获胜的概率,其中使用的下棋策略就是RL模型。

    以上就是网络训练部分

     

    但是最终Deepmind还借鉴了MCTS的思想,对AlphaGo的能力做了进一步的提升。

     返回目录

     

    网络训练流程分析

     

    在上图a中,可以看出,使用人类专家的下棋动作来进行监督学习训练(Softmax多分类)。

    拷贝的参数,再让左右博弈,自己和若干轮前的自己博弈,使用policy Gradient进行强化学习,得到自我对弈的数据。

    使用自我对弈的数据,通过回归的方式训练价值网络,输入是棋面,输出是该棋面的价值

     

    在上图b中可以看出:

    策略网络,输入的是棋面,输出的是合理落子位置的概率(向量)

    价值网络,输入的是棋面,输出的是价值(标量)

     

    下面对每一个细节进行展开,包括:

    1.策略网络的监督学习

    2.策略网络的强化学习

    3.价值网络的强化学习

    4.策略网络、价值网络联合MCTS

     返回目录

     

    1.策略网络的监督学习

    SL策略网络的结构是卷积网络(13层),参数为σ,和relu激活函数,输出层是Softmax分布,每个值表示一个位置落子的概率。

    训练数据是人类围棋高手的3kw盘对弈数据,输入是某一个棋盘状态s,标签是下一个落子动作a,参数更新为梯度上升法,梯度值为

     

    AlphaGo Zero的棋盘状态的表示比较简单(只使用黑白,19*19*2),但是AlphaGo的棋盘状态略微复杂(如下表所示,19*19*48),

    模型的训练结果是:在测试集上的准确率为57%。使用同样的方法也训练了一个小的网络,它的准确率低(24.2%)但是推理速度快(2微妙,是3毫秒)。

    卷积核多少对结果影响的分析:

     

    策略网络每一层的卷积核个数可以选128,192,256,384,上图描述了不同参数下,AlphaGo的胜率(最新策略和若干轮前的策略)。可以看出256的训练准确率最高,胜率也是最高。

     返回目录

     

    2.策略网络的强化学习

    使用来初始化,即网络结构和参数都一样。使用当前和之前轮中随机抽出的进行对弈,这种随机的从对手池中选择对手的方式可以防止过拟合,使得训练更加稳定。

    网络更新方法采用随机梯度下降法,梯度为:

     

    其中,如果以取胜结束,z=1,否则为-1。其实就是赢了就加强,输了就降低

    RL模型的效果,和SL模型对弈可以有80%的胜率。

     返回目录

     

    3.价值网络的强化学习

    计算的是在状态s下,使用策略p的价值

     

    然而,只能使用一个价值网络来逼近,训练的输入是某一个棋面状态,标签是最终是否取胜(-1或+1),损失函数使用MSE,使用随机梯度上升更新参数,参数的梯度为

     

    这里有一个训练的技巧,训练数据不能够按照游戏的顺序输入,因为前后的样本只有一个棋子位置的不同,这样会导致模型过拟合。Deepmind的做法是从不同的棋局(RL自我对弈)中随机抽取训练样本,最终的模型效果是MSE=0.226(训练),MSE=0.234(测试)

     

    价值网络的真实表现如何呢?下图进行了比较

    可以看出,value network的效果比MCTS+预测得概率更准;

    value network比MCTS+预测稍差一些,但是减少了1万5千倍的计算量。

     返回目录

     

    4.策略网络、价值网络联合MCTS

    AlphaGo将策略网络和价值网络和MCTS算法进行了结合,这样可以让AlphaGo具有向前搜索动作的特质,可以做出更佳的决策。结合的方式如下图所示:

     

    搜索树的每一条边(s,a)上,存储了一个动作价值Q(s,a)、访问次数N(s,a)和先验概率P(s,a)。

    从根结点开始对该树进行仿真遍历(仿真遍历其实就是从某个位置,使用某个策略,玩到游戏结束)。在仿真过程的每一个时间步t,基于状态st选择at的方法为:

     

     其中,,先看分母,就是鼓励探索的机制;再看分子P(s,a)是由SL模型进行计算所得的先验概率,这里为什么不使用更强的RL模型呢?Deepmind给出的答案是,他们通过实践发现SL的效果更好,可能因为SL模型学习的是人类高手,他们会给出多种多样的走棋方式,更适宜和MCTS进行结合;而RL模型的走棋路数较为单一,会限制和MCTS结合的效果。

    在研究之前需要先研究

    sL是当前蒙特卡洛树的叶子结点(结点就是对应某个棋面状态);是价值网络对该状态估计出来的价值;zL是由在该状态下玩到游戏结束获得的回报值;λ是一个平衡因子。

     

    其中n表示MCTS的仿真次数。N(s,a)就是边(s,a)的总访问次数。

    动作价值Q就是把(s,a)边下面子树所有的叶节点的V求均值。

     

    再回过头来看此图(MCTS和AlphaGo的结合),

    a.每次仿真遍历树通过选择最大动作价值Q和u(P)的边。

    b.叶结点可能会被扩展(依照MCTS的原理,首次遍历会求值,非首次遍历就会扩展,列出所有可能的动作),新的结点会被计算一次,并且存为每个动作的先验概率P。

    c.在仿真结束时,叶结点被两种方式评估:价值网络和使用进行游戏到结束然后计算回报值r.

    d.自底向上地更新(s,a)对应的动作价值Q。

     

    Deepmind补充:如前面所说的先验概率采用的是SL模型(前面已经给出原因),但是在训练价值网络层面,经实践证明,使用RL模型产生的数据训练价值网络效果会更好。

     

    最终模型在推理的时候,单机版AlphaGo使用了48个CPU和8个GPU,CPU开40线程进行树搜索,GPU提供网络传播的运算。分布式版本的AlphaGo使用了1202个CPU和176个GPU,并实现了分布式版本的MCTS。这里补充一点:推理时间是影响AlphaGo水平的一个关键因素,主要就是因为MCTS的采样特点,采样的越多,计算的越准,也就越耗时。

     返回目录

     

    AlphaGo算法小结

     

     

     返回目录

     

    AlphaGo棋力评估

     

    上图a中,其他的围棋程序主要以高性能的MCTS为主,限制每步计算时间为5秒,可以看出分布式版本的AlphaGo效果很好。

    上图b中,可以看到综合使用这几种策略,效果更佳。

    上图c说明分布式版本的优势。

     返回目录

     

    Discussion

    Deepmind基于深度神经网络和树搜索,使用监督学习和强化学习算法,发明了围棋AI程序——ALphaGo,这是这个时代的一大壮举。AlphaGo不仅达到了围棋的专业水平,也让人们看到了AI在其他人们认为难以攻克的领域取得突破的曙光。

     返回目录

     

    AlphaGo中MCTS的细节*

    这里对MCTS的一些细节进行解析,感兴趣的读者可以阅读。

    为了让AlphaGo更高效地利用神经网络,Deepmind发明了APV-MCTS(asynchronous policy and value MCTS)。

    搜索树上的每一个状态结点记为s,每一条边记为(s, a)表示每一个合法的动作,每一条边上存着一个数据集合:{P(s, a), Nv(s, a), Nr(s, a), Wv(s, a), Wr(s, a), Q(s, a)}。

    P(s, a)表示该边被选中的先验概率(使用pσ算的);

    Nv(s, a)表示该边被访问的次数;

    Nr(s, a)也表示该边被访问的次数,这里之所以使用两个变量,是为了使用虚拟损失,以并行化MCTS;

    Wv(s, a)表示总的动作价值(total action-value),每次仿真执行这条边上的a,都会由价值网络算出一个v,就是v的累加。

    Wr(s, a)表示总的rollout动作价值(total action-value),每次仿真执行这条边上的a,都会用pπ玩到游戏结束得到一个结果z,就是z的累加。

    Q(s, a)表示平均动作价值(mean action-value)。

    多个仿真会在不同的搜索线程中并行执行,APV-MCTS算法执行步骤如下图所示:

    在上图a中,展示的是选择(Select)。每一次仿真从搜索树的根结点s0出发,在时间步L到达叶结点SL该次仿真过程结束,期间使用的策略是pπ。在每一个时间步t<L,选择动作的依据为,Q还是如前文所述,但是u略有变化,这里使用了一个PUCT的变体算法,其中,cpuct是一个控制探索的常量。

    上图c中,展示的是评估(Evaluate)。叶结点SL被添加到队列,然后由价值网络进行评估。然后以该叶结点为起点进行第二次仿真,这次一直玩到游戏结束,期间使用的策略也是pπ。游戏结束后会返回一个分数

    在上图d中,展示的是回溯(Backup)【这里难度较大,因为这里涉及到MCTS的并行化搜索】。在仿真过程中的每一个时间步t<L,在rollout过程中,其统计数据会被更新,更新的原则就是假定他输了nvl 场(论文里取nvl=3)游戏,即,Nr(st, at) = Nr(st, at) + nvl ; Wr(st, at) = Wr(st, at) - nvl;这个虚拟损失的作用就是不鼓励其他线程也同时地探索这个位置。当这次仿真结束了,就把真实的值赋值回来,即Nr(st, at) = Nr(st, at) - nvl +1; Wr(st, at) = Wr(st, at) + nvl + zt;【这里的+1表示该边被多访问了一次,+z表示把真实的游戏结果加到总的rollout动作价值】。

    和价值网络有关的更新比较,即Nv(st, at) = Nv(st, at) +1; Wv(st, at) = Wv(st, at) + vθ(sL);

    至于Q,就是一个带权和,(论文中取λ=0.5)整个的更新过程是一个无锁树的更新(lock-free)。

     

    在上图b中,展示的是扩展(Expansion)。【这里使用了树策略,动态调整阈值等,已经被AlphaGo Zero抛弃,感兴趣的读者可以自行研究】

     

    在所有的搜索结束后,AlphaGo会以执行访问次数最多的边上的动作,这样会对异常值更稳定,那用N的合理性在哪呢?其实换个角度想想就明白了,如果一个结点被探索的次数很多,说明该结点下的子结点一定含有很多“高招”)。落子完成后,搜索树可以被重用,被选中的边的子结点又变成根结点,上面的统计值继续使用,未被选中的分支会被舍弃。当搜索树的根结点和最好的子结点的胜率小于一定阈值(10%)时AlphaGo Zero就会认输。

     返回目录

    参考资料

    《Mastering the game of Go with deep neural networks》

    MCTS可以参考:https://www.bilibili.com/video/BV1JD4y1Q7mV?from=search&seid=191148648235214401

     返回目录

  • 相关阅读:
    分享我设计的iOS项目目录结构
    swift语言之多线程操作和操作队列(下)———坚持51天吃掉大象(写技术文章)
    swift语言之多线程操作和操作队列(上)———坚持51天吃掉大象
    获取UIColor中的RGB值(本人亲测多个获取RGB值的方法,这个最有效)
    swift语言开发的一个游戏------熊猫跑酷(KongfuPanda)
    ios上传应用后,审核流程完成前(reveiw)修改了程序内容,如何上传替换
    上架app 到app store 的出现: “The IPA is invalid. It does not inlude a Payload directory.”错误处理
    ios 8+ (xcode 6.0 +)应用程序Ad Hoc 发布前多设备测试流程详解
    Swift 实现iOS Animation动画教程
    新浪微博项目---首页技术点三.上拉刷新,下拉加载的实现(使用ios自带的小菊花实现)
  • 原文地址:https://www.cnblogs.com/itmorn/p/14571696.html
Copyright © 2020-2023  润新知