Xiaohei's Blog
headpicBlur image

前言#

需要说明的是,这个系列的博客是由我的幕布笔记转化而来,如果你更喜欢图文并茂的阅读,你可以去我的幕布空间进行阅读,受限于篇幅的原因,第十二章幕布笔记在这。如果你发现有哪些地方由逻辑错误,可以通过评论告知我,十分感谢!

开始#

如果你做过一点机器人或控制任务,很快会发现:动作是连续的(扭矩、角度、速度),而 DQN 的世界观是离散动作。

文档在这一章把问题点得很透:DQN 更适用于离散动作,因为它需要计算 maxaQ(s,a)\max_a Q(s,a)。连续动作里,这个 max 不是枚举就能搞定的。

于是出现了四种思路。我也按“从最朴素到最工程”的顺序讲:采样、对动作做梯度上升、设计更复杂的网络架构、以及——不使用 DQN(也就是转向 Actor-Critic)。

方案一:对动作进行采样#

文档说得很直接:

你可以先采样 N 个候选动作 {a1,,aN}\{a_1,\dots,a_N\},把它们逐个代入 Q(s,a)Q(s,a) 做一次评分,然后从里面挑最大的那个动作执行。它朴素到像暴力搜索,所以实现起来很顺手,也很适合当 baseline;但它同样会在高维动作空间里迅速变得昂贵而且不精确。

优点:实现简单。 缺点:不精确、算力开销大,维度一高就爆炸。

方案二:对动作做梯度上升(把 a 当作待优化变量)#

文档把它描述为一个优化问题:最大化目标函数 Q(s,a)Q(s,a)

做法是:初始化一个动作 aa,对 aa 做梯度上升迭代,找到局部最大。

问题也很明显:

它既绕不开局部最优与全局最优的老问题,也会在工程上变得很慢——因为每次决策都要做若干轮迭代,你等于把“选动作”变成了一个小型优化过程。

方案三:设计更复杂的网络架构#

文档提到“数学方法复杂,但思路好”:通过变换把动作处理得更像离散。

这一类方法更多出现在学术或特定结构(比如量化、分层动作)里;工程上我更常见的是下面的路线:直接用 actor 学一个动作。

方案四:不使用 DQN(转向别的方法)#

文档最后一句“哈哈”非常真实:很多时候,连续动作最省心的方案就是不硬套 DQN,而是用 Actor-Critic。

原因是 Actor-Critic 允许:

原因在于 actor-critic 的分工非常自然:actor 负责直接输出连续动作(或连续动作分布),critic 负责评估并提供梯度信号。这样你就不需要在连续空间里每一步都去硬算一个 max,而是把它近似成一次网络前向传播。

这比“在连续空间里求 max”自然得多。

本章小结:连续动作把你推向 Actor-Critic#

如果你读到这里觉得“连续动作下硬用 Q 方法好别扭”,那说明你理解对了。

下一章我们就进入文档的第九章:演员-评论员(Actor-Critic)算法。你会看到它如何把策略梯度和 TD 学习拼在一起,让连续控制与稳定训练变得更可行。

RL 学习笔记(8):连续动作下的 Q 方法
https://xiaohei-blog.vercel.app/blog/rl-learning-8
Author 红鼻子小黑
Published at May 9, 2025
Comment seems to stuck. Try to refresh?✨