深度强化学习中的Soft Actor-Critic (SAC) 算法原理与实现细节
1. 算法描述
Soft Actor-Critic(SAC)是一种基于最大熵强化学习(Maximum Entropy Reinforcement Learning)的无模型(model-free)深度强化学习算法,适用于连续动作空间的控制问题。SAC的核心思想是在优化累积奖励的同时,最大化策略的熵(entropy),从而鼓励探索、提高鲁棒性,并避免策略过早收敛到局部最优。它结合了Actor-Critic框架、离策略(off-policy)训练和随机策略优化,是目前连续控制任务中性能最稳定的算法之一。
2. 核心概念铺垫
在深入SAC之前,需要理解几个关键概念:
- 最大熵目标:
传统强化学习的目标是最大化累积奖励 \(\sum_t r(s_t, a_t)\)。SAC在此基础上增加策略熵项,目标变为:
\[ J(\pi) = \sum_{t} \mathbb{E}_{(s_t, a_t) \sim \rho_\pi} \left[ r(s_t, a_t) + \alpha \mathcal{H}(\pi(\cdot|s_t)) \right] \]
其中 \(\alpha > 0\) 是温度参数,控制熵的重要程度;\(\mathcal{H}(\pi)\) 是策略的熵,衡量动作的随机性。
-
随机策略:
SAC输出动作的概率分布(如高斯分布),训练时从分布中采样动作,测试时可直接取均值以提高稳定性。 -
离策略训练:
SAC使用经验回放池(replay buffer)存储历史经验,允许重复利用数据,提升样本效率。
3. SAC的算法组件与训练过程
SAC包含五个神经网络:
- Actor(策略网络):输入状态 \(s\),输出动作分布参数(如高斯分布的均值和标准差)。
- 两个Critic(Q网络):输入状态 \(s\) 和动作 \(a\),分别估计Q值(双Q网络用于减少过高估计)。
- 两个Target Critic网络:对应Critic的滞后更新版本,用于稳定训练。
- 可训练的温度参数 \(\alpha\):自动调节熵权重。
步骤1:策略(Actor)更新
Actor的目标是最大化期望Q值加上熵正则项:
\[J_\pi(\phi) = \mathbb{E}_{s_t \sim \mathcal{D}} \left[ \mathbb{E}_{a_t \sim \pi_\phi} \left[ \alpha \log \pi_\phi(a_t|s_t) - Q_\theta(s_t, a_t) \right] \right] \]
其中 \(\mathcal{D}\) 是经验回放池。实际实现时,通过重参数化技巧(reparameterization trick)采样动作:
\[a_t = f_\phi(s_t, \epsilon_t), \quad \epsilon_t \sim \mathcal{N}(0,1) \]
这样梯度可以直接通过Actor网络反向传播。
步骤2:Critic(Q函数)更新
Critic的目标是最小化时序差分(TD)误差。对于每个Critic网络 \(Q_{\theta_i}\)(\(i=1,2\)),损失函数为:
\[L(\theta_i) = \mathbb{E}_{(s_t, a_t, r_t, s_{t+1}) \sim \mathcal{D}} \left[ \left( Q_{\theta_i}(s_t, a_t) - y_t \right)^2 \right] \]
其中目标值 \(y_t\) 为:
\[y_t = r_t + \gamma \left( \min_{j=1,2} Q_{\bar{\theta}_j}(s_{t+1}, \tilde{a}_{t+1}) - \alpha \log \pi_\phi(\tilde{a}_{t+1}|s_{t+1}) \right) \]
- \(\tilde{a}_{t+1}\) 是从当前策略 \(\pi_\phi\) 中采样得到的新动作。
- \(\bar{\theta}_j\) 是Target Critic网络的参数(通过软更新缓慢跟踪Critic网络)。
- 取两个Q值的最小值(clipped double-Q)可减少过高估计偏差。
步骤3:温度参数 \(\alpha\) 的自动调节
熵权重 \(\alpha\) 可手动设定,但SAC通常将其设为可训练参数,以动态平衡奖励与熵。优化目标为:
\[J(\alpha) = \mathbb{E}_{a_t \sim \pi_t} \left[ -\alpha \log \pi_t(a_t|s_t) - \alpha \bar{\mathcal{H}} \right] \]
其中 \(\bar{\mathcal{H}}\) 是目标熵(通常设为 \(-\dim(\mathcal{A})\) ,即动作维度的负数)。通过梯度下降更新 \(\alpha\),使得策略熵接近目标熵。
步骤4:目标网络软更新
为稳定训练,Target Critic参数通过指数移动平均更新:
\[\bar{\theta}_i \leftarrow \tau \theta_i + (1-\tau) \bar{\theta}_i, \quad i=1,2 \]
其中 \(\tau \ll 1\)(如0.005)。
4. 训练流程总结
- 收集经验:使用当前策略与环境交互,将转移 \((s_t, a_t, r_t, s_{t+1})\) 存入经验回放池。
- 采样批次:从回放池随机采样一批数据。
- 更新Critic:计算目标Q值,最小化Critic的均方误差。
- 更新Actor:通过重参数化采样动作,最小化策略损失 \(J_\pi(\phi)\)。
- 更新温度 \(\alpha\):调节熵权重使策略熵接近目标熵。
- 软更新目标网络:缓慢更新Target Critic参数。
5. 关键优势与注意事项
- 探索能力强:熵正则化鼓励策略随机性,避免过早收敛。
- 稳定性高:双Q网络、目标网络和策略梯度重参数化共同抑制训练波动。
- 超参数敏感:温度 \(\alpha\) 和目标熵需根据任务调整(自动调节可缓解此问题)。
- 适用场景:主要针对连续动作空间(如机器人控制、自动驾驶)。
通过以上步骤,SAC在保持高样本效率的同时,实现了稳定且高效的深度强化学习训练,成为连续控制领域的标杆算法之一。