本文主要讲一下从策略梯度到 Actor-Critic 算法的理解。
本文大部分内容总结来自作者的知识库:
强化学习👣

策略梯度(Policy Gradient)

假设现在有一个单步马尔科夫决策过程(One-step MDPs),对应的强化学习问题是个体与环境每产生一个动作交互一次即得到一个即时奖励 ✏️从 Policy Gradient 到 Actor-Critic - 图1,并形成一个完整的状态序列。策略目标函数为:
✏️从 Policy Gradient 到 Actor-Critic - 图2

对应的策略目标函数的梯度为:
✏️从 Policy Gradient 到 Actor-Critic - 图3

TheoremPolicy Gradient Theorem
对于任何可微的策略函数 ✏️从 Policy Gradient 到 Actor-Critic - 图4 以及任何策略目标函数 ✏️从 Policy Gradient 到 Actor-Critic - 图5 中的任意一种来说,策略目标函数的梯度(策略梯度)都可以写成用分值函数表示的形式:
✏️从 Policy Gradient 到 Actor-Critic - 图6

上式建立了策略梯度与分值函数以及动作价值函数之间的关系,分值函数的在基于策略梯度的强化学习中有着很重要的意义。策略梯度定理将似然比方法推广到多步 MDPs,将即时奖励 ✏️从 Policy Gradient 到 Actor-Critic - 图7 替换为长期值 ✏️从 Policy Gradient 到 Actor-Critic - 图8

蒙特卡罗策略梯度(Monte-Carlo Policy Gradient)使用策略梯度定理和随机梯度上升更新参数,同时使用返回值 ✏️从 Policy Gradient 到 Actor-Critic - 图9 作为 ✏️从 Policy Gradient 到 Actor-Critic - 图10 的无偏样本。
✏️从 Policy Gradient 到 Actor-Critic - 图11
image.png

蒙特卡罗策略梯度 REINFORCE 算法

image.png

REINFORCE with Baseline

利用了等式:
✏️从 Policy Gradient 到 Actor-Critic - 图14

也就是说可以在 ✏️从 Policy Gradient 到 Actor-Critic - 图15 后减去任意与动作 ✏️从 Policy Gradient 到 Actor-Critic - 图16 无关的项 ✏️从 Policy Gradient 到 Actor-Critic - 图17 ,这样可以减少算法的方差。
更新项就变成了:
✏️从 Policy Gradient 到 Actor-Critic - 图18
image.png

演员-评论家(Actor-Critic,AC)

蒙特卡罗策略梯度仍然有比较高的方差,我们使用评论家(critic)来估计动作价值函数:
✏️从 Policy Gradient 到 Actor-Critic - 图20

演员-评论家(Actor-Critic)算法维护两组参数:

  • 评论家更新动作价值函数的参数 ✏️从 Policy Gradient 到 Actor-Critic - 图21
  • 演员按照评论家建议的 方向更新策略参数 ✏️从 Policy Gradient 到 Actor-Critic - 图22

Actor-Critic 算法遵循近似的策略梯度:
✏️从 Policy Gradient 到 Actor-Critic - 图23

评论家正在解决一个熟悉的问题:策略评估。对于当前参数 ✏️从 Policy Gradient 到 Actor-Critic - 图24,策略 ✏️从 Policy Gradient 到 Actor-Critic - 图25 有多好?这个问题在前两节课中已经讨论过了,例如:

  • 蒙特卡罗策略评估
  • 时差学习
  • TD(λ)

也可以使用最小二乘法来进行策略评估

简单的 Actor-Critic 算法基于动作价值评论,使用线性值函数近似:✏️从 Policy Gradient 到 Actor-Critic - 图26。其中 Critic 使用线性 TD(0) 更新 ✏️从 Policy Gradient 到 Actor-Critic - 图27,Actor 使用策略梯度更新 ✏️从 Policy Gradient 到 Actor-Critic - 图28
image.png
image.png

这里说一下参数 ✏️从 Policy Gradient 到 Actor-Critic - 图31 的更新。在价值函数近似中,线性价值函数近似(Linear ValueFunction Approximation)方法如下:

  • 通过特征的线性组合表示值函数

✏️从 Policy Gradient 到 Actor-Critic - 图32

  • 目标函数在参数 w 中是二次的

✏️从 Policy Gradient 到 Actor-Critic - 图33

  • 随机梯度下降会收敛到全局最优值(global optimum)
  • 在线性值函数近似的情况下,梯度的计算变得非常简单

✏️从 Policy Gradient 到 Actor-Critic - 图34

参数更新量 = 步长 × 预测误差 × 特征值

之前是假设了给定了真实的值函数 ✏️从 Policy Gradient 到 Actor-Critic - 图35,但是在 RL 环境中,并不知道真实的值函数,只有奖励值。直观地,我们用目标值替代 ✏️从 Policy Gradient 到 Actor-Critic - 图36

  1. 对于 MC,目标值是回报值 ✏️从 Policy Gradient 到 Actor-Critic - 图37

✏️从 Policy Gradient 到 Actor-Critic - 图38

  1. 对于 TD(0),目标值是 TD 目标值 ✏️从 Policy Gradient 到 Actor-Critic - 图39

✏️从 Policy Gradient 到 Actor-Critic - 图40

  1. 对于 TD(λ),目标值是 ✏️从 Policy Gradient 到 Actor-Critic - 图41 回报值 ✏️从 Policy Gradient 到 Actor-Critic - 图42

✏️从 Policy Gradient 到 Actor-Critic - 图43

优势函数演员-评论家(Advantage Actor-Critic,A2C)

Advantage Actor-Critic

这里和 REINFORCE with Baseline 一样,我们从策略梯度里抽出一个基准函数 ✏️从 Policy Gradient 到 Actor-Critic - 图44,要求这一函数仅与状态有关,与行为无关,因而不改变梯度本身。✏️从 Policy Gradient 到 Actor-Critic - 图45 的特点是能在不改变行为价值期望的同时降低其 Variance。当 ✏️从 Policy Gradient 到 Actor-Critic - 图46 具备这一特点时,下面的推导成立:
✏️从 Policy Gradient 到 Actor-Critic - 图47

策略函数对数的梯度与基准函数乘积的期望可以表示为第一行等式对策略函数梯度与B(s)的乘积对所有状态及行为分布求的形式,这步推导主要是根据期望的定义,以及 ✏️从 Policy Gradient 到 Actor-Critic - 图48 是关于状态 ✏️从 Policy Gradient 到 Actor-Critic - 图49 的函数而进行的。由于 ✏️从 Policy Gradient 到 Actor-Critic - 图50 与行为无关,可以将其从针对行为 ✏️从 Policy Gradient 到 Actor-Critic - 图51 的求和中提出来,同时我们也可以把梯度从求和符号中提出来(梯度的和等于和的梯度),从而后一项求和则变成:策略函数针对所有行为的求和,这一求和根据策略函数的定义肯定是 1,而常熟的梯度是 0。因此总的结果等于 0 。那么如何设计或者寻找这样一个 ✏️从 Policy Gradient 到 Actor-Critic - 图52 呢?

原则上,和行为无关的函数都可以作为 ✏️从 Policy Gradient 到 Actor-Critic - 图53。一个很好的 ✏️从 Policy Gradient 到 Actor-Critic - 图54 就是基于当前状态的状态价值函数:
✏️从 Policy Gradient 到 Actor-Critic - 图55

这样我们通过使用一个优势函数(advantage function)✏️从 Policy Gradient 到 Actor-Critic - 图56来重写策略目标函数梯度:
✏️从 Policy Gradient 到 Actor-Critic - 图57

现在策略目标函数梯度的意义就改变成为了得到那个“好多少”,我应该怎么做(改变策略参数)?

估计优势函数(Generalized Advantage Estimator,GAE)

优势函数可以明显减少状态价值的变异性,因此算法的 Critic 部分可以去估计优势函数而不是仅仅估计行为价值函数。在这种情况下,我们需要两个近似函数也就是两套参数,一套用来近似状态价值函数,一套用来近似行为价值函数,以便计算优势函数,并且通过 TD 学习来更新这两个价值函数。数学表示如下:
✏️从 Policy Gradient 到 Actor-Critic - 图58

不过实际操作时,并不需要这样做,因为根据定义,TD 误差 ✏️从 Policy Gradient 到 Actor-Critic - 图59 可以根据真实的状态价值函数 ✏️从 Policy Gradient 到 Actor-Critic - 图60 算出:
✏️从 Policy Gradient 到 Actor-Critic - 图61

这样得到的 TD 误差是优势函数的无偏估计,这同样是根据行为价值函数的定义推导成立的,即:
✏️从 Policy Gradient 到 Actor-Critic - 图62

如此,我们就可以使用 TD 误差来计算策略梯度:
✏️从 Policy Gradient 到 Actor-Critic - 图63

实际运用时,我们使用一个近似的 TD 误差,即用状态函数的近似函数来代替实际的状态函数:
✏️从 Policy Gradient 到 Actor-Critic - 图64

这样做的好处就是,我们只需要一套 Critic 参数 ✏️从 Policy Gradient 到 Actor-Critic - 图65 描述状态价值函数,而不再需要针对行为价值近似函数了。

PPO 中计算 GAE
image.png

结语

  • Policy Gradient 分两大类:基于Monte-Carlo的 REINFORCE(MC PG)和基于TD的 Actor Critic(TD PG)。
  • REINFORCE 是Monte-Carlo式的探索更新,也就是回合制的更新,至少要等一个回合结束才能更新policy;
  • Actor Critic 是基于TD的,也就是说可以按step来更新,不需要等到回合结束,是一种online learning。
  • MC PG不利用马尔可夫性,TD PG利用马尔可夫性。

参考

  1. 蒙特卡罗策略梯度
  2. 策略梯度定理
  3. Sutton, Richard S., 和Andrew G. Barto. Reinforcement Learning: An Introduction, Chapter 13. 2018.
  4. RL策略梯度方法之(一): REINFORCE算法
  5. 强化学习(十三) 策略梯度(Policy Gradient)
  6. 深度强化学习-Policy Gradient基本实现
  7. 强化学习(十四) Actor-Critic
  8. 深度强化学习 — Actor-Critic 类算法(基础篇)
  9. 【强化学习】Actor-Critic算法详解
  10. 深度强化学习-Actor-Critic算法原理和实现