理解策略梯度算法

引言

策略梯度(Policy Gradient)是解决强化学习问题的一种方法。如果你对强化学习领域还不太了解,建议先阅读“A (Long) Peek into Reinforcement Learning » Key Concepts”一文,了解问题定义和基本概念。

符号说明

为了帮助大家更好地理解文中的公式,以下是一些常用符号的解释:

符号含义
(s \in \mathcal{S})状态
(a \in \mathcal{A})动作
(r \in \mathcal{R})奖励
(S_t, A_t, R_t)在时间步 (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) 转移到下一个状态 (s') 并获得奖励 (r) 的概率
(\pi(a \vert s))随机策略(代理行为策略),(\pi_\theta(.)) 是参数化的策略
(\mu(s))确定性策略;我们也可以用 (\pi(s)),但用不同的字母可以更好地区分随机策略和确定性策略
(V(s))状态值函数,衡量状态 (s) 的期望回报;(V_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(.)) 是参数化的动作值函数
(Q^\pi(s, a))跟随策略 (\pi) 时状态和动作对 ((s, a)) 的值,(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) 以获得最佳奖励。

奖励函数定义为:

[ J(\theta) = \sum_{s \in \mathcal{S}} d^\pi(s) V^\pi(s) = \sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} \pi_\theta(a \vert s) Q^\pi(s, a) ]

其中,(d^\pi(s)) 是 (\pi_\theta) 的马尔可夫链的平稳分布(跟随策略 (\pi) 时的状态分布)。

通过梯度上升,我们可以沿着梯度 (\nabla_\theta J(\theta)) 的方向调整 (\theta),以找到能产生最高回报的最佳 (\theta)。

策略梯度定理

计算 (\nabla_\theta J(\theta)) 比较复杂,因为它既涉及动作选择(直接由 (\pi_\theta) 决定)又涉及状态分布(间接由 (\pi_\theta) 决定)。由于环境通常是未知的,因此难以估计策略更新对状态分布的影响。

幸运的是,策略梯度定理提供了一种简化梯度计算的优雅方法,不需要涉及状态分布 (d^\pi(.)) 的导数:

[
\begin{aligned}
\nabla_\theta J(\theta)
&= \nabla_\theta \sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} Q^\pi(s, a) \pi_\theta(a \vert s) \
&\propto \sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} Q^\pi(s, a) \nabla_\theta \pi_\theta(a \vert s)
\end{aligned}
]

策略梯度定理的证明

这一部分内容较为密集,我们将通过推导来证明策略梯度定理的正确性。

首先,从状态值函数的导数开始:

[
\begin{aligned}
& \nabla_\theta V^\pi(s) \
=& \nabla_\theta \left(\sum_{a \in \mathcal{A}} \pi_\theta(a \vert s) Q^\pi(s, a) \right) \
=& \sum_{a \in \mathcal{A}} \left( \nabla_\theta \pi_\theta(a \vert s) Q^\pi(s, a) + \pi_\theta(a \vert s) \color{red}{\nabla_\theta Q^\pi(s, a)} \right) \quad \text{(乘积法则)} \
=& \sum_{a \in \mathcal{A}} \left( \nabla_\theta \pi_\theta(a \vert s) Q^\pi(s, a) + \pi_\theta(a \vert s) \color{red}{\nabla_\theta \sum_{s', r} P(s',r \vert s,a)(r + V^\pi(s'))} \right) \quad \text{(扩展 (Q^\pi) 以包含未来状态值)} \
=& \sum_{a \in \mathcal{A}} \left( \nabla_\theta \pi_\theta(a \vert s) Q^\pi(s, a) + \pi_\theta(a \vert s) \color{red}{\sum_{s', r} P(s',r \vert s,a) \nabla_\theta V^\pi(s')} \right) \quad \text{(使用 (P(s',r \vert s,a)))}
\end{aligned}
]

可以看到,导数中的一项涉及 (V^\pi(s')) 的导数,而这又会引入更多的状态和动作。然而,通过数学推导和一些运算技巧,我们可以逐步简化并得出最终的策略梯度公式。

策略梯度算法

接下来,我们介绍几种常见的策略梯度算法:

1. REINFORCE

REINFORCE 是一种基本的策略梯度方法,它通过采样轨迹来估计梯度,并利用这些估计值来更新策略参数。

2. Actor-Critic

Actor-Critic 方法结合了策略评估(critic)和策略改进(actor),使得算法在估计策略梯度时更加高效和稳定。

3. Off-Policy Policy Gradient

这种方法允许我们使用行为策略(behavior policy)来收集数据,并使用目标策略(target policy)来进行学习,从而提高数据利用率。

4. A3C & A2C

A3C(Asynchronous Advantage Actor-Critic)和 A2C(Advantage Actor-Critic)是 Actor-Critic 方法的改进版本,通过异步更新和同步更新来提高算法的效率和性能。

5. DDPG & TD3

DDPG(Deep Deterministic Policy Gradient)和 TD3(Twin Delayed Deep Deterministic Policy Gradient)适用于连续动作空间,利用深度神经网络来近似策略和值函数。

6. PPO & TRPO

PPO(Proximal Policy Optimization)和 TRPO(Trust Region Policy Optimization)通过引入信赖域和裁剪机制来确保策略更新的稳定性和有效性。

7. SAC

SAC(Soft Actor-Critic)引入了熵正则化项,使策略在探索和利用之间取得平衡。SAC 还可以自动调整温度参数,以优化探索过程。

8. 其他算法

除了上述几种常见的策略梯度算法,还有一些其他的变种和改进方法,如 SVPG(Stein Variational Policy Gradient)、IMPALA、DPG(Deterministic Policy Gradient)及其多智能体版本 MADDPG 等。

策略梯度算法的应用

策略梯度算法在强化学习的各个领域中有广泛的应用,包括但不限于以下几个方面:

  1. 游戏和娱乐:策略梯度算法被广泛应用于训练游戏 AI,例如 OpenAI 的 Dota 2 机器人和 DeepMind 的 AlphaGo。
  2. 机器人控制:用于复杂的机器人控制任务,如机械手臂的操作和无人机的导航。
  3. 自动驾驶:帮助自动驾驶系统在复杂的道路环境中进行决策和规划。
  4. 金融交易:用于优化交易策略,提高投资组合的收益率。
  5. 医疗诊断:辅助医疗决策,优化治疗方案。

结论

策略梯度算法提供了一种直接优化策略的方法,使得强化学习在解决复杂决策问题时更加高效和灵活。尽管计算过程相对复杂,但通过合理的算法设计和优化,可以在实际应用中取得显著的效果。

如果你对策略梯度算法感兴趣,不妨深入研究本文提到的各种算法和数学推导。通过不断实践和探索,你将能够掌握这一强大的工具,并将其应用于各种实际问题中。

参考文献

  • Sutton, R. S., & Barto, A. G. (2018). Reinforcement Learning: An Introduction. MIT Press.
  • Lilian Weng. (2018). Policy Gradient Algorithms. Retrieved from Lil'Log

希望这篇文章能帮助你更好地理解策略梯度算法及其应用。如果有任何问题或建议,欢迎在评论区留言讨论。


0 0 投票数
Article Rating
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x