176 lines
8.2 KiB
Markdown
176 lines
8.2 KiB
Markdown
---
|
||
title: 03-AC-A2C
|
||
draft: false
|
||
tags:
|
||
- AC
|
||
- A2C
|
||
- Actor-Critic
|
||
- 强化学习
|
||
- 深度强化学习
|
||
---
|
||
## 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$ 可以有多种选择:
|
||
|
||
1. $\Psi_t = \sum r_t$: 轨迹总奖励(REINFORCE,方差极大)。
|
||
|
||
2. $\Psi_t = Q^\pi(s, a)$: 动作价值函数。
|
||
|
||
3. $\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$ 步回报来计算优势:
|
||
|
||
1. **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})$
|
||
|
||
2. **优势估计:** $\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$)。
|
||
|
||
1. **策略损失 (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$ 时,降低该动作概率。
|
||
|
||
2. **价值损失 (Value Loss):**
|
||
|
||
$$L_{value} = \mathbb{E}_{s_t} [ (G_{t:t+n} - V_\phi(s_t))^2 ]$$
|
||
|
||
**物理意义:** 使估计的价值函数逼近实际的 n 步回报,减少价值估计的偏差。
|
||
|
||
3. **熵正则项 (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 的”同步”体现在梯度的累积上:
|
||
|
||
1. **Worker 采样:** $N$ 个线程(Worker)各自在环境里跑 $n$ 步,得到样本 $\{(s_i, a_i, r_i, s'_{i})\}_{i=1 \dots n \times N}$。
|
||
|
||
2. **计算梯度:**
|
||
- 每个 Worker 计算自己的策略梯度 $g_{\theta, i}$ 和价值梯度 $g_{\phi, i}$。
|
||
|
||
3. **聚合更新:**
|
||
- 计算平均梯度:$\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$。
|
||
|
||
4. **分发权重:** 更新后的 $\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` 函数,就解决了困扰强化学习多年的“训练崩溃”难题。 |