Soft Actor-Critic(SAC)
最大熵 off-policy Actor-Critic,在回报与策略熵之间优化。
学习目标
- 将期望收益与策略熵一起优化,理解随机 actor 和温度参数的作用。
- 独立复核“两动作 soft 价值中的熵贡献”的输入、计算和解释。
- 本例是离散期望算术,连续版本需要采样密度与变换修正。
为什么重要
将期望收益与策略熵一起优化,理解随机 actor 和温度参数的作用。
学习前需要掌握
背景与问题
连续控制中,多个动作都可能有不错收益。过早只保留一个动作会削弱探索,也可能更容易追逐 critic 的局部误差。SAC 通过最大熵目标保留随机性,再从 replay 复用经验。
概念定义
Soft Actor-Critic 是最大熵 off-policy actor-critic 方法,目标同时奖励回报与条件动作熵。常见连续版本使用随机重参数化 actor、双 Q、目标 critic 与可学习温度;离散 SAC 也存在,但不能把两者损失细节无条件混用。
直观理解
不只问“这个动作分数高不高”,也问“保留合理选择余地是否值得”。温度控制对多样性的重视程度;它不是环境温度,也不是学习率。
核心原理
soft bootstrap 通常含 min Q(s′,a′)−α log π(a′|s′)。因为 log 概率常为负,减去它会提供正的熵贡献;actor 则最小化 α log π−Q,符号必须与优化方向一致。
连续动作常用 Gaussian 经 tanh 限幅,计算 log density 时需要 Jacobian 修正。忽略变换会让熵、温度和 actor 梯度都对应错误分布;密度大于 1 也并非概率非法。
自动温度调节追踪目标熵,但目标熵是设计选择,并非真实任务最佳随机性的保证。部署用均值动作还是采样动作、训练和评测是否相同,都应记录。固定离线 replay 仍会有覆盖与外推风险。
数学表达
最大熵目标
同时奖励回报与策略熵。
变量含义
G_t从时刻 t 开始的折扣累计回报。R_{t+1}执行动作后收到的下一步奖励。γ折扣因子,通常位于 [0,1)。
计算步骤
- 1期望 Q 为 2。
- 2熵为 ln2,soft 价值为 2+0.2 ln2≈2.138629。
- 3bootstrap 目标为 0.9×2.138629≈1.924766。
代码对应位置
示例 1两动作 soft 价值中的熵贡献:熵贡献约 0.138629,soft 目标约 1.924766。
变量解释
| 变量 | 含义 |
|---|---|
G_t | 从时刻 t 开始的折扣累计回报。 |
R_{t+1} | 执行动作后收到的下一步奖励。 |
γ | 折扣因子,通常位于 [0,1)。 |
完整数值示例
两动作 soft 价值中的熵贡献
已知条件
- 为便于手算使用离散策略 π=[0.5,0.5],双 Q 最小值为 1、3。
- 温度 α=0.2,奖励 0,折扣 0.9。
计算步骤
- 期望 Q 为 2。
- 熵为 ln2,soft 价值为 2+0.2 ln2≈2.138629。
- bootstrap 目标为 0.9×2.138629≈1.924766。
计算结果
熵贡献约 0.138629,soft 目标约 1.924766。
处理前后对比
- 本例是离散期望算术,连续版本需要采样密度与变换修正。
- 熵贡献提高的是最大熵目标,不是额外获得的环境奖励。
计算与实现步骤
- 采样 Replay
- 更新双 Q
- 更新随机 Actor
- 调节温度
- 软更新 target
代码实现
示例 1
两动作 soft 价值中的熵贡献
example_01.py用途:熵贡献约 0.138629,soft 目标约 1.924766。
import math
probabilities, min_q = [0.5, 0.5], [1.0, 3.0]
alpha, gamma = 0.2, 0.9
soft_value = sum(p * (q - alpha * math.log(p)) for p, q in zip(probabilities, min_q))
print(f"soft_value={soft_value:.6f}, target={gamma*soft_value:.6f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
熵贡献约 0.138629,soft 目标约 1.924766。
alpha- 当前学习率,控制每次参数更新的步长。
Step 1 · 1–5 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import math
probabilities, min_q = [0.5, 0.5], [1.0, 3.0]
alpha, gamma = 0.2, 0.9
soft_value = sum(p * (q - alpha * math.log(p)) for p, q in zip(probabilities, min_q))
print(f"soft_value={soft_value:.6f}, target={gamma*soft_value:.6f}")预期输出或运行结果
soft_value=2.138629, target=1.924766
常见错误 · 3 条
- soft target 的 log 概率项符号写反。
- tanh 后仍使用未变换 Gaussian 的 log density。
- 认为自动温度调节可以替代数据覆盖与安全约束。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- soft target 的 log 概率项符号写反。
- tanh 后仍使用未变换 Gaussian 的 log density。
- 认为自动温度调节可以替代数据覆盖与安全约束。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 OpenAI Spinning Up:SAC。
算法属性与数据边界
失败模式、风险与性能
失败模式
- soft target 的 log 概率项符号写反。
- tanh 后仍使用未变换 Gaussian 的 log density。
- 认为自动温度调节可以替代数据覆盖与安全约束。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
温度 α 越高回报越好吗?
不一定。较高温度更重视熵,可能改善探索,也可能让策略持续选择低收益动作;环境回报与最大熵训练目标应分别评价。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
vwxyzjn/cleanrl
以单文件实现和实验报告呈现 DQN、PPO、SAC 等深度强化学习算法。
CleanRL Contributors · GitHub
仓库信息
阅读可复现的单文件 RL 算法实现
主要语言:Python包含数据集或实验需要额外环境