ML2.2 策略梯度PG的学习和实践

1. 资料

2. 策略梯度PG思路说明

PG 即策略梯度方法(Policy Gradient Methods)是一类直接优化策略的强化学习方法。与基于价值的方法(如Q学习)不同,策略梯度方法直接通过优化策略函数来找到最优策略,而不是通过计算状态或状态-动作的价值。

在强化学习中,策略可以理解为一种概率分布,它定义了在每个状态下采取各个动作的概率。策略梯度方法的核心思想是通过计算策略的梯度来优化策略,使得策略能够在每个状态下选择更好的动作,从而增加累积奖励。

2.1 PG 和 QL 对比

基本的把场景抽象成马尔科夫链过程等思路和 Q Learning 是一致的。QL 思路和实现见:https://pangruitao.com/post/5028

建模思路差异

  • PG 是直接针对策略本身进行建模和优化。
  • 而 QL 是对 Q 值的建模和优化,策略是基于 Q 的(如取 s 下最大的 Q 对应的 a)

策略实现的差异

  • 由于 PG 是对策略进行建模,得到的通常直接是各个行为的概率
  • 而 QL 得到的是各个行为的 Q 值,概率选择是基于 Q 的自定算法(max, softmax 或者 epsilon-greedy 等)

PG 方法的优势

  • 直接优化策略:策略梯度方法直接优化策略,而非间接地计算状态价值或动作价值,因此它能很好地应对高维连续动作空间的问题。
  • 稳定的学习过程:在某些情况下,相比基于价值的方法,策略梯度方法的学习过程更加稳定。
  • 直接适合概率策略:策略梯度方法的输出是一个概率分布,适合于需要概率性决策的任务。

PG 方法的劣势

  • 高方差问题:策略梯度方法在更新时会遇到较高的方差,导致更新不稳定。常用的解决方案是使用优势估计方法或基线函数(如状态值函数)来降低方差。
  • 样本效率低:相较于价值基的方法,策略梯度方法的样本效率相对较低,因为每次策略更新只能使用当前策略的采样数据。

2.2 PG 的核心思路

2.2.1 定义策略

首先,定义策略:\(\pi_{\theta}(a|s)\)

  • \(\pi\) 是由 \(\theta\) 参数化的策略。决定了在情景 s (state) 下,选择行为 a (action) 的概率。

2.2.2 定义目标函数

策略梯度方法的目标是最大化累计奖励的期望,记作 \(J(\theta)\) 这个目标函数可以表示为:

\(J(\theta) = \mathbb{E_{\pi_{\theta}}} \left[ \sum_{t=0}^{T} \gamma^t r(s_t, a_t) \right]\)

  • \(\gamma\) 是折扣因子,越眼前的奖励越重要(类似经济学折现率)

2.2.3 计算策略梯度

目标是通过调整 \(\theta\) 提升 \(J(\theta)\)。

如果是凸问题,则又可以用梯度上升的方法。需要求 \(J(\theta)\) 关于各 \(\theta\) 的梯度,即 \(\nabla_{\theta} J(\theta)\)

根据刚才目标函数的定义,有

\(\nabla_{\theta} J(\theta) = \nabla_{\theta} \mathbb{E_{\pi_{\theta}}} \left[ \sum_{t=0}^{T} \gamma^t r(s_t, a_t) \right]\)

期望即各个事件值和概率乘积求和,展开即

\(\nabla_{\theta} J(\theta) = \nabla_{\theta} \left[ \sum_{t=0}^{T} \sum_{a} \pi_{\theta}(a|s_t) \gamma^t r(s_t, a_t) \right]\)

由于求期望和求梯度的顺序是可以交换的。所以有

\(\nabla_{\theta} J(\theta) = \left[ \sum_{t=0}^{T} \sum_{a} \nabla_{\theta} \pi_{\theta}(a|s_t) \gamma^t r(s_t, a_t) \right]\)

根据微积分

\(\nabla_{\theta} f(\theta) = \nabla_{\theta} (e^{\log f(\theta)}) = f(\theta) * \nabla_{\theta} \log f(\theta)\)

所以有

\(\nabla_{\theta} \pi_{\theta}(a|s) = \pi_{\theta}(a|s) \nabla_{\theta} \log \pi_{\theta}(a|s)\)

把等式替换进去,得到

\(\nabla_{\theta} J(\theta) = \left[ \sum_{t=0}^{T} \sum_{a} \pi_{\theta}(a|s_t) \nabla_{\theta} \log \pi_{\theta}(a|s_t) \gamma^t r(s_t, a_t) \right]\)

简化回期望的形式:

\(\nabla_{\theta} J(\theta) = \mathbb{E_{\pi_{\theta}}} \left[ \sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a|s_t) \gamma^t r(s_t, a_t) \right]\)

实际操作中 通常会用一个 “优势函数” \(\hat{A}(s, a)\) 来代替 \(\sum_{t=0}^{T} \gamma^t r(s_t, a_t)\),以衡量各个行为相对其他行为的优势,得到

\(\nabla_{\theta} J(\theta) = \mathbb{E_{\pi_{\theta}}} \left[ \sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a|s_t) \hat{A}(s, a) \right]\)

2.2.4 策略参数学习

计算得到梯度以后,就不断梯度上升更新参数即可:

\(\theta \leftarrow \theta + \alpha \nabla_{\theta} J(\theta)\)

\(\theta \leftarrow \theta + \alpha \mathbb{E_{\pi_{\theta}}} \left[ \sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a|s_t) \hat{A}(s, a) \right]\)

2.3 蒙特卡洛采样

在实际场景中为了参数的梯度学习,需要获得 \(\mathbb{E_{\pi_{\theta}}} \left[ \sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a|s_t) \hat{A}(s, a) \right]\) 的值,但实际非常难,因为通常有近乎无穷的分支路径可能性。

但我们可以采用一些方法对其进行估计。

最常用的即蒙特卡洛采样:尝试根据策略 \(\pi_{\theta}(a|s)\) 完成1次游戏,并记录此次游戏过程中得到的各 \(s, a, \hat{A}(s, a)\)

  • 其中 \(\hat{A}(s, a)\) 通常和后续步骤的奖励反馈也相关,所以需要完成1次游戏后回溯计算得到

得到的每组 \(s, a, \hat{A}(s, a)\) 样本,都可以计算出 \(\nabla_{\theta} \log \pi_{\theta}(a|s) \hat{A}(s, a) \)

并以此直接作为 \(\mathbb{E_{\pi_{\theta}}} \left[ \sum_{t=0}^{T} \nabla_{\theta} \log \pi_{\theta}(a|s_t) \hat{A}(s, a) \right]\) 的估计。

进而实际的参数学习方式是:\(\theta \leftarrow \theta + \alpha \nabla_{\theta} \log \pi_{\theta}(a|s) \hat{A}(s, a) \)

蒙特卡洛之所以有效,主要由于:

  1. 容易实现:实现非常简单,只需要不停重复实践和记录采样即可。无需过多数学上的处理。
  2. 是无偏估计:虽然简单,但根据大数定律,当样本数量趋于无穷时,随机的单样本的期望值确实等于目标的期望值。

事实上,我们还可以更进一步,连1次游戏也不完全完成。即采用“截断蒙特卡洛回报”(Truncated Monte Carlo Return)。

  • 如果我们在蒙特卡洛采样中,到达某状态 s ,如果我们相信 s 自己对其未来的价值估计,则我们可以直接用 s 的那个价值估计给这次采样,直接返回。
  • 甚至可以再极端一点,每次仅看下一个状态的值就直接返回用于估计。这样实现起来非常方便灵活。且有一个专门的名字:时序差分TD(Temporal Difference)
  • 事实上之前 DQL 中更新 Q 值就是这样做的,非常极端,只仅关系下一步的 Q 值(更新方法:\(Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left( r_t + \gamma \max_{a’} Q(s_{t+1}, a’) – Q(s_t, a_t) \right)\))
  • 不过 截断蒙特卡洛回报 是有代价的,即估计的偏差,由于没有完整的游戏,所以估计的回报会在一定时间内都着重前期而非完整路径。而完整路径采样则是无偏估计。
  • 但由于其带来的灵活和及时性,这个代价通常愿意被接受。

3. REINFORCE 方法

REINFORCE 是基于上面的策略梯度的最基本的实现。

详细思路、实现和优化见:https://pangruitao.com/post/5258

4. AC 方法

AC 是基于 REINFOECE 的优化,尝试提升稳定性。

详细思路、实现和优化见:https://pangruitao.com/post/5262

5. PPO 方法

PPO 是基于 AC 的进一步优化,进一步提升了稳定性。

详细思路、实现和优化见:https://pangruitao.com/post/5295

发表评论