深度强化学习_AlphaGo 王树森课程笔记

💡 深度强化学习实例:围棋游戏

一、 游戏规则

棋盘:19x19

落子点:361个

State:黑白棋子以及空位的排列。

状态 s {\color{green}s} s:可以用由0和1组成的19x19x2的tensor来表示。

  • 分别用两个19x19的矩阵来对应黑子和白子,若某位置有黑子(白子),矩阵对应元素为1,否则为0;
  • AlphaGo实际使用19x19x48的tensor来记录其他信息。

Action:往棋盘的空白位置上放一个棋子。

  • 动作空间 Action space: A ⊂ { 1 , 2 , 3 , … , 361 } \mathcal{A}\subset\{1,2,3,\dots,361\} A{ 1,2,3,,361}

二、 设计思路

Training

  1. behavior cloning来初步学习策略网络(policy network):AlphaGo从16万局人类的游戏记录中学习一个策略网络;
    a. behavior cloning:一种监督学习,本质是多分类,不是强化学习。
  2. 用策略梯度算法训练策略网络:AlphaGo用两个策略网络做自我博弈,拿胜负结果来训练策略网络;
  3. 用策略网络训练价值网络(value network)。(实质是在做回归)
    a. 用的不是actor-critic方法,actor-critic方法要求同时训练策略网络和价值网络,而AlphaGo先训练策略网络后训练价值网络。

Execution

用策略网络和价值网络执行蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)

三、 Training

1. 策略网络

1.1 State (of AlphaGo Zero)

19x19x17的tensor:

  • 19x19:对应黑子(白子),若某位置有黑子(白子),矩阵对应元素为1,否则为0;
  • 17:把当前黑子的位置用一个矩阵表示,之前七步黑子的位置用另外七个矩阵表示,为了表示最近八步黑子和白子的位置需要用到8+8=16个矩阵;第17个矩阵:如果当前该下黑子,则为全1矩阵,若该下白子则为全0矩阵。
    在这里插入图片描述

1.2 Policy Network

Policy Network of AlphaGo

状态:由19x19x48的tensor表示。

策略网络:都是卷积层,没有全连接层。

输出:19x19的矩阵,矩阵每一个元素对应一个放棋子的位置,即输出361个动作的概率。

在这里插入图片描述



Policy Network of AlphaGo Zero

状态:由19x19x17的tensor表示,作为输入。

输出:361维的向量,输出层的激活函数是softmax(输出的是概率分布)

在这里插入图片描述

1.3 Behavior Cloning

💡 训练第一步:用Behavior Cloning初始化策略网络,从人的经验中学习一个初步的策略网络。
AlphaGo 2016用了Behavior Cloning,AlphaGo Zero没用到。

  • 原因:开始时,策略网络的参数由随机初始化得到。(若直接让策略网络自我博弈,它们需要随机摸索很多次才能得出合理的动作,时间消耗太大)
  • 训练数据:人类围棋游戏动作序列被记录下来。(KGS有160k局高级玩家游戏记录)
  • Behavior Cloning:用监督学习的方法训练策略网络。
  • 训练后的策略网络足以打败业余玩家,打不过职业玩家。

Behavior Cloning不是强化学习,而是一种模仿学习(Imitation learning),agent不需要奖励,只需要模仿人的动作就行。是一种多分类回归方法。

🔍 强化学习与模仿学习的本质区别:是否有奖励

用Behavior Cloning训练策略网络

  1. 每一步观测到一个状态 s t {\color{green} s_t} st(用一个tensor表示棋盘格局),作为策略网络 π \pi π的输入;
  2. 策略网络给出预测(361维的向量) p t = [ π ( 1 ∣ s t , θ ) , … , π ( 361 ∣ s t , θ ) ] ∈ ( 0 , 1 ) 361 {\color{d44d37}p_t}=[\pi({\color{d44d37}1}|{\color{green}s_t},\bm\theta),\dots,\pi({\color{d44d37}361}|{\color{green}s_t},\bm\theta)]\in(0,1)^{361} pt=[π(1st,θ),,π(361st,θ)](0,1)361,表示361个动作的概率;
  3. 人类玩家真实动作 a t ∗ = 281 {\color{d44d37}a_t^*=281} at=281,即把棋子下在第281号位置;
  4. 将动作 a t ∗ = 281 {\color{d44d37}a_t^*=281} at=281做one-hot encode,得到一个361维向量 y t ∈ { 0 , 1 } 361 {\color{d44d37}y_t} \in \{0,1\}^{361} yt{ 0,1}361(第281个元素是1,其余全零);
  5. Loss=CrossEntropy ( y t , p t ) ({\color{d44d37}y_t,p_t}) (yt,pt),用CrossEntropy作为损失函数,衡量人类玩家的动作 y t {\color{d44d37}y_t} yt与策略网络的预测 p t {\color{d44d37}p_t} pt之间的差异, y t {\color{d44d37}y_t} yt p t {\color{d44d37}p_t} pt越接近,CorssEntropy就越小;
  6. 求损失函数关于神经网络参数 θ \bm\theta θ的梯度,做梯度下降更新 θ \bm\theta θ

Behavior Cloning本质是多分类

  • 棋盘上有361个位置:361个类别;
  • 策略网络的输出:每一个类别的概率;
  • 人类玩家的动作:361个类别中的一个,看作是ground truth,即真实标签。

缺点

若状态 s t {\color{green} s_t} st没有出现在训练数据中,则策略网络做出的决策 a t {\color{d44d37}a_t} at就不会太好,导致出现下一个训练数据未包含的状态,从而使得策略网络生成更离谱的动作,随着错误累加,状态会越来越奇怪,策略网络做出更糟糕的动作,最后AI失败。

改进

在Behavior Cloning后用强化学习接着训练策略网络,让策略网络变得更强大。

1.4 策略梯度

💡 用策略梯度算法进一步提高策略网络。

用强化学习训练策略网络——两个策略网络做博弈

  • Player:即Agent,由策略网络控制,用的是策略网络最新的模型参数,每下完一局围棋,把胜负作为奖励,靠奖励更新Player参数。
  • Opponent:即Environment,每当Player下一个棋子,Opponent也走一步,相当于随机状态转移,用策略网络控制,随机从旧的参数中选一个出来作为Opponent参数。

在这里插入图片描述

定义奖励:假设step T T T后一局游戏结束

奖励

  • r 1 = r 2 = ⋯ = r T − 1 = 0 {\color{337ea9}r_1}={\color{337ea9}r_2}=\dots={\color{337ea9}r_{T-1}}={\color{337ea9}0} r1=r2==rT1=0(一局游戏没结束时奖励都为0);
  • r T = + 1 {\color{337ea9}r_T}={\color{337ea9}+1} rT=+1(winner);
  • r T = − 1 {\color{337ea9}r_T}={\color{337ea9}-1} rT=1(loser)。

回报

  • u t = ∑ i = t T r i u_t=\sum^T_{i=t}{\color{337ea9}r_i} ut=i=tTri(不做折扣);
  • Winner: u 1 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值