最简单的策略梯度

缺陷
在传统策略梯度算法中,我们根据目标函数
- 过冲(Overshooting):更新错过了奖励峰值,并落入了次优策略区域
- 下冲(Undershooting):在梯度方向上采取过小的更新步长,会导致收敛缓慢
在监督学习中,Overshooting并不是什么大问题,因为数据是固定的,我们可以在下一个epoch中重新纠正,但在强化学习中,如果因为Overshooting陷入了一个较差的策略区域,则未来的样本批次可能不会提供太多有意义的信息,用较差的数据样本再去更新数据,从而陷入了糟糕的正反馈中无法恢复,较小的学习率可能会解决这个问题,但会导致收敛速度变慢的Undershooting问题
纠正
为了避免Overshooting,一种直觉方法是限制每次更新步长的上限:
但是仅仅关注
限制策略更新的差异
我们需要表示策略(分布)之间的差异,而不是参数本身的差异。计算两个概率分布之间的差异,最常见的是KL散度,也成为相对熵,描述了两个概率分布之间的距离:
首先,我们使用拉格朗日松弛将原表达式的发散约束转化为惩罚项,得到一个更容易求解的表达式:
泰勒展开: 目标函数近似于一阶泰勒展开,KL散度近似于二阶泰勒展开,我们可以进一步化简:
缺陷
- 近似值可能会违反KL约束,从而导致分析得出的步长过大,超出限制要求
- 矩阵
的计算时间太长,是 的 - 我们没有检查更新是否真的改进了策略,由于存在大量的近似过程,策略可能并没有优化
TRPO
全称Trust Region Policy Optimization,它以自然策略梯度优化为基础
针对自然策略梯度算法的问题,我们希望可以对策略的优化进行量化,从而保证每次更新一定是有优化作用的,为此,我们需要计算两种策略之间预期回报的差异,采用原策略预期回报添加新策略预期优势的方式。该表达式在原策略下计算优势函数,无需重新采样: