深度强化学习中的Actor-Critic方法原理与实现详解
1. 问题描述
Actor-Critic方法结合了策略梯度(Policy Gradient)和值函数逼近(Value Function Approximation)的优点,是深度强化学习中的核心算法。它通过两个组件协同工作:Actor(执行者)负责根据当前策略选择动作,Critic(评判者)负责评估动作的价值。核心挑战在于如何让这两个组件高效交互并稳定学习。
2. 核心概念拆解
- 策略梯度方法(如REINFORCE):直接优化策略参数,但依赖蒙特卡洛采样,方差大、学习慢。
- 值函数方法(如Q-learning):学习价值函数间接优化策略,但处理连续动作空间困难。
- Actor-Critic的融合思路:用Critic的价值估计(低方差)替代REINFORCE中的蒙特卡洛回报,指导Actor的策略更新。
3. Actor-Critic框架的工作流程
-
步骤1:环境交互
Agent在状态 \(s_t\) 下,Actor根据当前策略 \(\pi_\theta(a|s_t)\) 选择动作 \(a_t\),执行后进入状态 \(s_{t+1}\),获得奖励 \(r_t\)。 -
步骤2:Critic评估
Critic(通常为价值网络 \(V_\phi(s)\))计算状态价值:- 当前状态价值: \(V_\phi(s_t)\)
- 下一状态价值: \(V_\phi(s_{t+1})\)
进而计算优势函数估计(如TD误差):
\[ \delta_t = r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t) \]
其中 $\gamma$ 为折扣因子,$\delta_t$ 衡量动作 $a_t$ 相对于平均水平的优劣。
- 步骤3:Actor更新
用Critic提供的 \(\delta_t\) 更新策略参数 \(\theta\):
\[ \theta \leftarrow \theta + \alpha \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot \delta_t \]
$\nabla_\theta \log \pi_\theta(a_t|s_t)$ 为策略梯度方向,$\delta_t$ 作为缩放因子:若 $\delta_t>0$ 增强该动作概率,反之减弱。
- 步骤4:Critic更新
通过最小化时序差分误差优化价值网络参数 \(\phi\):
\[ \phi \leftarrow \phi - \beta \nabla_\phi \delta_t^2 \]
使 $V_\phi(s)$ 更准确预测长期回报。
4. 关键改进与稳定化技巧
- 基线(Baseline)减少方差:
优势函数 \(A(s,a) = Q(s,a) - V(s)\) 中,\(V(s)\) 作为基线,保留动作间相对差异的同时降低方差。 - 目标网络(Target Networks):
类似DQN,使用独立的目标价值网络 \(V_{\phi'}\) 计算 \(s_{t+1}\) 的价值,避免价值估计过高震荡。 - 并行多环境交互:
同时从多个环境中采集数据,提高样本效率并减少相关性。
5. 经典算法实例:A2C(Advantage Actor-Critic)
- 直接使用优势函数 \(A(s,a) \approx \delta_t\) 更新Actor。
- 同步并行处理多个worker的数据,稳定训练。
6. 总结与扩展
Actor-Critic通过分工协作平衡了探索(Actor)与评估(Critic),但其稳定性依赖超参数(如学习率 \(\alpha,\beta\))。后续算法如A3C(异步并行)、PPO(裁剪策略更新)、SAC(最大熵优化)在此基础上进一步提升了鲁棒性和效率。