不基于模型的控制
本文未经许可,禁止转载,如需转载请联系笔者
0. 前言
前一章内容讲解了个体在不依赖模型的情况下如何进行预测,也就是求解在给定策略下的状态价值或行为价值函数。
本章则主要讲解在不基于模型的条件下如何通过个体的学习优化价值函数,同时改善自身行为的策略以最大化获得累积奖励的过程,这一过程也称作不基于模型的控制
。
在不基于模型的控制中,可以按照学习过程的不同进行分类,我们把agent实际与环境交互的策略称为行为策略
,而把待优化的策略(或者说用来评价状态价值或行为价值的策略)称为目标策略
,如果这两个策略相同,则称为现时策略学习(on-policy learning)
,如果不同,则称为借鉴策略学习(off-policy learning)
1. 行为价值函数的重要性
在《动态规划寻找最优策略》中,已经讲述了在模型已知的情况下,如何解决控制问题,找到最优策略和最优状态价值函数。但是在模型未知时,里面展示的基于贪婪策略的策略迭代和价值迭代还适用吗?
答案是否定的,因为在模型未知的情况下,是不知道状态间的转移概率的,无法准确地求解状态的价值,所以所谓的“贪婪”很可能会掉入非最优解。
实践证明,在 不基于模型的强化学习问题 中,确定 状态行为对(state-action pairs) 的价值要容易很多。因此如果能够确定某状态下所有状态行为对的价值,那么自然就比较容易从中选出一个最优价值对应的行为了。
因此在不基于模型的控制中,行为价值函数(action-value function)
非常重要
2. ϵ \epsilon ϵ-贪婪策略
贪婪搜索策略 在基于模型的动态规划算法中能收敛至最优策略(价值),但这在不基于模型而基于采样的 蒙特卡罗或时序差分学习 中却通常 不能收敛至最优策略。
不能收敛的原因有两点:
- 虽然这三种算法都采用通过后续状态价值回溯的办法确定当前状态价值,但动态规划算法是考虑了一个状态的后续所有状态价值的。而后两者则仅能考虑到有限次数的、已经采样经历过的状态,那些事实存在但还没经历过的状态对于后两者算法来说都是未探索的不被考虑的状态,有些状态虽然经历过,但由于经历次数不多对其价值的估计也不一定准确。
- 如果存在一些价值更高的未被探索的状态使用贪婪算法将式中无法探索到这些状态,而已经经历过但价值较低的状态也很难再次被经历,如此将无法得到最优策略。
贪婪策略产生问题的根源是无法保证持续的探索,为了解决这个问题,一种不完全的贪婪搜索策略
(
ϵ
\epsilon
ϵ-greedy)被提出,其基本思想就是保证能做到持续的探索,具体通过设置一个较小的
ϵ
\epsilon
ϵ值,使用
1
−
ϵ
1-\epsilon
1−ϵ的概率贪婪地选择目前认为是最大行为价值的行为,而用
ϵ
/
m
\epsilon/m
ϵ/m的概率随机的从 所有 m个可选行为中选择行为(包括最优行为),即:
ϵ
\epsilon
ϵ-greedy策略 一定会提升状态价值吗?
答案是:是的,一定会提升。因为它选择的是最优动作,且保证了一定的概率进行探索,最大q值对应的动作带来的期望回报会大于等于任何动作带来的期望回报。
数学推导如下(注意推导中的 π ( a ∣ s ) \pi(a|s) π(a∣s)只是代表一般性的贪婪策略,并不是上面的 ϵ \epsilon ϵ-greedy策略, π ′ ( a ∣ s ) \pi'(a|s) π′(a∣s)才是 ϵ \epsilon ϵ-greedy策略):
根据《不基于模型的预测》可知,在不基于模型的预测问题中既然有蒙特卡罗法和时序差分法(这两种方法都是基于采样的),那么在控制问题中同样也可以有这两种方法用作策略评估,而刚刚所说的 ϵ \epsilon ϵ-greedy策略则用来进行策略改进,这和动态规划的思路是一致的。
3. 现时策略(on-policy)蒙特卡罗控制
现时策略蒙特卡罗控制:
通过
ϵ
\epsilon
ϵ-贪婪策略采样一个或多个完整的状态序列后,平均得出某一状态行为对的价值,并持续进行策略的评估和改善。
通常可以在仅得到一个完整状态序列后就进行一次策略迭代以加速迭代过程。如下所示:
使用 ϵ \epsilon ϵ-贪婪策略进行现时蒙特卡罗控制仍然只能得到基于该策略的 近似行为价值函数,这是因为该策略一直在进行探索,没有一个终止条件。因此我们必须关注以下两个方面:一方面我们不想丢掉任何更好信息和状态,另一方面随着我们策略的改善我们最终希望能终止于某一个最优策略。为此引入了另一个理论概念:GLIE(greedy in the Limit with Infinite Exploration)。
GLIE(greedy in the Limit with Infinite Exploration):
它包含两层意思,一是所有的状态行为对会被无限次探索;
二是另外随着采样趋向无穷多,策略收敛至一个贪婪策略:
存在如下的定理: GLIE蒙特卡洛控制 能收敛至最优的状态行为价值函数:
如果在使用on-policy蒙特卡罗控制的
ϵ
\epsilon
ϵ-贪婪策略时,能令
ϵ
\epsilon
ϵ随采样次数的无限增加而趋向于0,这就符合GLIE。其控制流程如下:
在实际应用中, ϵ \epsilon ϵ的取值可不局限于取1/k,只要符合GLIE特性的设计on-policy蒙特卡罗控制均可以收敛至最优策略(价值)。
4. 现时策略时序差分控制
通过上一章《不基于模型的预测》关于预测的学习,我们体会到时序差分(TD)学习相比蒙特卡罗(MC)学习有很多优点:低变异性,可以在线实时学习,可以学习不完整状态序列等。在控制问题上使用TD学习同样具备上述的一些优点。
本节的on-policy TD Learning中,我们将介绍Sarsa算法和Sarsa(入)算法,在下一节的借鉴策略TD学习中将详细介绍Q学习算法。
4.1 Sarsa算法
Sarsa算法:
根据当前状态
S
S
S采取行为
A
A
A后,得到一个即时奖励
R
R
R,并进入下一状态
S
′
S'
S′,根据当前行为策略产生新行为
A
′
A'
A′,通过行为价值函数Q(action-value function)来得到
(
S
′
,
A
′
)
(S',A')
(S′,A′)的价值,然后去更新
(
S
,
A
)
(S,A)
(S,A)的价值,即:
Sarsa算法描述如下:
值得注意的是,在Sarsa算法中,Q(S,A)的值使用一张大表来存储的,这不适合解决规模很大的问题;
在更新行为价值时,参数
α
\alpha
α是学习速率参数,
γ
\gamma
γ是衰减因子。当 行为策略满足前文所述的GLIE特性 同时 学习速率参数
α
\alpha
α 满足:
时,Sarsa算法将收敛至最优策略和最优价值函数。
上面的条件很好满足,令 ϵ = α t = 1 / t \epsilon=\alpha_t=1/t ϵ=αt=1/t即可。
4.2 Sarsa( λ \lambda λ)算法
在上一章《不基于模型的预测》中,我们使用n-Step Return来作为MC和TD法的扩展,来修正状态的价值。同样地,我们也可以用n-Step Sarsa来作为MC法和单步Sarsa法的扩展,来修正动作的价值。
n-Step Sarsa的思路如下所示:
这里的 q t q_t qt对应的是一个状态行为对 ( S t , A t ) (S_t, A_t) (St,At)的价值,即:表示的是在某个状态下采取某个行为的价值大小。
如上图所示,定义n-步Q收获(Q-return)
为(David的PPT中Q没有动作这个参数,应该要加上动作这个参数):
有了如上定义,可以把n-步 Sarsa用n-步Q收获来表示,如下式:
与TD(
λ
\lambda
λ)类似,可以综合地考虑 所有n取值 的n-步Q收获来修正状态行为对的Q值,即:
可以看到,这么操作后,将原本的超参n转换为超参
λ
\lambda
λ,在不过多影响计算复杂度的情况下,使得对Q函数的修正考虑地更加全面。
以上是 正向理解Sarsa( λ \lambda λ),所谓正向,就是Sarsa( λ \lambda λ)是如何得到的?根据前述公式可知,是考虑各种各样的n-Step Q-return而得到的。
那么也可以 反向理解Sarsa(
λ
\lambda
λ),所谓反向,根据Sarsa(
λ
\lambda
λ)的公式,它又蕴含着什么深层含义?与上一章《不基于模型的预测》类似,可以引用效用迹(eligibility traces,ET)
来理解,它能够表示一个状态行为对与最终结果之间的因果关系,最近发生的状态行为对或之前频繁发生的状态行为对对结果的影响。
注意:与上一章不同的是,这里的效用迹描述的是一个状态行为对
引入ET概念的之后的 Sarsa(
λ
\lambda
λ)算法中对Q值更新的描述可以改写为:
Sarsa(
λ
\lambda
λ)算法思路如下所示:
这里要提及一下的是 E ( s , a ) E(s,a) E(s,a)在每浏览完一个状态序列后需要重新置0,这体现了效用迹仅在一个状态序列中发挥作用﹔其次要提及的是算法更新Q和E的时候针对的不是某个状态序列里的Q或E,而是针对个体掌握的整个状态空间和行为空间产生的Q和E。算法为什么这么做,留给读者思考。在编程实践部分中将实现Sarsa( λ \lambda λ)算法。
4.3 比较Sarsa和Sarsa( λ \lambda λ)
正如前面所述,Sarsa算法每采取一次(S,A)对就更新一次对应的Q值,随后这个Q值在此轮episode中不再更新(除非在此轮episode中又回到状态S且再次采取(S,A)对)。这带来的影响是如下图中间子图的红箭头,这个状态行为对的Q值在首轮迭代中仍然会被记为0。
而Sarsa( λ \lambda λ)不同,采取一次(S,A)对后,它不会立马更新Q值,它会等整个episode结束后再更新,这样到达终点后所有采取的(S,A)对都会得到更新,而那些 离终点近的(S,A)对 或者 频繁采用的(S,A)对 的Q值会得到较大的改变。如下图右边子图,路径上所有的状态行为对的Q值在首轮迭代中都得到了更新。
下图的三个约定:
- 认定每一步的即时奖励为0,直到终点处即时奖励为1;
- 根据算法,除了终点以外的任何状态行为对的Q值可以在初始时设为任意的,但我们设定所有的Q值均为0;
- 该路线是个体第一次找到终点的路线。
5. 借鉴策略(off-policy)Q学习算法
现时策略学习(on-policy learning) 的特点就是产生实际行为的策略与更新价值(评价)所使用的策略是同一个策略,而 借鉴策略学习(off-policy learning) 中产生指导 自身行为的策略 μ ( a ∣ s ) \mu(a|s) μ(a∣s) 与 评价策略 π ( a ∣ s ) \pi(a|s) π(a∣s) 是不同的策略,具体地说,个体通过策略 μ ( a ∣ s ) \mu(a|s) μ(a∣s)生成行为与环境发生实际交互,但是在更新这个状态行为对的价值时使用的是目标策略 π ( a ∣ s ) \pi(a|s) π(a∣s)。目标策略 π ( a ∣ s ) \pi(a|s) π(a∣s)多数是已经具备一定能力的策略,例如人类已有的经验或其他个体学习到的经验。
借鉴策略学习相当于站在目标策略
π
(
a
∣
s
)
\pi(a|s)
π(a∣s)的“肩膀”上学习。借鉴策略学习
根据是否经历完整的状态序列可以将其分为基于蒙特卡洛的
和基于TD的
。基于蒙特卡洛的借鉴策略学习目前认为 仅有理论上的研究价值,在实际中用处不大。这里主要讲解常用借鉴策略TD学习。
off-policy TD learning 的任务就是使用TD方法在目标策略
π
(
a
∣
s
)
\pi(a|s)
π(a∣s)的基础上更新行为价值,进而优化行为策略,如下式所示:
对于上式,我们可以这样理解:
个体处在状态
S
t
S_t
St中,基于行为策略
μ
\mu
μ产生了一个行为
A
t
A_t
At,执行该行为后进入新的状态
S
t
+
1
S_{t+1}
St+1,借鉴策略学习要做的事情就是,比较借鉴策略和行为策略在状态
S
t
S_t
St下产生同样的行为
A
t
A_t
At的概率的比值。因为借鉴策略
π
\pi
π通常是“高手”,所以行为策略
μ
\mu
μ会尽可能地向借鉴策略
π
\pi
π靠齐。
- 如果这个比值接近1,说明两个策略在状态 S t S_t St下采取的行为 A t A_t At的概率差不多,此次对于状态 S t S_t St价值的更新同时得到两个策略的支持。
- 如果这一概率比值很小,则表明借鉴策略 π \pi π在状态 S t S_t St下选择 A t A_t At的机会要小一些,此时为了从借鉴策略学习,我们认为这一步状态价值的更新不是很符合借鉴策略,因而在更新时打些折扣。
- 类似的,如果这个概率比值大于1,说明按照借鉴策略 π \pi π,选择行为 A t A_t At的几率要大于当前行为策略 μ \mu μ产生 A t A_t At的概率,此时应该对该状态的价值更新就可以大胆些。
借鉴策略TD学习中一个典型的 行为策略
μ
\mu
μ 是基于行为价值函数Q(s,a)
ϵ
\epsilon
ϵ-贪婪策略,借鉴策略
π
\pi
π 则是基于Q(s,a)的 完全贪婪策略,这种学习方法称为Q学习(Q learning)
。
接下来详细看看Q学习的主要思路:
Q学习的目标是得到 最优价值Q(s,a),在Q学习的过程中,t时刻的与环境进行 实际交互的行为
A
t
A_t
At 由策略
μ
\mu
μ产生:
其中策略 μ \mu μ是一个 ϵ \epsilon ϵ-贪婪策略。
t + 1 t+1 t+1时刻用来更新Q值的行为 A t + 1 ′ A'_{t+1} At+1′由下式产生:
其中策略
π
\pi
π是一个完全贪婪策略。
Q ( S t , A t ) Q(S_t,A_t) Q(St,At)的按下式更新:
其中 红色部分的TD目标 是基于借鉴策略 π \pi π产生的行为 A ′ A' A′得到的Q值。根据这种价值更新的方式,状态 S t S_t St依据 ϵ \epsilon ϵ-贪婪策略得到的行为 A t A_t At的价值将朝着 S t + 1 S_{t+1} St+1状态下 贪婪策略确定的最大行为价值的方向 做一定比例的更新。这种算法能够使个体的 行为策略 更加接近 贪婪策略,同时保证个体能持续探索并经历足够丰富的新状态。并最终收敛至 最优策略 和 最优行为价值函数。注意下图中的公式中, A ′ A' A′已经变成了借鉴策略 π \pi π下的最优动作(即贪婪策略)
Q学习的算法流程如算法3所述。
最后再来看看动态规划算法(DP法)和时序差分算法(TD法)之间的关系:
可以看到在全备份下的策略评估、策略迭代、价值迭代分别对应于采样备份下的TD Learning、Sarsa、Q-Learning。
6. 编程实践
本章的编程实践是《蒙特卡罗学习求二十一点游戏最优策略》、《构建基于gym 的有风格子世界及个体》和《各类学习算法的实现及与有风格子世界的交互》,详见叶强github强化学习主页。
参考文献:
- David Silver强化学习视频.
- 叶强《强化学习入门——从原理到实践》