策略梯度算法
定义与符号说明
- 一条轨迹:
。 - 策略网络参数为
,则某条轨迹 的概率: 。其中, 代表环境,不被控制。 - 奖励函数根据在某一个状态采取的某一个动作决定这个动作可以得到的分数。
。 - 对于策略网络
,计算 的期望:
从分布
policy-based 的算法优化目标:
上述公式中,
表示一条轨迹序列; 采取的策略; 表示这条轨迹序列的累积奖励; 使用策略 情况下,产生某条轨迹的概率; 这条轨迹序列是在 策略下采样出来的。
策略梯度上升
对基于策略的优化目标函数求梯度:
假设一条轨迹有
继续推导:
上式求导后约去的两项是因为,对策略参数
即得到:
上式的直观理解:当
思考:
是整条轨迹的奖励,但 是针对单步的,使用整条轨迹评估该轨迹中某一步的价值,进而决定提升/降低 的概率,不太合理。 - 需要在单步回报和轨迹整体回报之间找到一种平衡方式。
基于上述思考,使用更一般的符号
策略梯度的实现
根据策略梯度的推导,面临两个问题:
- 很多时候,
总是正值,即最差的奖励也是 0。而在实际计算时,会采样 状态-动作
对,如果某个动作没采样到,即使这个动作比采样到的其他动作好,也会导致其他动作概率提升(因为不管什么动作都为正),而这个未被采样但好的动作变相的概率变低了。
针对这个问题,引入基线
- 原始的实现中,只要在同一个回合里面,在同一场游戏里面,所有的
状态-动作
对就使用同样的奖励项进行加权。这显然是不合理。
针对这个问题,解决办法是给每一个动作分配合适的分数(credit)。这个动作分配的分数为从这个动作执行以后得到的奖励,这也符合马尔可夫决策过程的假设。
最终:
REINFORCE (蒙特卡洛策略梯度)
REINFORCE 使用回合更新的方式。
算法流程如下:
Actor-Critic
基于值函数的方法(DQN)只学习一个价值函数,而基于策略的方法(REINFORCE)只学习一个策略函数。
Actor-Critic 既学习价值函数,又学习策略函数。Actor-Critic 算法本质上是基于策略的算法,因为这一系列算法的目标都是优化一个带参数的策略,只是会额外学习价值函数,从而帮助策略函数更好地学习。
上述策略梯度中将梯度表达成了更一般的形式:
根据前面讨论的,
:轨迹的总回报; :动作 之后的回报; :添加基线; :动作价值函数; :优势函数; :时序差分残差。
REINFORCE 通过蒙特卡洛采样的方法对策略梯度的估计是无偏的,但是方差非常大。引入形式(3)中的基线可以减少方差。Actor-Critic 算法估计一个动作价值函数 Q 代替蒙特卡洛采样得到的回报,即形式(4)。把状态价值函数 V 作为基线,从 Q 函数减去 V 函数则得到了 A 函数,我们称之为优势函数(advantage function),这便是形式(5)。更进一步,可以得到形式(6)。
事实上,用 Q 值或者 V 值本质上也是用奖励来进行指导,但是用神经网络进行估计的方法可以减小方差、提高鲁棒性。
REINFORCE 算法基于蒙特卡洛采样,只能在序列结束后进行更新,这同时也要求任务具有有限的步数,而 Actor-Critic 算法则可以在每一步之后都进行更新,并且不对任务的步数做限制。
Actor-Critic 算法流程如下:
PPO
策略梯度的优势函数表示形式为:
引入异策略(参考附录A. 重要性采样),则策略梯度改为:
实际处理时,会认为:
即:
由重要性采样得知,
做示范的模型不能与真正的模型相差太多,相差太多,重要性采样的结果就会不好。PPO 的做法是,在训练时,多加一个约束(
PPO 的优化目标函数:
近端策略优化裁剪:
Appendix
A. 重要性采样
策略梯度是同策略的算法,即每次采样轨迹,并更新策略参数后,就得重新采样新的轨迹。所以策略梯度是一个会花很多时间来采样数据的算法,其大多数时间都在采样数据。
异策略为了解决同策略的问题,思路是:用另外一个策略
实现异策略需要引入重要性采样。
对于一个随机变量,我们通常用概率密度函数来刻画该变量的概率分布特性。
- 给定随机变量的一个取值,可以根据概率密度函数来计算该值对应的概率(密度)。
- 反过来,也可以根据概率密度函数提供的概率分布信息来生成随机变量的一个取值,这就是采样。因此,从某种意义上来说,采样是概率密度函数的逆向应用。与根据概率密度函数计算样本点对应的概率值不同,采样过程往往没有那么直接,通常需要根据待采样分布的具体特点来选择合适的采样策略。
假设有一个函数
假设现在无法直接从
理论上
可以看到,当
