这一组方法体现了“最大熵 actor-critic”在离线强化学习中的工程化实现:既看收益,也保留一定随机性。
可以把 SAC 理解成“既想学到高收益动作,也不想太死板”。SAC_NB 则在这个基础上再加一层行为克隆约束。
SAC:当前脚本实现更接近 AWAC-SAC,即 actor 更新里带有 advantage-weighted 思路。
SAC_NB:当前脚本实现更接近 SAC + BC。
这组方法适合展示随机策略网络和 alpha 自动调节。
通俗理解:
SAC 不会只给一个死板动作,而是给出一类可能动作,再从里面采样。这样策略既能追求高收益,也能保留一点灵活性。
技术对应:
两者都使用 GaussianActor,网络输出 mu 与 log_std,通过重参数采样得到动作,并用 tanh 将动作压到合法范围。
通俗理解:
Base 版会更愿意学习那些“看起来比当前策略更好”的数据动作,相当于从离线数据里挑更值得模仿的经验。
技术对应:
SAC.py 的 actor 更新采用 AWAC 风格,根据 data_q 与 v_pi 的差值计算 advantage 权重,再对数据动作的 log_prob 做加权优化。
通俗理解:
NB 版除了 SAC 自己的策略优化,还加了一条“别偏离数据动作太远”的约束,适合离线场景里减少乱试动作。
技术对应:
SAC_NB.py 的 actor 更新采用 sac_loss + bc_loss:前者提升策略价值并考虑熵项,后者用行为克隆约束策略靠近数据集动作。
通俗理解:
alpha 可以理解成“探索和收益的平衡旋钮”:alpha 大时策略更随机,alpha 小时策略更专注于当前认为好的动作。
技术对应:
两者都支持 alpha_init 与 learn_alpha,通过目标熵自动调整 alpha,使策略随机性和 Q 值优化保持平衡。
| data_path / save_dir | 数据路径与输出目录 |
|---|---|
| hidden_sizes | 隐藏层结构 |
| lr_actor / lr_critic / lr_alpha | 学习率 |
| batch_size / num_epochs | 训练规模 |
| gamma / tau | 折扣与软更新 |
| alpha_init / learn_alpha | 温度参数及是否学习 |
|---|---|
| log_std_min / log_std_max | 策略方差范围 |
| SAC.awac_lambda / weight_clip | AWAC 权重相关参数 |
| SAC_NB.bc_coef | 行为克隆约束系数 |
| reward_scale | reward 标准化开关 |
建议先理解常用参数,再看进阶参数。
实现随机策略,输出动作和对数概率。
Base 版本的核心 agent,带 AWAC 风格 actor 更新。
NB 版本的核心 agent,actor 更新为 sac_loss + bc_loss。
自动调节温度参数 alpha。
| 对比项 | SAC | SAC_NB |
|---|---|---|
| actor 更新方式 | AWAC 风格加权 log_prob 学习 | SAC loss + BC loss |
| 增强重点 | 根据 advantage 调整学习权重 | 直接加入行为克隆约束 |
| 共同特征 | Gaussian actor、双 critic、alpha 自动调节 | Gaussian actor、双 critic、alpha 自动调节 |
| 适合理解 | 理解离线随机策略如何加权学习 | 理解随机策略如何加入 BC 约束 |