【强化学习】第九章:基于Action-Critic框架的强化学习:QAC、A2C、离轨AC方法
【强化学习】第九章:基于Action-Critic框架的强化学习:QAC、A2C、离轨AC方法
如果说前面章节更偏重底层理论,那从本章开始就越接近前沿、越接近实践。基于AC框架的强化学习方法是当前强化学习中最流行、最普遍的方法。基于AC框架的算法也层出不穷,比如:A2C、PPO、TRPO等算法。本着循序渐进、夯实理论的原则,本篇章讲最简单的AC算法:QAC、A2C、离轨AC方法。
一、回顾策略梯度的计算过程,引出Action-Critic方法
1、什么是Action-Critic方法
本文承接 https://blog.csdn.net/friday1203/article/details/157839155?spm=1001.2014.3001.5501 ,把基于价值的方法,具体是value function approximation方法,引入到策略梯度方法中,就是Action-Critic方法。所以AC方法其实就是策略梯度方法的延申。下面我把完整的逻辑链条展示出来,看看是如何延申的:
说明:上述方法得到的策略是最优的随机策略。至于连续动作空间问题,我们后面再开篇章详细讨论。
2、用一个例子,直观感受一下策略梯度的各个组成部分:
上图可以直观看到策略函数是如何进行迭代优化的。正是由于C的作用,使得好的行为更可能发生,坏的行为更不可能发生。
3、最简单的AC算法:QAC
顺便我们继续认识一个最简单的AC算法:QAC。
QAC中的Q表示q_value的意思,所以叫QAC。
(1)Critic是SARSA + value function approximation。
SARSA + value function approximation 用的是动作价值估计来更新价值函数的参数。详情见:https://blog.csdn.net/friday1203/article/details/157395866?spm=1001.2014.3001.5501
(2)Actor是策略函数。上面大标题就有完整的推导过程。欲知更多细节回看 https://blog.csdn.net/friday1203/article/details/157839155?spm=1001.2014.3001.5501 上一个篇章。
(3)这个算法虽然简单,但是从这个算法中我们可以比较清晰的看到AC方法的思想。就是用Critic对策略进行评估-->用Critic的评估的结果q,来更新Actor的策略-->用新策略生成经验数据-->用经验数据更新Critic-->用新的Critic评估策略-->用评估结果q更新Actor的策略-->用新新策略生成经验数据-->.....如此循环。
Critic是进行价值评估的,或者说是进行策略评估的。Actor是进行策略提升的。 用提升了的策略去生成经验数据-->Critic使用经验数据进行价值评估-->Actor根据Critic的评估结果提升策略-->然后再生成新的经验数据,,,如此循环。
可见,Action-Critic实际上就是把Policy gradient和value function approximation这两种方法结合起来的方法!兜兜转转了好大一圈,强化学习竟然又回到了第三章的最初模样。所以强化学习这门学科是严格的环环相扣,我们一定一定要按顺序去学,这样你才能从底层逻辑上彻底理解它,具备灵活运用的能力。
二、将 Baseline 引入到 Action-Critic 的算法中
1、为什么要引入baseline?
我们在计算策略梯度的过程中,从累加求和到期望到样本估计,这个过程中虽然是无偏估计,但是方差特别大!方差特别大的意思就是:模型在训练过程中,策略时好时坏,不是稳定的提升过程。换句话说就是模型难以训练!
所以我们要想办法去解决方差大的问题。目前关于策略梯度方面的研究基本都是在研究如何减小方差这个方面。目前有两个方法可以减小策略梯度的方差:
一是,使用时序因果关系。我们上面一篇章中的REINFORCE算法的伪代码,就是加入了时序因果关系。有效果,但效果有限,最重要的是经验数据需求量太大。
二是,加入基线(baseline)。就是使用基线降低方差。
2、什么是基线(baseline)?
我们知道,一旦策略函数确定下来,那计算策略梯度部分中的lnπ(a|s,θ)就固定下来了,只有q(s,a)是影响梯度大小的因素了。所以就是因为q(s,a)的方差大,才导致了策略梯度的方差大。所以我们能不能给q(s,a)引入一个偏置,这个偏置既不改变策略梯度的期望,还可以减小策略梯度的方差呢?显然,从直觉上看,这个偏置不能和a相关,也就是不能和策略相关,否则策略梯度的期望就变了嘛。那这个偏置就只能和s相关,那我们先假设这个偏置是b(s) 。下面我们看看b(s)对策略梯度的均值和方差的影响:
可见引入一个baseline是不会改变策略梯度的期望,但是可以改变策略梯度的方差。所以只要我们找到一个最优的baseline,是可以降低策略梯度的方差的。
3、求最优的baseline
(1)求一个函数的最小值,对这个函数求导,导数=0时,对应的x就是这个函数的最小值。
(2)精确的最优b(s)太复杂,我们一般用vπ(s)代替。vπ(s)是状态s下所有动作a价值的期望。
(3)所以一个好的基线其实就是期望回报:b(st)=E(rt + rt+1 + ... +rT-1)
4、将最优的baseline引入策略梯度的计算公式中
(1)减去基线后,策略梯度依然是无偏的,但方差会降低。就是基线b(s)可以减小方差,但不改变期望值。
(2)减基线通俗的理解就是我们不在乎绝对值,但我们在乎相对值。相较于绝对值,使用相对值可以有效减小方差。
(3)如果连基线都达不到的动作,策略函数下次输出它的概率就越小。高于基线的动作,策略函数就输出更高的概率。
5、如何通过样本求vπ(s),也就是如何求b(s)?
前面1说了b(s)不能和策略梯度函数相关,否则策略梯度就不无偏了。所以vπ(s)需要从经验数据中获取。从经验数据中计算vπ(s)有两种方法:MC学习和TD学习。所以:
用MC学习+策略函数,就是加了基线的REINFORCE算法。
用TD学习+策略函数,就是加了基线的QAC算法。
用TD学习就得用一个价值函数逼近网络(Value Function Approximation)来拟合vπ(s),此时q(s,a)也可以用价值函数逼近网络来估计:
6、含有基线的QAC算法:Advantage actor-critic算法(A2C)
因为Advantage actor-critic中有两个a,所以该算法叫A2C。从上面的伪代码中可以看出,A2C是on-policy的算法。下面介绍off-policy的AC算法。
三、Off-polic AC方法
数据是至关重要的,巧妇难为无米之炊嘛。如果我们现在手头就已经有了一些trajectory,那如何进行离轨学习呢?
1、重要性采样(Importance sampling)
重要性采样(Importance sampling)是强化学习中一个重要技术。利用它我们可以把on-policy算法转化为off-policy算法。
(1)为什么需要重要性采样?重要性采样在解决什么问题?
可见,在强化学习中有非常多的地方需要求期望,而且这个期望值只能从样本数据(也叫经验数据)中估计得到。所以第一步我们要采样经验数据,然后从经验数据中估计期望值。
(2)重要性采样是,使用另外一种分布来逼近所求分布一种方法:
其实重要性采样原理非常非常简单。如果你看上图觉得太繁琐,眼花缭乱,下面是一个简单版的重要性采样:
重要性采样仅仅就是一种数学工具,本质上不是一种采样技术,而是一种统计估算技术。
用于:当你无法从目标分布P中采样时,那你可以通过另一个分布Q的样本,来估算随机变量在P分布下的期望值。
做法:你在计算平均值时,给每个样本乘上一个“修正系数”(即重要性权重)
核心逻辑:“加权平均”求期望。用一个“错”的分布去采样,然后通过“加权”的方式把结果拉回到“对”的期望上。如果一个样本在目标分布P中出现的概率很高,但在你实际用的分布Q中出现概率很低,那么这个样本就非常“稀有且重要”,采样到它时,你要给它加很大的权重;反之则减小权重。
如果 p(x)>q(x):说明这个动作在新策略中发生的概率比旧策略大。或者说“新策略𝜋比旧策略更倾向于做这个动作”。由于我们只有旧策略采集到的有限样本,为了模拟新策略的期望收益,我们需要“放大”这个样本的影响力,补偿它在新策略中本应出现但因采样源不同而显得不足的频率。
如果 p(x)<q(x):说明新策略其实不太会走这条路。即使旧策略采集了很多这样的数据,我们在计算新策略的收益时,也要把它们的影响力“缩小”。
2、将重要性采样技术应用到策略梯度中,进行off-policy学习
(1)运用重要性采样技术,计算策略梯度:
之前是A服从策略Π的,现在服从β,β是经验数据服从的分布。自然,qΠ(S,A)也是根据经验数据求得。
(2)在策略梯度中添加baseline
(3)用stochastic gradient代替true gradient,梯度上升法更新策略函数的参数
一是,从A中可见,当某个(st,at)的TD error较大时,策略网络更新参数时,就被迫往下次输出更大的P(st,at) 的方向上更新。同时这也是充分利用经验数据的意思。
二是,之前A处的分子是π(at|st),也就是说当某个(st,at)的概率特别小时,下次策略网络会自动去探索这个小概率事件。但是现在变成了β(at|st),而β(at|st)是从经验数据中算出来的一个固定值。所以此时就不会去探索,只能是充分利用了。
3、Off-polic AC方法的伪代码:
这就是Off-polic AC方法的全部内容。
4、小结:
(1)算法QAC是在策略函数中引入value function approximation。其中value function approximation是critic,策略函数是actor。利用这个算法让大家清晰AC方法的核心思想。
(2)算法A2C是在QAC中加入基线baseline,来减小估计方差。通过加入基线使得模型训练更加平稳。
(3)介绍off-policy actor-critic时,引入重要性采样技术Importance sampling,让算法落地到不易采样的场景下。
四、致谢
至此,强化学习的理论部分基本就讲解完毕了。本系列的前六个章节是根据鲁鹏老师的强化学习视频整理而来。第七、八、九章节是参考赵世钰老师的视频整理而来。有哪里疑惑的小伙伴可以自行在哔哩哔哩搜索这两位老师的视频自己学。在此感谢两位老师的无私奉献,不花分文竟也能学到如此珍贵的知识,感谢,感恩,致敬两位老师!!!

this is the end of the course, but a start for your journey in the field of reinforcement learning!
更多推荐
所有评论(0)