跳到正文
北京时间
原文
Lilian Weng:Lil'Log(RSS)·· 2018-04-08精选AI 评分55

策略梯度算法

Policy Gradient Algorithms

AI 导读

该文章系统梳理了策略梯度算法的发展脉络,深入解析其工作原理,并详细介绍了从基础到前沿的多种算法,包括PPO、SAC、TD3、IMPALA等主流方法。文章自2018年起持续更新,陆续新增了D4PG、SVPG、PPG等新算法,并补充了关于PPO的最新讨论。文中还提供了韩语及中文等多个语言版本的翻译,便于不同读者参考。

推荐理由

这篇是当年策略梯度方法的“圣经”级综述,现在看虽然有些过时,但想理解PPO、SAC的来龙去脉还得从这儿啃起。

正文 · AI 翻译

策略梯度算法 REINFORCE Actor-Critic 离策略策略梯度 A3C A2C DPG DDPG D4PG MADDPG TRPO PPO PPG ACER ACTKR SAC 带自动温度调节的SAC TD3 SVPG IMPALA

REINFORCE

Actor-Critic

离策略策略梯度

A3C

A2C

DPG

DDPG

D4PG

带自动温度调节的SAC

TD3

SVPG

IMPALA

快速总结

参考文献

[更新于2018-06-30:新增两种策略梯度方法,SAC和D4PG。] [更新于2018-09-30:新增一种策略梯度方法,TD3。] [更新于2019-02-09:新增带自动温度调节的SAC]。 [更新于2019-06-26:感谢Chanseok,我们有了这篇博文的韩语版本]。 [更新于2019-09-12:新增一种策略梯度方法SVPG。] [更新于2019-12-22:新增一种策略梯度方法IMPALA。] [更新于2020-10-15:新增一种策略梯度方法PPG及PPO中的一些新讨论。] [更新于2021-09-19:感谢Wenhao和爱吃猫的鱼,我们有了这篇博文的中文版1和中文版2]。

什么是策略梯度#

策略梯度是解决强化学习问题的一种方法。如果你还没有了解过强化学习领域,请先阅读“对强化学习的(漫长)一瞥 » 关键概念”部分,了解问题定义和关键概念。

符号说明#

以下是一份符号列表,帮助你轻松阅读博文中的公式。

符号含义 $s \in \mathcal{S}$ 状态。$a \in \mathcal{A}$ 动作。$r \in \mathcal{R}$ 奖励。$S_t, A_t, R_t$ 一条轨迹中时间步 $t$ 的状态、动作和奖励。我有时也会使用 $s_t, a_t, r_t$。$\gamma$ 折扣因子;对未来奖励不确定性的惩罚;$0<\gamma \leq 1$。$G_t$ 回报;或折扣后的未来奖励;$G_t = \sum_{k=0}^{\infty} \gamma^k R_{t+k+1}$。$P(s’, r \vert s, a)$ 从当前状态 $s$ 通过动作 $a$ 和奖励 $r$ 到达下一状态 $s’$ 的转移概率。$\pi(a \vert s)$ 随机策略(智能体行为策略);$\pi_\theta(.)$ 是由 $\theta$ 参数化的策略。$\mu(s)$ 确定性策略;我们也可以将其标记为 $\pi(s)$,但使用不同的字母能更好地区分,这样无需额外解释就能轻松判断策略是随机的还是确定性的。$\pi$ 或 $\mu$ 都是强化学习算法旨在学习的目标。$V(s)$ 状态价值函数衡量状态 $s$ 的期望回报;$V_w(.)$ 是由 $w$ 参数化的价值函数。$V^\pi(s)$ 当遵循策略 $\pi$ 时状态 $s$ 的价值;$V^\pi (s) = \mathbb{E}{a\sim \pi} [G_t \vert S_t = s]$。$Q(s, a)$ 动作价值函数类似于 $V(s)$,但它评估的是状态和动作对 $(s, a)$ 的期望回报;$Q_w(.)$ 是由 $w$ 参数化的动作价值函数。$Q^\pi(s, a)$ 类似于 $V^\pi(.)$,当遵循策略 $\pi$ 时(状态、动作)对的价值;$Q^\pi(s, a) = \mathbb{E}{a\sim \pi} [G_t \vert S_t = s, A_t = a]$。$A(s, a)$ 优势函数,$A(s, a) = Q(s, a) - V(s)$;它可以被视为 Q 值的另一个版本,通过将状态价值作为基线来降低方差。

策略梯度#

强化学习的目标是为智能体找到最优的行为策略,从而获得最优奖励。策略梯度方法直接对策略进行建模和优化。策略通常用一个关于 $\theta$ 的参数化函数 $\pi_\theta(a \vert s)$ 来建模。奖励(目标)函数的值取决于该策略,因此可以应用多种算法来优化 $\theta$,以获得最佳奖励。

奖励函数定义如下:

其中 $d^\pi(s)$ 是 $\pi_\theta$ 对应的马尔可夫链的平稳分布(即 $\pi$ 下的在策略状态分布)。为简化起见,当策略 $\pi_\theta$ 出现在其他函数的下标中时,参数 $\theta$ 会被省略;例如,$d^{\pi}$ 和 $Q^\pi$ 若完整书写应为 $d^{\pi_\theta}$ 和 $Q^{\pi_\theta}$。

想象一下,你可以沿着马尔可夫链的状态永远行进,最终,随着时间推移,你停留在某个状态的概率将不再变化——这就是 $\pi_\theta$ 的平稳概率。$d^\pi(s) = \lim_{t \to \infty} P(s_t = s \vert s_0, \pi_\theta)$ 表示从 $s_0$ 出发,按照策略 $\pi_\theta$ 执行 $t$ 步后,$s_t=s$ 的概率。实际上,马尔可夫链平稳分布的存在性是 PageRank 算法能够生效的主要原因之一。如果你想了解更多,可以查阅相关资料。

可以预见,基于策略的方法在连续空间中更为有用。因为在连续空间中,动作和(或)状态的数量是无限的,需要估计的值太多,导致基于价值的方法计算代价极其高昂。例如,在广义策略迭代中,策略改进步骤 $\arg\max_{a \in \mathcal{A}} Q^\pi(s, a)$ 需要对整个动作空间进行完全扫描,从而受到维度灾难的影响。

利用梯度上升法,我们可以将 $\theta$ 沿着梯度 $\nabla_\theta J(\theta)$ 所指示的方向移动,从而为 $\pi_\theta$ 找到能产生最高回报的最优 $\theta$。

策略梯度定理#

计算梯度 $\nabla_\theta J(\theta)$ 比较棘手,因为它既依赖于动作选择(直接由 $\pi_\theta$ 决定),也依赖于目标选择行为之后的状态平稳分布(间接由 $\pi_\theta$ 决定)。由于环境通常是未知的,很难估计策略更新对状态分布的影响。

幸运的是,策略梯度定理来拯救世界了!哇哦!它为目标函数的导数提供了一种巧妙的重新表述,使其不涉及状态分布 $d^\pi(.)$ 的导数,从而大大简化了梯度 $\nabla_\theta J(\theta)$ 的计算。

策略梯度定理的证明

这一节内容相当密集,因为我们要一起过一遍证明过程(Sutton & Barto, 2017;第 13.1 节),弄清楚为什么策略梯度定理是正确的。

我们首先从状态价值函数的导数开始:

于是我们得到:

这个方程具有很好的递归形式(看红色部分!),未来的状态价值函数 $V^\pi(s’)$ 可以通过遵循同一个方程反复展开。

让我们考虑以下访问序列,并将按照策略 $\pi_\theta$ 经过 k 步从状态 s 转移到状态 x 的概率记为 $\rho^\pi(s \to x, k)$。

当 k = 0 时:$\rho^\pi(s \to s, k=0) = 1$。

当 k = 1 时,我们遍历所有可能的动作,并将转移到目标状态的概率求和:$\rho^\pi(s \to s’, k=1) = \sum_a \pi_\theta(a \vert s) P(s’ \vert s, a)$。

想象一下,目标是按照策略 $\pi_\theta$ 经过 k+1 步从状态 s 到达 x。我们可以先经过 k 步从 s 到达某个中间点 s’(任何状态都可以作为中间点,$s’ \in \mathcal{S}$),然后在最后一步到达最终状态 x。这样,我们就可以递归地更新访问概率:$\rho^\pi(s \to x, k+1) = \sum_{s’} \rho^\pi(s \to s’, k) \rho^\pi(s’ \to x, 1)$。

然后我们回到展开 $\nabla_\theta V^\pi(s)$ 的递归表示!令 $\phi(s) = \sum_{a \in \mathcal{A}} \nabla_\theta \pi_\theta(a \vert s)Q^\pi(s, a)$ 以简化数学推导。如果我们持续无限地展开 $\nabla_\theta V^\pi(.)$,很容易发现,我们可以从这个展开过程中的起始状态 s 经过任意步数转移到任何状态,并且通过将所有访问概率相加,我们就得到了 $\nabla_\theta V^\pi(s)$!

上述巧妙的改写使我们能够排除 Q 值函数的导数 $\nabla_\theta Q^\pi(s, a)$。将其代入目标函数 $J(\theta)$ 后,我们得到以下结果:

在回合制情况下,比例常数($\sum_s \eta(s)$)是一个回合的平均长度;在持续性情况下,该常数为 1(Sutton & Barto, 2017;第 13.2 节)。梯度可以进一步写成:

其中 $\mathbb{E}\pi$ 指的是 $\mathbb{E}_{s \sim d_\pi, a \sim \pi_\theta}$,即状态和动作分布均遵循策略 $\pi_\theta$(在线策略)。

策略梯度定理为各种策略梯度算法奠定了理论基础。这种原始策略梯度更新方法无偏但方差较高。后续提出了许多算法,旨在保持无偏性的同时降低方差。

以下是对策略梯度方法通用形式的精彩总结,该总结借鉴了 GAE(广义优势估计)论文(Schulman 等人,2016),并且这篇文章深入讨论了 GAE 中的几个组成部分,强烈推荐。

策略梯度算法#

近年来提出了大量策略梯度算法,我无法一一列举。这里介绍一些我碰巧了解并阅读过的算法。

REINFORCE#

REINFORCE(蒙特卡洛策略梯度)依赖于通过蒙特卡洛方法使用回合样本估计的回报来更新策略参数 $\theta$。REINFORCE 之所以有效,是因为样本梯度的期望值等于实际梯度:

因此,我们可以从真实样本轨迹中测量 $G_t$,并用它来更新策略梯度。这依赖于一条完整的轨迹,这也是它被称为蒙特卡洛方法的原因。

该过程相当直接:

随机初始化策略参数 $\theta$。

在策略 $\pi_\theta$ 上生成一条轨迹:$S_1, A_1, R_2, S_2, A_2, \dots, S_T$。

对于 t=1, 2, … , T:估计回报 $G_t$;更新策略参数:$\theta \leftarrow \theta + \alpha \gamma^t G_t \nabla_\theta \ln \pi_\theta(A_t \vert S_t)$

估计回报 $G_t$;

更新策略参数:$\theta \leftarrow \theta + \alpha \gamma^t G_t \nabla_\theta \ln \pi_\theta(A_t \vert S_t)$

REINFORCE 算法的一个广泛使用的变体是从回报 $G_t$ 中减去一个基线值,以在保持偏差不变的同时降低梯度估计的方差(记住,只要可能,我们都希望这样做)。例如,一个常见的基线是从动作价值中减去状态价值,如果采用这种方法,我们将在梯度上升更新中使用优势函数 $A(s, a) = Q(s, a) - V(s)$。这篇文章很好地解释了基线为何能有效降低方差,此外还介绍了一组策略梯度的基础知识。

Actor-Critic(演员-评论家)#

策略梯度中的两个主要组成部分是策略模型和价值函数。除了学习策略之外,学习价值函数也非常合理,因为了解价值函数有助于策略更新,例如通过降低原始策略梯度中的梯度方差,而这正是 Actor-Critic 方法所做的。

Actor-Critic 方法包含两个模型,它们可以选择共享参数:

Critic(评论家)更新价值函数参数 w,根据算法的不同,它可以是动作价值 $Q_w(a \vert s)$ 或状态价值 $V_w(s)$。

Actor(演员)按照评论家建议的方向更新策略 $\pi_\theta(a \vert s)$ 的参数 $\theta$。

让我们看看它在简单的动作价值 Actor-Critic 算法中是如何工作的。

随机初始化 $s, \theta, w$;采样 $a \sim \pi_\theta(a \vert s)$。

对于 $t = 1 \dots T$:采样奖励 $r_t \sim R(s, a)$ 和下一状态 $s’ \sim P(s’ \vert s, a)$;然后采样下一动作 $a’ \sim \pi_\theta(a’ \vert s’)$;更新策略参数:$\theta \leftarrow \theta + \alpha_\theta Q_w(s, a) \nabla_\theta \ln \pi_\theta(a \vert s)$;计算时刻 t 的动作价值修正量(TD 误差):$\delta_t = r_t + \gamma Q_w(s’, a’) - Q_w(s, a)$,并用其更新动作价值函数的参数:$w \leftarrow w + \alpha_w \delta_t \nabla_w Q_w(s, a)$;更新 $a \leftarrow a’$ 和 $s \leftarrow s’$。

采样奖励 $r_t \sim R(s, a)$ 和下一状态 $s’ \sim P(s’ \vert s, a)$;

然后采样下一动作 $a’ \sim \pi_\theta(a’ \vert s’)$;

更新策略参数:$\theta \leftarrow \theta + \alpha_\theta Q_w(s, a) \nabla_\theta \ln \pi_\theta(a \vert s)$;

计算时刻 t 的动作价值修正量(TD 误差):$\delta_t = r_t + \gamma Q_w(s’, a’) - Q_w(s, a)$,并用其更新动作价值函数的参数:$w \leftarrow w + \alpha_w \delta_t \nabla_w Q_w(s, a)$

更新 $a \leftarrow a’$ 和 $s \leftarrow s’$。

两个学习率 $\alpha_\theta$ 和 $\alpha_w$ 分别预定义用于策略和价值函数的参数更新。

离策略策略梯度#

REINFORCE 和演员-评论家方法的原始版本都是基于同策略的:训练样本根据目标策略(即我们试图优化的同一策略)收集。然而,离策略方法带来了若干额外优势:

离策略方法不需要完整的轨迹,可以重用任何过去的回合(“经验回放”),从而获得更好的样本效率。

样本收集遵循与目标策略不同的行为策略,带来更好的探索。

现在我们来看离策略策略梯度是如何计算的。用于收集样本的行为策略是一个已知策略(像超参数一样预定义),标记为 $\beta(a \vert s)$。目标函数对该行为策略定义的状态分布上的奖励进行求和:

其中 $d^\beta(s)$ 是行为策略 $\beta$ 的平稳分布;回顾一下,$d^\beta(s) = \lim_{t \to \infty} P(S_t = s \vert S_0, \beta)$;而 $Q^\pi$ 是根据目标策略 $\pi$(而非行为策略!)估计的动作价值函数。

鉴于训练观测值是通过 $a \sim \beta(a \vert s)$ 采样的,我们可以将梯度重写为:

其中 $\frac{\pi_\theta(a \vert s)}{\beta(a \vert s)}$ 是重要性权重。由于 $Q^\pi$ 是目标策略的函数,因此也是策略参数 $\theta$ 的函数,根据乘积法则,我们也需要对 $\nabla_\theta Q^\pi(s, a)$ 求导。然而,在实际中计算 $\nabla_\theta Q^\pi(s, a)$ 非常困难。幸运的是,如果我们使用忽略 Q 梯度的近似梯度,仍然可以保证策略改进,并最终达到真正的局部最小值。这一点在 (Degris, White & Sutton, 2012) 的证明中得到了论证。

总之,在离策略场景下应用策略梯度时,我们可以简单地通过加权求和来调整,权重就是目标策略与行为策略的比值,即 $\frac{\pi_\theta(a \vert s)}{\beta(a \vert s)}$。

A3C#

[论文|代码]

异步优势演员-评论家(Asynchronous Advantage Actor-Critic,Mnih 等人,2016),简称 A3C,是一种经典的策略梯度方法,特别关注并行训练。

在 A3C 中,评论家学习价值函数,同时多个演员并行训练,并定期与全局参数同步。因此,A3C 被设计为非常适合并行训练。

我们以状态价值函数为例。状态价值的损失函数是最小化均方误差,$J_v(w) = (G_t - V_w(s))^2$,可以应用梯度下降来找到最优的 w。这个状态价值函数在策略梯度更新中用作基线。

以下是算法概要:

我们有全局参数 $\theta$ 和 $w$;以及类似的线程特定参数 $\theta’$ 和 $w’$。

我们有全局参数 $\theta$ 和 $w$;以及类似的线程特定参数 $\theta’$ 和 $w’$。

初始化时间步 $t = 1$

初始化时间步 $t = 1$

当 $T \leq T_\text{MAX}$ 时:重置梯度:$\mathrm{d}\theta = 0$ 且 $\mathrm{d}w = 0$。将线程特定参数与全局参数同步:$\theta’ = \theta$ 且 $w’ = w$。$t_\text{start}$ = t 并采样一个起始状态 $s_t$。当 ($s_t$ != TERMINAL) 且 $t - t_\text{start} \leq t_\text{max}$ 时:选择动作 $A_t \sim \pi_{\theta’}(A_t \vert S_t)$ 并接收一个新奖励 $R_t$ 和一个新状态 $s_{t+1}$。更新 $t = t + 1$ 和 $T = T + 1$。初始化保存回报估计的变量 $$ R = \begin{cases} 0 & \text{if } s_t \text{ is TERMINAL} \\ V_{w'}(s_t) & \text{otherwise} \end{cases} $$ 6. 对于 $i = t-1, \dots, t_\text{start}$:1. $R \leftarrow \gamma R + R_i$;这里 R 是 $G_i$ 的 MC 度量。2. 累积关于 $\theta'$ 的梯度:$d\theta \leftarrow d\theta + \nabla_{\theta'} \log \pi_{\theta'}(a_i \vert s_i)(R - V_{w'}(s_i))$;累积关于 w' 的梯度:$dw \leftarrow dw + 2 (R - V_{w'}(s_i)) \nabla_{w'} (R - V_{w'}(s_i))$。使用 $\mathrm{d}\theta$ 异步更新 $\theta$,并使用 $\mathrm{d}w$ 异步更新 $w$。

当 $T \leq T_\text{MAX}$ 时:

重置梯度:$\mathrm{d}\theta = 0$ 且 $\mathrm{d}w = 0$。

将线程特定参数与全局参数同步:$\theta’ = \theta$ 且 $w’ = w$。

$t_\text{start}$ = t 并采样一个起始状态 $s_t$。

当 ($s_t$ != TERMINAL) 且 $t - t_\text{start} \leq t_\text{max}$ 时:选择动作 $A_t \sim \pi_{\theta’}(A_t \vert S_t)$ 并接收一个新奖励 $R_t$ 和一个新状态 $s_{t+1}$。更新 $t = t + 1$ 和 $T = T + 1$

选择动作 $A_t \sim \pi_{\theta’}(A_t \vert S_t)$ 并接收一个新奖励 $R_t$ 和一个新状态 $s_{t+1}$。

更新 $t = t + 1$ 和 $T = T + 1$

初始化保存回报估计的变量

使用 $\mathrm{d}\theta$ 异步更新 $\theta$,并使用 $\mathrm{d}w$ 异步更新 $w$。

A3C 实现了多个智能体训练中的并行化。梯度累积步骤(6.2)可以被视为基于小批量的随机梯度更新的并行化改造:$w$ 或 $\theta$ 的值会沿着每个训练线程各自的方向进行小幅修正。

A2C#

[论文|代码]

A2C 是 A3C 的同步确定性版本;因此它被命名为“A2C”,去掉了第一个“A”(即“异步”)。在 A3C 中,每个智能体独立地与全局参数通信,因此有时特定线程的智能体可能在使用不同版本的策略进行交互,从而导致聚合更新并非最优。为了解决这种不一致性,A2C 中的协调器会等待所有并行执行者完成各自的工作,然后再更新全局参数,并在下一次迭代中让所有并行执行者从相同的策略开始。这种同步梯度更新使训练更具一致性,并可能加快收敛速度。

实验表明,A2C 能够更高效地利用 GPU,在更大批量下表现更好,同时达到与 A3C 相同或更优的性能。

DPG#

[论文|代码]

在上述方法中,策略函数 $\pi(. \vert s)$ 始终被建模为给定当前状态下动作 $\mathcal{A}$ 的概率分布,因此它是随机的。而确定性策略梯度(DPG)则将策略建模为确定性决策:$a = \mu(s)$。这看起来可能有些奇怪——当它输出单一动作时,如何计算动作概率的梯度?让我们逐步分析。

先回顾几个符号以便于讨论:

$\rho_0(s)$:状态的初始分布

$\rho^\mu(s \to s’, k)$:从状态 s 出发,按照策略 $\mu$ 移动 k 步后到达状态 s’ 的访问概率密度。

$\rho^\mu(s’)$:折扣状态分布,定义为 $\rho^\mu(s’) = \int_\mathcal{S} \sum_{k=1}^\infty \gamma^{k-1} \rho_0(s) \rho^\mu(s \to s’, k) ds$。

需要优化的目标函数如下所示:

确定性策略梯度定理:现在来计算梯度!根据链式法则,我们首先求 Q 关于动作 a 的梯度,然后求确定性策略函数 $\mu$ 关于 $\theta$ 的梯度:

我们可以将确定性策略视为随机策略的一种特例,即当概率分布中仅对一个动作存在一个非零极值时的情况。实际上,在 DPG 论文中,作者已经证明,如果随机策略 $\pi_{\mu_\theta, \sigma}$ 通过确定性策略 $\mu_\theta$ 和变异变量 $\sigma$ 进行重参数化,那么当 $\sigma=0$ 时,该随机策略最终等价于确定性情况。与确定性策略相比,我们预期随机策略需要更多样本,因为它需要整合整个状态和动作空间上的数据。

确定性策略梯度定理可以嵌入到常见的策略梯度框架中。

让我们考虑一个同策略 Actor-Critic 算法的例子来展示这一过程。在同策略 Actor-Critic 的每次迭代中,会确定性地执行两个动作 $a = \mu_\theta(s)$,并且策略参数上的 SARSA 更新依赖于我们刚刚计算出的新梯度:

然而,除非环境中存在足够的噪声,否则由于策略的确定性,很难保证充分的探索。我们可以向策略中添加噪声(讽刺的是,这使其变成了非确定性策略!),或者通过遵循一个不同的随机行为策略来收集样本,以离策略的方式进行学习。

例如,在离策略方法中,训练轨迹由随机策略 $\beta(a \vert s)$ 生成,因此状态分布遵循相应的折扣状态密度 $\rho^\beta$:

请注意,由于策略是确定性的,我们只需要 $Q^\mu(s, \mu_\theta(s))$ 而不是 $\sum_a \pi(a \vert s) Q^\pi(s, a)$ 作为给定状态 s 的估计奖励。在采用随机策略的离策略方法中,通常使用重要性采样来纠正行为策略与目标策略之间的不匹配,正如我们之前所描述的那样。然而,由于确定性策略梯度消除了对动作的积分,我们可以避免使用重要性采样。

DDPG#

[论文|代码]

DDPG(Lillicrap 等人,2015),全称深度确定性策略梯度,是一种无模型的离策略演员-评论家算法,它将 DPG 与 DQN 相结合。回顾一下,DQN(深度 Q 网络)通过经验回放和冻结的目标网络来稳定 Q 函数的学习。原始的 DQN 适用于离散空间,而 DDPG 通过演员-评论家框架将其扩展到连续空间,同时学习一个确定性策略。

为了进行更好的探索,通过添加噪声 $\mathcal{N}$ 来构建一个探索策略 $\mu’$:

此外,DDPG 对演员和评论家的参数都进行软更新(“保守策略迭代”),其中 $\tau \ll 1$:$\theta’ \leftarrow \tau \theta + (1 - \tau) \theta’$。通过这种方式,目标网络的值被约束为缓慢变化,这与 DQN 中目标网络在一段时间内保持冻结的设计不同。

论文中一个对机器人技术特别有用的细节是关于如何对低维特征的不同物理单位进行归一化。例如,一个模型被设计为以机器人的位置和速度作为输入来学习策略;这些物理统计量本质上是不同的,甚至同一类型的统计量在不同机器人之间也可能差异很大。批归一化被用来解决这个问题,它通过对一个小批次中所有样本的每个维度进行归一化来实现。

D4PG#

[论文|代码(搜索“github d4pg”你会看到一些结果。)]

分布式分布 DDPG(D4PG)对 DDPG 应用了一系列改进,使其以分布式方式运行。

(1) 分布式评论家:评论家将期望 Q 值估计为一个随机变量 ~ 由 $w$ 参数化的分布 $Z_w$,因此 $Q_w(s, a) = \mathbb{E} Z_w(x, a)$。学习分布参数的损失函数是最小化两个分布之间某种距离度量——即分布式 TD 误差:$L(w) = \mathbb{E}[d(\mathcal{T}{\mu\theta}, Z_{w’}(s, a), Z_w(s, a)]$,其中 $\mathcal{T}{\mu\theta}$ 是贝尔曼算子。

确定性策略梯度更新变为:

(2) N步回报:在计算TD误差时,D4PG计算的是N步TD目标而非单步目标,以便将更多未来步骤的奖励纳入其中。因此新的TD目标为:

(3) 多个分布式并行智能体:D4PG利用K个独立智能体,并行收集经验并将数据存入同一个经验回放缓冲区。

(4) 优先经验回放(PER):最后一项修改是以非均匀概率p_i从大小为R的经验回放缓冲区中进行采样。通过这种方式,样本i被选中的概率为(Rp_i)^(-1),因此重要性权重为(Rp_i)^(-1)。

MADDPG#

[论文|代码]

多智能体DDPG(MADDPG)(Lowe等人,2017)将DDPG扩展至多个智能体仅凭局部信息协作完成任务的场景。从单个智能体的视角来看,由于其他智能体的策略快速更新且未知,环境是非平稳的。MADDPG是一种专门为处理这种动态环境及智能体间交互而重新设计的演员-评论家模型。

该问题可在多智能体版本的MDP(即马尔可夫博弈)中形式化表述。MADDPG针对部分可观测的马尔可夫博弈而提出。假设共有N个智能体,状态集合为S。每个智能体拥有各自的动作集合A_1, ..., A_N,以及观测集合O_1, ..., O_N。状态转移函数涉及所有状态、动作和观测空间:T: S × A_1 × ... × A_N → S。每个智能体的随机策略仅涉及自身状态和动作:π_{θ_i}: O_i × A_i → [0, 1],即给定自身观测条件下动作的概率分布;或确定性策略:μ_{θ_i}: O_i → A_i。

设o = {o_1, ..., o_N},μ = {μ_1, ..., μ_N},策略由θ = {θ_1, ..., θ_N}参数化。

MADDPG 中的评论家为第 i 个智能体学习一个集中式的动作价值函数 $Q^\vec{\mu}_i(\vec{o}, a_1, \dots, a_N)$,其中 $a_1 \in \mathcal{A}_1, \dots, a_N \in \mathcal{A}_N$ 是所有智能体的动作。每个 $Q^\vec{\mu}_i$ 针对 $i=1, \dots, N$ 分别学习,因此多个智能体可以拥有任意的奖励结构,包括竞争场景中的冲突奖励。同时,多个行动者(每个智能体对应一个)各自探索并更新其策略参数 $\theta_i$。

行动者更新:

其中 $\mathcal{D}$ 是用于经验回放的内存缓冲区,包含多个回合的样本 $(\vec{o}, a_1, \dots, a_N, r_1, \dots, r_N, \vec{o}’)$ —— 给定当前观测 $\vec{o}$,智能体执行动作 $a_1, \dots, a_N$ 并获得奖励 $r_1, \dots, r_N$,从而得到新的观测 $\vec{o}’$。

评论家更新:

其中 $\vec{\mu}’$ 是参数经过延迟软更新的目标策略。

如果在评论家更新时策略 $\vec{\mu}$ 未知,我们可以让每个智能体学习并演化出对其他智能体策略的自身近似。使用这些近似策略后,MADDPG 仍然可以高效学习,尽管推断出的策略可能并不准确。

为了缓解环境中竞争或协作智能体之间交互所引发的高方差,MADDPG 提出了另一个要素——策略集成:

为一个智能体训练 K 个策略;

为回合 rollout 随机选择一个策略;

使用这 K 个策略的集成进行梯度更新。

总结来说,MADDPG 在 DDPG 的基础上增加了三个额外要素,使其适应多智能体环境:

集中式评论家 + 分散式行动者;

行动者能够使用其他智能体的估计策略进行学习;

策略集成有助于降低方差。

TRPO#

[论文|代码]

为了提高训练稳定性,我们应避免在单步中使策略变化过大的参数更新。信任区域策略优化(TRPO)(Schulman 等人,2015)通过在每次迭代中对策略更新的规模施加 KL 散度约束来实现这一思想。

考虑离策略强化学习的情况,用于在 rollout 工作节点上收集轨迹的策略 $\beta$ 与我们想要优化的策略 $\pi$ 不同。离策略模型中的目标函数衡量的是状态访问分布和动作上的总优势,而训练数据分布与真实策略状态分布之间的不匹配则通过重要性采样估计器来补偿:

其中 $\theta_\text{old}$ 是更新前的策略参数,因此是已知的;$\rho^{\pi_{\theta_\text{old}}}$ 的定义与上文相同;$\beta(a \vert s)$ 是用于收集轨迹的行为策略。需要注意的是,我们使用的是估计优势 $\hat{A}(.)$ 而非真实优势函数 $A(.)$,因为真实的奖励通常是未知的。

在策略上训练时,理论上用于收集数据的策略与我们想要优化的策略是相同的。然而,当 rollout 工作节点和优化器异步并行运行时,行为策略可能会过时。TRPO 考虑到了这一细微差别:它将行为策略标记为 $\pi_{\theta_\text{old}}(a \vert s)$,因此目标函数变为:

TRPO 旨在最大化目标函数 $J(\theta)$,同时受限于一个信任区域约束,该约束强制新旧策略之间由 KL 散度衡量的距离足够小,保持在参数 δ 范围内:

通过这种方式,当这个硬约束得到满足时,新旧策略就不会偏离太多。尽管如此,TRPO 仍然可以保证策略迭代的单调改进(很巧妙,对吧?)。如果感兴趣,请阅读论文中的证明 :)

PPO#

[论文|代码]

鉴于 TRPO 相对复杂,而我们仍然希望实现类似的约束,近端策略优化(PPO)通过使用裁剪后的替代目标函数来简化它,同时保持相似的性能。

首先,让我们将新旧策略之间的概率比定义为:

那么,TRPO(在策略上)的目标函数变为:

如果不限制 $\theta_\text{old}$ 与 $\theta$ 之间的距离,最大化 $J^\text{TRPO} (\theta)$ 会导致参数更新幅度极大、策略比率过大,从而引发不稳定性。PPO 通过强制 $r(\theta)$ 保持在 1 附近的一个小区间内来施加约束,具体区间为 $[1-\epsilon, 1+\epsilon]$,其中 $\epsilon$ 是一个超参数。

函数 $\text{clip}(r(\theta), 1 - \epsilon, 1 + \epsilon)$ 将比率裁剪至不超过 $1+\epsilon$、不低于 $1-\epsilon$。PPO 的目标函数取原始值与裁剪版本之间的最小值,因此我们失去了为了获得更高奖励而将策略更新推向极端的动机。

当 PPO 应用于策略(Actor)和价值(Critic)函数共享参数的网络架构时,除了裁剪后的奖励项,目标函数还会增加一个价值估计的误差项(红色公式)和一个熵项(蓝色公式),以鼓励充分的探索。

其中 $c_1$ 和 $c_2$ 均为超参数常量。

PPO 已在一组基准任务上进行了测试,并被证明能以简单得多的方式产生出色的结果。

在 Hsu 等人 2020 年的一篇后续论文中,重新审视了 PPO 中的两个常见设计选择,具体是:(1) 用于策略正则化的裁剪概率比率,以及 (2) 通过连续高斯分布或离散 Softmax 分布对策略动作空间进行参数化。他们首先识别出 PPO 的三种失败模式,并针对这两种设计提出了替代方案。

失败模式如下:

在连续动作空间中,当奖励在有界支撑集之外消失时,标准 PPO 会变得不稳定。

在具有稀疏高奖励的离散动作空间中,标准 PPO 常常陷入次优动作。

当初始化附近存在局部最优动作时,策略对初始化非常敏感。

将动作空间离散化或使用 Beta 分布有助于避免与高斯策略相关的失败模式 1 和 3。使用 KL 正则化(与 TRPO 动机相同)作为替代的替代模型有助于解决失败模式 1 和 2。

PPG#

[论文|代码]

策略网络与价值网络之间共享参数有利有弊。它允许策略函数和价值函数相互共享学习到的特征,但可能导致相互竞争的目标之间产生冲突,并且需要同时用相同数据训练两个网络。阶段式策略梯度(PPG;Cobbe 等人,2020)对传统的同策略演员-评论家策略梯度算法(确切地说是 PPO)进行了改进,为策略函数和价值函数设置了独立的训练阶段。在两个交替的阶段中:

策略阶段:通过优化 PPO 目标函数 $L^\text{CLIP} (\theta)$ 来更新策略网络;

辅助阶段:在优化辅助目标的同时,还优化一个行为克隆损失。在论文中,价值函数误差是唯一的辅助目标,但该目标可以非常通用,并包含任何其他额外的辅助损失。

其中 $\beta_\text{clone}$ 是一个超参数,用于控制在优化辅助目标时,我们希望策略与其原始行为保持多大程度的不偏离。

其中

$N_\pi$ 是策略阶段中策略更新的迭代次数。请注意,在单个辅助阶段内,策略阶段会执行多次迭代更新。

$E_\pi$ 和 $E_V$ 分别控制策略函数和价值函数的样本复用(即对回放缓冲区中的数据执行训练轮次的次数)。请注意,这发生在策略阶段内部,因此 $E_V$ 影响的是真实价值函数的学习,而非辅助价值函数。

$E_\text{aux}$ 定义了辅助阶段中的样本复用。在 PPG 中,价值函数优化可以容忍更高程度的样本复用;例如,在论文的实验中,$E_\text{aux} = 6$,而 $E_\pi = E_V = 1$。

来源:Lilian Weng:Lil'Log(RSS) · lilianweng.github.io