DDPG(2016): 连续控制 Deep RL 的第一代基础
1、DDPG研究背景和动机
一、DDPG 出现之前:Deep RL 卡在了哪一步?
1. DQN 的成功,其实是“半个成功”
直接从像素学会“决策” 在 Atari 游戏中达到甚至超过人类水平
深度神经网络 + 强化学习,在“感知 → 决策”这条链路上是可行的
👉 动作是「离散的」
- 左 / 右 / 开火 / 不动
- 动作数:个位数到十几
一旦进入“真实控制世界”,DQN 立刻失效
- 动作是 连续值
- 扭矩 ∈ ℝ
- 转角 ∈ ℝ
- 力度 ∈ ℝ
- 动作往往 高维
- 7 自由度机械臂
- 12 关节的双足行走
- 对动作精度极其敏感
DQN 只能处理离散、低维动作空间,对连续动作空间无法直接应用
二、为什么“把连续动作离散化”是条死路?
1. 最直观的想法:把连续动作“切格子”
- 每个关节
- {-k, 0, +k}
维度灾难(论文给了非常直观的例子)
- 7 个关节(7 自由度)
- 每个关节 3 种取值
3⁷ = 2187 个动作
- 5 档?7 档?
- 数量直接爆炸
这种离散化不仅导致 维度灾难,还会 丢失动作空间的几何结构信息
更致命的问题:探索几乎不可能
- ε-greedy ≈ 乱按
- 高维动作 → 几乎永远按不到“好动作”
三、那能不能换条路?——直接学“动作本身”
1. 换个角度思考问题
- 我们真正想要的是:
- “在这个状态下,应该输出一个具体的连续动作”
- 枚举所有动作?
- 再从中选一个最大值?
策略梯度的直觉吸引力
直接学一个策略函数 π(s) 输入状态,直接输出动作
- 天然支持连续动作
- 不需要 argmax
- 不需要离散化
但问题是:传统策略梯度不稳定、太慢
- 随机策略梯度(REINFORCE)
- Actor-Critic(随机策略)
- 方差大
- 样本效率低
- 难以扩展到深度网络
直接将演员-评论家方法与非线性函数逼近器结合,在复杂问题上稳定性难以保证
四、DDPG 的核心研究动机:一次“路线合并”
1. 已经被证明可行的东西
- DQN 证明了:
- 深度网络 + Q-learning 可以稳定训练
- 关键工程技巧:
- 经验回放
- 目标网络
还缺的那一块拼图
- 连续动作空间
- 高维物理控制
- 高样本效率
DDPG 的核心动机(一句话)
把 DQN 的“稳定训练思想”,移植到“连续动作的策略梯度框架”中。
我们将 DQN 成功的关键思想,应用于连续动作控制领域
五、为什么选择“确定性策略”?(非常关键)
1. 随机策略在连续空间中的问题
- π(a|s) 是一个分布
- 通常是高斯分布
- 需要对整个动作分布积分
- 梯度估计噪声很大
确定性策略的核心优势
μ(s) → a(一个具体动作)
- 策略梯度公式大幅简化
- 不再对动作分布积分
- 在高维连续动作空间中,样本效率显著更高
把 DPG + 深度网络 + DQN 稳定技巧 组合起来
六、DDPG 想解决的“终极问题是什么?”
DDPG 的目标,是让深度强化学习真正走出“游戏世界”,进入连续、精细、真实的物理控制世界。
- MuJoCo 物理引擎
- 机械臂
- 行走
- 操作
- 驾驶
七、你现在应该形成的“正确认知”
- DDPG 不是 DQN 的“升级版”,而是“分支路线”
- 它解决的是:
- 连续动作
- 高维控制
- 物理世界
- 它的思想来源是三者融合:
- Q-learning 的价值评估
- 策略梯度的动作输出
- DQN 的工程稳定性
2、 DDPG 的整体架构
一、先给你一张“文字版总结构图”
- Actor(行动者)网络
- Critic(评论家)网络
- 目标 Actor 网络
- 目标 Critic 网络
- 经验回放缓冲区 + 探索噪声
Actor 负责“怎么做”, Critic 负责“做得值不值”, 目标网络负责“别学炸了”, 回放缓冲区负责“别被当前经验绑架”。
二、Actor:连续控制的“动作生成器”
1. Actor 是什么?
μ(s) → a
- 输入:当前状态 s
- 输出:一个具体的连续动作 a
为什么 Actor 必须是“确定性”的?
连续动作空间中,确定性策略的梯度计算更稳定、更高效
- 不需要对动作分布积分
- 梯度直接来自 Critic 对动作的导数
- 在高维动作空间中,样本效率更高
你可以把 Actor 理解为:
一个“已经学会怎么开机器的控制器”
- 给我当前关节角度
- 我直接告诉你每个关节该施加多大扭矩
三、Critic:连续动作世界里的“价值裁判”
1. Critic 在学什么?
Q(s, a)
- 输入:状态 s + 动作 a
- 输出:这个动作在这个状态下,长期来看值多少钱
- 和 DQN 不同
- Critic 必须显式接收动作作为输入
Critic 的本质角色
“如果你现在这么操作,未来总体效果如何?”
为 Actor 提供“方向性指导”
Critic 为什么是 DDPG 的核心?
Actor 自己不知道“动作好不好”,它完全依赖 Critic 的判断。
- Actor 一定会学歪
- DDPG 中 Critic 的稳定性比 Actor 更重要
四、Actor 和 Critic 是怎么“连起来”的?
1. Actor 的更新,不来自奖励
Actor 直接用 reward 更新
Actor 通过 Critic 的梯度更新
- Actor 给出一个动作 a = μ(s)
- Critic 计算 Q(s, a)
- 对 a 求梯度:∂Q/∂a
- 通过链式法则,反传到 Actor 参数
Critic 在告诉 Actor: “如果你把动作往这个方向微调,回报会变大。”
为什么这种结构适合连续动作?
- 动作是可微的
- Q(s, a) 对 a 是连续函数
- 梯度可以直接指路
五、目标网络:DDPG 能稳定训练的“保险丝”
1. DDPG 为什么需要目标网络?
如果用正在更新的网络来生成学习目标,学习会高度不稳定,甚至发散。
DDPG 中有几套目标网络?
- 目标 Actor:μ′
- 目标 Critic:Q′
Actor 和 Critic 都必须有目标网络
只有同时为 Actor 和 Critic 引入目标网络,才能避免训练中的严重不稳定问题
“软更新”是 DDPG 的独特之处
软更新(Polyak Averaging)
θ_target ← τ θ_online + (1 − τ) θ_target
目标网络不是“跳变”,而是“缓慢跟随”
- 平滑变化
- 类似监督学习中的“稳定标签”
六、经验回放:DDPG 也是“离策略”的
1. DDPG 也是 off-policy 算法
- Actor 在探索时:
- 使用的是 “μ(s) + 噪声”
- 但 Critic / Actor 的学习:
- 不要求数据来自当前策略
- 可以使用 经验回放
- 可以反复利用旧数据
经验回放在 DDPG 中的作用
- 打破样本相关性
- 提高样本利用率
- 稳定训练分布
七、探索机制:连续动作下的“理性扰动”
1. ε-greedy 在连续空间行不通
- 以 ε 的概率“随机选一个连续动作”
DDPG 的解决方案:动作噪声
在 Actor 输出的动作上,加噪声
a = μ(s) + N
为什么用时间相关噪声?
- 动作有惯性
- 相邻时间步不应剧烈跳变
- 连续
- 平滑
- 有时间相关性
不是“乱抖”,而是“自然晃动”
八、把 DDPG 架构压缩成一句话
DDPG 是一个基于确定性 Actor–Critic 架构的深度强化学习算法, 通过 Critic 学习连续动作的价值函数, 通过 Actor 沿价值梯度直接生成动作, 并借助经验回放与软目标网络,实现稳定、高效的连续控制学习。
九、你现在应该“真的懂结构了”的标志
- 为什么 DDPG 需要两个网络而不是一个?
- Actor 的梯度从哪里来?
- 为什么不能没有目标 Actor?
- 为什么探索是“加噪声”而不是 ε-greedy?
一个完整的 DDPG 训练流程故事:
👉《教 AI 学会踩油门和打方向盘》
一、问题设定(连续控制为什么难)
- 状态(State):
- 车速
- 方向角
- 离车道线的距离
- 动作(Action):
- 油门踩多少(连续值)
- 方向盘转多少(连续值)
- 不是“左 / 右 / 不动”
- 而是 “转 3.2° 还是 3.3°”
二、DDPG 里的人物对照表(先认人)
DDPG 组件
| 故事里的角色
|
Actor
| 新手司机(负责操作)
|
Critic
| 教练(负责打分)
|
目标 Actor / Critic
| 冷静的老教练(只做参考)
|
环境
| 真实道路
|
回放缓冲区
| 行车录像
|
噪声
| 新手乱试
|
司机负责“怎么开”,教练负责“好不好”。
三、训练正式开始:一天的教学过程
🌅 第一步:司机先乱开(探索)
- 根本不会开
- 每一步都在乱试
“我大概觉得要向左转一点,但我再随便多转点看看会怎样。”
动作 = Actor 给的 + 一点随机抖动
🛣 第二步:每次操作都会被“录像”
刚才车速、方向
→ 我这么踩油门、打方向
→ 结果是靠近车道还是跑偏了
⚠️ 注意: 现在还不教,只是存录像
四、真正“学习”发生在:回放录像
🎬 第三步:教练回放录像打分
- 不按时间顺序
- 随机抽几段录像
“如果当时你这样打方向、踩油门,从长期来看,后面会不会更稳?”
📊 第四步:教练自己也不太自信(目标教练登场)
- 教练自己也在成长
- 今天的判断,明天可能就改
- 老教练不天天变
- 他的打分慢慢更新
“今天说这样最好,明天又全盘否定昨天。”
五、关键一步:司机是怎么变聪明的?
🧠 第五步:不是骂司机,而是“指方向”
“你这次错了,扣 10 分!”
“如果你当时方向盘再往左一点点,长期表现会更好。”
- 不是“对 / 错”
- 而是:
- “往哪边微调会更好”
用教练的“方向建议”,来微调司机的操作习惯。
六、为什么 DDPG 特别适合“连续动作”?
- 方向盘不是“左 / 右”
- 而是:
- 左 1°
- 左 1.5°
- 左 1.8°
“动作往哪个方向调一点点更好”
七、每天重复,司机越来越稳
- 白天乱试(探索)
- 全程录像(存经验)
- 晚上看片(回放池)
- 教练学会打分(Critic)
- 教练指微调方向(梯度)
- 司机慢慢形成稳定操作(Actor)
八、一句话让你“突然懂了”
DDPG 就像: 一个会微调操作的新手司机,在一个不断给“方向建议”的教练指导下,通过反复回看录像,学会如何在连续世界里稳定操作。
九、现在你再回头看“算法步骤”
- Actor = 司机
- Critic = 教练
- 回放缓冲区 = 录像
- 噪声 = 试探
- 目标网络 = 冷静参考