
1. 连续控制里 DDPG 爱过估计、爱卡局部最优
机械臂 reach 任务用 DDPG:Q 网络过估计、确定性策略探索不足,loss 看着降、末端却抖在局部最优附近。Policy 在 Q 峰值附近来回,never commit 到 exploit。SAC 把目标写成最大熵 RL,用随机策略和熵项同时优化回报与探索——在 multi-modal reward landscape 里比纯确定性策略不易卡死。上次 manipulation 项目,DDPG 训到 2M step 末端仍抖,换 SAC 同 budget 下 reach 成功率明显上升,根因是 overestimation 加 exploration 不足,不是 network 不够宽。
权衡回报与探索;可固定,更常用 log_alpha 自动调节,使策略熵接近 target entropy(常取 )。代价是 log prob 和 entropy 项增加实现复杂度,debug 时要同时看 Q loss 和 entropy,不能只看 policy loss。
2. Twin Q 与 reparameterization
两个 Q 网络 ,target 取 抑制过估计——单 Q 的 overestimation 是 DDPG 类算法的老问题。Policy 用 reparameterization: 再线性映射到 env bounds,对 可导,方差比 score function 估计低。
Off-policy + replay,样本效率通常优于 PPO——同样 wall-clock 下 SAC 往往先收敛。SB3 默认 learning_rate=3e-4、buffer_size=1e6、tau=0.005 soft update。train_freq 与 gradient_steps 决定每采多少 env step 更新一次——GPU 空转或更新过稀都浪费算力。
3. SB3 开箱与必查项
from stable_baselines3 import SAC
model = SAC("MlpPolicy", env, verbose=1)我会检查 action_space 是否已正确 bound,以及是否包了 VecNormalize。动作经 tanh squashing 再线性映射到 env bounds——bound 不对时 policy 输出饱和在边界,entropy 虚高。train_freq 和 gradient_steps 决定每采多少 env step 更新一次 GPU;batch 太小 Q 估计噪声大,太大则 update 滞后。
4. 和 TD3 的取舍
SAC 随机策略 + entropy;TD3 确定性 + target policy smoothing。SAC 调参往往更省心,但 reward scale、action bound、obs normalize 仍要查。维数高的 arm 需要更大 entropy 才够探索;target_entropy 设错会出现「太随机不动」或「太贪心不探索」两种极端。和 TD3 比,SAC 在 multi-modal landscape 里有时更不易卡局部最优。
Reward 未 normalize 时 Q 幅度大, 梯度也大,可能 oscillation——VecNormalize reward 或 manual scale 是第一步。Temperature 学习率太大 oscillate,太小 fix 也行;高维 action 空间 target entropy 要相应调大。
5. 真机注意
Real robot 要在 policy 后加 action delta limit:SAC 输出可以是大 jump,安全层 clamp 每步变化。Eval 取 mean action,不要 exploration noise——SAC eval 通常 deterministic mean。Discrete SAC 变体存在但不如 continuous 成熟;manipulation 以 continuous 为主。
6. 失败模式
太大,策略过随机不 exploit; 太小,退化成 DDPG 类问题。Obs 未 normalize,Q 和 policy 难训。Eval 忘记关 exploration noise。Reward scale 影响 Q 幅度和 学习——未 normalize reward 时 Q loss 大, 梯度也大。
7. 案例:reward 未 scale 导致 α 振荡
MuJoCo reach 任务直接训 SAC,critic loss 在 量级震荡,entropy 忽高忽低。加 VecNormalize reward 后 Q 幅度稳定, 自动调节收敛到合理区间,1e6 步内 reach success 稳定上升。根因是 reward scale 与 Q 网络不匹配,不是 SAC 算法本身的问题——先 normalize,再调温度。
8. 验收
- Log
entropy、alpha、critic_loss;MuJoCo reach 1e6 步应稳定上升。 action_space已正确 bound,包了VecNormalize。- 对比 PPO 同任务 wall-clock 与 sample efficiency。
- 扫一遍:过大过随机,过小退化成 DDPG 类问题。
- 真机 first run 录 action delta 分布,确认 safety clamp 未每步饱和。
9. 与 PPO 的 wall-clock 对比
同任务 SAC 样本效率常优于 PPO,但 off-policy 实现复杂、debug 维度多——entropy、Q、α 三条曲线都要看。PPO 方差大但开箱稳,SAC 调通后往往更少 env step。选型:manipulation sparse reward 先试 SAC+HER;locomotion on-policy 数据贵时可 SAC。Real robot 无论 SAC 还是 PPO,action delta limit 和 safety clamp 在 policy 外,不是 SAC 特有项。gradient_steps 与 train_freq 不匹配时 GPU 空转或 update 滞后——log 每 1e4 step 的 critic loss 与 entropy 确认在更新。
10. 录包与 deploy 检查
Deploy 前 checklist:model + VecNormalize.pkl、action bound 与 train 一致、eval 取 mean action。录包若动作抖动,同时 log entropy、Q value、action mean——entropy 贴 target 但 Q 不升,优先查 reward scale;entropy 塌缩则 exploration 不足。Buffer 大小 1e6 对长 horizon 可能不够,按 task 调整。Twin Q 的 min 是减 overestimation 的关键;单 Q 变体需充分 ablation。真机 first run 录 action delta 分布,确认 safety clamp 未每步饱和——饱和说明 policy 输出尺度与 deploy 约束不匹配,要 retrain 或 tighten train-time clamp。Off-policy 数据效率是 SAC 的主要卖点,但 debug 维度比 PPO 多——entropy、双 Q、α 三条曲线要同时看,不能只看 policy loss 下降就以为在进步。Manipulation sparse reward 任务选型上 SAC+HER 是常见组合;locomotion 若 on-policy 数据贵也可先试 SAC 比 wall-clock。Target entropy 常取 ,高维 arm 要相应调大;α 自动调节失败时可 fix α 手动扫一遍。
相关
也可以看看
johan's blog