跳转到内容

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 把四个独立组件揉到一起:

  1. 最大熵目标:奖励里加 α · H(π)。直觉:就算你已经会一招,多保留几种备选,环境一变才不会傻掉。

  2. off-policy actor-critic:actor 输出动作,critic 估值,两者都用 replay buffer 里的旧数据训。比 on-policy 的 PPO 样本效率高 10 倍以上。

  3. 双 Q 网络(clipped double Q):训两个 Q 网络,更新时取较小值。Q-learning 的 max 操作天然放大噪声、爱高估,两个独立 Q 取 min 压住。这一招直接借自同期的 TD3。

  4. 重参数化 + tanh squash:策略输出高斯分布,再用 tanh 压到 [-1, 1]。靠 reparameterization trick 让梯度能反传到 actor。

四件事缺一不可:去掉熵就退化成 TD3,去掉双 Q 就回到 DDPG 的高估问题。

实践案例

案例 1:v1 vs v2 的关键差异

2018 年 ICML 版(v1)有 V、Q、π 三组网络;2018-12 arXiv 版(v2,1812.05905)做了两件大事:

  • 删掉 V 网络:直接用 Q − α·log π 当 V 估计,少一个网络
  • 自动学温度 α:把 α 也当参数,目标是让策略熵接近某个目标值(比如动作维度的相反数)

工程经验:v1 你要手调 α,跑 10 个种子有 3 个崩;v2 自动调,几乎不用动。实际开源实现(rllib / stable-baselines3 / cleanrl)默认都是 v2

案例 2:MuJoCo Humanoid(21 维动作)

算法1M 步平均回报备注
DDPG~1500经常崩溃
PPO~600on-policy 慢
TD3~5300强 baseline
SAC~5500更稳,方差小

SAC 的优势不在峰值,在于多个随机种子下都收敛——这对论文复现极重要。

案例 3:真机机器人 2 小时学走路

Haarnoja 2019 把 v2 SAC 放到 Minitaur 四足机器人上:

  • 直接在真机训练,无仿真
  • 2 小时 / 16 万步学会前进
  • 关键是 SAC 的样本效率 + 自动温度让真机训练可行

这之前真机 RL 几乎是”传说”——大家都先在仿真训完再 sim2real。

踩过的坑

  1. reward scale 极敏感:把奖励乘 100 等价于把 α 除以 100。v1 必须手动调 reward scale 当 α 用,v2 自动温度才解决这个问题。

  2. tanh squash 的 log-prob 容易写错:动作经过 tanh 后概率密度要做 jacobian 修正:log π(a) = log π(u) − Σ log(1 − tanh²(u))。漏一项整个训练发散。

  3. 稀疏奖励任务 SAC 容易卡住:熵正则鼓励”到处乱试”,但探索没方向。稀疏奖励要配合 HER(hindsight experience replay)或好奇心驱动。

  4. off-policy 不严格”correct”:理论上 stochastic policy + off-policy data 不满足 IS 修正条件,但工程上效果好——这是个”理论让步给实证”的典型例子。

  5. 离散动作要改造:原版 SAC 是连续动作。离散动作有 SAC-Discrete 变体(Christodoulou 2019),但用得远不如连续版广。

适用 vs 不适用场景

适用

  • 连续动作机器人控制(locomotion / 抓取 / 操作)
  • MuJoCo / DeepMind Control / IsaacGym 这类标准 benchmark
  • 真机 RL(样本效率关键)
  • 需要稳定 baseline 的研究——超参少、对种子鲁棒

不适用

  • 离散动作(用 PPO / DQN 更直接)
  • 极稀疏奖励(要配合 HER 或内在动机)
  • 需要严格 on-policy 保证的场景(用 PPO / TRPO)
  • 多 agent 博弈(SAC 假设环境平稳)

历史小故事(可跳过)

  • 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 的功劳。

后续扩展(一句话各扫一遍)

  • REDQ / DroQ:用 5~10 个 Q 网络 ensemble + 高 update-to-data ratio,样本效率再上一个台阶
  • MBPO:SAC + 学一个环境模型,“做梦训练”加速真实数据使用
  • PEBBLE:SAC + 人类偏好反馈,最大熵 + RLHF 在机器人上的落地
  • Distributional SAC:Q 值改成分布而非标量,对风险敏感任务更稳
  • SAC-Discrete(Christodoulou 2019):把连续动作版改造到离散,用 Gumbel-softmax

学到什么

  1. 熵不是麻烦,是工具——传统 RL 把熵当噪声压低,SAC 反过来用它当目标
  2. 过估计问题比想象中严重——双 Q 网络是 SAC 和 TD3 的共同发现,不是巧合
  3. 自动调超参 = 真正落地——v1 v2 差距不在算法新颖,在 α 自动学这一手
  4. off-policy 样本效率是真机 RL 的命门——PPO 在仿真够用,到真机就太慢
  5. 理论让步给实证——stochastic policy + off-policy 不严格 IS 正确,但好用,社区接受了

延伸阅读

关联

  • ddpg-2015 —— 同为 off-policy 连续控制,但确定性策略 + 单 Q,SAC 把它升级成随机 + 双 Q + 熵
  • td3-2018 —— 双 Q 网络的发源地,SAC 直接借用这一手
  • ppo-2017 —— on-policy 主流,连续控制样本效率不如 SAC
  • dqn-2013 —— 离散动作价值类方法,SAC 是连续 + 策略类的对应物
  • alphago —— 强化学习里程碑,但 MCTS + 离散动作,与 SAC 路径不同

反向链接

  • alphago —— AlphaGo — 击败围棋世界冠军