**AlphaGo **

出处:P5 AlphaGo实例_强化学习

围棋游戏用人工智能语言解释:

P5 AlphaGo实例_搜索_02

  1. 围棋游戏是一个19*19方格,包含361个点的规格
  2. 状态参数包括了 黑棋、白棋、格子编号
    1. 状态s可以用一个 19 * 19 * 2的tensor分别表示黑白棋的位置,有则为1,否则为0
    2. 但实际上AlphaGo用的是 19 * 19 * 48的tensor
  3. 动作就是往空白位置放棋子
  4. 围棋的复杂度很高,排列组合有10^170次结果

Hight-Level Ideas

P5 AlphaGo实例_深度强化学习_03

训练包括三步:

  1. behavior cloning 模仿学习,从16万局人类游戏记录中学习出一个策略网络,是一种监督学习(本质是多分类)不是强化学习
  2. 用策略梯度算法来训练策略网络
  3. 训练价值网络(用的不是actor-critic方法)

执行:用的是价值网络和策略网络指导的蒙特卡洛搜索方法

P5 AlphaGo实例_神经网络_04

第一版本的AlphaGo是用的19 *19 *48的tensor,而在最新的AlphaGo zero用的则是19 *19 *17的tensor,由于AlphaGo zero更好解释,因此用的是此版本

下面解释一下这个参数:

19 * 19值得是围棋棋盘的大小是19*19的网格

17则分为,当前黑色棋子的位置+之前7步黑色棋子的位置+当前白色棋子的位置+之前7步白色棋子的位置+现在要下的棋子是黑还是白(黑的话则是一个全为1的矩阵,若是白的话则是一个全为0的矩阵)

17=1+7+1+7+1 至于为什么是统计8步棋子(可能是训练出的最佳参数值,暂无找到解释)

Initialize Policy Network by Behavior Cloning

即从人类棋局记录中模仿学习(在2016年的AlphaGo中有用到,在最新的AlphaGo zero中则没有用到)

原因P5 AlphaGo实例_深度强化学习_05

  1. 在刚开始,神经网络中的参数都是随机初始化的,如果在一开始就让两个神经网络互相博弈,那么他们都是纯随机的动作,需要摸索很多次才能做出合理的动作
  2. 若一开始就用策略梯度的方法则需要花费很多的时间

数据:P5 AlphaGo实例_强化学习_06

在KGS平台中存储了160K局人类棋手的对战记录

Behavior Cloning:是模仿学习(imitation learning),而不是强化学习(reinforcement learning)

区别在于:模仿学习没有奖励,而强化学习有奖励

P5 AlphaGo实例_搜索_07

步骤就是:

  1. 观察状态s
  2. 输入状态得到模型预测概率
  3. 记录玩家真实下的位置
  4. 记录玩家下棋位置
  5. 比较预测和真实落子位置,并记为loss
  6. 使用梯度下降来更新神经网络

本质上,behavior cloning是一个多分类的任务,棋盘上有361个位置,也就是看成361个类别,策略网络的输出就是每一个类别的概率,人类玩家的动作看做真实标签。因为不存在奖励,所以和强化学习完全不一样

P5 AlphaGo实例_搜索_08

在做完behavior cloning,我们就可以用神经网络来进行对战了,他们对于在记录的棋谱中出现过了的状态是可以做出很好的回应动作的,但是对于棋谱中没有出现过的情况,就可能会做出很差的回应,以至于错误累加会导致越来越差,所以还需要进行强化学习来加强神经网络。

Train Policy Network Using Policy Gradient

具体来说就是用两个策略网络来进行博弈,一个称为player(也就是 agent),另外一个是opponent(也就是environment)

P5 AlphaGo实例_初始化_09

player用的是策略网络的最新的模型参数,而opponent则是从旧的参数中随机选的,每下完一局围棋,用胜负来当做奖励,以此来更新player的参数。

P5 AlphaGo实例_强化学习_10

因为我们并不知道整局棋中哪步是好棋哪步是坏棋,因此我们将这局所有下过的棋都进行一样的+1或者-1的处理

P5 AlphaGo实例_搜索_11

训练策略网络的步骤:

  1. 两个策略网络进行博弈
  2. 得到棋局轨迹,即状态,动作
  3. 游戏结束后更新策略网络
    1. 返回回报u,更新u(+1或者-1)
    2. 求出梯度下降g (见P3中 近似求qt)
    3. 更新θ

到目前为止,已经用了behavior cloning以及policy gradient,此时的策略网络π已经很强了,但是还是不足以打败人类职业冠军选手,表现不够稳定,因此我们还需要加强。这个时候就需要用到蒙特卡洛策略搜索。而为了做蒙特卡洛树搜索,还需要再进行一个价值网络的训练(与之前价值网络略微不同的是,之前的是评价Q函数,而这里的则是评价状态价值函数V

Train the Value Network

P5 AlphaGo实例_初始化_12

这里的价值网络是对v函数而言的

P5 AlphaGo实例_初始化_13

策略网络和价值网络共用卷积层的特征向量

P5 AlphaGo实例_深度强化学习_14

和actor-critic方法不同,这里AlphaGo zero是先训练策略网络再训练价值网络,而前者是策略网络和价值网络同时训练的。先策略再价值的目的在于用策略网络π的帮助来训练价值网络v,具体步骤如上:

  1. 执行完一局游戏来更新u
  2. 类似于做回归的目的,比较v和u的值并求和差值平方来作为LOSS函数的值
  3. 更新参数w

到此为止,AlphaGo的训练算是彻底的结束了

在之后的实际人机对战中,AlphaGo实际上进行操作用的既不是策略网络也不是价值网络,而是蒙特卡洛树搜索

Monte Carlo Tree Search

(蒙特卡洛树搜索不需要训练就可以直接进行,而之前的训练目的就是为了让蒙特卡洛树搜索找到更好的结果)

查找用向前看几步的思想

P5 AlphaGo实例_强化学习_15

主要思想:随机抽样选择一个动作a,然后往前看直到赢或者输,执行很多次,选择评分最高的动作a

P5 AlphaGo实例_搜索_16

蒙特卡洛树搜索包含四步:

  1. selection:按照动作的分数来选出一个动作(假想的动作,并不会执行)
  2. expansion:模拟对手走一步(也是假想的动作,根据策略网络选出)
  3. evaluation:分数分为两个部分:状态价值函数给的分数v和最后游戏结束的奖励结果r,然后用(v+r)/2的值赋给a作为它的分数
  4. backup:更新动作价值

具体来说:

步骤1,selection:

P5 AlphaGo实例_深度强化学习_17

通过观察到的状态,首先给所有的动作打个分数记做score(a),它可以反应出每个动作的好坏程度,它由两个部分组成:

  1. 一个是Q(a),它是搜索出来的分数(本质上就是一张记录了361个动作价值分数的表)见步骤4 backup
  2. 另外一个是策略函数π给动作a打的分数/1+N(a) 其中N(a)是动作a被选中的次数(这项是为了避免重复探索动作a,因为a被选中的次数多,分母1+N(a)就会变大,从而降低分数价值) η是超参数,手动调节

初始化时所有Q(a)都等于0,所以在一开始的时候完全由策略函数π所决定。当探索很多次之后,1+N(a)会使得后面策略函数的分数变小,从而让score的大小取决于Q(a)

最终选择分数最高的动作

步骤2.expansion:

P5 AlphaGo实例_初始化_18

根据第一步选出的动作,第二步则是猜想一下对手会做出什么样的动作,这里通过策略网络选出动作a't来模拟对手做出应对的动作。因为是推测的对手行动,所以也就可以用策略网络随机抽样得到的动作来代替认为是对手做出的动作,也就是可以用策略函数π来代替状态转移函数。

步骤3.evaluation:

P5 AlphaGo实例_搜索_19

从第二步得到的状态 s_t+1开始,就让策略网络做自我博弈,即双方都由策略网络控制,直到游戏结束。(叫做 fast rollout),根据胜负来获得奖励值rt

除了用奖励来评价s_t+1之外,AlphaGo还用v函数来评价

步骤4.backup:

P5 AlphaGo实例_强化学习_20

由于这个过程会进行很多次,因此对于一个点a_t下面会对应有很多个记录,我们将a_t下面的所有的记录做一个平均作为a_t新的价值——Q(a_t)(因为当前点下所有的值都反应了这个点可能存在的好坏,因此这里用平均值来反应这个点的好坏)

(5.)再返回步骤1

P5 AlphaGo实例_初始化_21

此时执行完一次完整的步骤之后再回到第一步,我们可以看出此时Q(a)的值就会开始影响动作a的选择,因为刚开始在初始化的时候,Q(a)是为0的,选点完全取决于策略函数π,当多次进行之后,1+N(a)变大会导致后半段的值影响变小,也就是后面的选值就会取决于Q(a)的情况。那么现在Q值越大,被选中的概率也就越大,那么N(a)也就越大

P5 AlphaGo实例_神经网络_22

假设在执行了很多次之后,现在每个动作的评估都有了依据,蒙特卡洛搜索的依据也很简单,就是选择N(a)值最大的动作

总结蒙特卡洛树搜索:

P5 AlphaGo实例_强化学习_23

蒙特卡洛树搜索主要包含四步

对于每一个动作都会执行很多次的模拟来得到每个动作的Q值和N值

选择N值最大的动作进行决策

当对手下完棋之后,又初始化Q值和N值 然后重新执行上述步骤

总结:

P5 AlphaGo实例_初始化_24

训练包含三个过程:behavior cloning、policy gradient、value network

下棋使用的是蒙特卡洛树搜索方法

AlphaGo zero v.s. AlphaGo

P5 AlphaGo实例_深度强化学习_25

AlphaGo zero比AlphaGo更厉害

区别:

  1. AlphaGo zero没有behavior cloning的过程
  2. 在训练策略网络的时候就使用了蒙特卡洛树搜索的方法

讨论:behavior cloning是否是没用的甚至有害的?

在围棋这种纯无害仿真的情况下,可以说是没用甚至有害的。但是若是涉及到物理真实世界,例如无人驾驶、机器人手术这种问题来说,behavior cloning是有价值的,价值体现在于可以避免很多失败带来的重大生命财产损失。

关于AlphaGo zero在训练策略网络的时候就使用了蒙特卡洛树搜索

P5 AlphaGo实例_强化学习_26

  1. 观察当前状态
  2. 从策略网络中做出一个预测,输出每个动作的概率值,是一个361纬度的向量
  3. 做蒙特卡洛树搜索,做很多次模拟,得到每个动作被选中的次数,做归一化变成概率值
  4. 用crossentropy作为损失函数L
  5. 蒙特卡洛树搜索得到的策略n比策略网络得到的p要好,因此我们希望p要不断靠近n,所以需要L小,因此用L对策略网络的参数θ做梯度下降来更新θ的值