SAC,即Soft Actor-Critic算法,是目前强化学习主流的方法,适合处理复杂的连续控制问题。

SAC在最大累积奖励目标上引入了最大熵目标,让策略追求高回报同时,尽可能保持行为随机性。

这种机制极大地提升了算法的探索效率和鲁棒性,使其在面对未知或动态变化的环境时表现更佳。

这里尝试基于网络资料,从优化目标、损失函数、训练流程等多角度探索和学习SAC算法。

1. 最大熵强化学习目标

SAC的目标是在最大化累积奖励的同时最大化策略的熵,从而鼓励探索并提高鲁棒性。

传统强化学习的目标是找到策略 \(\pi\) 最大化期望累积奖励:

\displaystyle J(\pi) = \sum_{t=0}^\infty \mathbb{E}_{(s_t,a_t)\sim\rho_\pi}\left[ \gamma^t r(s_t,a_t) \right]

SAC在此基础上引入熵正则项,修改为:

\displaystyle J(\pi) = \sum_{t=0}^\infty \mathbb{E}_{(s_t,a_t)\sim\rho_\pi}\left[ \gamma^t \big( r(s_t,a_t) + \alpha \mathcal{H}(\pi(\cdot|s_t)) \big) \right]

其中\mathcal{H}(\pi(\cdot|s_t)) = -\mathbb{E}_{a\sim\pi(\cdot|s_t)}[\log \pi(a|s_t)]是策略在状态s_t的熵,\alpha>0是温度系数,控制熵项的重要性。

2 软价值函数定义

根据上述目标,定义软动作价值函数Q^\pi(s,a)和软状态价值函数V^\pi(s)

Q^\pi(s,a) = r(s,a) + \gamma \mathbb{E}_{s'\sim P}\left[ V^\pi(s') \right]

V^\pi(s) = \mathbb{E}_{a\sim\pi}\left[ Q^\pi(s,a) - \alpha \log \pi(a|s) \right]

注意到第二式可改写为:

V^\pi(s) = \mathbb{E}_{a\sim\pi}\left[ Q^\pi(s,a) \right] + \alpha \mathcal{H}(\pi(\cdot|s))

这正是最大熵目标下软状态价值的定义。

将两式结合可得到软贝尔曼方程:

Q^\pi(s,a) = r(s,a) + \gamma \mathbb{E}_{s',a'\sim\pi}\left[ Q^\pi(s',a') - \alpha \log \pi(a'|s') \right]

这个方程用于后续Q函数的迭代更新。

3. 策略评估与策略改进

SAC交替执行策略评估(估计当前策略的Q值)和策略改进(更新策略以提升软价值)。

3.1 策略评估

策略评估即Q函数更新,在实际算法中,我们使用参数化的Q网络Q_\theta(s,a)逼近真实Q函数。

通过最小化软贝尔曼残差来训练Q网络。从经验回放池\mathcal{D}中采样转移(s,a,r,s',d),其中d表示终止标志。目标值计算为:

\displaystyle y(r,s',d) = r + \gamma (1-d) \left( \min_{j=1,2} Q_{\bar{\theta}_j}(s', a') - \alpha \log \pi_\phi(a'|s') \right), \quad a'\sim\pi_\phi(\cdot|s')

这里使用两个目标Q网络\bar{\theta}_1,\bar{\theta}_2并取最小值(Clipped Double-Q trick)以抑制过估计。

a'由当前策略\pi_\phi采样得出。

于是Q网络的损失函数为:

L_Q(\theta_i) = \mathbb{E}_{(s,a,r,s',d)\sim\mathcal{D}} \left[ \frac{1}{2}\big( Q_{\theta_i}(s,a) - y(r,s',d) \big)^2 \right],\quad i=1,2

注意y的计算依赖于目标网络,其参数\bar{\theta}_i通过慢速更新(如Polyak平均)从\theta_i复制。

如此,计算策略评估网络,即Q网络应该有两个。

同时学习两个Q网络,在计算目标值时取两者中的最小值,可以有效缓解Q值的过度估计问题。

3.2 策略改进

策略\pi_\phi的目标是在每个状态 s最大化V^\pi(s),即最大化 \mathbb{E}_{a\sim\pi}[Q^\pi(s,a) - \alpha \log \pi(a|s)]

由于精确的Q^\pi未知,我们用当前学习的Q网络Q_{\theta_1},Q_{\theta_2}代替。

通常取两个Q网络的最小值以提供保守估计:

Q_{\text{target}}(s,a) = \min_{i=1,2} Q_{\theta_i}(s,a)

策略优化的目标是:

\pi_{\text{new}} = \arg\max_{\pi} \mathbb{E}_{s\sim\mathcal{D}}\left[ \mathbb{E}_{a\sim\pi(\cdot|s)}\left[ Q_{\text{target}}(s,a) - \alpha \log \pi(a|s) \right] \right]

这等价于最小化当前策略\pi_\phi与一个能量基策略\propto \exp(Q_{\text{target}}/\alpha)之间的KL散度:

J_\pi(\phi) = \mathbb{E}_{s\sim\mathcal{D}}\left[ D_{\text{KL}}\left( \pi_\phi(\cdot|s) \;\middle\|\; \frac{\exp(Q_{\text{target}}(s,\cdot)/\alpha)}{Z(s)} \right) \right]

其中Z(s)是归一化常数,与\phi无关。展开KL散度并忽略常数项可得:

\displaystyle J_\pi(\phi) = \mathbb{E}_{s\sim\mathcal{D}}\left[ \mathbb{E}_{a\sim\pi_\phi(\cdot|s)}\left[ \alpha \log \pi_\phi(a|s) - Q_{\text{target}}(s,a) \right] \right]

这正是策略损失函数的期望形式。

然而,上式中的动作a是通过采样得到的,梯度不能直接通过采样操作传播。

为此采用重参数化技巧:

将策略表示为确定性函数a = f_\phi(\epsilon; s),其中\epsilon是从固定分布,如标准正态,采样的噪声。

例如,若策略输出高斯分布的均值\mu_\phi(s)和标准差\sigma_\phi(s)

a = \mu_\phi(s) + \sigma_\phi(s) \odot \epsilon,\ \epsilon\sim\mathcal{N}(0,I)

对于有界动作空间,还需应用\tanh压缩,此时需相应地修正对数概率。

应用重参数化后,策略损失变为:

J_\pi(\phi) = \mathbb{E}_{s\sim\mathcal{D},\epsilon\sim\mathcal{N}}\left[ \alpha \log \pi_\phi(f_\phi(\epsilon;s)|s) - Q_{\text{target}}(s, f_\phi(\epsilon;s)) \right]

现在梯度可以反向传播到 \(\phi\)。

3.3 温度参数\alpha调整

温度 \alpha控制熵项权重,手动选择困难。SAC将其作为一个可学习参数,通过最小化损失来使得策略的期望熵接近目标熵\bar{\mathcal{H}},通常取负动作维度,如 - \dim(\mathcal{A})

约束优化问题可转化为:

\displaystyle \alpha^* = \arg\min_{\alpha>0} \mathbb{E}_{s\sim\mathcal{D}, a\sim\pi_\phi(\cdot|s)}\left[ -\alpha \log \pi_\phi(a|s) - \alpha \bar{\mathcal{H}} \right]

注意这里\alpha是正数,且损失函数对\alpha的导数由当前策略的熵与目标熵之差决定。

直观上,若当前熵低于目标,则损失鼓励增大\alpha,因为 -\alpha\log\pi - \alpha\bar{\mathcal{H}}\alpha的导数为-\mathbb{E}[\log\pi] - \bar{\mathcal{H}},即当前熵-\mathbb{E}[\log\pi]与目标熵\bar{\mathcal{H}}的比较);反之亦然。

实际实现中,常将\alpha建模为\log\alpha进行无约束优化。

因此,温度参数的损失函数为:

\displaystyle J_\alpha(\alpha) = \mathbb{E}_{s\sim\mathcal{D}, a\sim\pi_\phi(\cdot|s)}\left[ -\alpha \log \pi_\phi(a|s) - \alpha \bar{\mathcal{H}} \right]

更新时对\alpha\log\alpha求梯度下降。

4. 整体流程

4.1 关键计算

以下时一些SAC关键计算的公式。

1)软价值关系:

V(s) = \mathbb{E}_{a\sim\pi}[Q(s,a) - \alpha \log \pi(a|s)]

2)软贝尔曼方程

Q(s,a) = r(s,a) + \gamma \mathbb{E}_{s'}[V(s')]

3)Q损失,以双Q为例:

y = r + \gamma(1-d)\left( \min_i Q_{\bar{\theta}_i}(s',a') - \alpha \log\pi_\phi(a'|s') \right),\ a'\sim\pi_\phi(\cdot|s')

L_Q(\theta_i) = \mathbb{E}_{\mathcal{D}}\left[ \frac12\big( Q_{\theta_i}(s,a) - y \big)^2 \right]


4)策略损失,即重参数化:

J_\pi(\phi) = \mathbb{E}_{s\sim\mathcal{D},\epsilon\sim\mathcal{N}}\left[ \alpha \log\pi_\phi(f_\phi(\epsilon;s)|s) - \min_i Q_{\theta_i}(s, f_\phi(\epsilon;s)) \right]

5)温度损失

J_\alpha(\alpha) = \mathbb{E}_{s\sim\mathcal{D}, a\sim\pi_\phi(\cdot|s)}\left[ -\alpha \log \pi_\phi(a|s) - \alpha \bar{\mathcal{H}} \right]

其中\bar{\mathcal{H}}为目标熵,如- \dim\mathcal{A}

软贝尔曼方程由Q和V的定义直接推出,与标准贝尔曼方程类似,但包含熵项。

策略改进通过最小化KL散度推导,得到的损失函数与最大化\mathbb{E}[Q - \alpha\log\pi]等价,且重参数化使得梯度可导。

双Q网络和目标网络的使用是经验技巧,不改变理论推导,但提高稳定性。

温度自动调整基于对偶变量优化,确保熵约束得到满足。

通过这个梳理,可以看到SAC如何将最大熵目标转化为可优化的损失函数,以及每个组件的作用。

4.2 核心组件

在实现SAC时,有几个关键的组件和技术细节值得特别留意:

1)网络架构

通常Actor网络输出动作分布的均值和对数标准差,用于构建高斯分布。

Critic网络则接收状态和动作的拼接作为输入,输出一个Q值。

双Critic网络是两个独立但结构相同的网络。

2)目标熵

自动温度调整需要一个目标值。

最常用的设置是target_{entropy} = -action_{dim},即动作空间维度的负值。

3)重参数化 trick

在Actor的sample方法中,必须使用rsample(),而非 sample(),来生成动作,这是实现重参数化、让梯度能够流动的关键。

4)动作的对数概率

如果动作经过tanh函数被压缩到 [-1, 1]区间,那么其对数概率需要根据tanh变换的性质进行修正,以确保概率计算的正确性。

4.3 训练流程

综合以上,SAC在每个训练步骤执行以下操作:

1)与环境交互:从当前策略\pi_\phi采样动作a,执行得到(s,a,r,s',d),存入回放池\mathcal{D}
2)从回放池采样:随机采样一批转移(s,a,r,s',d)
3)更新Q网络:计算目标y,对每个Q网络最小化L_Q(\theta_i)
4)更新策略网络:使用重参数化计算J_\pi(\phi)并更新\phi
5)更新温度 \alpha:计算J_\alpha(\alpha)并更新\alpha
6)软更新目标网络:\bar{\theta}_i \leftarrow \tau \theta_i + (1-\tau)\bar{\theta}_i\), \(\tau \ll 1

在实际训练过程中,关注以下指标可以帮助判断模型的收敛状态和调试超参数:

1)train/sac/critic_loss和train/sac/actor_loss损失值通常应逐渐下降并趋于稳定。

2)train/actor/entropy监控策略的实际熵值,看它是否在向设定的目标熵靠近。

3)train/sac/alpha观察温度参数\alpha的变化趋势,它可以反映探索与利用权衡的自动调整过程。

4)env/return是最核心的指标,即每个回合的总回报,应该随着训练逐步提升。

reference

---

Soft Actor-Critic Algorithms and Applications

https://arxiv.org/pdf/1812.05905

Soft Actor-Critic

https://github.com/haarnoja/sac

softlearning

https://github.com/rail-berkeley/softlearning

pytorch_sac

https://github.com/denisyarats/pytorch_sac

Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor

https://arxiv.org/pdf/1801.01290

软演员评论家 (SAC)

https://rlinf.readthedocs.io/zh-cn/latest/rst_source/tutorials/rlalg/sac.html

流匹配策略SAC强化学习训练

https://rlinf.readthedocs.io/zh-cn/latest/rst_source/examples/embodied/sac_flow.html

Actor loss of soft actor critic explained

https://ar5iv.labs.arxiv.org/html/2112.15568

Improved Soft Actor-Critic: Mixing Prioritized Off-Policy Samples with On-Policy Experience

https://ar5iv.labs.arxiv.org/html/2109.11767

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐