DDPG / DDPG_NB

这一组页面按照当前代码命名来展示,但从实现上看,二者都已经不是最原始的 DDPG,而是离线场景下做过增强的 actor-critic 版本。

选择算法对

小白先看

可以把它理解成“用 critic 告诉 actor 什么动作更好”。这一对方法的重点,是看代码里如何在 DDPG 主线上加入更稳的离线训练约束。

DDPG:当前脚本实现更接近 advantage-weighted 的离线 actor-critic。

DDPG_NB:当前脚本实现更接近 BC 正则化的 DDPG/TD3-lite。

这一对的价值主要在于展示两种不同的增强思路。

方法流程

  1. 读取完整 transition 数据。
  2. 划分训练集与验证集。
  3. 计算状态标准化和 reward 统计量。
  4. 构建 actor、双 critic 及其 target 网络。
  5. 先更新 critic,再按延迟策略更新 actor。
  6. 保存模型、训练记录和曲线。

核心设计

数据处理

通俗理解:
DDPG 这组方法也需要知道“做了动作以后发生了什么”,所以它看的不是单独一行状态,而是一条完整的交互记录。

技术对应:
两者都使用 observations、actions、rewards、next_observations、terminals,并据此计算 critic 的 TD 目标和 actor 的更新方向。

网络结构

通俗理解:
actor 负责提出动作,critic 负责判断动作值不值。target network 像一个更新慢一点的参考答案,防止当前网络一边改一边把目标也带偏。

技术对应:
两者都采用 actor + 双 critic + target network 的结构,critic 使用 state-action 输入,target actor/critic 通过 tau 做软更新。

Base 版本增强

通俗理解:
Base 版更像“优先模仿那些看起来更有优势的动作”:如果某个数据动作比当前策略动作更值得做,它的学习权重就更高。

技术对应:
DDPG.py 中 actor 更新采用 advantage-weighted BC 风格,根据 data action 与 policy action 的 Q 值差构造 advantage,再计算加权行为克隆损失。

NB 版本增强

通俗理解:
NB 版更像给 actor 同时提两个要求:一方面动作要让 critic 觉得好,另一方面不要离数据集里的真实动作太远。

技术对应:
DDPG_NB.py 中 actor loss 由 q_term 与 bc_term 组合而成,并用 alpha_bc 自适应缩放 Q 项,使策略优化和行为克隆约束共同生效。

参数说明

常用参数

hdf5_file数据集路径
batch_size批大小
num_epochs训练轮数
lr_actor / lr_critic学习率
gamma / tau折扣与软更新
hidden隐藏层结构
output_dir输出目录

进阶参数

reward_scale是否做 reward 标准化
policy_noise / noise_clip目标动作扰动
policy_delay延迟更新 actor
DDPG.aw_lambda / weight_clip优势加权参数
DDPG_NB.alpha_bc / bc_coefBC 正则参数

建议先理解常用参数,再看进阶参数。

代码块讲解

AIcodes/DDPG.py -> OfflineAWDDPGAgent

Base 版本的核心 agent,actor 更新使用 advantage-weighted BC。

AIcodes/DDPG.py -> train_step

先更新 critic,再按权重更新 actor。

AIcodes/DDPG_NB.py -> OfflineDDPGBCAgent

NB 版本的核心 agent,actor 更新使用 q_loss + bc_loss。

AIcodes/DDPG_NB.py -> train_step

通过 alpha_bc 自适应缩放 Q 项,再叠加行为克隆项。

输入输出与产物

输入

  • 代码文件:AIcodes/DDPG.py、AIcodes/DDPG_NB.py
  • 数据文件:halfcheetah_medium-v2.hdf5
  • 完整 transition 数据

输出与产物

  • checkpoints/DDPG/ 或 checkpoints/DDPG_NB/
  • best_model.pt
  • train_config.json
  • training_records.csv
  • actor/critic/bc 或 weight 曲线图

Base / NB 对比

对比项DDPGDDPG_NB
actor 更新方式advantage-weighted BCQ 项 + BC 项的组合更新
增强重点根据 advantage 调整样本权重直接给 actor 加 BC 正则
可解释重点为什么高优势样本更重要为什么要让 actor 不偏离数据动作太远
工程理解更偏“加权学习”更偏“约束学习”

小结

  • DDPG 这一组可以理解成“actor 负责做动作,critic 负责打分”,训练重点是让 actor 学会产生 critic 认为更好的动作。
  • Base 版本更偏优势加权:如果数据里的某个动作比当前策略动作更有优势,就让模型更重视这个样本。
  • DDPG_NB 更偏 BC 正则:actor 追求高 Q 值的同时,还要尽量贴近离线数据里的真实动作,减少乱跑到数据外区域。
  • 这一组适合用来比较两种离线 actor 更新思路:一种是“好样本多学”,另一种是“策略别偏太远”。