策略梯度(Policy Gradient)

Python015

策略梯度(Policy Gradient),第1张

强化学习方法主要分为两类,一类是Model-based,另外一种是Model free,如图所示:

而Model Free中又包含两种方法,其中一种是基于策略的角度考虑的方法,而Policy Gradient则是Policy based的基础方法。Value based的典型方法则是Q-learning方法,Actor-Critic则是Value based和Policy based方法相结合,它拥有两个Networks,分别是Actor和Critic,Actor使用Policy based的方法,Critic使用的是Value based的方法。

公式如下所示:

推导过程如下所示:

其中,s代表state,a代表action,pi代表我们的policy策略,也就是一个policy network,输入是state,输出是一个action,R代表Reward。

该Deep network的框架如下所示:

该网络输入为当前的状态(如游戏画面,五子棋的盘面等),输出则为各个Action的概率(假设总共有3个Actions)。因此,Policy Gradient公式可以理解为在当前State的状态下,采取不同Action的概率乘以其相应的权重,也就是其Reward。

1. Reinforcement Learning An Introduction

2. 李宏毅.DRL Lecture1

3. https://blog.csdn.net/qq_30615903/article/details/80747380

1. on-policy(同策略): 要learn的agent和环境互动的agent是同一个时,对应的policy。

2. off-policy(异策略): 要learn的agent和环境互动的agent不是同一个时,对应的policy。

3. important sampling(重要性采样): 使用另外一种数据分布,来逼近所求分布的一种方法,在强化学习中通常和蒙特卡罗方法结合使用。

4. policy(策略): 每一个actor中会有对应的策略,这个策略决定了actor的行为。具体来说,Policy 就是给一个外界的输入,然后它会输出 actor 现在应该要执行的行为。

5. Return(回报): 一个回合(Episode)或者试验(Trial)所得到的所有的reward的总和,也被人们称为Total reward。

6. Reward function: 根据在某一个 state 采取的某一个 action 决定说现在这个行为可以得到多少的分数,它是一个 function。

7. Reinforce: 基于策略梯度的强化学习的经典算法,其采用回合更新的模式。

策略梯度方法(PG)是强化学习(RL)中经常使用的算法。基于值函数的DQN算法通过近似估算状态-动作值函数 来推断最优策略,而策略梯度方法则是直接优化策略。

策略梯度方法的目标是找到一组最优的神经网络参数 最大化总收益函数关于轨迹分布的期望

首先,定义我们的目标函数为:

显然,直接求上式的梯度是不可能的,原因如下:

因此,需要公式(2)变形,现在令轨迹的收益 , 则目标函数可以写为

我们假设 的分布函数 是可微分的,那么根据期望的定义,

它的梯度为

存在下面的一个恒等式:

将该恒等式带入公式(5)得到

策略梯度可以表示为期望,这意味着我们可以使用抽样来近似它。接下来我们谈谈如何计算

由Markov性,一条轨迹 出现的概率是

方程两边同时取对数,可得

由于 的值仅仅和带有参数 的项有关,那么

最终,目标函数的梯度变为

在从实际系统中抽样时,我们用下面的式子进行估算

接下来,我们便可以使用来更新参数

是最大对数似然。在深度学习中,它衡量观察数据的可能性。在强化学习的背景下,它衡量了当前策略下轨迹的可能性。通过将其与奖励相乘,我们希望如果轨迹导致高的正奖励,则增加策略的出现可能性。相反,如果策略导致高的负奖励,我们希望降低该策略的出现可能性。

策略梯度方法的高方差问题: 由于采样的轨迹千差万别,而且可能不同的 action 会带来一样的 Expected Reward。如果在分类任务中出现一个输入可以分为多个类的情况,梯度就会乱掉,因为网络不知道应该最大化哪个类别的输出概率。梯度很不稳定,就会带来收敛性很差的问题。为了解决这个问题,提出下面两种方法:

1.修改因果关系: 因果关系指的是,当前时间点的策略不能影响该时间点之前的时间点的所带来的收益,这个在直觉上很好理解,今天老板看到你工作努力想给你奖赏,老板不会给你昨天的工资加倍,只会给你今天的工资或者未来的工资加倍。

在公式(12)中便存在这样一个问题,在时间点的策略影响到了时间点之前的时间点的收益。因此,对公式(12)做出如下调整

其中,我们把 称作 “reward-to-go” ,意为“之后的奖赏”。

2.引入基线: 首先,引入基线后的梯度的形式为

其中, 是一个常数。接下来在数学上证明其合理性

策略梯度方法的样本效率问题: 策略梯度法是一个在线 (on-policy) 算法,这是因为在计算策略梯度 的时候所用的数据都是在新的策略下采样得到的,这就要求每次梯度更新之后就要根据新的策略全部重新采样,并把之前的在旧策略下采样到的样本全都丢弃,这种做法对数据的利用率非常低,使得收敛的速度也极低。那么如何有效利用旧的样本呢?这就需要引入 重要性采样 的概念。

将重要性采样的原理应用到我们的目标函数,则满足以下等式

由公式(8)可知

现在,我们求目标函数的梯度,

最后像前文所述,通过修正因果关系和引入基线来减小方差

但是,这种形式也是存在问题的,上式中中间那块连乘部分的数值,是关于T指数增长的,如果每个数都略小于1,而时间轴非常长,这个乘积最终将非常接近于0,这样梯度效果就会很差了。

为了解决这个问题,我们可以重写目标函数的形式,如下

进一步展开可得

这样我们便可以在两个层面上做重要性抽样了,最终形式为

但是同时又带来了一个新的问题,那就是需要知道在新的给定策略下某个时刻在某个状态的概率 ,我们一般将 这一项忽略,因为当两个策略足够接近时,这个比值近似为1。

引入“折扣因子”的目的是让奖赏r有权重地相加,让最开始收获的奖励有最大的权重,越往后面权重越小,因为距离当前状态的越近,影响越大。前边的公式也将相应地做出调整。

策略梯度地公式修改为:

参考