这一组方法属于更典型的离线强化学习算法:不仅学策略,还学 Q 值,并通过保守约束减少“离线数据外动作”的高估问题。
可以把 CQL 理解成“学动作之前,先更谨慎地评价动作值不值”。CQL_NB 则是在这个基础上进一步增强训练稳定性。
CQL:学习 actor 和双 critic,并给 critic 加保守约束。
CQL_NB:在 CQL 上加入更多动作参与 penalty,并引入类似 TD3 的 target smoothing。
比 BC 更复杂,但更接近真正的离线强化学习方法。
通俗理解:
CQL 不只看“当前应该做什么动作”,还要看“做完这个动作后会到哪里、能拿多少奖励”。所以它需要一整条状态转移记录。
技术对应:
两者都使用完整 transition:observations、actions、rewards、next_observations、terminals,用它们构造 TD target 和 critic 训练样本。
通俗理解:
actor 像做动作的学生,critic 像评分老师。两个 critic 相当于两个老师同时打分,最后取更谨慎的那个分数,避免把动作评价得太乐观。
技术对应:
两者都包含一个 actor 和两个 critic;critic 输入 state+action 输出 Q 值,actor 输入 state 输出 action;target critics 用软更新提供更稳定的目标值。
通俗理解:
离线数据里没出现过的动作,模型其实没亲自试过。CQL 的核心就是提醒 critic:别随便给没见过的动作打高分。
技术对应:
CQL 用 logsumexp penalty 压低随机动作和当前策略动作的 Q 值,同时保留数据动作的价值;CQL_NB 进一步把 next policy 动作也纳入 penalty 覆盖范围。
通俗理解:
这一组方法很容易因为 Q 值估计不稳而抖动,所以会对奖励、梯度和目标动作都做处理,让训练过程更像慢慢校准而不是猛跳。
技术对应:
两者都支持 reward scaling、梯度裁剪和 BC 辅助 actor;CQL_NB 额外加入 target smoothing noise,在 next action 上加截断噪声后再计算目标 Q。
| dataset_path | 数据集路径 |
|---|---|
| batch_size | 批大小 |
| num_epochs | 训练轮数 |
| lr_actor / lr_critic | actor/critic 学习率 |
| gamma / tau | 折扣系数与软更新系数 |
| hidden_layers | 隐藏层结构 |
| output_dir | 输出目录 |
| lambda_cql | 保守约束权重 |
|---|---|
| num_random_actions | 构造 penalty 时采样的随机动作数 |
| alpha_bc / bc_coef | actor 中 BC 相关参数 |
| reward_scale | 是否对 reward 标准化 |
| CQL_NB.policy_noise / noise_clip | target smoothing 噪声参数 |
建议先理解常用参数,再看进阶参数。
定义 CQL 训练参数并保存配置。
加载完整 transition 数据。
构造保守 Q 约束。
执行双 critic + actor 训练。
加入 next policy action 和 smoothing noise。
把 target smoothing 和更丰富的 penalty 用到训练中。
| 对比项 | CQL | CQL_NB |
|---|---|---|
| 核心思路 | 标准保守 Q 学习 + BC 辅助 actor | 在 CQL 基础上增加更强的 penalty 覆盖和 smoothing |
| Penalty 动作集合 | 随机动作 + 当前策略动作 | 随机动作 + 当前策略动作 + next policy 动作 |
| 稳定性设计 | reward scaling、双 critic、软更新 | 额外加入 TD3 风格 target smoothing |
| 适合理解 | 理解离线 RL 中“保守”的意义 | 理解如何在基线 CQL 上继续增强稳定性 |