Soft Actor-Critic — 让强化学习既会拿分又愿意多试
待复核Soft Actor-Critic(SAC)是一种在连续动作空间里教神经网络做决策的强化学习算法。日常类比:你训练一只机器狗走路,普通方法会让它”找到一种能拿分的姿势就死磕这一招”;SAC 给它额外一笔多样性奖学金——只要还能拿分,就鼓励它多换姿势试试。
它的目标函数比经典 RL 多了一项熵:
J(π) = E [ Σ r(s,a) + α · H(π(·|s)) ] ↑ 熵正则(多样性奖励)H(π) 是策略的熵:策略越”随机/丰富”,熵越大。α 是温度系数,控制”拿分”和”多样”的权重。
这一招让 SAC 在 MuJoCo 连续控制 benchmark 上全面强于 DDPG / PPO,与 TD3 持平或略优,至今仍是机器人学习论文里最常见的 baseline。
不理解 SAC,下面这些事都没法解释:
- 为什么 2019 年 Google 的四足机器人能在真机上 2 小时学会走路(之前都是仿真训完再迁移)
- 为什么连续控制论文动辄拿 SAC 当对照组——它对超参不敏感,别人调一周才追上你随手跑一次
- 为什么”最大熵 RL”这个 2017 年的小众想法 2 年后变成工业标配
- 为什么 2018 年同时出现的 TD3 和 SAC 都用”双 Q 网络”——这件事和算法名字没关系,是过估计问题逼出来的
SAC 把四个独立组件揉到一起:
-
最大熵目标:奖励里加
α · H(π)。直觉:就算你已经会一招,多保留几种备选,环境一变才不会傻掉。 -
off-policy actor-critic:actor 输出动作,critic 估值,两者都用 replay buffer 里的旧数据训。比 on-policy 的 PPO 样本效率通常高一个数量级(经验量级,非硬指标)。
-
双 Q 网络(clipped double Q):训两个 Q 网络,更新时取较小值。Q-learning 的
max操作天然放大噪声、爱高估,两个独立 Q 取 min 压住。这一招直接借自同期的 TD3。 -
重参数化 + tanh squash:策略输出高斯分布,再用
tanh压到[-1, 1]。靠 reparameterization trick 让梯度能反传到 actor。
四件事缺一不可:去掉熵仍是随机 actor + 双 Q,不是确定性的 TD3;去掉双 Q 就回到 DDPG 式高估问题。
案例 1:v1 → v2 三步看懂关键差异
Section titled “案例 1:v1 → v2 三步看懂关键差异”- v1(ICML 2018):同时训 V、Q、π 三组网络,温度 α 手调——跑 10 个种子常有几个崩。
- v2(arXiv 1812.05905):删掉 V,用
Q − α·log π当 V 估计;把 α 也当参数,目标熵常取「动作维度的相反数」。 - 工程默认:rllib / stable-baselines3 / cleanrl 的 SAC 都是 v2——几乎不用手拧 α。
案例 2:跟做一段 v2 风格伪代码
Section titled “案例 2:跟做一段 v2 风格伪代码”# 每步:环境交互 → 写入 replay → 从 buffer 抽 batcha ~ π(·|s) # 随机 actor(高斯 + tanh)store (s,a,r,s')# 更新 critic:双 Q 取 min,压过估计y = r + γ ( min(Q1',Q2')(s',a') − α log π(a'|s') )# 更新 actor:最大化 Q − α log π(既要分高又要够随机)# 可选:调 α,让平均熵贴近目标熵为什么这样写:min(Q1,Q2) 防高估;减 α log π 就是熵奖励;自动 α 把「乱试多少」交给优化,而不是人肉调 reward scale。
案例 3:真机 2 小时学走路(逐步)
Section titled “案例 3:真机 2 小时学走路(逐步)”- 设定:Haarnoja 2019 把 v2 SAC 放到 Minitaur 四足上,无仿真、直接真机。
- 训练:约 2 小时 / 16 万步学会前进——靠 off-policy 复用旧数据 + 自动温度稳住探索。
- 对照:此前真机 RL 多是「仿真训完再 sim2real」;SAC 让「上真机就训」变得可复现。
MuJoCo Humanoid(21 维)量级对照:DDPG ~1500(易崩)、PPO ~600(慢)、TD3 ~5300、SAC ~5500 且多种子更稳——优势在稳,不在刷峰值。
-
reward scale 极敏感:把奖励乘 100 等价于把 α 除以 100。v1 必须手动调 reward scale 当 α 用,v2 自动温度才解决这个问题。
-
tanh squash 的 log-prob 容易写错:动作经过
tanh后概率密度要做 jacobian 修正:log π(a) = log π(u) − Σ log(1 − tanh²(u))。漏一项整个训练发散。 -
稀疏奖励任务 SAC 容易卡住:熵正则鼓励”到处乱试”,但探索没方向。稀疏奖励要配合 HER(hindsight experience replay)或好奇心驱动。
-
off-policy 不严格”correct”:理论上 stochastic policy + off-policy data 不满足 IS 修正条件,但工程上效果好——这是个”理论让步给实证”的典型例子。
-
离散动作要改造:原版 SAC 是连续动作。离散动作有 SAC-Discrete 变体(Christodoulou 2019),但用得远不如连续版广。
适用 vs 不适用场景
Section titled “适用 vs 不适用场景”适用:
- 连续动作机器人控制(locomotion / 抓取 / 操作)
- MuJoCo / DeepMind Control / IsaacGym 这类标准 benchmark
- 真机 RL(样本效率关键)
- 需要稳定 baseline 的研究——超参少、对种子鲁棒
不适用:
- 离散动作(用 PPO / DQN 更直接)
- 极稀疏奖励(要配合 HER 或内在动机)
- 需要严格 on-policy 保证的场景(用 PPO / TRPO)
- 多 agent 博弈(SAC 假设环境平稳)
历史小故事(可跳过)
Section titled “历史小故事(可跳过)”- 2017:Haarnoja 在 “Reinforcement Learning with Deep Energy-Based Policies” 里提出 soft Q-learning,最大熵 RL 的前身
- 2018-01:SAC v1 投 ICML 2018,引入 actor-critic 形式
- 2018-02:TD3(Fujimoto et al.)独立发表”双 Q + 延迟更新”,SAC 借用了双 Q
- 2018-12:SAC v2 发到 arXiv,自动学 α + 删 V 网络
- 2019:Learning to Walk 真机实验,把 SAC 推向工业落地
- 2020+:连续控制论文的默认对照组
最大熵 RL 的思路其实可以追到 1990s 的 inverse RL 和 Ziebart 2008 maxent IRL,但能在深度 RL 上稳定跑起来是 SAC 的功劳。
后续扩展(一句话各扫一遍)
Section titled “后续扩展(一句话各扫一遍)”- REDQ / DroQ:用 5~10 个 Q 网络 ensemble + 高 update-to-data ratio,样本效率再上一个台阶
- MBPO:SAC + 学一个环境模型,“做梦训练”加速真实数据使用
- PEBBLE:SAC + 人类偏好反馈,最大熵 + RLHF 在机器人上的落地
- Distributional SAC:Q 值改成分布而非标量,对风险敏感任务更稳
- SAC-Discrete(Christodoulou 2019):把连续动作版改造到离散,用 Gumbel-softmax
- 熵不是麻烦,是工具——传统 RL 把熵当噪声压低,SAC 反过来用它当目标
- 过估计问题比想象中严重——双 Q 网络是 SAC 和 TD3 的共同发现,不是巧合
- 自动调超参 = 真正落地——v1 v2 差距不在算法新颖,在 α 自动学这一手
- off-policy 样本效率是真机 RL 的命门——PPO 在仿真够用,到真机就太慢
- 理论让步给实证——stochastic policy + off-policy 不严格 IS 正确,但好用,社区接受了
- 论文 v1 PDF:Soft Actor-Critic 1801.01290
- 论文 v2 PDF:SAC Algorithms and Applications 1812.05905
- 视频:Pieter Abbeel — SAC 讲解(最大熵 RL 直接来源团队)
- 实现参考:stable-baselines3 SAC(v2,几百行 PyTorch 看完就懂)
- 工程博客:Spinning Up — SAC(OpenAI 教学版,含完整数学推导)
- ddpg-2015 —— SAC 的 off-policy 连续控制前辈
- ppo-2017 —— SAC 的 on-policy 主流对手
- ddpg-2015 —— 同为 off-policy 连续控制,但确定性策略 + 单 Q,SAC 把它升级成随机 + 双 Q + 熵
- td3-2018 —— 双 Q 网络的发源地,SAC 直接借用这一手
- ppo-2017 —— on-policy 主流,连续控制样本效率不如 SAC
- dqn-2013 —— 离散动作价值类方法,SAC 是连续 + 策略类的对应物
- alphago —— 强化学习里程碑,但 MCTS + 离散动作,与 SAC 路径不同
- ddpg-2015 —— DDPG 2015 — 让神经网络直接学会连续动作控制