最近学习强化学习的策略梯度算法时,遇到其中策略梯度的计算部分,一些推导的细节在我所学习的视频中被一笔带过了,而这些推导过程本该十分重要,故在本文中简单整理一下。

首先表述几个基本的符号:

  • 是全体状态的集合, 是全体动作的集合。
  • 表示以 为参数、在 时间步的状态 下的动作策略,是一个概率分布。 即是本算法优化的参数。
  • 表示时间步 的即时奖励。
  • 表示从时间步 开始的累计回报。
  • 表示在状态 时采取动作 时能获得的累计回报 的期望值。
  • 表示在状态 下,使用动作策略 时, 函数的期望值。
  • 表示采取 以 为参数的动作策略 时,能获得的所有状态下的回报的期望值。

考虑到希望在策略 下获得尽可能高的回报,我们的优化目标自然是:

故需要计算 ,计算此梯度时运用了一个称为「Log Derivative Trick」的技巧,下面推导一下这个梯度:

上面积分式中,仅有 依赖于参数 ,故可以单独计算此项:

但这里梯度的外面还套着一个积分,算起来十分麻烦,因此使用了一个非常基本的对数导数等式:

应用上式,有:

这么做的目的是在积分里面凑出来了一个概率分布:,从而可以将前面的积分转化为一个新的期望:

则梯度可表示为:

这样,就顺利的把梯度运算符移到了嵌套期望的内部,接下来的一个常用技巧是使用蒙特卡洛采样算法去估计 这一项的期望值。

如此一来,计算 的梯度值就有了从代码上实现的可行性。

假设在某个策略 下收集了足够多的游戏数据:

我们只需计算:

然后应用反向传播与梯度上升算法,即可优化