强化学习——不完全观测问题、MCTS

前言

本文的知识点总结自《深度学习强化学习》,如有错误,欢迎指出


不完全观测问题

前面几篇博客介绍的强化学习算法,智能体都可以从环境中获知总体状态,类似于MOBA类游戏的观战系统,可以观测到地图上双方的动向。然而在某些场景下,智能体只能从环境中获知局部状态,例如王者荣耀中,视野机制导致每位玩家仅能看到整个地图中的一小部分状态。

t t t时刻智能体观测到的状态为 o t o_t ot,我们可以仅依据 o t o_t ot让策略网络做出决策,但这么做效果通常不佳。一个更好的策略是让策略网络依据过去 t t t个时刻观测到的状态进行预测,即策略网络的输入为 [ o 1 、 o 2 、 . . . 、 o t ] [o_1、o_2、...、o_t] [o1o2...ot]这一序列。可以使用RNN、LSTM、Transformer等模型处理此类序列化数据。

在这里插入图片描述

如上图所示,以RNN为例,观测到 n n n时刻的状态 o n o_n on时,将序列 [ o 1 、 o 2 、 . . . 、 o n ] [o_1、o_2、...、o_n] [o1o2...on]输入到 n n n个CNN中, n n n个CNN的输出在经过RNN的处理,RNN的第 n n n个输出输入到全连接网络中,全连接网络的输出智能体执行每个动作的概率


MCTS

MCTS(蒙特卡洛树搜索)是强化学习中一个很重要的方法,被应用于包括Alpha Go、Alpha Go Zero在内的诸多强化学习算法。MCTS的基本原理就是模拟未来可能发生的情况,从而找出最优的动作,可以看成是有智慧的枚举,这也意味着MCTS会消耗大量算力。

MCTS每次模拟都会选择一个动作,执行完这个动作后,把一局游戏进行到底,依据胜负来评价该动作的好坏。MCTS包括选择(Selection)、扩展(expansion)、模拟(Simulation)、回溯(Backup)四个步骤。值得一提的是,策略网络和价值网络会辅助MCTS的计算,在进行MCTS前,需要提前训练好策略网络与价值网络。


选择

假设动作空间中存在 n n n个动作,MCTS的“选择”步骤就是选出其中胜算较高的动作,其通过模拟计算出的动作价值以及策略网络 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(as;θ)给出的动作评分(概率值)来评估动作 a a a的好坏。具体而言,其通过下式评价一个动作的好坏:
s c o r e ( a ) = Q ( a ) + α 1 + N ( a ) π ( a ∣ s ; θ ) (1.0) score(a)=Q(a)+\frac{\alpha}{1+N(a)}\pi(a|s;\theta)\tag{1.0} score(a)=Q(a)+1+N(a)απ(as;θ)(1.0)
其中

  • α \alpha α为超参数
  • N ( a ) N(a) N(a)表示动作 a a a被已经被选中的次数,初始阶段 N ( a ) = 0 N(a)=0 N(a)=0,动作 a a a每被选择一次, N ( a ) + 1 N(a)+1 N(a)+1
  • Q ( a ) Q(a) Q(a)表示之前 N ( a ) N(a) N(a)次模拟计算出的动作价值,主要由胜率和价值函数决定。动作 a a a每被选中一次,就会更新一次 Q ( a ) Q(a) Q(a)

当动作 a a a没被选择过时, Q ( a ) Q(a) Q(a) N ( a ) N(a) N(a)均为0,此时score(a)完全由策略网络决定。当动作 a a a被选择的次数很多时, Q ( a ) Q(a) Q(a)对score(a)的影响会越来越大,即score(a)的取值更依赖于依据过去模拟计算出的动作价值(即实际情况,而不是策略网络的预测)。系数 α 1 + N ( a ) \frac{\alpha}{1+N(a)} 1+N(a)α的一个作用是鼓励MCTS选择历史执行次数较少的动作,假设两个动作具有类似的 Q ( a ) Q(a) Q(a) π ( a ∣ s ; θ ) \pi(a|s;\theta) π(as;θ),则 N ( a ) N(a) N(a)较小的动作将被选中。

在选择阶段,MCTS选择式1.0取值最大的动作,让智能体在模拟器中执行该动作(不是实际场景)。


扩展

智能体在模拟器中执行完第一步“选择”中选中的动作后,通过扩展阶段模拟对手做出的下一步动作。MCTS可以通过提前训练好的策略网络 π ( a ∣ s t ; θ ) \pi(a|s_t;\theta) π(ast;θ)模拟对手,根据策略网络的输出概率抽取动作。值得一提的是,MCTS在模拟器中执行完动作后,模拟器需要返回一个新的状态,因此模拟器需要模拟实际的状态转移函数。对于大多数问题,例如无人驾驶等,模拟实际的状态转移函数相当困难。但是对于MOBA类游戏、围棋等较为简单的问题,对手做出的动作后,棋盘、游戏对局的情况就是模拟器中的下一个状态,因此只需要训练一个足够模拟实际情况的策略网络即可模拟状态转移函数。


模拟

“选择”和“扩展”阶段,智能体本身和对手都选择了一个动作,并在模拟器中执行,得到新的状态 s t + 1 s_{t+1} st+1。而在模拟阶段,双方将通过提前训练好的两个策略网络模拟后续的对局情况,依据后续的对局情况计算状态 s t + 1 s_{t+1} st+1的价值。以围棋为例,AlphaGo在这个阶段将通过两个策略网络模拟对局,直到对局结束。如果己方获胜,那么奖励 r r r的取值为1,反之则为-1。此外,AlphaGo引入了提前训练好的价值网络 V ( s ; θ ) V(s;\theta) V(s;θ),用于评价状态 s t + 1 s_{t+1} st+1的优劣。AlphaGo对状态 s t + 1 s_{t+1} st+1的评价 v ( s t + 1 ) v(s_{t+1}) v(st+1)为:

v ( s t + 1 ) = r + V ( s t + 1 ; θ ) 2 v(s_{t+1})=\frac{r+V(s_{t+1};\theta)}{2} v(st+1)=2r+V(st+1;θ)
由于依据策略网络输出的概率进行抽样,因此在状态 s t + 1 s_{t+1} st+1上每次模拟执行的动作可能有所不同。MCTS在状态 s t + 1 s_{t+1} st+1上的模拟将会进行多次,如下图所示,一个状态 s t + 1 s_{t+1} st+1含有多个评价。
在这里插入图片描述

回溯

依据上一节的内容,第 t t t步执行的动作 a t a_t at下含有多个关于状态的记录,这些状态的平局值即为式1.0中的 Q ( a ) Q(a) Q(a)。这个数值将用于下一轮迭代时计算式1.0(上述四个流程构成MCTS的一次迭代,MCTS会重复上述四个步骤多次)。


决策

在进行成千上万次迭代模拟后,MCTS选择在状态 t t t时执行次数最多的动作,即 a = arg max ⁡ a N ( a ) a=\argmax_a N(a) a=aargmaxN(a)。看完MCTS的原理后,不难理解为什么AlphaGo和AlphaGo Zero能赢人类,其实就是靠算力暴力碾压。

价值网络与策略网络的训练

前面提到过,MCTS需要使用提前训练好的价值网络和策略网络辅助。本小节将总结AlphaGo和AlphaGo Zero中训练两个网络的方式。

AlphaGo

AlphaGo训练策略网络的流程为

  • 使用监督数据训练策略网络 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(as;θ)
  • 设第一步完全训练完的策略网络为 π ( a ∣ s ; θ n o w ) \pi(a|s;\theta_{now}) π(as;θnow),随机选择一份训练时的策略网络 π ( a ∣ s : θ o l d ) \pi(a|s:\theta_{old}) π(as:θold)(参数固定)。让两个策略网络模拟对局,若 π ( a ∣ s ; θ n o w ) \pi(a|s;\theta_{now}) π(as;θnow)胜利,则回报 u u u为1,否则为-1。接着使用REINFORCE更新策略网络 π ( a ∣ s ; θ n o w ) \pi(a|s;\theta_{now}) π(as;θnow)的参数,重复上述过程直至收敛。

依据上述过程,可得一系列的状态数组 ( s t , u t ) (s_t,u_t) (st,ut),利用上述数据,让价值网络 v ( s ; θ ) v(s;\theta) v(s;θ)进行监督学习,损失函数为MSE:
L ( θ ) = 1 N ∑ t = 1 N [ v ( s t ; θ ) − u t ] 2 L(\theta)=\frac{1}{N}\sum_{t=1}^N[v(s_t;\theta)-u_t]^2 L(θ)=N1t=1N[v(st;θ)ut]2

AlphaGo Zero

AlphaGo Zero利用提前准备好的MCTS(例如AlphaGo)模拟两个玩家的对弈情况。基于当前的状态 s t s_t st,MCTS经过多次模拟后,可以得到 n n n个动作的执行次数 N ( 1 ) 、 N ( 2 ) 、 . . . 、 N ( n ) N(1)、N(2)、...、N(n) N(1)N(2)...N(n),对其进行归一化得到 p t p_t pt,即 p t = n o r m a l i z e ( [ N ( 1 ) , N ( 2 ) , . . . , N ( n ) ] ) p_t=normalize([N(1),N(2),...,N(n)]) pt=normalize([N(1),N(2),...,N(n)])
设MCTS模拟的两个玩家经过 m m m个步骤后结束一次对局,可以分别得到两个玩家的一系列轨迹
( s 1 , p 1 , u 1 ) 、 ( s 2 , p 2 , u 2 ) 、 . . . 、 ( s m , p m , u m ) (s_1,p_1,u_1)、(s_2,p_2,u_2)、...、(s_m,p_m,u_m) (s1,p1,u1)(s2,p2,u2)...(sm,pm,um)
对于胜者,回报 u 1 = u 2 = . . . = u m = 1 u_1=u_2=...=u_m=1 u1=u2=...=um=1。对于败者,回报 u 1 = u 2 = . . . = u m = − 1 u_1=u_2=...=u_m=-1 u1=u2=...=um=1,利用上述数据更新策略网络和价值网络(注意对于胜者和败者,轨迹数据中的 s s s p p p是不同的)

对于策略网络 π ( a ∣ s t ; θ ) \pi(a|s_t;\theta) π(ast;θ),其使用监督学习训练,设H(x,y)为交叉熵损失,则损失函数为
L ( θ ) = 1 N ∑ i = 1 N H ( p i , π ( a ∣ s i ; θ ) ) L(\theta)=\frac{1}{N}\sum_{i=1}^NH(p_i,\pi(a|s_i;\theta)) L(θ)=N1i=1NH(pi,π(asi;θ))

更新价值网络的方式与AlphaGo一致。具体的训练流程就是重复下列三个步骤直至算法收敛:

  1. 让MCTS自我博弈,完成一局游戏,收集到m个三元组 ( s 1 , p 1 , u 1 ) 、 ( s 2 , p 2 , u 2 ) 、 . . . 、 ( s m , p m , u m ) (s_1,p_1,u_1)、(s_2,p_2,u_2)、...、(s_m,p_m,u_m) (s1,p1,u1)(s2,p2,u2)...(sm,pm,um)
  2. 依据上述三元组,更新策略网络参数
  3. 依据上述三元组,更新价值网络参数

由此可得DeepMind是土豪。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值