Soft Actor-Critic (SAC) 算法详解
Soft Actor-Critic(SAC)是一种先进的强化学习算法,属于 Actor-Critic 方法的变体。它特别擅长处理连续动作空间,并通过引入最大熵(Maximum Entropy)强化学习的思想,有效解决了传统算法在稳定性和探索性上的痛点。
SAC 背景与核心思想
1. 强化学习的挑战
传统强化学习在实际应用中常面临以下问题:
- 探索与利用的平衡:初期难以充分探索新策略,后期又容易陷入局部最优。
- 不稳定性:连续动作空间中训练容易出现发散或收敛缓慢。
- 样本效率:数据采集成本高,如何高效利用经验池数据是关键。
SAC 通过以下核心机制应对这些挑战:
- 最大熵强化学习:在最大化累计奖励的同时,最大化策略的随机性(熵),鼓励探索。
- 双 Q 网络:缓解 Q 值过估计的问题。
- 目标网络:使用软更新的目标网络稳定 Q 值计算。
2. 最大熵强化学习的目标
传统强化学习的目标是最大化期望累计奖励:
$$J(\pi) = \mathbb{E}{\pi} \left[ \sum{t=0}^T \gamma^t r(s_t, a_t) \right]$$
而 SAC 则通过添加一个熵项,在奖励中加入策略随机性的权重,目标变为:
$$J(\pi) = \mathbb{E}{\pi} \left[ \sum{t=0}^T \gamma^t \left( r(s_t, a_t) + \alpha \mathcal{H}(\pi(\cdot|s_t)) \right) \right]$$
其中:
- $\alpha$:熵系数,控制熵和奖励之间的平衡。
- $\mathcal{H}(\pi(\cdot|s_t)) = -\mathbb{E}_{a \sim \pi} [\log \pi(a|s_t)]$:表示策略的熵,鼓励策略更随机化。
效果:更好的探索能力使策略更加多样化,同时避免陷入次优策略,提升学习稳定性。
SAC 算法流程
SAC 使用了 Actor-Critic 框架,结合策略梯度和 Q 函数更新。以下是算法的关键步骤:
初始化
创建目标值函数网络 $V_{\psi'}$,并设置其参数为 $V_{\psi}$ 的初始值。初始化策略网络 $\pi_\phi$ 和值函数网络 $V_\psi$。初始化两组 Q 网络 $Q_{\theta_1}, Q_{\theta_2}$,用于计算 Q 值。
每一回合循环
- 采样动作:根据策略网络 $\pi_\phi$ 采样动作 $a \sim \pi(a|s)$。
- 执行动作:执行动作,记录 $(s, a, r, s', \text{done})$ 到经验池中。
- 更新 Q 网络:最小化 TD 误差损失。
- 更新值函数网络:逼近状态价值。
- 更新策略网络:最大化奖励和熵。
- 更新目标值函数网络:使用软更新规则 $\psi' \gets \tau \psi + (1 - \tau) \psi'$。
策略网络的目标是最大化奖励和熵,最小化以下损失: $$J_\pi = \mathbb{E} \left[ \alpha \log \pi_\phi(a|s) - \min_{i=1,2} Q_{\theta_i}(s, a) \right]$$
最小化值函数损失: $$J_V = \mathbb{E} \left[ \left( V_\psi(s) - y_V \right)^2 \right]$$
值函数 $V_\psi$ 的目标是逼近以下值: $$y_V = \mathbb{E}{a \sim \pi} \left[ \min{i=1,2} Q_{\theta_i}(s, a) - \alpha \log \pi_\phi(a|s) \right]$$
最小化以下损失函数: $$J_Q = \mathbb{E} \left[ \left( Q_{\theta_i}(s, a) - y \right)^2 \right] \quad (i = 1, 2)$$


