9.4-蒙特卡洛策略梯度

根据定理\(9.1\)给出的目标函数的梯度,我们就可以利用梯度上升算法来最大化目标函数以获得最优策略。

\[\begin{align}\theta_{t+1} &= \theta_t + \alpha \nabla_\theta J(\theta_t) \\&= \theta_t + \alpha \mathbb{E}\!\left[ \nabla_\theta \ln \pi(A|S, \theta_t) q_\pi(S, A) \right]\end{align},\tag{9.31}\]

其中\(\alpha >0\)为学习率。由于式\((9.31)\)中的真实梯度含有期望,这在实际中是未知的,因此我们可用随机梯度替代真实梯度,从而得到如下算法:

\[\theta_{t+1} = \theta_t + \alpha \nabla_\theta \ln \pi(a_t \mid s_t, \theta_t) q_\pi(s_t, a_t),\tag{9.32}\]

其中\(q_t(s_t, a_t)\)\(q_\pi(s_t, a_t)\)\(t\)时刻的近似估计值。

算法\((9.32)\)中的算法具有重要意义,因为许多其他策略梯度算法都可以通过推广该算法得到。从其表达式可以看出,策略参数\(\theta_t\)的更新依赖于对行动值的估计\(q_t(s_t, a_t)\)。到目前为止,本书介绍了两种估计值的方法,一种是蒙特卡洛方法,另一种是时序差分算法。如果\(q_t(s_t, a_t)\)通过蒙特卡洛估计获得,那么该算法被称为蒙特卡洛策略梯度(Monte Carlo policy gradient)REINFORCE[68],这是最早且最简单的策略梯度算法之一。如果\(q_t(s_t, a_t)\)是通过时序差分方法得到的,那么相应的算法实际上就是我们下一章要介绍的Actor-Critic方法,这将要在下一章介绍。

接下来我们更深入地分析式\((9.32)\)。由于

\[\nabla_\theta \ln \pi(a_t|s_t, \theta_t) = \frac{\nabla_\theta \pi(a_t|s_t,\theta_t)}{\pi(a_t|s_t,\theta_t)},\]

可将式\((9.32)\)重写为

\[\theta_{t+1} = \theta_t + \alpha (\underbrace{\frac{q_\pi(s_t, a_t)}{\pi(a_t \mid s_t, \theta_t)}}_{\beta_t}) \nabla_\theta \pi(a_t \mid s_t, \theta_t),\]

上式可简写为

\[\theta_{t+1} = \theta_t + \alpha \beta_t \nabla_\theta \pi(a_t \mid s_t, \theta_t),\tag{9.33}\]

从上面这个方程可以得出两个重要结论。

  • 第一,由于式\((9.33)\)是一个简单的梯度上升算法,因此可以得到以下结论。

    • 如果\(\beta_t \geq0\),选择\((s_t, a_t)\)的概率将会增大,即

      \[\pi(a_t|s_t, \theta_{t+1}) \geq \pi(a_t|s_t, \theta_t)\]
    • \(\beta_t <0\),选择\((s_t, a_t)\)的概率将降低,即

      \[\pi(a_t|s_t, \theta_{t+1}) < \pi(a_t|s_t, \theta_t)\]

    为什么上述结论成立呢?当\(\theta_{t+1} - \theta_t\)足够小时,根据一阶泰勒展开可得

    \[\begin{align}\pi(a_t \mid s_t, \theta_{t+1}) &\approx \pi(a_t \mid s_t, \theta_t) + \left( \nabla_\theta \pi(a_t \mid s_t, \theta_t) \right)^T (\theta_{t+1} - \theta_t) \\&= \pi(a_t \mid s_t, \theta_t) + \alpha \beta_t \big( \nabla_\theta \pi(a_t \mid s_t, \theta_t) \big)^T \big( \nabla_\theta \pi(a_t \mid s_t, \theta_t) \big) \quad \text{(substituting (9.33))} \\&= \pi(a_t \mid s_t, \theta_t) + \alpha \beta_t \, \| \nabla_\theta \pi(a_t \mid s_t, \theta_t) \|_2^2.\end{align}\]

    显然,当\(\beta_t \geq0\)时,\(\pi(a_t|s_t, \theta_{t+1}) \geq \pi(a_t|s_t, \theta_t)\);而当\(\beta_t <0\)时,\(\pi(a_t|s_t, \theta_{t+1}) < \pi(a_t|s_t, \theta_t)\)

  • 第二,由于\(\beta_t\)的存在,该算法在一定程度上能够在探索(exploration)与利用(exploitation)之间取得平衡。注意\(\beta_t\)的表达式为

    \[\beta_t = \frac{q_t(s_t, a_t)}{\pi(a_t \mid s_t, \theta_t)}\]

    一方面,\(\beta_t\)\(q_t(s_t, a_t)\)成正比。如果\(q_t(s_t, a_t)\)较大,那么\(\pi(a_t|s_t, \theta_t)\)将增大,从而提高下一个时刻选择行动\(a_t\)的概率。此时算法倾向于利用更高价值动作。另一方面,当\(q_t(s_t, a_t) >0\)时,\(\beta_t\)\(\pi(a_t|s_t, \theta_t)\)成反比。此时,如果\(\pi(a_t|s_t, \theta_t)\)较小,即选择\(a_t\)的概率较小,那么\(\pi(a_t|s_t, \theta_t)\)将增大,那么下一个时刻选择\(a_t\)的概率会增大,因此此时算法倾向于探索之前那些概率低的动作。

Note

如果刚开始\(a_t\)选择概率比较小,那么我会在下个时刻给他更大的概率去选择它.

此外,由于\((9.32)\)需要随机样本来近似\((9.31)\)中的真实梯度,那么如何进行随机采样呢。

  • 第一,如何采样\(S\)?真实梯度\(\mathbb{E}[\nabla_\theta \ln \pi(A|S, \theta_t)q_\pi(S, A)]\)中的\(S\)应服从概率分布\(\eta\),这是稳态分布\(d_\pi\)\((9.19)\)式中的分布\(\rho_\pi\)。无论哪一种分布,\(d_\pi\)\(\rho_\pi\)均表示策略\(\pi\)下的长期行为。

  • 第二,如何采样\(A\)?真实梯度\(\mathbb{E}[\nabla_\theta \ln \pi(A|S, \theta_t) q_\pi(S, A)]\)中的\(A\)应服从概率分布\(\pi(A|S, \theta)\)。采样\(A\)的理想方式是按照\(\pi(a|s_t, \theta_t)\)采样得到\(a_t\),因此策略梯度算法属于同策略方法。

遗憾的是,由于采样效率较低,在实践中往往不会严格按照上述理论采样\(S\)\(A\)。这主要是因为实际中的样本可能是稀缺的,例如我们不太可能等到策略运行了很久并进入平稳状态后才使用其经验样本来学习。

算法\(9.1\)给出了式\((9.32)\)流程。该方案首先通过策略\(\pi(\theta)\)生成一个回合,然后利用该回合中的每一个经验样本对参数\(\theta\)进行多次更新。

算法\(9.1\):蒙特卡洛的策略梯度(REINFORCE)


评论