(八)强化学习——策略梯度,REINFORCEMENT算法,Actor-Critic
1.前言
我们上一节分享了DQN算法以及它的一些改进算法七)强化学习——DQN,DDQN,Dueling DQN,Rainbow DQN。其实最主要的核心就是我们用了一个神经网络Q(s,a,θ)来近似最优动作价值函数Q*(s,a)。一旦神经网络训练完成,我们只要输入一个状态,神经网络就能准确的输出在这个状态下各个动作的价值,我们就能选出Q值最大的那个动作执行,也就是完成了一次任务序列的一次最优决策。一个已经训练好了的Q网络其实就是一个特定的策略 ,只不过这里的策略是用Q值指导动作的选择,那我们能不能直接训练从状态到动作的网络。答案是肯定的。我们在(三)强化学习——策略函数π and 价值函数、贝尔曼方程中提到过策略函数π(a|s),表示在状态s下,通过策略π,直接选出动作a。我们用一个神经网络来近似它。

图 1 :用一个神经网络近似π函数
这个网络是不是很眼熟,和近似状态-动作Q函数的神经网络很像,只是输出不一样,这里的输出是每个动作对应的概率,而不是每个动作对应的Q值。p1+p2+…+pn=1。我们可以看见这其实是两种不同的学习方式。我们把前者称为基于价值的学习 ,后者称为基于策略的学习 。基于价值的学习更适合于动作空间较小且离散的场景,如游戏等。基于策略的学习更适用于动作集合规模庞大、动作连续的场景(如机器人控制领域)。
2.策略梯度
我们来回顾一下Qπ,这个其实就是动作价值函数,使用π策略,对当前状态st,执行动作a的一个好坏评价。从公式可以看出,它是通过未来奖励的期望回报高低来评价好坏的。

图2:Qπ
图3是Vπ(st)状态函数,这个是用来评判状态的好坏的。从公式可以看出它的计算方式是,在策略π下平均了经过状态St所有的期望值。

图3:Vπ
仅从公式来看,我们很难深刻理解他们两者的关系。接下里我将尽可能的讲解。如图4所示,是3条完整的幕,幕就是智能体与环境的交互产生的状态、动作、奖励序列。在真正的强化学习任务中远比图中的要复杂。我们以状态st为例,状态st是3个幕的交点,就是在状态st这个时刻,有a1,a2,a3这3个动作可以选择。Qπ(st,a1)表示的就是在当前状态下执行动作a1的价值,就是幕1中st到终止状态的奖励的期望值。同理Qπ(st,a2),Qπ(st,a3)也是这样。Vπ(st)就是Qπ(st,a1),Qπ(st,a2),Qπ(st,a3)这3个对于动作a的一个期望。假设,这个π策略此时执行a1的概率是1/6,a2是1/6,a3是2/3。则Vπ(st)=1/6 Qπ(st,a1)+1/6 Qπ(st,a2)+2/3*Qπ(st,a3)。

图4:序列轨迹图
仔细一看,这个概率不就是策略网络的输出嘛,这样动作价值函数,状态价值函数,策略函数的关系我们就知道了。

大写的A表示随机变量。我们训练策略网络的目的是希望Vπ(s)越大越好,故对Vπ(s;θ)是做梯度上升。

对于离散的动作,我们可以这样表示,而对于连续的动作,我们就要用另一种梯度表示形式:

从上一个公式,到这一个公式的推导,我就不啰嗦了,感兴趣的可以去看bilibili北大王树森的深度强化学习教程,对这一块有推导。
Vπ(st)评价的是状态st时的状态好坏,而我们希望的是所有状态更好。那么对于所有的状态S,状态价值Vπ(S)的均值应当很大。因此我们定义目标函数:

图片来源:北大王树森
这个目标函数排除掉了状态S 的因素,只依赖于策略网络π的参数θ;策略越好,则J(θ) 越大。所以策略学习可以描述为这样一个优化问题:

我们希望通过对策略网络参数θ的更新,使得目标函数J(θ)越来越大,也就意味着策略网络越来越强。想要求解最大化问题,显然可以用梯度上升更新θ,使得J(θ)增大。设当前策略网络的参数为θnow。做梯度上升更新参数,得到新的参数θnew:
把之前的Vπ(st)的推导写成所有状态的形式。策略梯度可以写成下面定理中的期望形式

解析求出这个期望是不可能的,因为我们并不知道状态S概率密度函数;即使我们知道S 的概率密度函数,能够通过连加或者定积分求出期望,我们也不愿意这样做,因为连加或者定积分的计算量非常大。我们用蒙特卡洛近似,可以用这种方法用来近似策略梯度中的期望。每次从环境中观测到一个状态s,它相当于随机变量S的观测值。然后再根据当前的策略网络(策略网络的参数必须是最新的)随机抽样得出一个动作,计算随机梯度:

3.REINFORCEMENT算法 从梯度策略的更新中,我们可以看见,还有一个Qπ(st,at)的值是不确定的。这里有两种办法得到Qπ(st,at)。第一种对于一个完整的幕,及从开始状态到终态的状态、动作、序列我们都知道。
根据定义,我们可以直接计算出每个时刻的Qπ(at,st)。这种算法就是REINFORCEMENT算法 。训练步骤如下:


这种算法的更新需要序列是完整的。第二种方法就是,我们用一个神经网络来近似Qπ(at,st),用TD的方法来更新,这种算法就是Actor-crictic 结构的算法。
4.actor-critic
Actor-Critic算法,从名字翻译就是“演员-评委”方法。策略网络π(a|s;θ)相当于演员。价值网络相当于评委。如下图所示,图片来源北大王树森。

训练流程如下

5.总结
强化学习的两种学习方式,一种是基于价值,一种就是基于策略,他们分别由deepmind和openAI引领,而后走向了归一。这一节我们介绍了基于策略的算法。下一节会分享AC结构的强化学习算法。
