--- 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` 函数,就解决了困扰强化学习多年的“训练崩溃”难题。