4. Actor-Critic架构
在强化学习从表格型方法走向深度函数逼近的过程中,Actor-Critic(AC)架构成为了连接策略梯度方法与价值函数方法的桥梁。无论是PPO还是SAC,其底层都依赖于一个精心设计的Actor网络(策略网络)与Critic网络(价值网络)的协同工作。本章将深入剖析这两个网络的设计原则、优势函数估计的核心技术——广义优势估计(GAE),以及贯穿始终的方差与偏差权衡问题。理解这些内容,是掌握现代深度强化学习算法、并能在复杂环境中调试出稳定高效策略的前提。
上图展示了Actor-Critic架构的核心数据流。环境产生状态与奖励,经验池负责存储交互轨迹。Critic网络通过TD学习评估状态价值,而Actor网络则利用优势函数(由GAE计算得出)更新策略。这种“评价-改进”的循环结构,使得算法既能像价值方法一样利用低方差的目标,又能像策略方法一样在连续动作空间中直接优化策略。
4.1 Actor网络与Critic网络的设计原则
4.1.1 核心原理:功能分离与协同
Actor网络(策略网络)负责将状态映射为动作的概率分布(离散动作)或高斯分布的均值与标准差(连续动作)。Critic网络(价值网络)则负责评估当前状态(或状态-动作对)的期望回报。两者共享同一个环境交互数据,但优化目标截然不同:Actor的目标是最大化期望累积回报,而Critic的目标是最小化其预测值与实际回报之间的TD误差。
在设计上,两个网络可以共享底层的特征提取层(例如卷积层或大容量的MLP),但在输出层必须分离。共享层能够提取通用的状态表征,减少参数量并加速训练;但若任务复杂,共享层可能导致梯度冲突,此时应使用独立的网络。对于SAC算法,通常需要两个Critic网络(即Twin-Q)来缓解价值高估问题,而Actor则输出一个经过tanh压缩的Squashed Gaussian分布,确保动作边界。
4.1.2 判断方法与操作流程:网络结构选择
选择网络结构时,应遵循以下流程:
- 状态空间维度分析:高维图像输入优先使用CNN共享层;低维向量输入使用MLP即可。
- 动作空间类型判断:离散动作使用Softmax输出层;连续动作使用Gaussian分布(均值+log_std)。
- 价值函数类型选择:若动作空间小,使用Q函数(状态-动作对输入);若动作空间大或连续,使用V函数(仅状态输入)更高效。
- 网络容量设定:建议从256×256的MLP开始,根据训练稳定性调整宽度与深度。过大的网络容易过拟合噪声,过小的网络则欠拟合。
| 设计维度 | Actor网络 | Critic网络 |
|---|---|---|
| 输入 | 状态 s | 状态 s(或 s+a) |
| 输出 | 动作分布参数(μ, σ)或概率 | 标量价值 V(s) 或 Q(s,a) |
| 激活函数 | 输出层:tanh(连续动作)/ Softmax(离散) | 输出层:线性(无激活) |
| 优化目标 | 最大化优势函数 A_t | 最小化 MSE( TD误差 ) |
| 更新频率 | 通常滞后于Critic(如PPO中每轮更新多次) | 每步或每批次更新 |
| 目标网络 | PPO中无;SAC/DDPG中有目标策略网络 | 通常有目标网络(软更新或硬更新) |
4.1.3 案例拆解:连续控制中的网络设计
以MuJoCo的HalfCheetah环境为例,状态维度为17维,动作维度为6维(关节力矩)。我们设计Actor网络为两层MLP(256, 256),输出层为6维均值向量和6维log_std向量。Critic网络采用同样的MLP结构,但输出为1维标量。在训练初期,我们发现Critic的损失下降缓慢,且Actor的策略熵迅速坍缩。分析后发现,log_std的初始值设为0(即标准差为1)过大,导致探索噪声过高。将log_std初始化为-1.5(标准差约0.22)后,训练稳定性显著提升。此外,为Critic添加了LayerNorm层,减少了梯度爆炸的风险。
4.2 优势函数估计:GAE的数学原理与实现
4.2.1 核心原理:从TD误差到广义优势
优势函数 A(s,a) = Q(s,a) - V(s) 衡量了在状态s下采取动作a相对于平均水平的优劣。直接估计Q函数往往方差较大,而仅使用TD误差 δ = r + γV(s') - V(s) 虽然偏差小,但方差高。GAE通过引入参数λ,在偏差与方差之间进行平滑插值。其定义为:
A_t^GAE = Σ_{l=0}^{∞} (γλ)^l δ_{t+l}
其中 δ_t = r_t + γV(s_{t+1}) - V(s_t)
当λ=0时,GAE退化为单步TD误差,偏差大但方差小;当λ=1时,GAE等价于蒙特卡洛回报减去基线,偏差小但方差极大。λ的引入使得我们可以利用多步回报的累积信息,同时通过指数衰减控制远期的噪声影响。
4.2.2 操作流程:GAE的代码实现步骤
- 采集一条完整轨迹(或一个batch的片段),记录每一步的 (s_t, a_t, r_t, done_t)。
- 使用当前Critic网络计算每个状态的 V(s_t) 和 V(s_{t+1})(注意终端状态V=0)。
- 计算TD误差序列 δ_t = r_t + γ * V(s_{t+1}) * (1 - done_t) - V(s_t)。
- 从轨迹末尾向前递推计算GAE:
advantage = 0; gae_list = []
for t reversed(range(T)):
advantage = δ_t + γ * λ * advantage * (1 - done_t)
gae_list.append(advantage) - 将GAE值归一化(减去均值除以标准差),以稳定Actor的更新。
4.2.3 案例拆解:λ参数对训练的影响
在一个稀疏奖励的导航任务中,我们对比了λ=0.5、λ=0.95和λ=0.99三种设置。λ=0.5时,算法收敛速度快但最终策略性能较差,因为短视的估计忽略了远期奖励;λ=0.99时,训练初期方差极大,损失曲线剧烈震荡,但最终收敛到更优策略;λ=0.95在两者间取得了最佳平衡。这验证了GAE的核心思想:在奖励稀疏的环境中,需要更大的λ来传播远期信息;在奖励密集且噪声大的环境中,较小的λ有助于稳定训练。
4.3 方差与偏差权衡:诊断与调优策略
4.3.1 核心原理:权衡的本质
强化学习中的方差(Variance)指梯度估计的波动程度,高方差导致更新方向不稳定,训练曲线剧烈震荡;偏差(Bias)指估计值与真实值之间的系统性偏离,高偏差导致策略收敛到次优解。Actor-Critic架构中,方差主要来源于回报的随机性和Critic估计的不准确,偏差主要来源于价值函数的近似误差和策略的表示限制。
4.3.2 判断方法:识别训练中的失衡信号
- 高方差信号:损失曲线剧烈震荡、策略熵突然骤降、同一超参数多次运行结果差异巨大。
- 高偏差信号:训练稳定但回报长期停滞、Critic损失持续偏高且不下降、策略收敛到明显次优的行为。
- 诊断工具:绘制优势函数的分布直方图(若尖峰且宽尾,则方差大);监控Critic的预测值与实际回报的相关系数(相关系数低则偏差大)。
4.3.3 调优策略与实战对比
| 问题表现 | 调整手段 | 作用机制 |
|---|---|---|
| 梯度方差过大 | 增大batch size;降低学习率;使用GAE λ=0.9~0.95 | 增加样本平均效应,平滑梯度 |
| 价值估计偏差大 | 增加Critic网络容量;使用Twin-Q(SAC);增加训练步数 | 提升价值函数拟合精度 |
| 策略更新过激 | PPO中降低clip比例(ε=0.1~0.2);SAC中降低目标熵 | 限制策略单次更新幅度 |
| 探索不足 | 提高熵系数;增加动作噪声 | 增加策略的随机性 |
4.3.4 案例复盘:PPO训练中的方差爆炸
在一次机械臂抓取任务中,PPO算法在前10万步表现良好,随后回报曲线突然崩溃。排查发现:Critic网络的损失在崩溃前急剧上升,且优势函数的值超过10(正常范围应为[-2,2])。进一步分析,由于奖励函数中包含了稀疏的抓取成功奖励(+100),导致TD误差出现极端值。我们采取了以下措施:1)将奖励进行clip(限制在[-10,10]);2)在GAE计算前对TD误差进行Z-score标准化;3)将λ从0.95调低至0.9。调整后,训练恢复稳定,最终成功率从62%提升至81%。
综上所述,Actor-Critic架构的设计精髓在于:通过Critic提供低偏差的价值引导,通过GAE灵活控制方差,通过Actor实现连续动作的优化。掌握网络结构的选择、GAE的精确实现以及方差偏差的动态平衡,是构建高效强化学习系统的关键能力。在实际工程中,没有一劳永逸的超参数,只有基于数据驱动的持续诊断与调整。