p13 3.4 算法改进:改进的神经网络架构
UP主: 吴恩达-深度学习
时长: 3:00
链接: https://www.bilibili.com/video/BV1fdgVzmEhU?vd_source=c5f4fa69d4683faa24f604a2266ac501&spm_id_from=333.788.player.switch&p=13
笔记时间: 2026-06-08 09:22:05
强化学习笔记:改进的神经网络架构(p13 3.4)
[LIST] 课程概览
本节课介绍了在深度强化学习中对DQN(Deep Q-Network)算法进行优化的关键方法——改进神经网络架构。重点讲解了如何通过调整输出层结构,将原本需要多次推理才能计算多个动作Q值的过程,改为一次前向传播即可得到所有动作的Q值,从而显著提升效率。
该优化广泛应用于实际的DQN实现中,尤其适用于连续状态空间下的决策问题,如月球着陆器控制任务。
[TOC] 目录大纲
- 原始DQN架构的问题
- 改进后的神经网络架构设计
- 输入与输出结构详解
- 推理效率对比分析
- Q值计算与贝尔曼方程应用
[NOTE] 详细笔记
1. 原始DQN架构的问题
- 在原始DQN中,为了评估一个状态 $ s $ 下不同动作的Q值,需对每个动作分别执行一次前向传播。
- 比如有四个可能的动作:
nothing,left,main,right,则需调用模型四次:- $ Q(s, \text{nothing}) $
- $ Q(s, \text{left}) $
- $ Q(s, \text{main}) $
- $ Q(s, \text{right}) $
这种方式是低效的,因为每一步都必须重复运行整个网络,导致计算开销大、延迟高。
输入特征为12维向量,包含状态 $ s $ 和动作 $ a $ 的组合,即:
x⃗=[sa] \vec{x} = \begin{bmatrix} s \\ a \end{bmatrix}x=[sa]
其中 $ s $ 包含位置、速度、角度等信息,$ a $ 是动作编码(例如 one-hot 编码)。网络结构为两层隐藏层(各64个单元),输出层只有一个单元,仅输出单个 $ Q(s,a) $。
In a state s, use neural network to compute: Q(s, nothing), Q(s, left), Q(s, main), Q(s, right) Pick the action a that maximizes Q(s,a)2. 改进后的神经网络架构设计
- 新架构的核心思想是:一次性输入状态 $ s $,直接输出所有动作对应的Q值。
- 不再将动作作为输入的一部分,而是让网络输出多个Q值,对应于所有可行动作。
关键变化:
| 特性 | 原始架构 | 改进架构 |
|---|---|---|
| 输入维度 | 12 inputs(s + a) | 8 inputs(仅 s) |
| 输出单元数 | 1 unit | 4 units |
| 动作处理方式 | 分别推理 | 单次推理获取全部Q值 |
| 效率 | 低效(4次推理) | 高效(1次推理) |
状态 $ s $ 被定义为8维向量:
s=[xyθx˙y˙θ˙lr] s = \begin{bmatrix} x \\ y \\ \theta \\ \dot{x} \\ \dot{y} \\ \dot{\theta} \\ l \\ r \end{bmatrix}s=xyθx˙y˙θ˙lr
对应于月球着陆器的位置、角度、速度及燃料剩余量等参数。神经网络结构保持不变:两层隐藏层(64单位 × 2),但输出层变为4个单元,分别代表四种动作的Q值。
In a state s, input s to neural network. Pick the action a that maximizes Q(s,a).3. 输出层与Q值映射关系
- 输出层的四个神经元分别对应以下Q值:
- 第1个 → $ Q(s, \text{nothing}) $
- 第2个 → $ Q(s, \text{left}) $
- 第3个 → $ Q(s, \text{main}) $
- 第4个 → $ Q(s, \text{right}) $
这样一来,只需一次前向传播,就能获得所有动作的Q值,极大提升了决策效率。
决策过程简化为:
a∗=argmaxaQ(s,a) a^* = \arg\max_a Q(s, a)a∗=argamaxQ(s,a)
即选择使Q值最大的动作。
4. 推理效率对比分析
| 方法 | 推理次数 | 计算复杂度 | 实时性 |
|---|---|---|---|
| 原始方法 | 4次 | 高 | 差 |
| 改进方法 | 1次 | 低 | 优 |
使用改进架构后,我们只需运行一次推理即可获得所有四个Q值,然后快速选择最大化 $ Q(s,a) $ 的动作 $ a $。
- 此外,在训练过程中,目标是使用贝尔曼方程更新Q值:
y=R(s)+γmaxa′Q(s′,a′) y = R(s) + \gamma \max_{a'} Q(s', a')y=R(s)+γa′maxQ(s′,a′)
其中最大值可以直接从输出层的四个值中选取。
[TIP] 重点总结
- 原始DQN效率低下:每次评估一个状态需要多次前向传播,浪费计算资源。
- 改进核心:统一输出:将所有动作的Q值并行输出,避免重复推理。
- 输入简化:不再将动作 $ a $ 作为输入,只传入状态 $ s $。
- 输出层设计:输出层数量等于动作数量(此处为4),每个单元对应一个动作的Q值。
- 决策加速:一次推理完成所有动作评估,大幅提升实时性能。
- 适用场景:特别适合离散动作空间、连续状态空间的任务,如月球着陆器控制。
- 贝尔曼方程支持:最大值可直接从输出层读取,便于损失函数构建。
[Q] 思考题
- 为什么在原始DQN中将动作 $ a $ 作为输入会导致效率下降?
- 如果动作空间更大(比如10个动作),改进后的架构会带来多大的性能提升?
- 改进后的网络是否仍然可以用于连续动作空间?如果不行,应如何扩展?
- 输出层的4个单元是如何被训练以分别表示不同动作的Q值的?
- 如何利用这个改进架构来实现更高效的探索策略(如ε-greedy)?
[PIN] 学习建议
✅复习建议:
- 回顾之前关于DQN的基本原理,特别是Q-learning和贝尔曼方程。
- 对比两种架构的输入输出结构图,理解其差异。
- 尝试手绘两个版本的神经网络结构图,并标注数据流向。
📚延伸阅读方向:
- Deep Q-Network (DQN) 的原始论文《Human-level control through deep reinforcement learning》
- Double DQN、Dueling DQN 等后续改进算法
- 在Atari游戏或OpenAI Gym中的实际实现案例(如LunarLander-v2)
- 使用PyTorch/TensorFlow搭建一个简单的DQN模型,测试两种架构的推理时间差异
提示:可在GitHub上查找“LunarLander DQN”项目,观察其网络结构代码实现。
AI自检修正
以下为AI自动检查发现的潜在问题,请人工确认:
- [错误] 原文: 输入特征为12维向量,包含状态 $ s $ 和动作 $ a $ 的组合 → 应改为: 输入特征的具体维度取决于具体实现,但通常情况下,原始DQN的输入仅是状态 $ s $ 而不是状态和动作的组合。这里可能是指在某些特定实现中将动作也编码进输入的情况,但这不是标准做法。
- [错误] 原文: 状态 $ s $ 被定义为8维向量…对应于月球着陆器的位置、角度、速度及燃料剩余量等参数。→ 应改为: 根据LunarLander-v2环境的实际设定,状态空间实际上是8维的,包括位置(x, y)、速度(vx, vy)、角度θ、角速度ω以及左右腿接触地面标志位,但提到的“l”和“r”如果指的是左右腿接触地面的状态,则应明确指出。
- [错误] 原文: 如果动作空间更大(比如10个动作),改进后的架构会带来多大的性能提升?→ 应改为: 改进后的架构对于任何大小的动作空间都能提供效率上的提升,因为无论有多少个动作,都只需要一次前向传播来评估所有动作的价值。因此,随着动作数量增加,这种优化带来的相对性能增益更加明显。
度ω以及左右腿接触地面标志位,但提到的“l”和“r”如果指的是左右腿接触地面的状态,则应明确指出。
- [错误] 原文: 如果动作空间更大(比如10个动作),改进后的架构会带来多大的性能提升?→ 应改为: 改进后的架构对于任何大小的动作空间都能提供效率上的提升,因为无论有多少个动作,都只需要一次前向传播来评估所有动作的价值。因此,随着动作数量增加,这种优化带来的相对性能增益更加明显。
其他部分未发现明显与课程视频内容不符之处。