推导最简单的策略梯度

  我们考虑一个随机的, 参数化的策略. 我们的目标是最大化期望回报 (还可以称为性能函数, 与损失函数意义相反). 这里使用有限无折损回报 () 来推导, 但是无限有折损回报 () 的推导几乎是完全相同的.

  我们会用梯度下降 () 来优化策略的参数, 比如

其中代表取值为.

  为了使用该算法, 我们需要一个能够用数值计算的策略梯度表达式. 这包括两个步骤:

  1. 推导出策略性能的解析梯度 (, 什么是解析梯度? 详情看这篇文章) , 以期望值的形式表现 (便于用平均值估计).
  2. 算出在样本上的估计的期望值, 可以使用有限步代理人-环境交互的数据.

这里列出对推导解析梯度有帮助的一些事实.

  1. 轨迹的概率. 采取策略所做出的轨迹的概率是
  1. 对数的把戏. 我们知道的导数是, 于是根据链式法则有
  1. 轨迹的对数概率
  1. 环境函数的梯度. 由于都无关, 因此它们的梯度为.
  2. 由第 4 条与第 3 条可知, 轨迹的对数概率的梯度是

由以上全部推导就有

这样我们就可以用样本的平均值来估计策略梯度了. 假如我们有轨迹的集合, 并且这些轨迹都是代理人根据策略在环境中行动获得, 那么策略梯度可以估计为

其中是集合的元素个数.

损失函数

  在强化学习中, 我们同样可以定义类似监督学习中的损失函数的概念, 但是在强化学习中的损失函数与监督学习中的损失函数有很大区别. 损失函数的梯度与策略梯度是相同的. 其接受的数据包含了 (状态, 动作, 权重) 三元组.

与参数关系

  在监督学习中, 损失只与数据有关而与参数无关, 但是在强化学习中, 由于数据是遵循最近的策略采样得来的, 因此损失也与参数有关.

描述性能

  在强化学习中, 我们关心的是期望回报, 而损失函数并不能很好的表达它. 最优化损失函数并不能保证能够提升期望回报. 你甚至可以将损失函数降低到而同时策略性能 (期望回报) 并不怎样. 此时我们称其 “过拟合” . 但这与我们通常所称的过拟合有所不同, 这只是一种描述, 因为实际上并没有什么泛化的错误, 只是损失函数低得吓人. 因此如果想真正描述策略性能, 我们应该关心期望回报而不是损失函数.

EGLP 定理

  在这里我们会推导出一个在策略梯度中被广泛使用的一个中间结果, 我们称其为梯度对数概率期望 () 定理.

别让过去影响你

  梯度更新表达式

每次更新, 都可以让每个动作的对数概率随着(采取动作的总回报) 成比例增加. 但这意义不大. 代理人应该根据其采取行动后的后果 (好还是坏) 来决定如何更改 (加强) 策略, 而采取行动之前的奖励和这一步行动的好坏没有直接关系. 事实上, 这一直觉在数学上也有很好的表达. 可以证明, 梯度更新表达式也可以写成如下等价形式.

这被称为奖励策略梯度 ().

证明过程比较繁琐, 不想看的可以略过.

证明

  我们先提出一个函数

如果我们能证明当时, 该式为, 我们就能证明两种策略梯度的表达是等价的. 在时刻, 函数只与有关, 于是我们有

根据贝叶斯法则, 我们有

, 那么还有

因此就有

时, 我们可以分解

这是因为在当前环境已知晓时, 与之前做过的选择与之前经历的环境并无关系.

因此有

此时就要用到我们的定理了.

因此当.

而当时, 无法将分解成该形式, 所以就不会有这个结果. 我们可以举个例子. 如果现在有的几率会下雨, 而你打算如果不下雨, 就有的可能会出去买水果. 此时, 无论之前发生了什么 (也许昨天下雨了 (环境) , 也许前天买了水果 (动作)) , 现在买水果的概率都是. 但是如果这个时候, 未来的你突然穿越回来, 告诉你你后来买了水果, 那么这时下雨的概率其实就改变了, 变得更倾向于不下雨 (事实上如果你后来买了水果, 不下雨的概率就会是). 如果没买, 则相反. 这就是未来影响现在而过去不影响现在.

  既然期望是相同的, 但根据这个式子来训练为什么会更好呢? 这是因为策略梯度需要用样本轨迹来估计, 而且最好是低方差的. 如果方差较大, 说明估计不太准确. 如果公式中包括过去的奖励, 虽然它们均值为, 但方差并不是, 在公式中增加它们只会给策略梯度的样本估计增加噪音, 增加方差. 而这会导致需要较多的样本轨迹才能得到一个相对稳定的值 (收敛) . 删除它们后, 我们就可以用更少的样本轨迹得到低方差的估计, 也就是说更容易收敛. 举个例子, 如果你要估计一系列数字的期望 (也就是算平均值) , 它们服从的概率分布的期望其实都是, 但是一个方差很大, 一会一会一会, 你需要很多数字才能得到一个较为准确的值. 而另一个方差很小, 基本就是,,这样, 只需要几个数字就能估计得差不多.

策略梯度的基线

  由可以得到一个非常直接的结论: 如果一个函数只依赖于状态, 那么有

这使得我们可以在策略梯度的表达式中任意加上 (或删除) 这样的项而不改变最终结果, 比如说

函数被称为基线 ().

  基线函数一般是策略上的价值函数 (). 稍微回想一下, 这个函数给出了代理人从状态开始, 使用策略以后的平均 (期望) 回报.

经验上, 让基线对降低策略梯度的样本估计的方差有好处, 这会让策略学习更快, 更稳定. 从概念上来看, 这也很有意义: 它体现了一个直觉, 如果代理人得到了它所期望的 (即) , 他会对此 “感到” 中立 ( “中立” 在数学上看来即值为).

  事实上,并不能被准确计算, 因此应该使用它的估计. 通常我们会使用一个与策略同步更新 (这样就能总是估计最近的策略的价值函数) 的神经网络来估计它.

策略梯度的其他形式

  我们已经见到了策略梯度的很多等价形式

 可以是

又或者

再或者

但还有两种重要的形式.

  1. 状态-动作价值函数

证明可以看这里.

  1. 优势方程

由基线得知等价.

  为了更详细的了解这个主题, 你应该阅读 Generalized Advantage Estimation (GAE). 也可以参考我的文章 GAE 算法 .