8.2 KiB
title, draft, tags
| title | draft | tags | |||||
|---|---|---|---|---|---|---|---|
| 03-AC-A2C | false |
|
1. 理论源头:策略梯度定理 (Policy Gradient Theorem)
在 Policy-based 方法中,我们参数化策略 $\pi_\theta(a|s)$。我们的目标是最大化累积回报的期望 $J(\theta) = \mathbb{E}{\pi\theta}[G_t]$。
根据策略梯度定理,其梯度为:
\nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} \left[ \sum_{t=0}^T \nabla_\theta \log \pi_\theta(a_t|s_t) \Psi_t \right]
其中 \Psi_t 可以有多种选择:
-
\Psi_t = \sum r_t: 轨迹总奖励(REINFORCE,方差极大)。 -
\Psi_t = Q^\pi(s, a): 动作价值函数。 -
\Psi_t = A(s, a) = Q^\pi(s, a) - V^\pi(s): 优势函数 (Advantage Function)。
直觉理解: 优势函数衡量"这个动作比平均好多少"。如果 $A(s,a) > 0$,说明这个动作比该状态下的平均动作更好,应该增加其概率;如果 $A(s,a) < 0$,说明动作低于平均水平,应该降低概率。
2. Actor-Critic (AC) 的数学架构
AC 架构通过引入一个参数化的 Critic V_\phi(s) 来估计 $\Psi_t$。
2.1 结构拆解:Actor 与 Critic 的分工
| 组件 | 网络 | 输入 | 输出 | 更新目标 |
|---|---|---|---|---|
| Actor (策略网络) | \pi_\theta(a\|s) |
状态 s |
动作 a 的概率分布 \pi_\theta(a\|s) |
增加高优势动作的概率,降低低优势动作的概率 |
| Critic (价值网络) | V_\phi(s) |
状态 s |
标量价值 V_\phi(s) \approx \mathbb{E}[G_t\|s_t=s] |
最小化 TD 误差,精确估计状态价值 |
直觉理解:
- Actor 如同一个 运动员,根据裁判(Critic)的评分来调整自己的动作技术。评分高就多练习这个动作,评分低就少做。
- Critic 如同一个 教练,负责客观评价运动员当前状态的好坏。它不直接决定动作,只提供"这个状态值多少分"的估计。
两者的协作关系: Actor 的梯度方向由 Critic 给出的优势值决定;Critic 的更新依赖 Actor 采集的样本。两者的优化目标相互耦合,形成"评价-决策"的闭环。
2.2 更新公式推导
在最基础的 AC 中,我们利用 TD 误差 (Temporal Difference error) 来更新。
TD 误差 \delta_t 定义为:
\delta_t = r_{t+1} + \gamma V_\phi(s_{t+1}) - V_\phi(s_t)
其中 \delta_t 的物理意义是"实际奖励与期望的偏离程度":若 $\delta_t > 0$,说明该过渡带来了超出预期的价值更新。
数学上可以证明,\delta_t 是 A(s_t, a_t) = Q(s_t, a_t) - V(s_t) 的无偏估计:
\mathbb{E}_{s_{t+1} \sim P(\cdot|s_t, a_t)}[\delta_t | s_t, a_t] = \mathbb{E}[r_{t+1} + \gamma V(s_{t+1}) - V(s_t) | s_t, a_t] = Q(s_t, a_t) - V(s_t) = A(s_t, a_t)
这意味着 TD 误差是优势函数的无偏采样,我们可以直接用 \delta_t 作为优势函数的估计来更新 Actor,而无需知道完整的 Q 函数或 V 函数。
Actor 更新 (梯度上升):
\theta \leftarrow \theta + \alpha_\theta \nabla_\theta \log \pi_\theta(a_t|s_t) \delta_t
Critic 更新 (梯度下降):
其目标是最小化均方误差 (MSE):
L(\phi) = \mathbb{E} [ (r_{t+1} + \gamma V_\phi(s_{t+1}) - V_\phi(s_t))^2 ]
\phi \leftarrow \phi - \alpha_\phi \nabla_\phi L(\phi)
3. A2C (Advantage Actor-Critic) 的严谨化
A2C 在 AC 的基础上进行了两项重大数学改进:优势函数的规范化和熵正则化。
3.1 优势函数 A(s, a) 的多步推导 (n-step Return)
为了平衡偏差 (Bias) 和方差 (Variance),A2C 经常使用 n 步回报来计算优势:
-
n-step 回报:
G_{t:t+n} = r_{t+1} + \gamma r_{t+2} + \dots + \gamma^{n-1}r_{t+n} + \gamma^n V_\phi(s_{t+n}) -
优势估计:
\hat{A}(s_t, a_t) = G_{t:t+n} - V_\phi(s_t)
3.2 完整目标函数 (Objective Function)
A2C 的总损失函数通常由三部分组成:
L_{total} = L_{policy} + c_1 L_{value} - c_2 L_{entropy}
其中超参数 c_1, c_2 用于平衡三个目标的权重(通常 $c_1=0.5, c_2=0.01$)。
-
策略损失 (Policy Loss):
L_{policy} = -\mathbb{E}_{s_t, a_t} [ \log \pi_\theta(a_t|s_t) \hat{A}(s_t, a_t) ]物理意义: 这是策略梯度的负号版本。当 $\hat{A} > 0$(好动作)时,
\log \pi_\theta(a_t|s_t)增大,即提高该动作的概率;当\hat{A} < 0时,降低该动作概率。 -
价值损失 (Value Loss):
L_{value} = \mathbb{E}_{s_t} [ (G_{t:t+n} - V_\phi(s_t))^2 ]物理意义: 使估计的价值函数逼近实际的 n 步回报,减少价值估计的偏差。
-
熵正则项 (Entropy Regularization):
L_{entropy} = \mathbb{E}_{s_t} [ -\sum_a \pi_\theta(a|s_t) \log \pi_\theta(a|s_t) ]- 数学意义: 熵越大表示策略越“随机”。在
L_{total}中减去熵(或加上 $-H$),相当于鼓励 Actor 保持一定的随机性,防止模型太快收敛到某个次优的确定性动作上。
- 数学意义: 熵越大表示策略越“随机”。在
4. 训练流程细节:同步 vs 异步
4.1 A2C:同步 Advantage Actor-Critic
A2C 的”同步”体现在梯度的累积上:
-
Worker 采样:
N个线程(Worker)各自在环境里跑n步,得到样本 ${(s_i, a_i, r_i, s'{i})}{i=1 \dots n \times N}$。 -
计算梯度:
- 每个 Worker 计算自己的策略梯度
g_{\theta, i}和价值梯度 $g_{\phi, i}$。
- 每个 Worker 计算自己的策略梯度
-
聚合更新:
- 计算平均梯度:$\bar{g}\theta = \frac{1}{N} \sum{i=1}^N g_{\theta, i}$(以及 $\bar{g}_\phi$)。
- 主网络执行一次参数更新:$\theta \leftarrow \theta + \eta \bar{g}\theta$,$\phi \leftarrow \phi - \eta \bar{g}\phi$。
-
分发权重: 更新后的
\theta, \phi同步给所有 Worker,等待所有 Worker 到达同步点后开始下一轮。
4.2 A3C:异步 Advantage Actor-Critic
A3C 与 A2C 的核心区别在于异步更新:
| 特性 | A2C(同步) | A3C(异步) |
|---|---|---|
| 梯度更新 | 等待所有 Worker 完成采样后,聚合梯度,统一更新 | 每个 Worker 独立更新主网络,无需等待 |
| 通讯开销 | 高(需等待同步) | 低(独立更新) |
| 数据吞吐 | 受最慢 Worker 限制 | 利用多线程并行,环境交互与计算重叠 |
| 收敛稳定性 | 更高(批量更新更稳定) | 稍低(异步更新可能带来梯度噪声) |
直觉理解: A3C 就像一支 独立训练、偶尔交流 的运动员团队——每个人自己练自己的,定期把训练成果(梯度)汇报给教练(主网络),教练整合后把新策略分发给所有人。而 A2C 是所有人同时训练、然后对答案的方式。
为什么 A3C 反而更常用? 虽然 A2C 更新更稳定,但 A3C 的异步机制让环境交互(慢速操作)和梯度计算(快速操作)可以重叠进行,实际训练速度往往更快。
5. A2C 面临的数学挑战与 PPO 的引子
5.1 采样效率与 Off-policy 缺失
A2C 是一种 On-policy 算法。这意味着一旦参数 \theta 更新了,之前采样的所有数据就“失效”了,不能再用于训练。这导致 A2C 对数据的消耗量极大。
5.2 步长敏感度 (The Step Size Problem)
在 L_{policy} 中,梯度的量级受 \hat{A}(s, a) 影响。如果某次采样的优势函数极大,会导致 \nabla \theta 剧烈跳变。这种跳变可能导致策略分布 \pi_\theta 发生根本性改变(例如从原来的平滑分布直接变成倾向于某一个极端动作),从而使智能体进入一个“无法回头”的糟糕状态空间。
5.3 开启 PPO:约束下的优化
为了解决 A2C 步长难调的问题,PPO (Proximal Policy Optimization) 引入了新的数学工具:
-
重要性采样 (Importance Sampling): 允许利用旧策略采集的数据来更新新策略。
-
KL 散度限制/剪切 (Clipped Objective): 在数学上强制要求新策略
\pi_{\theta_{new}}和旧策略\pi_{\theta_{old}}的概率比值在[0.8, 1.2]之间。
下章预告: PPO 如何利用一个简单的
clip函数,就解决了困扰强化学习多年的“训练崩溃”难题。