深度强化学习中的Soft Actor-Critic (SAC) 算法原理与实现细节
字数 2838 2025-12-19 00:13:16

深度强化学习中的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包含五个神经网络:

  1. Actor(策略网络):输入状态 \(s\),输出动作分布参数(如高斯分布的均值和标准差)。
  2. 两个Critic(Q网络):输入状态 \(s\) 和动作 \(a\),分别估计Q值(双Q网络用于减少过高估计)。
  3. 两个Target Critic网络:对应Critic的滞后更新版本,用于稳定训练。
  4. 可训练的温度参数 \(\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. 训练流程总结

  1. 收集经验:使用当前策略与环境交互,将转移 \((s_t, a_t, r_t, s_{t+1})\) 存入经验回放池。
  2. 采样批次:从回放池随机采样一批数据。
  3. 更新Critic:计算目标Q值,最小化Critic的均方误差。
  4. 更新Actor:通过重参数化采样动作,最小化策略损失 \(J_\pi(\phi)\)
  5. 更新温度 \(\alpha\):调节熵权重使策略熵接近目标熵。
  6. 软更新目标网络:缓慢更新Target Critic参数。

5. 关键优势与注意事项

  • 探索能力强:熵正则化鼓励策略随机性,避免过早收敛。
  • 稳定性高:双Q网络、目标网络和策略梯度重参数化共同抑制训练波动。
  • 超参数敏感:温度 \(\alpha\) 和目标熵需根据任务调整(自动调节可缓解此问题)。
  • 适用场景:主要针对连续动作空间(如机器人控制、自动驾驶)。

通过以上步骤,SAC在保持高样本效率的同时,实现了稳定且高效的深度强化学习训练,成为连续控制领域的标杆算法之一。

深度强化学习中的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在保持高样本效率的同时,实现了稳定且高效的深度强化学习训练,成为连续控制领域的标杆算法之一。