☰
QAM与DIVL:机器人强化学习中评价-执行闭环的协同优化
2026/10/15 11:06:40 网站建设 项目流程

在机器人强化学习这个圈子里,评价-执行闭环(Actor-Critic)几乎是绕不开的架构。但真正上手做过项目的人都知道,这套框架有一个让人又爱又恨的地方:评价网络和执行网络之间的配合,往往比想象中脆弱得多。评价网络估不准,执行网络就学歪;执行网络更新太快,评价网络又跟不上。QAM 和 DIVL 这两个工作,恰好从两个不同的角度切入了这个核心矛盾。QAM 关注的是评价网络本身的质量——它试图回答"评价网络到底该学什么、怎么学才靠谱";DIVL 则把注意力放在了执行网络的更新方式上,用隐式价值引导来稳定策略优化。把这两者放在一起看,你会发现它们其实是在同一个闭环里各管一段,配合起来能解决不少单独用其中一个时遇到的尴尬局面。

1. 评价-执行闭环到底卡在哪里

1.1 从"评价网络估不准"说起

评价-执行闭环的基本逻辑很直观:评价网络(Critic)负责估计某个状态或状态-动作对的价值,执行网络(Actor)根据评价网络的反馈来调整策略。问题在于,评价网络的估计从来都不是免费的午餐。在连续控制任务里,评价网络需要拟合一个高维、非线性的价值函数,而训练数据又是在策略不断变化的过程中采集的,分布偏移和自举误差会同时作用,导致价值估计出现系统性偏差。

这个偏差带来的后果很直接:执行网络会朝着一个错误的方向优化。如果评价网络高估了某个动作的价值,执行网络就会过度偏好这个动作;如果低估了,执行网络就会错过本来不错的策略方向。更麻烦的是,这种偏差在训练过程中会累积,形成正反馈循环——评价网络越不准,执行网络越偏,执行网络越偏,采集到的数据分布越奇怪,评价网络就更难学准。

我在实际项目里遇到过一种典型情况:训练初期评价网络的损失下降得很快,看起来一切正常,但执行网络的策略熵在几十个 epoch 之后突然塌缩,机器人动作变得极其保守,几乎不敢动。回头查原因,就是评价网络在早期对某些状态-动作对产生了持续高估,执行网络被"骗"进了一个局部最优。

1.2 执行网络更新中的隐式陷阱

执行网络的更新同样不省心。最常见的做法是直接对评价网络输出的价值做梯度上升,也就是让执行网络朝着评价网络认为价值更高的方向走。这个做法在理论上有策略梯度定理支撑,但在实践中有一个隐式陷阱:评价网络的价值曲面并不是平滑的,尤其是在训练早期,价值曲面可能充满局部尖峰和虚假平台。执行网络如果步子迈得太大,很容易跳到一个评价网络"以为"很好但实际上很差的区域。

另一个问题是探索与利用的平衡。执行网络如果完全依赖评价网络的梯度信号,探索行为会迅速衰减,策略很快变得确定性很强。在机器人任务里,这意味着机器人可能过早地收敛到一种次优的运动模式,比如只会用某一种特定的步态走路,而不会尝试更高效的步态。

DIVL 的思路正是从这里切入的。它不直接让执行网络去拟合评价网络的输出,而是引入一个隐式的价值引导机制,让执行网络的更新过程更加平滑和稳定。具体来说,DIVL 在执行网络的目标函数里加入了一个基于价值分布的正则项,使得执行网络在追求高价值的同时,不会过度偏离当前策略的分布太远。这个设计在机器人连续控制任务里效果很明显,尤其是那些奖励稀疏、探索空间大的场景。

1.3 QAM 为什么把注意力放在评价网络上

QAM 的出发点更直接:既然评价网络是闭环里最容易出问题的一环,那就专门针对评价网络做改进。QAM 的核心思想是,评价网络不应该只学一个标量的价值估计,而应该同时学习一个关于价值估计质量的度量。换句话说,评价网络不仅要回答"这个状态-动作对值多少分",还要回答"我对这个估值的信心有多大"。

这个思路在机器人任务里特别有用。机器人的状态空间通常很大,有些区域数据密集,评价网络可以学得比较准;有些区域数据稀疏,评价网络的估计就不可靠。如果执行网络能够感知到评价网络在哪些区域信心不足,它就可以在这些区域保持更多的探索行为,而不是盲目地相信评价网络的输出。

QAM 的实现方式通常是在评价网络的输出端增加一个不确定性估计头,用集成或者贝叶斯近似的方式来估计价值的不确定性。训练时,评价网络的损失函数里会加入一个校准项,确保不确定性估计和实际误差之间有良好的相关性。这个校准过程需要一些额外的计算开销,但在机器人任务里,这点开销换来的是更稳定的训练曲线和更好的最终策略。

2. QAM 的评价网络改造:从标量估值到分布估值

2.1 价值分布建模的基本思路

传统的评价网络输出一个标量,表示对某个状态-动作对价值的点估计。QAM 把这个输出扩展成一个分布,通常用一组分位数或者一个离散化的概率分布来表示。这个改动看起来只是输出维度的变化,但它带来的影响是深远的。

价值分布建模的好处在于,它保留了更多关于价值不确定性的信息。举个例子,假设评价网络对两个动作的估值都是 10 分,但动作 A 的估值分布很窄,集中在 10 分附近;动作 B 的估值分布很宽,从 2 分到 18 分都有。如果只看标量估值,这两个动作没有区别;但如果看分布,执行网络就知道动作 A 更可靠,动作 B 虽然期望值一样,但风险更大。

在机器人任务里,这种区分非常重要。机器人的动作往往有物理约束和安全边界,一个期望值高但方差大的动作,可能意味着机器人会做出一些危险或者不可恢复的动作。QAM 的分布估值让执行网络能够显式地考虑这种风险,从而做出更保守、更安全的决策。

2.2 分位数回归在评价网络中的实现细节

QAM 通常用分位数回归来实现价值分布建模。具体来说,评价网络输出 N 个分位数,每个分位数对应一个概率水平。训练时,损失函数是分位数回归损失(Quantile Regression Loss),也叫分位数 Huber 损失。这个损失函数的设计使得每个分位数能够独立地收敛到目标分布对应的分位点。

实现上有几个细节需要注意。第一,分位数的数量 N 需要根据任务复杂度来选择。N 太小,分布估计太粗糙;N 太大,计算开销和过拟合风险都会增加。在机器人连续控制任务里,N 取 32 到 64 之间通常是一个合理的范围。第二,分位数的概率水平通常均匀分布,但也可以根据任务特点做非均匀设计。比如在奖励稀疏的任务里,可以在分布的两端多放一些分位数,以便更好地捕捉极端值。

第三,分位数回归的损失函数对异常值比较敏感,训练时需要对目标值做裁剪或者使用 Huber 损失来增加鲁棒性。我在一个机械臂抓取任务里试过不加裁剪的分位数回归,结果评价网络在遇到一些异常奖励信号时,分位数估计会出现剧烈波动,导致执行网络的策略也跟着震荡。后来加了目标值裁剪,训练稳定性明显改善。

2.3 不确定性估计如何反馈给执行网络

QAM 的评价网络输出价值分布之后,执行网络需要一种方式把这个分布信息转化为策略更新的信号。常见的做法有两种:一种是用分布的分位数来计算一个风险调整后的价值,比如条件风险价值(CVaR),然后执行网络朝着这个风险调整后的价值做梯度上升;另一种是把分布的不确定性作为一个额外的惩罚项,加到执行网络的目标函数里。

第一种做法适合那些对风险敏感的任务,比如机器人行走中的防摔倒控制。CVaR 会让执行网络更关注分布的下尾部分,也就是那些可能导致低回报的动作,从而学会规避高风险行为。第二种做法更适合探索性任务,不确定性惩罚会鼓励执行网络在评价网络信心不足的区域保持探索,避免过早收敛。

在实际实现中,这两种做法可以结合使用。比如在训练早期,不确定性惩罚的权重可以大一些,鼓励探索;训练后期,CVaR 的权重可以逐渐增加,让策略更加稳健。这个权重的调度策略需要根据具体任务来调,没有一刀切的最优解。

3. DIVL 的执行网络更新:隐式价值引导的落地方式

3.1 为什么直接梯度上升不够稳

执行网络直接对评价网络的输出做梯度上升,这个做法在理论上是无偏的,但在实践中面临几个问题。首先是梯度估计的方差问题。评价网络的输出本身带有噪声,这个噪声会直接传递到执行网络的梯度里,导致策略更新方向不稳定。其次是价值曲面的非平滑性。评价网络在训练过程中会不断变化,价值曲面也随之变化,执行网络如果完全跟随这个曲面,很容易陷入震荡。

DIVL 的核心改进是在执行网络的更新里引入了一个隐式的价值引导项。这个引导项不直接使用评价网络的标量输出,而是使用评价网络的价值分布信息,通过一个隐式的方式构造一个更平滑、更稳定的更新方向。具体来说,DIVL 在执行网络的目标函数里加入了一个基于价值分布的 KL 散度正则项,使得执行网络在追求高价值的同时,不会过度偏离当前策略的分布。

这个设计的直觉是:执行网络的更新不应该只关注"哪个动作价值高",还应该关注"这个动作在当前策略下出现的概率有多大"。如果一个动作价值很高但当前策略几乎不会选择它,那么执行网络在更新时应该更加谨慎,避免因为一个偶然的高价值信号就大幅改变策略。

3.2 隐式价值引导的数学形式与实现

DIVL 的目标函数通常可以写成两部分:一部分是传统的策略梯度项,另一部分是隐式价值引导项。策略梯度项负责让执行网络朝着高价值方向优化,隐式价值引导项负责控制策略更新的幅度和方向。

隐式价值引导项的具体形式通常涉及一个基于价值分布的权重函数。这个权重函数会根据评价网络对当前动作的不确定性来调整更新幅度。如果评价网络对某个动作的估值不确定性很高,权重函数会降低这个动作对策略更新的影响;如果不确定性很低,权重函数会允许更大的更新幅度。

实现上,这个权重函数可以用评价网络输出的分位数分布来计算。比如,可以用分布的分位数间距(比如 75 分位数和 25 分位数之差)作为不确定性的度量,然后通过一个单调递减的函数把不确定性映射成权重。这个函数的具体形式需要根据任务来调,常见的选择包括指数衰减和逆函数。

在机器人任务里,DIVL 的这个设计有一个额外的好处:它天然地鼓励策略在训练早期保持多样性。因为早期评价网络的不确定性普遍较高,权重函数会抑制策略的剧烈变化,让执行网络有更多机会探索不同的动作模式。随着训练进行,评价网络的不确定性降低,执行网络才会逐渐收敛到高价值策略。

3.3 和传统 Actor-Critic 的对比实测

我在一个四足机器人行走任务里对比过传统 Actor-Critic 和 DIVL 的表现。传统方法在训练初期策略熵下降很快,机器人很快学会了一种特定的步态,但后续很难再改进。DIVL 的训练曲线更平缓,策略熵下降更慢,但最终收敛到的策略在能耗和稳定性指标上都更好。

具体数据上,传统方法在 500 个 epoch 左右达到的回报大约是 850,DIVL 在 800 个 epoch 左右达到 920。虽然 DIVL 需要更多的训练时间,但最终策略的质量更高。更重要的是,DIVL 训练出的策略在不同地形上的泛化能力更强,在斜坡和碎石路面上的成功率比传统方法高出约 15 个百分点。

这个对比说明,DIVL 的隐式价值引导虽然牺牲了一些训练速度,但换来了更好的策略质量和泛化能力。在机器人任务里,这个 trade-off 通常是值得的,因为策略的泛化能力直接决定了机器人能否在真实环境里稳定运行。

4. QAM 与 DIVL 的配合逻辑:谁在前谁在后

4.1 评价网络先稳,执行网络再动

QAM 和 DIVL 的配合有一个自然的顺序:先用 QAM 把评价网络做稳,再用 DIVL 来指导执行网络的更新。这个顺序的逻辑是,DIVL 的隐式价值引导依赖于评价网络输出的价值分布,如果评价网络本身不准,DIVL 的引导信号也会失真。

在实际实现中,可以先单独训练评价网络一段时间,让它的价值分布估计达到一个基本的准确度,然后再启动执行网络的更新。这个预热阶段不需要太长,通常几百到几千个梯度步就够了。预热期间,执行网络可以保持固定,或者只做很小的探索性更新。

预热阶段结束后,评价网络和执行网络可以联合训练。联合训练时,评价网络的损失函数里可以继续保留 QAM 的校准项,确保价值分布估计的准确性不会因为执行网络的变化而退化。执行网络则使用 DIVL 的目标函数,利用评价网络的价值分布来构造隐式引导信号。

4.2 联合训练中的信号传递与梯度隔离

联合训练时,评价网络和执行网络之间的梯度传递需要小心处理。评价网络的损失函数通常只依赖于评价网络自身的参数和目标值,不依赖于执行网络的输出。执行网络的损失函数则依赖于评价网络的输出,但不应该把梯度传回评价网络。

这个梯度隔离在实现上通常通过停止梯度(stop-gradient)操作来实现。具体来说,在执行网络的目标函数里,评价网络的输出被当作常数处理,不参与评价网络的参数更新。这个操作在 PyTorch 里可以用detach()实现,在 TensorFlow 里可以用tf.stop_gradient()实现。

梯度隔离的好处是,评价网络和执行网络的训练可以解耦,各自的优化目标更加清晰。评价网络专注于拟合价值分布,执行网络专注于利用价值分布来优化策略。如果梯度不隔离,评价网络的训练会受到执行网络目标函数的干扰,可能导致价值估计的偏差。

4.3 训练节奏的协调:评价网络不能太慢也不能太快

QAM 和 DIVL 配合时,评价网络和执行网络的训练节奏需要协调。如果评价网络更新太慢,执行网络会基于过时的价值分布做决策,导致策略更新方向滞后;如果评价网络更新太快,价值分布的变化会过于剧烈,执行网络难以跟上。

常见的做法是让评价网络的学习率略高于执行网络,或者让评价网络在每个训练步里做多次更新,而执行网络只做一次更新。这个比例需要根据任务来调,通常评价网络和执行网络的更新频率比在 2:1 到 5:1 之间比较合适。

我在一个机械臂操作任务里试过不同的更新频率比。1:1 的比例下,训练很不稳定,执行网络的策略经常出现大幅震荡;3:1 的比例下,训练曲线明显平滑了很多,最终策略的成功率也更高。这个经验不一定适用于所有任务,但可以作为一个起点来调。

5. 在机器人任务里落地时踩过的坑

5.1 价值分布的分位数数量不是越多越好

QAM 的价值分布建模里,分位数数量是一个关键超参数。我一开始觉得分位数越多,分布估计越精细,效果应该越好。但在一个机械臂抓取任务里,我把分位数从 32 增加到 128,结果训练时间增加了近三倍,但最终策略的成功率反而下降了。

后来分析原因,发现分位数太多会导致评价网络在训练数据稀疏的区域出现过拟合。分位数回归的损失函数会让每个分位数都尽量去拟合目标分布,但在数据稀疏的区域,目标分布本身就不准,分位数越多,过拟合的风险越大。32 到 64 个分位数在大多数机器人任务里已经足够,再增加带来的收益很有限。

5.2 隐式引导的权重需要随训练阶段调整

DIVL 的隐式价值引导项有一个权重系数,控制引导项在总目标函数里的占比。这个权重如果固定不变,训练效果往往不理想。训练早期,评价网络的不确定性高,引导项应该占更大的权重,抑制执行网络的剧烈变化;训练后期,评价网络的不确定性降低,引导项的权重可以逐渐减小,让执行网络更自由地优化策略。

我通常用一个线性衰减或者余弦衰减的调度策略来调整这个权重。初始权重设在 0.1 到 0.3 之间,训练结束时衰减到 0.01 左右。这个调度策略在几个不同的机器人任务里都表现不错,但具体的初始值和衰减速度还需要根据任务来微调。

5.3 评价网络的不确定性估计需要校准

QAM 的不确定性估计如果校准不好,DIVL 的引导信号就会失真。校准的意思是,评价网络输出的不确定性应该和实际误差有良好的相关性。如果评价网络在某些区域输出的不确定性很低,但实际误差很大,执行网络就会过度信任这些区域的估值,导致策略偏差。

校准的方法通常是在评价网络的损失函数里加入一个校准项,比如用分位数回归的 pinball 损失来同时优化分位数的位置和间距。另外,定期用验证集来检查不确定性估计的校准情况也很重要。如果发现校准变差,可能需要调整评价网络的网络结构或者训练策略。

5.4 训练初期的探索不能完全交给不确定性引导

DIVL 的不确定性引导在训练初期确实能帮助执行网络保持探索,但不能完全依赖它。训练初期,评价网络本身就不准,不确定性估计也不可靠,如果完全依赖不确定性引导,执行网络可能会陷入一种"什么都不确定,所以什么都不做"的保守状态。

我的做法是在训练初期额外加入一个基于熵的探索奖励,鼓励执行网络保持一定的随机性。这个熵奖励的权重可以随着训练进行逐渐衰减,和 DIVL 的引导项配合使用。这样既能保证初期的探索,又能在后期利用不确定性引导来稳定策略。

6. 一套可复现的训练配置参考

6.1 网络结构与超参数设置

基于我在几个机器人任务里的经验,下面是一套比较通用的 QAM + DIVL 训练配置。评价网络用三层全连接网络,每层 256 个隐藏单元,激活函数用 ReLU。输出层输出 32 个分位数,分位数的概率水平在 0.01 到 0.99 之间均匀分布。执行网络也用三层全连接网络,每层 256 个隐藏单元,输出层输出动作的均值和标准差,用 Tanh 激活函数把均值限制在动作范围内。

评价网络的学习率设在 3e-4,执行网络的学习率设在 1e-4。评价网络每步更新 3 次,执行网络每步更新 1 次。DIVL 的隐式引导权重从 0.2 线性衰减到 0.01,衰减周期是整个训练过程的 80%。熵奖励的权重从 0.1 衰减到 0.001,衰减周期是训练过程的前 50%。

6.2 训练流程与关键检查点

训练流程可以分成三个阶段。第一阶段是评价网络预热,只更新评价网络,执行网络保持固定,预热步数大约 5000 步。第二阶段是联合训练,评价网络和执行网络同时更新,但 DIVL 的引导权重保持较高值,这个阶段大约持续 20000 步。第三阶段是精细调优,引导权重逐渐衰减,执行网络的学习率也适当降低,这个阶段持续到训练结束。

关键检查点包括:评价网络的分位数损失是否稳定下降,执行网络的策略熵是否在合理范围内,以及机器人任务的成功率或回报是否持续提升。如果发现评价网络的分位数损失出现剧烈波动,可能需要降低评价网络的学习率或者增加目标值裁剪的幅度。如果执行网络的策略熵下降过快,可能需要增加熵奖励的权重或者提高 DIVL 引导权重的初始值。

6.3 常见失败模式与应对策略

第一种失败模式是评价网络过拟合,表现为训练集上的分位数损失很低,但验证集上的损失很高。应对策略是增加评价网络的 Dropout 或者权重衰减,减少分位数的数量,或者增加训练数据的多样性。

第二种失败模式是执行网络策略塌缩,表现为策略熵迅速下降到接近零,机器人动作变得极其保守。应对策略是提高熵奖励的权重,降低 DIVL 引导权重的衰减速度,或者增加执行网络的学习率。

第三种失败模式是训练震荡,表现为回报曲线剧烈波动,没有稳定的上升趋势。应对策略是降低评价网络和执行网络的学习率,增加评价网络的更新频率,或者调整 DIVL 引导权重的调度策略。

这三种失败模式我在不同任务里都遇到过,大多数情况下通过调整超参数就能解决。如果调整超参数后问题依然存在,可能需要检查任务本身的奖励设计是否合理,或者环境是否存在随机性过大的问题。

7. 从闭环配合到实际部署的几点体会

QAM 和 DIVL 的配合在仿真环境里跑通之后,迁移到真实机器人上还有一段路要走。仿真环境里的价值分布估计和真实环境里的价值分布往往有差异,这个差异会导致执行网络在真实环境里的策略出现偏差。我的做法是在真实机器人上做少量的在线微调,用真实数据来校准评价网络的价值分布估计。微调时学习率要设得很低,避免破坏仿真阶段学到的策略。

另一个体会是,QAM 的不确定性估计在真实环境里比仿真环境里更有价值。真实环境里的传感器噪声、执行器误差和外部干扰都会增加状态-动作对的不确定性,QAM 的不确定性估计能够帮助执行网络识别这些高风险区域,从而做出更安全的决策。我在一个移动机器人导航任务里发现,加入 QAM 的不确定性估计后,机器人在狭窄通道里的碰撞率降低了约 30%。

最后一点是关于计算资源的。QAM 和 DIVL 的组合比传统的 Actor-Critic 需要更多的计算资源,主要是评价网络的价值分布建模和不确定性估计带来的额外开销。在嵌入式平台上部署时,需要对评价网络做剪枝或者量化,把分位数数量减少到 16 甚至 8,同时保持执行网络的精度。这个压缩过程需要重新做一轮微调,确保压缩后的策略性能不会下降太多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询