DDPG(2016): 连续控制 Deep RL 的第一代基础

DDPG(2016): 连续控制 Deep RL 的第一代基础

导出时间:2025/12/19 13:29:50




1、DDPG研究背景和动机

一、DDPG 出现之前:Deep RL 卡在了哪一步?

1. DQN 的成功,其实是“半个成功”

2013–2015 年,DQN 做了一件震撼整个领域的事:

直接从像素学会“决策” 在 Atari 游戏中达到甚至超过人类水平

这说明一件关键事实:

深度神经网络 + 强化学习,在“感知 → 决策”这条链路上是可行的

但请注意: Atari 游戏有一个非常重要、但经常被忽略的特性——

👉 动作是「离散的」

  • 左 / 右 / 开火 / 不动
  • 动作数:个位数到十几

一旦进入“真实控制世界”,DQN 立刻失效

现实世界的控制任务(机器人、物理系统)有完全不同的特点:
  • 动作是 连续值
    • 扭矩 ∈ ℝ
    • 转角 ∈ ℝ
    • 力度 ∈ ℝ
  • 动作往往 高维
    • 7 自由度机械臂
    • 12 关节的双足行走
  • 对动作精度极其敏感
论文在引言中非常明确地指出这一点

DQN 只能处理离散、低维动作空间,对连续动作空间无法直接应用



二、为什么“把连续动作离散化”是条死路?

这是 DDPG 的第一个动机来源

1. 最直观的想法:把连续动作“切格子”

例如:
  • 每个关节
    • {-k, 0, +k}
听起来合理,但问题是指数爆炸

维度灾难(论文给了非常直观的例子)

以人类手臂为例:
  • 7 个关节(7 自由度)
  • 每个关节 3 种取值
动作空间大小:

3⁷ = 2187 个动作

而这只是**“极其粗糙”的离散化**。
如果你希望动作更平滑、更精细:
  • 5 档?7 档?
  • 数量直接爆炸
论文明确指出

这种离散化不仅导致 维度灾难,还会 丢失动作空间的几何结构信息


更致命的问题:探索几乎不可能

在这么大的离散动作空间里:
  • ε-greedy ≈ 乱按
  • 高维动作 → 几乎永远按不到“好动作”
👉 DQN 的探索机制在连续控制中完全失效

三、那能不能换条路?——直接学“动作本身”

这就引出了 DDPG 的第二个动机

1. 换个角度思考问题

既然:
  • 我们真正想要的是:
  • “在这个状态下,应该输出一个具体的连续动作”
那为什么一定要:
  • 枚举所有动作?
  • 再从中选一个最大值?

策略梯度的直觉吸引力

在强化学习中,早就存在另一条路线:

直接学一个策略函数 π(s) 输入状态,直接输出动作

这类方法叫:策略梯度方法
优势:
  • 天然支持连续动作
  • 不需要 argmax
  • 不需要离散化

但问题是:传统策略梯度不稳定、太慢

在 DDPG 之前:
  • 随机策略梯度(REINFORCE)
  • Actor-Critic(随机策略)
普遍问题:
  • 方差大
  • 样本效率低
  • 难以扩展到深度网络
论文对此有明确判断

直接将演员-评论家方法与非线性函数逼近器结合,在复杂问题上稳定性难以保证


四、DDPG 的核心研究动机:一次“路线合并”

现在,所有关键条件已经摆在桌面上了。
我们来总结当时的“技术现状”。

1. 已经被证明可行的东西

  • DQN 证明了:
    • 深度网络 + Q-learning 可以稳定训练
    • 关键工程技巧:
      • 经验回放
      • 目标网络

还缺的那一块拼图

  • 连续动作空间
  • 高维物理控制
  • 高样本效率

DDPG 的核心动机(一句话)

把 DQN 的“稳定训练思想”,移植到“连续动作的策略梯度框架”中。

论文原文几乎是直接这样说的

我们将 DQN 成功的关键思想,应用于连续动作控制领域


五、为什么选择“确定性策略”?(非常关键)

这是 DDPG 名字里 Deterministic 的来源。

1. 随机策略在连续空间中的问题

如果动作是连续的:
  • π(a|s) 是一个分布
  • 通常是高斯分布
问题:
  • 需要对整个动作分布积分
  • 梯度估计噪声很大

确定性策略的核心优势

确定性策略:

μ(s) → a(一个具体动作)

关键好处:
  • 策略梯度公式大幅简化
  • 不再对动作分布积分
  • 在高维连续动作空间中,样本效率显著更高
这正是 Deterministic Policy Gradient(DPG) 理论的核心结论。
DDPG 的动机正是:

把 DPG + 深度网络 + DQN 稳定技巧 组合起来


六、DDPG 想解决的“终极问题是什么?”

把所有动机汇总成一句话:

DDPG 的目标,是让深度强化学习真正走出“游戏世界”,进入连续、精细、真实的物理控制世界。

这也是为什么 DDPG 的实验几乎全部是:
  • MuJoCo 物理引擎
  • 机械臂
  • 行走
  • 操作
  • 驾驶
而不是 Atari。

七、你现在应该形成的“正确认知”

到这里,你应该已经非常清楚:
  1. DDPG 不是 DQN 的“升级版”,而是“分支路线”
  2. 它解决的是:
    • 连续动作
    • 高维控制
    • 物理世界
  3. 它的思想来源是三者融合:
    • Q-learning 的价值评估
    • 策略梯度的动作输出
    • DQN 的工程稳定性

2、 DDPG 的整体架构

image.png

一、先给你一张“文字版总结构图”

在架构层面,DDPG = 5 个核心组件的组合
  1. Actor(行动者)网络
  2. Critic(评论家)网络
  3. 目标 Actor 网络
  4. 目标 Critic 网络
  5. 经验回放缓冲区 + 探索噪声
一句话概括它们的分工:

Actor 负责“怎么做”, Critic 负责“做得值不值”, 目标网络负责“别学炸了”, 回放缓冲区负责“别被当前经验绑架”。


二、Actor:连续控制的“动作生成器”

1. Actor 是什么?

Actor 是一个 确定性策略网络

μ(s) → a

  • 输入:当前状态 s
  • 输出:一个具体的连续动作 a
⚠️ 非常重要的一点: Actor 不输出概率分布,而是直接输出动作值。
这正是 DDPG 与 PPO / TRPO 等算法的根本差异。

为什么 Actor 必须是“确定性”的?

原因只有一个,但非常关键:

连续动作空间中,确定性策略的梯度计算更稳定、更高效

论文基于 Deterministic Policy Gradient 理论明确指出
  • 不需要对动作分布积分
  • 梯度直接来自 Critic 对动作的导数
  • 在高维动作空间中,样本效率更高

你可以把 Actor 理解为:

一个“已经学会怎么开机器的控制器”

例如:
  • 给我当前关节角度
  • 我直接告诉你每个关节该施加多大扭矩

三、Critic:连续动作世界里的“价值裁判”

1. Critic 在学什么?

Critic 是一个 Q 函数近似器

Q(s, a)

  • 输入:状态 s + 动作 a
  • 输出:这个动作在这个状态下,长期来看值多少钱
注意:
  • 和 DQN 不同
  • Critic 必须显式接收动作作为输入

Critic 的本质角色

你可以把 Critic 理解为:

“如果你现在这么操作,未来总体效果如何?”

它的作用只有一个:

为 Actor 提供“方向性指导”


Critic 为什么是 DDPG 的核心?

这是一个非常重要的认知点:

Actor 自己不知道“动作好不好”,它完全依赖 Critic 的判断。

如果 Critic 学歪了:
  • Actor 一定会学歪
所以你会发现:
  • DDPG 中 Critic 的稳定性比 Actor 更重要

四、Actor 和 Critic 是怎么“连起来”的?

这是 DDPG 最关键、也最容易模糊的地方。

1. Actor 的更新,不来自奖励

这是新手最常见的误解。
❌ 错误理解:

Actor 直接用 reward 更新

✅ 正确理解:

Actor 通过 Critic 的梯度更新

具体逻辑是:
  1. Actor 给出一个动作 a = μ(s)
  2. Critic 计算 Q(s, a)
  3. 对 a 求梯度:∂Q/∂a
  4. 通过链式法则,反传到 Actor 参数
直觉解释:

Critic 在告诉 Actor: “如果你把动作往这个方向微调,回报会变大。”


为什么这种结构适合连续动作?

因为在连续空间中:
  • 动作是可微的
  • Q(s, a) 对 a 是连续函数
  • 梯度可以直接指路
👉 这是 DDPG 能“精细控制”的数学基础。

五、目标网络:DDPG 能稳定训练的“保险丝”

如果你已经理解 DQN,这一部分你会非常熟悉。

1. DDPG 为什么需要目标网络?

原因和 DQN 一模一样:

如果用正在更新的网络来生成学习目标,学习会高度不稳定,甚至发散。


DDPG 中有几套目标网络?

两套:
  1. 目标 Actor:μ′
  2. 目标 Critic:Q′
这是一个非常关键的区别:

Actor 和 Critic 都必须有目标网络

论文明确指出

只有同时为 Actor 和 Critic 引入目标网络,才能避免训练中的严重不稳定问题


“软更新”是 DDPG 的独特之处

与 DQN 的“硬拷贝”不同,DDPG 使用的是:

软更新(Polyak Averaging)

形式是:
θ_target ← τ θ_online + (1 − τ) θ_target
其中 τ 非常小(如 0.001)。
直觉理解:

目标网络不是“跳变”,而是“缓慢跟随”

这让训练目标:
  • 平滑变化
  • 类似监督学习中的“稳定标签”

六、经验回放:DDPG 也是“离策略”的

1. DDPG 也是 off-policy 算法

这点非常重要:
  • Actor 在探索时:
    • 使用的是 “μ(s) + 噪声”
  • 但 Critic / Actor 的学习:
    • 不要求数据来自当前策略
👉 因此:
  • 可以使用 经验回放
  • 可以反复利用旧数据

经验回放在 DDPG 中的作用

和 DQN 完全一致:
  1. 打破样本相关性
  2. 提高样本利用率
  3. 稳定训练分布

七、探索机制:连续动作下的“理性扰动”

1. ε-greedy 在连续空间行不通

你不能:
  • 以 ε 的概率“随机选一个连续动作”
这在 ℝⁿ 中毫无意义。

DDPG 的解决方案:动作噪声

DDPG 的探索方式是:

在 Actor 输出的动作上,加噪声

a = μ(s) + N

为什么用时间相关噪声?

在物理系统中:
  • 动作有惯性
  • 相邻时间步不应剧烈跳变
因此论文采用 Ornstein–Uhlenbeck 噪声
  • 连续
  • 平滑
  • 有时间相关性
直觉理解:

不是“乱抖”,而是“自然晃动”


八、把 DDPG 架构压缩成一句话

现在我们可以把整个结构浓缩成一句非常准确的话

DDPG 是一个基于确定性 Actor–Critic 架构的深度强化学习算法, 通过 Critic 学习连续动作的价值函数, 通过 Actor 沿价值梯度直接生成动作, 并借助经验回放与软目标网络,实现稳定、高效的连续控制学习。



九、你现在应该“真的懂结构了”的标志

如果现在我问你:
  • 为什么 DDPG 需要两个网络而不是一个?
  • Actor 的梯度从哪里来?
  • 为什么不能没有目标 Actor?
  • 为什么探索是“加噪声”而不是 ε-greedy?
你都能清楚回答。
👉 这说明你已经真正掌握了 DDPG 的整体架构层面


一个完整的 DDPG 训练流程故事:

👉《教 AI 学会踩油门和打方向盘》


一、问题设定(连续控制为什么难)

你要教一个新手司机开车:
  • 状态(State):
    • 车速
    • 方向角
    • 离车道线的距离
  • 动作(Action):
    • 油门踩多少(连续值)
    • 方向盘转多少(连续值)
⚠️ 注意:
  • 不是“左 / 右 / 不动”
  • 而是 “转 3.2° 还是 3.3°”
这就是连续控制。

二、DDPG 里的人物对照表(先认人)

DDPG 组件
故事里的角色
Actor
新手司机(负责操作)
Critic
教练(负责打分)
目标 Actor / Critic
冷静的老教练(只做参考)
环境
真实道路
回放缓冲区
行车录像
噪声
新手乱试
先记住一句话:

司机负责“怎么开”,教练负责“好不好”。


三、训练正式开始:一天的教学过程

🌅 第一步:司机先乱开(探索)

刚开始的新手司机:
  • 根本不会开
  • 每一步都在乱试
所以他是这样操作的:

“我大概觉得要向左转一点,但我再随便多转点看看会怎样。”

👉 这就是:
动作 = Actor 给的 + 一点随机抖动
这点“抖动”不是胡乱抽风,而是自然晃动(类似人踩油门的抖脚)。

🛣 第二步:每次操作都会被“录像”

每一小段驾驶,都会被记录下来:
刚才车速、方向 → 我这么踩油门、打方向 → 结果是靠近车道还是跑偏了
这些记录全部存进 “行车录像仓库”

⚠️ 注意: 现在还不教,只是存录像


四、真正“学习”发生在:回放录像

🎬 第三步:教练回放录像打分

到了晚上,教练开始看片:
  • 不按时间顺序
  • 随机抽几段录像
然后对每一段说:

“如果当时你这样打方向、踩油门,从长期来看,后面会不会更稳?”

👉 这就是 Critic 在学 Q(s, a) (“这个操作值不值”)

📊 第四步:教练自己也不太自信(目标教练登场)

问题来了:
  • 教练自己也在成长
  • 今天的判断,明天可能就改
所以怎么办?
👉 请一个“冷静的老教练”
  • 老教练不天天变
  • 他的打分慢慢更新
这样可以避免:

“今天说这样最好,明天又全盘否定昨天。”


五、关键一步:司机是怎么变聪明的?

🧠 第五步:不是骂司机,而是“指方向”

教练不会说:

“你这次错了,扣 10 分!”

而是说:

“如果你当时方向盘再往左一点点,长期表现会更好。”

也就是说:
  • 不是“对 / 错”
  • 而是:
    • “往哪边微调会更好”
👉 这正是 DDPG 的精髓:

用教练的“方向建议”,来微调司机的操作习惯。


六、为什么 DDPG 特别适合“连续动作”?

因为在现实中:
  • 方向盘不是“左 / 右”
  • 而是:
    • 左 1°
    • 左 1.5°
    • 左 1.8°
DDPG 学的不是“选哪个动作”,而是:

“动作往哪个方向调一点点更好”

这就是连续控制的本质。

七、每天重复,司机越来越稳

每天流程都一样:
  1. 白天乱试(探索)
  2. 全程录像(存经验)
  3. 晚上看片(回放池)
  4. 教练学会打分(Critic)
  5. 教练指微调方向(梯度)
  6. 司机慢慢形成稳定操作(Actor)

八、一句话让你“突然懂了”

如果你只记住一句话,请记住这个:

DDPG 就像: 一个会微调操作的新手司机,在一个不断给“方向建议”的教练指导下,通过反复回看录像,学会如何在连续世界里稳定操作。


九、现在你再回头看“算法步骤”

你会发现:
  • Actor = 司机
  • Critic = 教练
  • 回放缓冲区 = 录像
  • 噪声 = 试探
  • 目标网络 = 冷静参考
👉 每一步都有现实意义,不是数学花活。