DDPG
连续动作下的 off-policy 确定性 Actor-Critic。
学习目标
- 在连续动作中通过 critic 对动作的导数更新确定性 actor。
- 独立复核“沿着 critic 的动作梯度改进确定性动作”的输入、计算和解释。
- 这里对 critic 求导,不要求真实环境可微。
为什么重要
在连续动作中通过 critic 对动作的导数更新确定性 actor。
学习前需要掌握
背景与问题
连续力矩无法像 DQN 那样列出所有动作后取最大。DDPG 用 actor 直接给出动作,再通过 critic 对该动作的评分梯度改进 actor,从而将连续动作最大化变为参数学习。
概念定义
DDPG 是确定性 off-policy actor-critic 方法,critic 拟合 r+γQtarget(s′,μtarget(s′)),actor 最大化 Q(s,μ(s))。它使用 replay 与目标 actor/critic,采集数据时通常在确定动作上添加探索噪声。
直观理解
actor 提议一个力矩,critic 告诉它“略大还是略小可能更好”。如果 critic 的局部坡度错了,actor 会沿着错误坡度走,甚至专门找到 critic 的漏洞。
核心原理
actor 梯度包含两段链式法则:Q 对动作的导数乘 actor 对参数的导数。critic 更新时目标停止梯度,actor 更新时则保留穿过 Q 对动作的路径,但不把 critic 参数本身当 actor 参数一起优化。
确定性 actor 本身不提供采样多样性,行为噪声的尺度与动作单位、边界有关。简单裁剪探索动作会改变实际分布,应记录实际执行动作;replay 训练目标仍使用无噪声目标 actor。
DDPG 容易利用 Q 的过估计和非平滑误差,目标网络并不能完全解决。TD3 加双 critic、延迟 actor 与目标平滑,SAC 改用带熵的随机策略,都是针对相关问题的不同取舍。
数学表达
确定性 actor 的链式梯度
状态来自 replay;本式是 critic 提供的策略改进方向。
变量含义
μθ确定性 actorQφ动作价值 criticD回放数据分布
计算步骤
- 1动作梯度为 −2×(0.5−2)=3。
- 2梯度上升得到动作 0.5+0.1×3=0.8。
- 3本构造 critic 值从 −2.25 变为 −1.44。
代码对应位置
示例 1沿着 critic 的动作梯度改进确定性动作:在假设 critic 正确的局部示例中,动作由 0.500 变为 0.800,估值提高。
变量解释
| 变量 | 含义 |
|---|---|
μθ | 确定性 actor |
Qφ | 动作价值 critic |
D | 回放数据分布 |
完整数值示例
沿着 critic 的动作梯度改进确定性动作
已知条件
- 假设当前 critic 恰好为 Q(a)=−(a−2)²,动作边界为 −3 到 3。
- actor 直接输出参数 a=0.5,学习率 0.1。
计算步骤
- 动作梯度为 −2×(0.5−2)=3。
- 梯度上升得到动作 0.5+0.1×3=0.8。
- 本构造 critic 值从 −2.25 变为 −1.44。
计算结果
在假设 critic 正确的局部示例中,动作由 0.500 变为 0.800,估值提高。
处理前后对比
- 这里对 critic 求导,不要求真实环境可微。
- 如果 critic 梯度错误,增加预测 Q 不保证增加真实回报。
计算与实现步骤
- 行为加噪声
- 存 Replay
- 更新 Critic
- 通过 Critic 梯度更新 Actor
- 软更新 Target
代码实现
示例 1
沿着 critic 的动作梯度改进确定性动作
example_01.py用途:在假设 critic 正确的局部示例中,动作由 0.500 变为 0.800,估值提高。
action, rate = 0.5, 0.1
old_q = -(action - 2) ** 2
gradient = -2 * (action - 2)
action += rate * gradient
new_q = -(action - 2) ** 2
print(f"action={action:.3f}, old_Q={old_q:.3f}, new_Q={new_q:.3f}")代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
在假设 critic 正确的局部示例中,动作由 0.500 变为 0.800,估值提高。
gradient- 损失对参数的局部变化率。
Step 1 · 1–6 行
计算损失对参数的梯度,对应数学表达中的 ∇J;梯度只给出局部变化方向。
action, rate = 0.5, 0.1
old_q = -(action - 2) ** 2
gradient = -2 * (action - 2)
action += rate * gradient
new_q = -(action - 2) ** 2
print(f"action={action:.3f}, old_Q={old_q:.3f}, new_Q={new_q:.3f}")代码与数学原理
参数更新由当前梯度与学习率共同决定。
预期输出或运行结果
action=0.800, old_Q=-2.250, new_Q=-1.440
常见错误 · 3 条
- 确定性 actor 未加探索机制,数据覆盖很窄。
- actor 更新时把动作 detach,切断确定性梯度。
- critic 还不准确就高频大步更新 actor,放大误差。
实际应用
- 序贯决策
- 控制与资源分配
常见错误
- 确定性 actor 未加探索机制,数据覆盖很窄。
- actor 更新时把动作 detach,切断确定性梯度。
- critic 还不准确就高频大步更新 actor,放大误差。
扩展内容说明
本页数值均为解释机制的构造案例,不能解读为真实训练或基准性能。定义和适用条件参见 OpenAI Spinning Up:DDPG。
算法属性与数据边界
失败模式、风险与性能
失败模式
- 确定性 actor 未加探索机制,数据覆盖很窄。
- actor 更新时把动作 detach,切断确定性梯度。
- critic 还不准确就高频大步更新 actor,放大误差。
风险
- 奖励函数与真实目标不一致会诱发奖励黑客。
- 部署策略的行动权限必须由环境和应用层约束。
性能考虑
- 样本效率、墙钟时间和显存占用需要分别报告。
- 应使用多个随机种子、置信区间和固定评测策略。
常见问题
actor 是确定的,DDPG 如何探索?
常在采样动作上加 Gaussian 或其他相关噪声,并按合法动作边界执行;训练 actor 目标仍针对确定性动作映射。
网页是否会训练模型?
不会。所有图表使用固定种子或解析公式在浏览器本地计算,不执行页面中的示例代码。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。