基于价值的方法如DQN存在局限,尤其是在处理连续动作或需要随机策略时。策略梯度方法提供了一条不同的途径:直接优化策略本身的参数。但我们具体如何做到这一点呢?我们如何确定该如何调整策略参数 $\theta$ 以提升表现?我们的目标是找到能使期望总回报最大化的策略参数 $\theta$。我们可以定义一个目标函数,通常表示为 $J(\theta)$,它代表遵循策略 $\pi_\theta$ 时的期望回报。例如,在回合制任务中,这可能是从初始状态分布开始的期望累积折扣奖励:$$ J(\theta) = \mathbb{E}{\tau \sim \pi\theta} [ \sum_{t=0}^{T-1} \gamma^t r_{t+1} ] = \mathbb{E}{\tau \sim \pi\theta} [ G_0 ] $$这里,$\tau$ 表示通过遵循策略 $\pi_\theta(a|s)$ 生成的完整轨迹 $(s_0, a_0, r_1, s_1, ...)$,$\gamma$ 是折扣因子,$r_{t+1}$ 是在状态 $s_t$ 中采取行动 $a_t$ 后获得的奖励,$G_0$ 是整个回合的总折扣回报。为了最大化 $J(\theta)$,我们可以使用梯度上升。策略参数的更新规则如下所示:$$ \theta \leftarrow \theta + \alpha \nabla_\theta J(\theta) $$其中 $\alpha$ 是学习率,$\nabla_\theta J(\theta)$ 是目标函数相对于策略参数的梯度。主要难题在于计算这个梯度 $\nabla_\theta J(\theta)$。改变策略参数 $\theta$ 如何影响期望总回报?这不仅涉及策略如何选择动作,还涉及生成的轨迹和奖励分布如何变化,这似乎很难直接计算。这正是策略梯度定理发挥作用的地方。它提供了一种计算该梯度的方法,而无需了解或对环境的动态特性(转移概率 $p(s'|s,a)$)进行求导。此定理是所有策略梯度算法的主要理论依据。策略梯度定理的一种常见形式指出,目标函数的梯度由以下公式给出:$$ \nabla_\theta J(\theta) = \mathbb{E}{\tau \sim \pi\theta} [ \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) G_t ] $$我们来分析一下这个重要表达式:$\mathbb{E}{\tau \sim \pi\theta} [ ... ]$: 期望是针对遵循当前策略 $\pi_\theta$ 生成的轨迹 $\tau$ 计算的。这意味着我们可以通过在环境中运行策略并收集样本轨迹来估计梯度。$\sum_{t=0}^{T-1} ...$: 我们对轨迹内的所有时间步求和。$\nabla_\theta \log \pi_\theta(a_t|s_t)$: 这是在当前策略参数 $\theta$ 下,在状态 $s_t$ 中采取特定动作 $a_t$ 的对数概率的梯度。这一项指明了在参数空间 $\theta$ 中,哪一个方向能最大程度地增加在状态 $s_t$ 时选择动作 $a_t$ 的概率。这是可计算的,因为我们定义了策略 $\pi_\theta$(例如,使用一个输出决定动作概率的神经网络),因此可以计算其相对于其参数 $\theta$ 的导数。$G_t = \sum_{k=t}^{T-1} \gamma^{k-t} r_{k+1}$: 这是从时间步 $t$ 开始在轨迹 $\tau$ 中获得的总折扣回报。它表示在状态 $s_t$ 中采取动作 $a_t$ 的长期结果。对数导数技巧您可能想知道我们是如何得出 $\nabla_\theta \log \pi_\theta(a_t|s_t)$ 这一项的。它源于一个有用的恒等式,有时被称为“对数导数技巧”或“似然比技巧”。策略的梯度 $\nabla_\theta \pi_\theta(a|s)$ 可以改写为:$$ \nabla_\theta \pi_\theta(a|s) = \pi_\theta(a|s) \frac{\nabla_\theta \pi_\theta(a|s)}{\pi_\theta(a|s)} = \pi_\theta(a|s) \nabla_\theta \log \pi_\theta(a|s) $$这种改写具有重要意义,因为它使我们能够将梯度 $\nabla_\theta J(\theta)$ 表示为包含 $\pi_\theta$ 本身的期望。这意味着我们可以使用从当前策略 $\pi_\theta$ 中抽取的样本(动作 $a_t$)来估计梯度,而无需显式计算 $\theta$ 的变化如何影响状态访问分布。定理的直观解释策略梯度定理提供了一种直观的更新机制。项 $\nabla_\theta \log \pi_\theta(a_t|s_t)$ 指明了如何改变 $\theta$ 以增加(或减少)在状态 $s_t$ 中动作 $a_t$ 的概率。项 $G_t$ 则作为该更新方向的加权因子。如果动作 $a_t$ 后的回报 $G_t$ 很高(结果好),梯度更新会沿着 $\nabla_\theta \log \pi_\theta(a_t|s_t)$ 所指明的方向推动 $\theta$,从而有效地增加未来在状态 $s_t$ 中再次采取动作 $a_t$ 的概率。如果回报 $G_t$ 较低(结果差),更新会向相反方向推动 $\theta$,减少在状态 $s_t$ 中采取 $a_t$ 的概率。本质上,策略梯度方法根据动作最终导致的总回报来按比例强化这些动作。策略梯度定理为REINFORCE等算法提供了理论依据,我们接下来将介绍这些算法。REINFORCE直接使用蒙特卡洛采样(运行完整回合)来估计定理中的期望并更新策略参数。正如我们将看到的,尽管方法直接,但这种方式在梯度估计中可能存在高方差问题,从而促使后续的改进,例如使用基线。