chaoheng
发布于 2026-09-16 / 8 阅读
0
0

把强化学习真正串起来:从 Q 值、策略梯度到离线学习与 HER

一份沿着真实疑问展开的学习复盘。重点不是背算法缩写,而是能回答:数据从哪里来,网络输入输出是什么,loss 为什么这样写,梯度更新谁,部署时究竟调用什么。

整理日期:2026 年 9 月 16 日。本文以经典算法的主要形式为准;不同论文版本和工程实现可能有所调整。数值例子用于解释机制,不代表实验结果。

阅读路线

  • 一、先建立一套共同语言

  • 二、Q-learning 与 DQN:先学会给动作打分

  • 三、策略梯度:没有正确动作标签,怎么训练策略?

  • 四、TRPO:把“新策略比旧策略好多少”变成可计算目标

  • 五、PPO 与 GRPO:简化更新,改变优势的来源

  • 六、DDPG、TD3 与 SAC:让 Q 的梯度传回 Actor

  • 七、把训练和推理彻底分开

  • 八、在线、离线、同策略、异策略:四个词不能混用

  • 九、Dyna-Q、MPC、PETS、MBPO:模型究竟拿来做什么?

  • 十、GAN、GAIL 与占用度量:没有奖励,能不能向专家学?

  • 十一、BCQ 与 CQL:只有固定数据,为什么 Q 会骗自己?

  • 十二、其他离线方法:IQL、TD3+BC、DT 与 MOPO

  • 十三、目标条件学习与 HER:失败经历怎样变成有用的数据?

  • 十四、贝叶斯优化:什么时候根本不必把问题写成 RL?

  • 十五、环境选择、成本对照与工程检查

  • 十六、关键疑问复盘与速查表

一、先建立一套共同语言

最初学习强化学习时,很容易把 Q-learning、PPO、SAC 看成完全不同的东西。实际上,它们都在处理同一个循环:智能体观察当前情况,做一个动作,得到反馈,再改变下一次的决策方式。

一条交互记录写成:

(st,at,rt,st+1,dt).(s_t,a_t,r_t,s_{t+1},d_t).

这里统一约定:rₜ 是执行 aₜ 后得到的奖励;dₜ = 1 表示任务真正终止。某些教材把这个奖励记作 rₜ₊₁,只是下标约定不同。

符号

通俗含义

导航例子

s

状态:现在是什么情况

位置、速度、障碍物信息

a

动作:现在做什么

向左、向右,或者连续速度

P(s′∣s,a)

环境如何变化

往右走后实际到了哪里

r

本次动作得到的反馈

未到目标为 −1,到达为 0

π(a∣s)

策略:怎么选择动作

各方向的选择概率

γ

折扣因子

对较远未来的奖励重视多少

τ

轨迹 trajectory

从开始到结束的一整段交互

强化学习通常关心累计回报,而不只关心这一步:

Gt=rt+γrt+1+γ2rt+2+.G_t=r_t+\gamma r_{t+1}+\gamma^2r_{t+2}+\cdots.

眼前奖励低的动作,也可能为后面的大收益创造条件。这就是“序列决策”的含义。

V、Q、A 是三个不同的问题。

Vπ(s)=Eπ[Gtst=s],V^\pi(s)=\mathbb{E}_\pi[G_t\mid s_t=s],

表示“现在处于这个状态,后面按策略 π 行动,平均有多好”。

Qπ(s,a)=Eπ[Gtst=s,at=a],Q^\pi(s,a)=\mathbb{E}_\pi[G_t\mid s_t=s,a_t=a],

表示“现在先做动作 a,后面按策略 π 行动,平均有多好”。

Aπ(s,a)=Qπ(s,a)Vπ(s)A^\pi(s,a)=Q^\pi(s,a)-V^\pi(s)

表示“这个动作比当前策略在这个状态下的平均水平好多少”。例如 Q(s,a) = 8、V(s) = 5,优势就是 3。优势为负,表示这个动作比基准差,不等于环境奖励一定为负。

读公式时,先读期望的下标。

先看这个期望:

EsD,,aπ(s)[f(s,a)].\mathbb{E}_{s\sim\mathcal{D},,a\sim\pi(\cdot\mid s)}[f(s,a)].

操作含义是:先从数据集取状态,再让策略采样动作,计算 f,最后平均。它与下面这个期望不同:

E(s,a)D[f(s,a)].\mathbb{E}_{(s,a)\sim\mathcal{D}}[f(s,a)].

后者把状态和动作一起从历史记录中取出。区别就在期望符号下面写的采样来源。

如果从分布中独立采样 N 次,那么:

E[f(X)]1Ni=1Nf(xi).\mathbb{E}[f(X)]\approx\frac1N\sum_{i=1}^N f(x_i).

这就是 Monte Carlo 估计的基本想法:用抽样平均近似总体平均。无需枚举所有轨迹,但有限样本会有误差。

Monte Carlo 与 TD 的区别在“未来用什么表示”。

  • Monte Carlo:等后续奖励实际发生,用观测到的回报作为目标。

  • TD:用“当前奖励+对后续价值的估计”构造目标,不必等整条轨迹结束。

  • TD 用估计去更新估计,称为自举 bootstrapping;它能更快传播信息,也可能传播估计错误。

后面很多算法的分歧,恰恰发生在“未来价值怎么估计”以及“能不能相信这个估计”。

二、Q-learning 与 DQN:先学会给动作打分

既然 Q 表示动作的长期价值,一个自然想法是:先学 Q,再挑最高分动作。

2.1 Q-learning:一条真实记录,加一个未来价值目标。

y=r+γ(1d)maxaQ(s,a),y=r+\gamma(1-d)\max_{a'}Q(s',a'),
Q(s,a)Q(s,a)+η,[yQ(s,a)].Q(s,a)\leftarrow Q(s,a)+\eta,[y-Q(s,a)].

η 是学习率。后一式也可以写成 (1 − η)Q + ηy:让旧估计向新目标靠近一点。

例如旧 Q(s,a) = 5,奖励为 1,下一状态最高 Q 为 8,γ = 0.9,则 y = 8.2。若 η = 0.1,更新后是 5.32。算法没有直接拿到完整的真实长期回报,而是用下一状态的当前估计帮助学习。

一个关键疑问:明明探索时选了左,为什么更新里还取 max?

要区分两个动作:当前实际执行的 a,以及下一状态计算目标时比较的 a′。记录来自“这一次实际做了什么”;目标回答的是“做完之后,如果未来继续选最好动作,应该有多少价值”。

Q-learning 的行为可以带探索,但学习目标指向贪婪的最优策略。这就是它属于 off-policy 的原因之一。作为对照,SARSA 的目标使用实际采样的下一动作 a′:r + γQ(s′,a′),经典形式在学习当前行为策略的价值。

greedy 与 epsilon-greedy。

  • greedy:直接选 Q(s,a) 最高的动作。

  • ε-greedy:以 1 − ε 的概率贪婪,以 ε 的概率随机选动作。随机分支也可能抽到贪婪动作。

探索是为了获得未知动作的真实反馈。某个动作当前分数低,不代表它真的差,也可能只是尚未了解。

2.2 DQN:把表格换成神经网络。

表格适合有限、小规模的状态动作空间。状态很大时,DQN 用网络近似 Q。典型离散版本输入状态,一次输出所有动作的评分:

s[Qθ(s,a1),,Qθ(s,am)].s\longmapsto[Q_\theta(s,a_1),\ldots,Q_\theta(s,a_m)].

用经验回放池保存交互,抽取小批量训练:

y=r+γ(1d)maxaQθˉ(s,a),LQ=E[(Qθ(s,a)y)2].y=r+\gamma(1-d)\max_{a'}Q_{\bar\theta}(s',a'), \qquad L_Q=\mathbb{E}[(Q_\theta(s,a)-y)^2].

在线网络 Qθ 接受梯度更新;目标网络 目标 Q 给出暂时较稳定的目标。y 在这次更新中停止梯度。目标参数可以定期复制,或缓慢跟随:

θˉτθ+(1τ)θˉ.\bar\theta\leftarrow\tau\theta+(1-\tau)\bar\theta.

目标网络不是“更正确的老师”,而是当前估计的滞后版本,用来减少双方一起快速变化造成的不稳定。它不能从根本上消除错误估计。

**训练与推理:**训练时采样、存回放、更新在线 Q、更新目标 Q;推理时通常只运行在线 Q,取最高分动作。Double DQN 进一步把下一动作的选择与评价分开:在线 Q 选动作,目标 Q 评价,有助于缓解 max 带来的过估计。

问题也随之出现:如果动作是连续实数,不能把无穷多个动作全部打分。接下来可以直接学习“怎样生成动作”。DQN 的经典来源见 原论文

三、策略梯度:没有正确动作标签,怎么训练策略?

直接学习策略 πφ,并不意味着必须有人告诉它“标准动作是什么”。环境回报可以告诉我们:这次做法总体表现好不好。

3.1 从“让好轨迹更常发生”开始。

为简化推导,先用有限时域、无折扣的轨迹回报 R(τ):

J(ϕ)=Eτπϕ[R(τ)]=τpϕ(τ)R(τ).J(\phi)=\mathbb{E}_{\tau\sim\pi_\phi}[R(\tau)] =\sum_\tau p_\phi(\tau)R(\tau).

连续变量时求和换成积分。我们希望调整参数,让高回报轨迹的概率增加。

之前最难理解的恒等式,其实来自链式求导:

ϕlogpϕ(τ)=ϕpϕ(τ)pϕ(τ),\nabla_\phi\log p_\phi(\tau) =\frac{\nabla_\phi p_\phi(\tau)}{p_\phi(\tau)},

所以:

ϕpϕ(τ)=pϕ(τ)ϕlogpϕ(τ).\nabla_\phi p_\phi(\tau) =p_\phi(\tau)\nabla_\phi\log p_\phi(\tau).

代回去,就重新得到一个期望:

ϕJ=Eτπϕ[R(τ)ϕlogpϕ(τ)].\nabla_\phi J =\mathbb{E}_{\tau\sim\pi_\phi} [R(\tau)\nabla_\phi\log p_\phi(\tau)].

轨迹概率是初始状态概率、每步动作概率、状态转移概率的乘积。取 log 后乘积变求和;当环境动力学不直接依赖策略参数时,对固定采样轨迹求导,留下的是策略项:

ϕlogpϕ(τ)=tϕlogπϕ(atst).\nabla_\phi\log p_\phi(\tau) =\sum_t\nabla_\phi\log\pi_\phi(a_t\mid s_t).

于是,自己采样若干轨迹,就能近似这个梯度。不是完全知道每种行为的价值,而是让采样结果统计地指引概率调整。 完整推导及代码对应关系见 Spinning Up 策略梯度教程

3.2 REINFORCE 与优势:好坏要有参照。

最简单的实现用回报加权 log-probability;利用因果关系,还可以用从当前时刻开始的 reward-to-go。进一步减去与当前动作无关的状态基线,得到常见的优势形式:

Lactor=1Ntlogπϕ(atst),A^t.L_{\mathrm{actor}}=-\frac1N\sum_t\log\pi_\phi(a_t\mid s_t),\hat A_t.

这里的 aₜ 已经采样完成,估计优势 Âₜ 作为固定权重。正优势推动增加该动作概率,负优势推动减小概率。以上是常见批量实现写法;严格折扣目标中的时间权重需要与状态采样约定保持一致。

V 网络由此有了作用:预测状态基准,减少单纯使用随机回报造成的方差。V 的 loss 是回归回报目标;Actor 的 loss 是概率调整,两个 loss 的任务不同。

常见的 GAE 用多步 TD 残差估计优势:

δt=rt+γ(1dt)V(st+1)V(st),\delta_t=r_t+\gamma(1-d_t)V(s_{t+1})-V(s_t),
A^t=δt+γλGAEδt+1+(γλGAE)2δt+2+.\hat A_t=\delta_t+\gamma\lambda_{\mathrm{GAE}}\delta_{t+1} +(\gamma\lambda_{\mathrm{GAE}})^2\delta_{t+2}+\cdots.

实际递推需要在轨迹边界处正确截断。GAE 系数 λ 调节偏差与方差,不能与 CQL 的保守系数混为一谈。优势估计的来源见 GAE 原论文

这一支 Actor 的梯度是经过 log 概率的,不是经过环境,也不要求对采样动作本身求导。 这为后面理解 TRPO、PPO、GRPO 打下基础。

四、TRPO:把“新策略比旧策略好多少”变成可计算目标

学会策略梯度之后,新的问题是:方向对了,一次迈多大?网络参数只变化一点,动作分布也可能变化很大;对同一批轨迹反复猛学,未必带来真实回报提高。

TRPO 的思路是:寻找能提高表现的更新,同时限制新旧策略分布变化。理解它的最佳入口,是曾经那句复盘:“先做新旧相减,用优势表达差异;新状态分布难采样,就局部近似;动作概率用新旧比值转换;再加 KL 约束。”

4.1 新旧策略的差异,为什么和旧优势有关?

定义归一化折扣状态分布:

dπ(s)=(1γ)t=0γtPrπ(st=s).d_\pi(s)=(1-\gamma)\sum_{t=0}^{\infty}\gamma^t\Pr_\pi(s_t=s).

在共同初始分布、γ < 1 的常规设定下,性能差异恒等式是:

J(πnew)J(πold)=11γEsdnew,aπnew[Aπold(s,a)].J(\pi_{\mathrm{new}})-J(\pi_{\mathrm{old}}) =\frac1{1-\gamma} \mathbb{E}_{s\sim d_{\mathrm{new}},a\sim\pi_{\mathrm{new}}} [A^{\pi_{\mathrm{old}}}(s,a)].

它告诉我们:沿新策略可能经历的状态和动作,用旧策略的优势评价这些选择,平均优势决定新旧表现差异。

直观上,旧策略优势 A_old 包含“这一步奖励+下一状态旧价值−当前状态旧价值”。沿轨迹求折扣和,中间的价值项会相互抵消,留下新策略回报减去旧策略的初始价值。这是公式成立的关键。

4.2 为什么变成了旧数据和概率比值?

我们只有旧策略采到的数据。对每个待尝试的新策略重新采集完整轨迹,成本很高。于是局部近似:

dnew(s)dold(s).d_{\mathrm{new}}(s)\approx d_{\mathrm{old}}(s).

对动作则做重要性加权:

Eaπnew[f(a)]=Eaπold[πnew(as)πold(as)f(a)],\mathbb{E}_{a\sim\pi_{\mathrm{new}}}[f(a)] =\mathbb{E}_{a\sim\pi_{\mathrm{old}}} \left[\frac{\pi_{\mathrm{new}}(a\mid s)}{\pi_{\mathrm{old}}(a\mid s)}f(a)\right],

前提是旧分布覆盖新分布所需的动作支持。忽略不影响最优解的常数后,得到替代目标:

L(ϕ)=Es,aπold[wϕ(s,a)A^old(s,a)],wϕ=πϕ(as)πold(as).L(\phi)=\mathbb{E}_{s,a\sim\pi_{\mathrm{old}}} [w_\phi(s,a)\hat A_{\mathrm{old}}(s,a)], \qquad w_\phi=\frac{\pi_\phi(a\mid s)}{\pi_{\mathrm{old}}(a\mid s)}.

例如某动作旧概率 0.2,新概率 0.3,比值 1.5,表示新策略更倾向这个动作。比值修正的是同一状态下动作的分布,不会自动修正状态访问分布的变化。

4.3 KL 约束与拉格朗日函数。

为了让局部近似更可信,限制平均 KL:

maxϕL(ϕ),EsdoldDKL(πold(s)πϕ(s))δ.\max_\phi L(\phi),\qquad \mathbb{E}_{s\sim d_{\mathrm{old}}} D_{\mathrm{KL}}(\pi_{\mathrm{old}}(\cdot\mid s)|\pi_\phi(\cdot\mid s))\le\delta.

KL 衡量分布差异,不是普通的对称距离。不同实现可采用不同方向的局部 KL;必须保证推导和实现一致。理论性能界与实践中的采样平均 KL 也不能直接等同。

把目标局部线性化、KL 二次化,令 Δ = φ − φ_old:

maxΔgpgTΔ,12ΔTFΔδ.\max_\Delta g_{\mathrm{pg}}^T\Delta, \qquad\frac12\Delta^TF\Delta\le\delta.

策略梯度 g_pg 是目标梯度,F 是 KL 的局部曲率。拉格朗日函数把“想提高多少”和“越界代价”合成一个表达式:

L(Δ,ν)=gpgTΔν(12ΔTFΔδ),ν0.\mathcal{L}(\Delta,\nu)=g_{\mathrm{pg}}^T\Delta -\nu\left(\frac12\Delta^TF\Delta-\delta\right),\quad\nu\ge0.

对 Δ 求导并令其为零,可得方向与 F⁻¹g_pg 成正比,再按 KL 预算缩放。实现通常用共轭梯度求近似方向、用矩阵向量积避免显式求逆,再回溯线搜索检查目标改善与 KL。

**训练:**旧策略采轨迹,算回报和优势,固定旧 log 概率,进行受约束的策略更新,再回归训练 V。**推理:**只需策略网络。TRPO 的价值在于控制策略更新幅度,但神经网络、有限数据与近似求解并不保证每轮真实回报必然上升。参见 TRPO 原论文实现解释

五、PPO 与 GRPO:简化更新,改变优势的来源

5.1 PPO:用更容易优化的目标,抑制过度更新。

TRPO 的约束求解比较复杂。PPO-Clip 保留旧数据、概率比值和优势,改用:

Lclip(ϕ)=Et[min(wtA^t,clip(wt,1ϵ,1+ϵ)A^t)],L^{\mathrm{clip}}(\phi)=\mathbb{E}_t \left[\min\left(w_t\hat A_t, \operatorname{clip}(w_t,1-\epsilon,1+\epsilon)\hat A_t\right)\right],
wt=exp[logπϕ(atst)logπold(atst)].w_t=\exp[\log\pi_\phi(a_t\mid s_t)-\log\pi_{\mathrm{old}}(a_t\mid s_t)].

Actor 最大化这个目标;代码中通常最小化其负数。

当 优势 Â = 2、ε = 0.2,把概率比从 1 提到 1.2 有收益;继续提到 1.5,截断分支不再提供额外收益。当 优势 Â = −2,则希望减少这个动作的概率,但比值降到 0.8 以下后,也停止奖励这种进一步下降。反方向的有害改变仍可能受到惩罚,这也是为什么不能简单把比值硬截断后直接乘优势。

PPO 的 clip 是目标函数中的机制,不是保证每个概率比都处于区间内的硬约束。 网络参数共享、多个样本共同优化,都可能使比值越界;工程中还可能监控 KL 并提前停止。

一轮 PPO 通常是:用当前版本策略收集一批轨迹;保存动作、旧 log 概率等;估计优势和价值目标;在这批数据上做有限轮小批量 Actor/V 更新;随后采集新数据。V 网络训练预测回报,Actor 训练改变动作概率。推理一般只用 Actor。见 PPO 原论文

5.2 GRPO:优势可以来自同一问题的一组回答。

在语言模型中,状态可以是“问题+已经生成的前缀”,动作是下一个 token,完整回答是一条轨迹。对同一问题生成 G 个回答,得到奖励 R₁、…、R_G,典型组内标准化优势为:

A^i=Rimean(R1,,RG)std(R1,,RG)+εnum.\hat A_i=\frac{R_i-\operatorname{mean}(R_1,\ldots,R_G)} {\operatorname{std}(R_1,\ldots,R_G)+\varepsilon_{\mathrm{num}}}.

例如奖励为 [0,0,1,1],较好的回答得到正优势,较差的回答得到负优势。若组内奖励全相同,这种优势通常为零,不能提供区分回答的奖励学习信号。

简化理解其 Actor 目标:对回答中的 token 使用新旧概率比和 PPO 式截断,用组内优势加权;可再加相对参考策略的 KL 惩罚。若问题为 q,第 i 个回答为 oᵢ,长度为 Tᵢ,则 token 概率比是:

wi,t=πϕ(oi,tq,oi,<t)πold(oi,tq,oi,<t).w_{i,t}=\frac{\pi_\phi(o_{i,t}\mid q,o_{i,<t})} {\pi_{\mathrm{old}}(o_{i,t}\mid q,o_{i,<t})}.

一个结果级奖励版本的简化目标可写成:

i,t=min(wi,tA^i,;clip(wi,t,1ϵ,1+ϵ)A^i).\ell_{i,t}=\min\left( w_{i,t}\hat A_i,; \operatorname{clip}(w_{i,t},1-\epsilon,1+\epsilon)\hat A_i \right).

把每个 token 的截断目标取平均,再减去 KL 惩罚:

JGRPO=1Gi=1G1Tit=1Tii,tβKLK(πϕ,πref).\begin{aligned} J_{\mathrm{GRPO}} &=\frac1G\sum_{i=1}^G\frac1{T_i}\sum_{t=1}^{T_i}\ell_{i,t}\\ &\quad-\beta_{\mathrm{KL}}\mathcal{K}(\pi_\phi,\pi_{\mathrm{ref}}). \end{aligned}

𝒦 表示在相关前缀上的 KL 惩罚或其估计,KL 系数 β 控制强度,Actor 最小化 −J。这里同一回答的优势用于多个 token;具体 token/序列归一化、过程奖励、KL 和采样机制依版本而异。

一轮训练就是:采一批问题,每题生成一组回答;计算奖励与组内优势;固定回答 token、旧概率和优势;重新前向计算当前概率,做有限轮参数更新;再生成新回答。判断训练是否进步,需要看任务奖励与独立评估,而不能只看这个替代 loss 是否下降。

GRPO 通常省去独立训练的 V-Critic,但“没有 V”不等于“没有评分”:奖励仍然可以来自规则、测试器、检索指标或奖励模型。它也不意味着直接对文本奖励反向传播;梯度仍来自回答 token 的 log 概率。

角色

问的问题

通常怎样变化

当前策略

正在训练的模型如何分配 token 概率?

梯度更新

旧策略

采这批回答时的概率是多少?

一批更新中固定

参考策略

相对哪个基准限制偏离?

常固定,也有变体

奖励函数/模型

回答实际有多好?

通常不被 Actor loss 更新

V-Critic

从这个前缀继续生成,预计有多少回报?

PPO 可训练;基本 GRPO 省去

训练时多生成并评分,推理时通常仍是一个语言模型解码。 GRPO 不是“凭空出现的一套完全无关的新数学”,它沿用了策略优化框架,关键变化之一是利用组内比较估计优势。原始形式见 DeepSeekMath;复现工程时需明确版本,不能把一个库的默认选项当作算法永久定义,参见 TRL 文档

六、DDPG、TD3 与 SAC:让 Q 的梯度传回 Actor

前面的策略梯度,是对已经采样的动作重新计算 log 概率。现在换一条路:如果动作连续、Q 对动作可微,能不能让 Q 直接告诉 Actor“动作往哪里改更好”?

6.1 DDPG:确定性 Actor+可微 Q。

Actor μφ(s) 直接输出连续动作;Critic Qθ(s,a) 输出价值。训练常配目标 Actor、目标 Critic 与回放池。

Critic 使用真实经验构造:

y=r+γ(1d)Qθˉ(s,μϕˉ(s)),LQ=E[(Qθ(s,a)y)2].y=r+\gamma(1-d)Q_{\bar\theta}(s',\mu_{\bar\phi}(s')), \qquad L_Q=\mathbb{E}[(Q_\theta(s,a)-y)^2].

Actor 则从回放池取状态,重新输出动作:

Lμ=EsD[Qθ(s,μϕ(s))].L_\mu=-\mathbb{E}_{s\sim\mathcal{D}}[Q_\theta(s,\mu_\phi(s))].

更新 Actor 时,固定 Q 的参数,但保留它对输入动作的梯度:

ϕLμ=E[aQθ(s,a)a=μϕ(s)ϕμϕ(s)].\nabla_\phi L_\mu =-\mathbb{E}\left[ \left.\nabla_a Q_\theta(s,a)\right|_{a=\mu_\phi(s)} \nabla_\phi\mu_\phi(s)\right].

第一项告诉我们动作往哪里改可以提高评分;第二项告诉我们怎样改 Actor 参数才能产生这种动作变化。交互时常给确定性动作加探索噪声;推理时通常去掉探索噪声。见 DDPG 原论文

6.2 那个真正想通的问题:Q 知道 0.7 好,为什么 Actor 还生成 0.3?

神经网络 Q 通常只会对输入动作打分,并不会直接返回连续动作空间的全局最优点。Actor 相当于学习一个快速的动作选择函数。当前生成 0.3,只说明它还没学好;Q 在 0.3 附近的梯度,给它提供局部改进方向。

设一个演示用 Critic:

Q(a)=10(a0.7)2.Q(a)=10-(a-0.7)^2.

令随机策略的简化动作生成式为 a = φ + 0.1ε,当前 φ = 0.2,本次抽到 ε = 1,因此 a = 0.3。只考虑 Q 项:

L=Q(a)=10+(ϕ0.6)2,dLdϕ=2(0.20.6)=0.8.L=-Q(a)=-10+(\phi-0.6)^2, \qquad\frac{dL}{d\phi}=2(0.2-0.6)=-0.8.

若学习率为 0.1,则 φ 更新为 0.28。为了比较同一次噪声下的变化,仍取 ε = 1,新动作是 0.38,更接近 0.7。

这里没有提供“正确动作标签 0.7”,也没有先把最优动作求出来。Actor 根据可微评分获得改进方向。 真实 Q 可能不准确、非凸,有时也会指错方向。

“生成动作时保存了计算图,所以可以按 loss 更新”这个理解是对的,但更精确的是:前向计算记录操作依赖,调用 backward 时才计算梯度。并不是采样阶段已经存好了所有梯度。

6.3 TD3:减少 Actor 被错误 Q 引导的机会。

DDPG 的单 Q 容易受估计误差影响。TD3 的三个标志性改动是:双 Q 取较小值构造目标、延迟策略更新、目标动作平滑。

a~=clip(μϕˉ(s)+ϵ),y=r+γ(1d)minj=1,2Qθˉj(s,a~).\tilde a'=\operatorname{clip}(\mu_{\bar\phi}(s')+\epsilon), \quad y=r+\gamma(1-d)\min_{j=1,2}Q_{\bar\theta_j}(s',\tilde a').

这里目标平滑噪声通常还会单独限幅。Actor 常用 −Q₁(s,μφ(s)) 更新。它仍是确定性 Actor,推理时可直接输出动作。见 TD3 原论文

6.4 SAC:在提高价值的同时,保留策略熵。

SAC 优化的是奖励与熵的组合。熵写成 H(π(·∣s)) = E[−log π(a∣s)];离散熵表示分布分散程度,连续动作使用微分熵,数值可以为负。

常见现代结构是:随机 Actor、两个在线 Q、两个目标 Q,以及固定或学习的熵系数 α。早期 SAC 有单独 V 网络,不能把不同版本结构混在一起。

Actor 输出高斯参数并重参数化:

μϕ(s),σϕ(s),ϵN(0,I),u=μϕ(s)+σϕ(s)ϵ,a=tanhu.\mu_\phi(s),\sigma_\phi(s),\qquad \epsilon\sim\mathcal{N}(0,I),\qquad u=\mu_\phi(s)+\sigma_\phi(s)\odot\epsilon, \quad a=\tanh u.

固定本次随机噪声后,动作是参数的可微函数。动作范围还可缩放;计算 log π(a∣s) 时必须包含 tanh 变换的雅可比修正,不能直接用变换前高斯的 log 密度。

**更新 Critic:**从回放池取真实历史动作 a;下一动作 a′ 由当前 Actor 在 s′ 上采样:

y=r+γ(1d)[minjQθˉj(s,a)αlogπϕ(as)],y=r+\gamma(1-d) \left[\min_jQ_{\bar\theta_j}(s',a')-\alpha\log\pi_\phi(a'\mid s')\right],
LQj=E[(Qθj(s,a)y)2].L_{Q_j}=\mathbb{E}[(Q_{\theta_j}(s,a)-y)^2].

整个目标 y 停止梯度。**更新 Actor:**从回放池取状态 s,重新重参数化采样动作 新采样动作 ã:

Lπ=E[αlogπϕ(a~s)minjQθj(s,a~)].L_\pi=\mathbb{E}[\alpha\log\pi_\phi(\tilde a\mid s) -\min_jQ_{\theta_j}(s,\tilde a)].

Q 项鼓励高价值;熵项避免策略过早收缩。更新 Actor 时不更新 Q 参数,但梯度必须穿过 Q 对动作的计算。

示意代码如下,其中 actor.sample_with_log_prob 使用可微采样,并已包含动作变换修正:

# 先训练 Critic:真实历史动作作为被评分对象。
with torch.no_grad():
    next_a, next_logp = actor.sample_with_log_prob(next_s)
    next_q = torch.minimum(target_q1(next_s, next_a),
                           target_q2(next_s, next_a))
    y = reward + gamma * (1 - terminated) * (next_q - alpha * next_logp)

q_loss = ((q1(s, replay_a) - y) ** 2).mean()
q_loss += ((q2(s, replay_a) - y) ** 2).mean()
q_optimizer.zero_grad()
q_loss.backward()
q_optimizer.step()

# 再训练 Actor:在历史状态上生成一个新的可微动作。
q_params = list(q1.parameters()) + list(q2.parameters())
for p in q_params:
    p.requires_grad_(False)

new_a, logp = actor.sample_with_log_prob(s)
q_of_new_a = torch.minimum(q1(s, new_a), q2(s, new_a))
actor_loss = (alpha.detach() * logp - q_of_new_a).mean()
actor_optimizer.zero_grad()
actor_loss.backward()
actor_optimizer.step()

for p in q_params:
    p.requires_grad_(True)

这里把 α 视为标量张量,并假设 Actor 与 Q 参数不共享。代码省略温度优化和目标软更新。不能用 no_grad 包住 Actor loss 中的 Q 前向,也不能把 new_a detach,否则会切断需要的梯度。

若自动调整熵系数,可以最小化:

Lα=E[α(logπHtarget)].L_\alpha=\mathbb{E}\left[ \alpha\left(-\log\pi-\mathcal{H}_{\mathrm{target}}\right) \right].

这一步固定 log 概率。熵低于目标时提高 α,熵过高时降低它;工程里常优化 log α 保持正值。温度更新与 Actor 更新是分开的。

一轮完整 SAC:交互入池;抽批更新双 Q;重新采样更新 Actor;按需更新温度;软更新目标 Q。推理时通常只使用 Actor,可采样,也常用变换后的均值作确定性评估。见 SAC 算法与应用论文SAC 实现解释

七、把训练和推理彻底分开

“这个算法有五个网络”,不等于部署时每次选动作都要调用五个网络。学习系统里有老师式的目标网络、辅助评价器和数据生成器;部署时可能只保留一个决策网络。

方法

训练时的主要对象

推理/执行时怎样选动作

Q-learning

Q 表

查询各动作 Q,取最大

DQN

在线 Q、目标 Q

在线 Q 输出动作评分,取最大

TRPO / PPO

Actor、V;旧策略信息

Actor 采样或取确定性代表动作

基本 GRPO

当前策略、旧概率;可选参考/奖励模型

语言模型解码;普通部署不需要组内比较

DDPG / TD3

Actor、Q 与各自目标网络

在线 Actor 输出连续动作

现代 SAC

随机 Actor、双 Q 与目标 Q、温度

在线 Actor 输出/采样动作

PETS / MPC

已知或学习的动力学;规划器

每一步运行规划器,只执行首动作

MBPO

动力学模型+SAC

通常只用 Actor

连续 BCQ

行为生成模型、扰动网络、Q 与目标

生成候选、扰动、Q 择优

CQL+SAC

带保守项的 Q、SAC Actor 等

通常只用 Actor

GAIL

策略、判别器;可有 V

通常只用策略

HER

目标条件网络+重标注回放

输入当前状态与所需目标

最重要的梯度分界线:

问题

REINFORCE / TRPO / PPO / GRPO

DDPG / 连续 SAC

Actor 更新时的动作

已经采样的固定动作/token

在训练状态上新生成的可微动作

主要梯度路径

loss → log 概率 → Actor

loss → Q 对动作的导数 → Actor

Q/V 或回报的角色

提供固定优势权重

Q 提供可微动作评分

是否对真实环境反传

交互采样通常在无梯度模式下执行,保存状态、动作、奖励和必要旧概率。训练时重新前向建立所需计算图。不能把“训练时动作需要可微”理解成“整条真实交互轨迹一直保留巨大计算图”。

八、在线、离线、同策略、异策略:四个词不能混用

学习过程中反复出现过一个误区:“PPO 在线,SAC 用回放,所以 SAC 离线。”其实这里混合了两条分类轴。

在线/离线,问的是训练时能不能获取新的环境交互。

  • 在线 RL:训练过程中继续收集新反馈。

  • 离线 RL:策略训练主要限定在固定数据集里,不能靠新交互纠正错误。

  • 离线预训练后在线微调:两个阶段,应分别说明。

on-policy/off-policy,问的是学习能否使用不同于当前目标策略的行为数据。

  • on-policy:通常依赖当前或近期策略采样的数据;PPO 允许一批数据上有限轮更新。

  • off-policy:能够利用旧策略、探索策略或其他行为来源的数据进行更新。

方法

常见训练方式

数据关系

TRPO / PPO

在线

on-policy / 近似 on-policy

基本 GRPO

新生成回答并获得奖励,在线

通常按 on-policy / 近策略处理

DQN / DDPG / TD3 / SAC

在线采集并回放

off-policy

BCQ / CQL / IQL

固定数据训练,离线

为利用行为数据差异而设计

Dyna-Q / MBPO

通常在线

真实和模型经验可异策略更新

HER+DDPG/SAC

通常在线

回放且重标注,适配 off-policy

“异策略”在一些中文材料中被译为“离线策略”,很容易误读为固定数据的 offline RL。看到这个词,应直接检查它到底是在说行为策略差异,还是禁止新交互。

模拟器交互仍是交互;固定问题集上不断生成新回答并重新打分,也可以是在线 RL。回放池只是储存和重用数据的工具,不是离线学习的定义。 标准 off-policy 算法直接套在固定数据上可能失败,原因将在 BCQ/CQL 部分展开。见 离线强化学习综述

九、Dyna-Q、MPC、PETS、MBPO:模型究竟拿来做什么?

到目前为止,我们主要直接学习价值和策略。另一个问题是:如果能预测环境会怎样变化,是不是能少做一些昂贵的真实尝试?

这里的 model-based 中,model 指环境动力学模型,例如 fψ(s,a) → s′。Actor 也是神经网络,但拥有 Actor 不等于拥有环境模型,因此不等于 model-based RL。

9.1 Dyna-Q:真实更新一次,再用模型多更新几次。

经典确定性表格示例中,模型只是记录 (s,a) → (r,s′)。一轮包括:

  1. 与环境交互,得到一条真实转移,用 Q-learning 更新。

  2. 用这条记录更新环境模型。

  3. 从模型记住的状态动作对中采样,查询模拟奖励和下一状态。

  4. 用这些模型转移再做若干次 Q-learning 更新。

为什么重复模拟旧转移还有用? 假设刚知道终点前一个状态很好,重新更新更早的转移,就能把这个新价值向前传播。模型记录的转移没变,下一状态的 Q 却可能已经变了。

这是一种“用模型做 planning”的含义:在内部进行价值更新,不一定每次显式输出一整条动作路线。模型若处于随机环境,需要学习转移与奖励分布,不能永远只记最后一次结果。Dyna-Q 通常仍在线交互,推理可直接使用学到的 Q。

9.2 MPC:规划动作,与训练模型是两件事。

MPC 是 Model Predictive Control,模型预测控制。它本身是控制框架,不要求必须训练神经网络。最核心的区分如下:

操作

输入

输出

被优化的对象

环境模型预测

当前状态、给定动作

下一状态的预测

前向预测时不更新参数

模型学习

真实 (s,a,s′)

更准确的动力学模型

模型参数 ψ

MPC 规划

当前状态、模型、目标、约束

未来动作序列

动作序列本身

在时刻 t,规划器搜索 从 aₜ 到 aₜ₊H₋₁ 的动作序列,使用固定的模型递推预测未来状态,并优化累计代价:

minat+H1k=0H1c(s^t+k,at+k)+cf(s^t+H),s^t+k+1=fψ(s^t+k,at+k).\min_{a_{t+H-1}} \sum_{k=0}^{H-1}c(\hat s_{t+k},a_{t+k})+c_f(\hat s_{t+H}), \quad\hat s_{t+k+1}=f_\psi(\hat s_{t+k},a_{t+k}).

还可以加动作、状态和终端约束。找到序列后,只执行第一个动作,读取真实新状态,再重新规划。

“模型怎么预测一串最优动作?”这个问题的答案是:通常是优化器提出和改进动作序列,模型预测每条序列的后果。 二者角色不同。优化器可以是梯度法、二次规划,也可以是采样优化。

以 CEM 为例:先采样很多候选动作序列;用模型评估;保留表现较好的少数序列;拟合它们的采样分布;继续采样和筛选。这里调整的是当前规划的搜索分布,不等于训练一个长期保留的 Actor。

拿到真实结果之后怎么训练? 如果动力学已知且固定,MPC 只更新当前状态并重规划,并不训练模型。如果是学习型 MPC,再把真实 (s,a,s′) 加入数据,周期性拟合模型。

例如 fψ(s,a) = s + ψa,当前 s = 4、a = 2、ψ = 1,预测下一状态为 6,实际是 5.6:

Lmodel=(4+2ψ5.6)2,dLdψψ=1=1.6.L_{\mathrm{model}}=(4+2\psi-5.6)^2, \quad\left.\frac{dL}{d\psi}\right|_{\psi=1}=1.6.

学习率 0.1 时,ψ 变成 0.84,新预测为 5.68。之后从真实状态 5.6 重新规划,而不是从预测的 6 继续执行旧路线。

未实际执行的后续预测,不能直接当成真实标签训练模型。MPC 适合显式处理目标和约束,但实际约束满足程度仍取决于建模、求解和不确定性处理。参见 do-mpc 原理文档

9.3 PETS:让 MPC 考虑模型不确定性。

PETS 是 Probabilistic Ensembles with Trajectory Sampling。它使用概率动力学模型集合,对候选动作序列采样多条可能的未来轨迹,再通过 MPC 选动作。

每个动力学网络可输入 (s,a),输出下一状态或状态变化量的高斯均值与方差。网络内预测方差用于描述随机性;不同网络的分歧用于近似模型认知不确定性。两种估计都可能失准,多个模型也可能一起预测错。

模型通常用真实转移做负对数似然训练。规划时,同一候选序列传播多个粒子,得到多种可能回报,进行平均评估;TS∞ 的一种实现让每个粒子在一次 rollout 中保持同一个模型成员,再采样状态转移噪声。

PETS 通常没有单独训练的 Actor 或 Q-Critic,动作来自规划器。它以更多内部计算换取真实数据效率。传播不确定性不等于自动加入风险惩罚、最坏情况优化或探索奖励。见 PETS 原论文

9.4 MBPO:把模型拿来制造训练经验。

MBPO(Model-Based Policy Optimization)的基本组合是:概率动力学模型集合+从真实状态出发的短模拟 rollout+SAC。

它维护真实经验池与模型经验池。先用真实数据训练模型;从真实池采样状态;当前 Actor 在这些状态上生成动作;模型给出模拟下一状态和奖励;继续短暂展开,把结果存入模型池,再用这些经验训练 SAC。

s0Dreal,a0πϕ(s0),(s^1,r^0)pψ(s0,a0).s_0\sim\mathcal{D}_{\mathrm{real}},\quad a_0\sim\pi_\phi(\cdot\mid s_0),\quad (\hat s_1,\hat r_0)\sim p_\psi(\cdot\mid s_0,a_0).

奖励可由模型预测,或由已知奖励函数计算。真实与模拟数据按配置组合使用;模型经验需要随模型、策略更新而刷新。

为什么短 rollout?模型每一步都有误差,长展开容易逐步偏离真实分布。从许多真实状态重新起步,用短段模拟限制误差积累。短模拟并不等于只优化短期收益:SAC 的 Q 仍然可以通过自举表示长期价值。

标准 MBPO 把生成的转移当训练数据,不需要让 Actor 梯度穿过整段动力学 rollout。Critic 用这些转移拟合目标;Actor 再按 SAC 的 Q 梯度更新。动力学训练依赖真实数据,不应把自己的预测冒充真实标签循环强化。

与 PETS 的关键区别是:PETS 在每次执行时用模型规划;MBPO 用模型帮助训练 Actor,部署时通常只跑 Actor。MBPO 通常仍需真实在线交互,不能因为有模型经验池就叫离线 RL。见 MBPO 原论文

方法

模型主要用于什么

最终动作从哪里来

Dyna-Q

生成转移,做更多 Q 更新

学到的 Q

MPC

评价并优化未来动作序列

每步重新求解的规划器

PETS

带不确定性的模型预测与规划

MPC/CEM

MBPO

生成短模拟经验,训练策略

学到的 Actor

十、GAN、GAIL 与占用度量:没有奖励,能不能向专家学?

前面默认环境能提供任务奖励。如果很难设计奖励,却有人类或专家演示,就可以从行为中学习。

10.1 BC:直接模仿历史动作。

Behavior Cloning 把专家 (s,a) 当监督数据:离散动作用交叉熵,连续动作可用动作回归或概率似然。它不需要 Q、不需要任务奖励,也不必在训练期间与环境交互。缺点是策略一旦进入专家数据较少覆盖的状态,误差可能累积。

10.2 GAN:先理解“生成器与判别器”怎样交替学习。

GAN 中生成器 G(z) 根据噪声生成样本,判别器 D(x) 判断样本来自真实数据的概率。固定生成器训练判别器:

LD=ExdatalogD(x)Ezlog(1D(G(z))).L_D=-\mathbb{E}_{x\sim\mathrm{data}}\log D(x) -\mathbb{E}_z\log(1-D(G(z))).

常用的非饱和生成器 loss 为:

LG=EzlogD(G(z)).L_G=-\mathbb{E}_z\log D(G(z)).

更新 G 时固定 D 参数,但梯度经过 D 的输入回到 G,这与“固定 Q 参数仍保留动作梯度”在计算图上有相似之处。GAN 的判别器判断数据来源,不是在估计动作的长期回报。见 GAN 原论文

10.3 GAIL:从判别器获得模仿奖励。

GAIL 把策略产生的状态动作对和专家状态动作对送入判别器,再使用判别器输出构造奖励,让策略学出类似专家的行为分布。

为与之前截图一致,这里约定 D(s,a) 表示“来自学习者”的概率:专家标签 0,学习者标签 1。因此:

LD=E(s,a)ρπlogD(s,a)E(s,a)ρElog(1D(s,a)),L_D=-\mathbb{E}_{(s,a)\sim\rho_\pi}\log D(s,a) -\mathbb{E}_{(s,a)\sim\rho_E}\log(1-D(s,a)),

策略可使用奖励 r_D(s,a) = −log D(s,a)。越像专家,D 越小,这个奖励越高。换成 D = 专家概率 的约定时,相应奖励可以写成 −log(1 − D);不能混用标签和公式。

关键区别:标准 GAIL 不像图像 GAN 那样,把环境整段展开后直接反传给策略。 真实或普通模拟环境通常不提供这种可微路径。它的典型循环是:策略交互采轨迹;判别器区分专家与学习者;判别器输出转成奖励;用 TRPO/PPO 等 RL 算法训练策略;继续交互。

因此要区分三种角色:策略选动作;判别器给模仿奖励;可选的 V-Critic 估计未来累计模仿奖励。原始 GAIL 使用 TRPO,工程上可有其他策略优化器。推理通常只需策略。见 GAIL 原论文

10.4 占用度量:到底要模仿什么分布?

占用度量 ρπ(s,a) 描述策略运行时,会多频繁地处于状态 s 并执行动作 a。归一化折扣版本为:

ρπ(s,a)=(1γ)t=0γtPrπ(st=s,at=a)=dπ(s)π(as).\rho_\pi(s,a)=(1-\gamma)\sum_{t=0}^{\infty}\gamma^t \Pr_\pi(s_t=s,a_t=a)=d_\pi(s)\pi(a\mid s).

这里使用无限时域或吸收终止状态等一致约定;有的文献省略 (1 − γ),得到未归一化度量。

一个计数例子:100 步里,50 步处于弯道,其中 40 步减速。则弯道减速的经验占比为 0.4,弯道状态占比为 0.5,而“已经在弯道时减速”的条件比例为 0.8。0.4 = 0.5 × 0.8。

这就是为什么占用度量不等于策略概率:前者同时涉及“去哪里”和“到了那里怎么做”。GAIL 希望学习者与专家的状态动作分布接近,不要求逐条照抄同一条轨迹。没有人工任务奖励,不代表没有学习信号;专家行为仍是训练依据。

十一、BCQ 与 CQL:只有固定数据,为什么 Q 会骗自己?

如果训练期间不能再收集反馈,原来靠探索纠正误差的机会就消失了。离线 RL 的核心难题之一,是策略可能喜欢上没有数据支持、但恰好被 Q 高估的动作。

11.1 外推误差怎样污染真实数据的训练?

在下一状态 s′,数据中出现过 A、B,没有出现过 C,但网络输出:

动作

数据支持

当前 Q

A

8

B

3

C

100

网络可以对没见过的输入输出数字,数字不代表有依据。普通 Q-learning 对一条真实记录算目标,若 r = 1、γ = 0.9,就会得到 y = 91。

当前转移是真的,但训练目标里“未来能拿到 100”的部分是估计。 所以,即使训练只读取真实数据,Q 的自举目标也可能被陌生动作的错误高分污染。

重复训练固定数据,不会凭空获得 C 的真实后果。在线 RL 也会有外推误差,只是还可能通过新交互纠正。离线算法需要主动约束这种无依据的乐观。

11.2 表格 BCQ:只在数据支持的下一动作中取 max。

y=r+γ(1d)maxa:(s,a)DQ(s,a).y=r+\gamma(1-d) \max_{a':(s',a')\in\mathcal{D}}Q(s',a').

刚才只比较 8 与 3,目标就变成 8.2。注意限制是“在这个状态 s′ 下出现过”,不是某动作在整个数据集任意地方出现过就能选。

11.3 连续 BCQ:生成、微调、择优分别解决什么问题?

连续状态难以精确查表,连续动作也无法枚举。BCQ 使用条件生成模型学习历史动作分布:

aiGω(s),a~i=ai+ξφ(s,ai,Φ),π(s)=a~argmaxiQθ(s,a~i).a_i\sim G_\omega(s),\qquad \tilde a_i=a_i+\xi_\varphi(s,a_i,\Phi),\qquad \pi(s)=\tilde a_{\arg\max_iQ_\theta(s,\tilde a_i)}.

同一个状态采样多个候选,不是规划未来多个时刻的动作。G 常用条件 VAE,负责生成像历史行为的动作;ξ 负责输出幅度不超过 Φ 的小调整;Q 负责在调整后的候选中选高分。多维动作通常逐分量限幅,并处理环境动作边界。

例如生成 0.40,允许最多改 0.05,可以调整成 0.43。基础候选来自学到的行为分布,不一定是从历史数据里原样取出的动作。

为什么不一步直接输出好动作? 可以,但仍需要控制偏离数据的风险。BCQ 把“像历史行为”与“在附近提高 Q”分开实现。去掉扰动,只生成多个候选再择优,仍保留批量限制的核心;扰动帮助在有限候选附近进一步改进。

VAE 通过历史 (s,a) 的重建误差和 KL 正则训练。扰动网络则用:

Lξ=EsD,aGω(s)Qθ(s,a+ξφ(s,a,Φ)).L_\xi=-\mathbb{E}_{s\sim\mathcal{D},a\sim G_\omega(s)} Q_\theta(s,a+\xi_\varphi(s,a,\Phi)).

这一步固定 G 和 Q 的参数,基础动作也作为固定输入;梯度穿过 Q 对调整后动作的导数,更新扰动网络。与前面 DDPG Actor 的原理相同,只是输出的是有限调整量。

Q 的 TD 训练仍使用历史动作和真实奖励;下一状态的动作由生成与扰动构造。原始深度 BCQ 配有双 Q、目标网络及保守组合,不能仅凭简化单 Q 公式复现全部实现。

BCQ 的核心不是“微调”本身,而是“在数据支持的行为附近优化”。 生成模型可能拟合不准,动作接近也不自动保证以后每个状态都熟悉。见 BCQ 原论文与算法

11.4 CQL:不先限制候选结构,而是让评分更保守。

CQL 可以保留 DQN 或 SAC 的主体,修改 Critic 的 loss。常见 CQL(H) 的离散形式是:

LQ=LTD+λCQLLconservative.L_Q=L_{\mathrm{TD}}+\lambda_{\mathrm{CQL}}L_{\mathrm{conservative}}.

其中,TD 损失是:

LTD=12E(s,a)D[(Qθ(s,a)y)2].L_{\mathrm{TD}}=\frac12\mathbb{E}_{(s,a)\sim\mathcal{D}} \left[(Q_\theta(s,a)-y)^2\right].

新增的保守项是:

Lconservative=EsD[logbeQθ(s,b)]E(s,a)D[Qθ(s,a)].\begin{aligned} L_{\mathrm{conservative}} &=\mathbb{E}_{s\sim\mathcal{D}}\left[\log\sum_b e^{Q_\theta(s,b)}\right]\\ &\quad-\mathbb{E}_{(s,a)\sim\mathcal{D}}[Q_\theta(s,a)]. \end{aligned}

读这个公式时,先把两个来源区分开:b 遍历参与比较的动作;a 是历史记录里的真实动作。它们虽然都送给 Q 评分,却在 loss 里承担不同角色。

保守项的第一部分是 log-sum-exp,一种平滑的最大值。最小化它,会产生向下压 Q 的梯度;同一状态下高分动作通常受到更大的压力。第二部分减去历史动作 Q,给数据支持的动作提供向上的作用。TD 项则根据奖励与后续价值约束回报估计。

那句终于理解的话:所有值往下压,数据中的有支持。 这描述了保守项的主要机制,但不是每次参数更新后所有陌生动作 Q 都必然下降的保证,因为还有 TD、共享参数和采样误差。

用一个状态演示,Q_A = 2、Q_B = 1、Q_C = 4,历史动作比例是 p_D(A) = 0.8、p_D(B) = 0.2、p_D(C) = 0:

Lconservative=log(eQA+eQB+eQC)0.8QA0.2QB.L_{\mathrm{conservative}}=log(e^{Q_A}+e^{Q_B}+e^{Q_C})-0.8Q_A-0.2Q_B.

对单个评分求导,有一个很直观的式子:

LconservativeQa=eQabeQb当前分数对应的 softmax 权重pD(as)历史动作比例.\frac{\partial L_{\mathrm{conservative}}}{\partial Q_a} =\underbrace{\frac{e^{Q_a}}{\sum_b e^{Q_b}}}_{\text{当前分数对应的 softmax 权重}} -\underbrace{p_D(a\mid s)}_{\text{历史动作比例}}.

动作

softmax 权重

历史比例

保守项梯度

单看这一项的下降方向

A

0.114

0.8

−0.686

Q 上升

B

0.042

0.2

−0.158

Q 上升

C

0.844

0

+0.844

Q 下降

没有数据支持的高分 C 被压低;随着其相对评分降低,压力也会变小。数据动作也不一定净上升:若已经高得超过其数据支持,保守项本身也可能压低它,TD 还会进一步修正。

不能把所有 Q 统一减 100 代替 CQL。 统一平移不改变动作排序,而且上述保守项对共同平移不变。它约束的是相对评分,而不只是数字绝对大小。单用保守项也不够,否则容易主要反映行为频率;TD 让算法继续学习回报差异。

连续动作无法枚举,常从均匀分布与当前策略等来源采样,结合概率密度修正,近似相应积分。采样动作只是查询 Q,不用真的执行,也不需要捏造奖励。不能把任意采样后的裸 log-sum-exp 当成连续公式的无偏精确实现。

11.5 CQL+SAC 的一轮更新,到底谁变化?

  1. 从固定数据集取 (s,a,r,s′,d)。

  2. 用目标 Q、下一状态策略动作与真实奖励构造 TD 目标,停止梯度。

  3. 对数据动作与比较动作评分,计算保守项。

  4. 最小化 “TD 损失+保守系数 × 保守项”,更新在线双 Q。

  5. 在数据状态上重新生成可微动作,按 SAC Actor loss 更新策略。

  6. 按实现更新熵系数与目标 Q;保守系数可固定,也可按约束进行单独调节。

CQL 的 Actor 不需要“生成+扰动”两段结构。它沿用 SAC 的方式,只是依赖经过保守训练的 Q。熵系数 α 与保守系数 CQL 保守系数 λ 是不同超参数,不能因为教材用了同一个字母就混成一个。

保守系数太弱可能压不住外推误差,太强可能过度悲观。理论中相应条件下的策略期望价值下界,不等于实际神经网络每个 Q(s,a) 都保证小于真实值。见 CQL 原论文

问题

BCQ

CQL

防什么

无数据支持动作的虚高 Q

同左

主要改哪里

动作产生与选择方式

Critic 的训练目标

核心办法

在学到的历史行为附近选

对无依据的乐观评分施加约束

是否必须有 VAE/扰动网络

连续原版使用

不需要

典型推理

生成、微调、Q 择优

SAC 版直接用 Actor

十二、其他离线方法:IQL、TD3+BC、DT 与 MOPO

BCQ 与 CQL 代表两条思路,但离线 RL 不只有这两种方法。复习时,先问它们如何减少对不可靠分布外估计的依赖。

12.1 TD3+BC:给 Actor 同时提出两个要求。

一个简化的连续 Actor loss 是:

Lπ=E(s,a)D[c,Q(s,πϕ(s))+πϕ(s)a2].L_\pi=\mathbb{E}_{(s,a)\sim\mathcal{D}} [-c,Q(s,\pi_\phi(s))+|\pi_\phi(s)-a|^2].

Q 项要求提高回报,BC 项要求不要离历史动作太远,c 用于平衡尺度。这与 BCQ 显式生成候选的结构不同:它可用一个 Actor 直接输出动作,并在训练目标里加约束。Critic 沿用 TD3 机制;推理用 Actor。见 TD3+BC 原论文

12.2 IQL:先从数据内学价值,再加权模仿。

IQL 的基本结构是 Q、V 与 Actor。它避免在价值学习的 Bellman 目标中对新生成的分布外动作直接做 max。

先用数据动作的 Q 来训练偏向较高价值的 V:

LV=E(s,a)D[τ(Qtarget(s,a)V(s))],τ(u)=τ1u<0u2,τ>0.5.L_V=\mathbb{E}_{(s,a)\sim\mathcal{D}} [\ell_\tau(Q_{\mathrm{target}}(s,a)-V(s))], \quad \ell_\tau(u)=|\tau-\mathbf{1}_{u<0}|u^2,\quad\tau>0.5.

正残差获得更大权重,所以 V 会偏向数据中较好的行为价值;这是 expectile 回归,不是直接取一个分位数,也不是精确 max。

Q 再学习 y = r + γ(1 − d)V(s′)。Actor 使用优势加权行为克隆:

Lπ=E(s,a)D[stopgrad(w(s,a))logπϕ(as)],w(s,a)exp(β[Q(s,a)V(s)]).L_\pi=-\mathbb{E}_{(s,a)\sim\mathcal{D}} [\operatorname{stopgrad}(w(s,a))\log\pi_\phi(a\mid s)], \quad w(s,a)\approx\exp(\beta[Q(s,a)-V(s)]).

权重通常会限幅。高于基准的历史动作被更强地模仿。这里 Actor 的动作来自数据,梯度通过 log 概率,不是 SAC 式穿过“Q 对新动作的导数”。 推理通常只用 Actor。见 IQL 原论文

12.3 还有哪些路线?

方法

关键做法

训练与推理记忆点

BC

直接监督模仿

不需要奖励;策略直接输出动作,是重要基线

Decision Transformer

把目标回报、状态、动作组成序列,条件预测动作

类监督序列训练;推理给定期望回报并随反馈更新,不是经典 Q 自举

MOPO

从固定数据学动力学,用带不确定性惩罚的模型奖励训练策略

模型生成经验,但真实数据不继续增加;和在线 MBPO 区别明显

Diffusion-QL

用扩散模型表达动作分布,并结合行为拟合与 Q 引导

表达复杂、多峰动作;生成动作可能需要多次去噪

对应来源:Decision TransformerMOPODiffusion-QL。它们分别改变序列建模方式、模型使用方式、策略表达方式。不能把所有扩散策略都叫离线 RL,也不能认为给 DT 一个极高目标回报就保证产生对应能力。

真正对比离线方法时,应保持同一固定数据集、奖励定义、评估任务与调参预算,避免把不同数据质量造成的差别误当成算法优劣。

十三、目标条件学习与 HER:失败经历怎样变成有用的数据?

前面的算法主要改变如何学习。现在换一个角度:如果每局要求到达不同目的地,应该怎样表示任务?

13.1 把目标作为输入。

在同一个位置,去食堂可能向左,去图书馆可能向右。如果网络只知道现在在哪里,却不知道想去哪里,就无法区分任务。因此输入状态与目标:

πϕ(as,g),Qθ(s,a,g),V(s,g).\pi_\phi(a\mid s,g),\qquad Q_\theta(s,a,g),\qquad V(s,g).

同一套参数服务不同目标。传统 RL 并非天然只能完成一个目标:如果目标本来已经包含在状态中,也可以条件决策。把 g 单独写出来,是明确告诉模型任务要求。见 目标条件价值函数 UVFA

13.2 期望目标与实际结果必须分开。

符号

意思

导航示例

目标空间 G

所有可能目标的空间

可作为目的地的位置集合

g

本局期望达到的结果

想到 (8,2)

h(s)

从状态提取的实际结果

现在在 (2,2)

截图把映射写作 φ(s);为避免和 Actor 参数混淆,这里改用 h(s)。如果状态包含位置、速度、朝向,h 可能只是取出位置分量,并不需要额外训练模型。

一种奖励定义是:

rg(s,a,s)={0,h(s)g2δg, 1,其他情况.r_g(s,a,s')= \begin{cases} 0,&|h(s')-g|_2\le\delta_g,\ -1,&\text{其他情况}. \end{cases}

距离阈值表示“足够接近就算到达”。这是一种稀疏奖励:离目标 5 米与 1 米都可能得 −1。到达奖励 0 仍有效,因为在到达终止且忽略折扣的示例里,三步到达回报 −2,六步到达回报 −5,算法偏好前者。

同一个真实转移,对不同目标奖励可以不同。Q 因而也要带目标。训练目标例如:

y=rg(s,a,s)+γ(1d)maxaQtarget(s,a,g).y=r_g(s,a,s')+\gamma(1-d)\max_{a'}Q_{\mathrm{target}}(s',a',g).

前后都针对同一个 g。整体目标写成:

E(s0,g)ν0[Vπ(s0,g)].\mathbb{E}_{(s_0,g)\sim\nu_0}[V^\pi(s_0,g)].

意思是在各种起点和目标上提高平均表现。

13.3 HER:没有到原目标,也确实到过别的地方。

假设原目标是 5,实际轨迹只到 3:0 → 1 → 2 → 3。原目标下每一步奖励都是 −1。HER 重新提出一个有真实依据的问题:“如果目标是 3,这些经历意味着什么?”

真实转移

原目标

原奖励

新目标

重算奖励

0 向右到 1

5

−1

3

−1

1 向右到 2

5

−1

3

−1

2 向右到 3

5

−1

3

0

改变的是目标和对应奖励,实际状态、动作、下一状态都不变。 原任务没有成功这件事仍然成立;只是同一条经验也能帮助学习另一个目标。

对记录 (s,a,r,s′,g),另外选状态 s″,令 g′ = h(s″),重算 r′ = r(s,a,s′; g′),得到 (s,a,r′,s′,g′)。s″ 是目标来源,不是把下一状态 s′ 替换掉。

例如 s = 1、s′ = 2、s″ = 3,新记录仍是“从 1 向右到 2”,目标变为 3,奖励仍然 −1。HER 没有把每个中间步骤都硬改为成功。

“从 2 到 3”这条成功记录能训练 Q(2,右,3);再通过 TD,帮助前一条记录学习从 1 怎样到 3。目标条件网络共享参数,所学行为可能迁移到其他目标,但学会去 3 不保证立即会去 5。

新目标从哪里选? future 从同一轨迹的后续实际状态选;episode 从同一轨迹任意状态选;random 从整个回放池选。另一个常见方案 final 使用轨迹最后状态。future 通常比较直观:后续真实到达过的结果为当前经验提供可达目标依据。

标准流程是:交互采轨迹;保存原始经验;生成或按需构造重新标注的经验;混合采样训练目标条件网络;继续交互。原目标经验通常不会全部被永久替换。

HER 需要目标可重新计算奖励、且改变任务目标不改变记录对应的环境动力学。终止条件若依赖目标,也应按新目标正确处理;随机环境中的事后选择还可能引入偏差,不能把重标注当作无条件有效的任意数据增强。它适合与 DQN、DDPG、SAC 等可回放的 off-policy 方法结合,而不是不加处理地套到标准 on-policy 更新上。见 HER 原论文

13.4 三种“新增经验”不要混。

方法

新增的是什么

是否预测新转移

普通经验回放

再次使用旧记录

HER

旧转移的新目标与重算奖励

MBPO / Dyna-Q

模型给出的模拟经验

是,或查询已学模型记录

十四、贝叶斯优化:什么时候根本不必把问题写成 RL?

学习 RL 后,容易看到调参就想定义状态、动作和奖励。但如果任务是选择一个固定参数向量 x,运行一次昂贵实验,得到一个分数 f(x),黑箱优化可能更直接。

贝叶斯优化用已有试验数据 (xᵢ,f(xᵢ)) 拟合代理模型,预测候选位置的均值与不确定性;再用采集函数选择下一次值得试验的参数;执行真实评估后更新模型。

对象

输入

输出

用途

代理模型,例如 GP

候选参数 x

分数均值、预测不确定性

估计哪里可能值得试

采集函数,如 EI/UCB

代理模型的预测

对试验位置的偏好

平衡已知高分与未知区域

真实实验

选出的参数

实测分数

修正模型并积累证据

它的不确定性是“对未知函数了解多少”,不等于 SAC 的动作分布熵。BO 通常也在顺序采集新数据,但这不使它自动成为离线或在线 RL 算法;任务结构和学习对象不同。

如果只为一个固定设计找最优参数,先比较 BO、随机搜索和合适的数值优化。若需要跨不同任务状态持续决策、动作影响后续约束和可选项,才更有理由学习策略。也可以用 BO 调 RL 超参数,两者并不互斥。见 贝叶斯优化教程

十五、环境选择、成本对照与工程检查

“哪个最先进、哪个最好”必须落到数据权限、动作空间、环境成本和部署约束上。下面是建立基线的判断依据,不是跨任务的性能排名。

15.1 先判断你到底拥有什么。

环境条件

可以先考虑

为什么

小型有限状态、离散动作

表格 Q-learning

便于看清价值传播机制

离散动作,能交互

DQN 系列;需要策略分布时考虑 PPO

Q 枚举有限动作;PPO 也适用于离散空间

连续控制,交互可用且希望重用数据

SAC / TD3

off-policy,回放提高利用率

环境便宜、容易大量并行采样

PPO

工程相对简单,适合并行 rollout

固定数据,禁止新交互

BC 基线+IQL / CQL / TD3+BC / BCQ

专门处理行为分布与策略的差异

已知或可学习动力学,需显式规划约束

MPC;学习模型时可参考 PETS

可以直接围绕模型、目标、约束求动作

真实交互昂贵,动力学能学准一部分

MBPO 等模型辅助策略学习

用内部模拟补充训练,但需防模型偏差

有专家演示,没有好用的任务奖励

先 BC;可交互时再考虑 GAIL

从示范提供学习信号

多目标且成功奖励很稀疏

目标条件策略+HER

利用实际达到的其他目标

LLM 有可检验的任务奖励,可多回答采样

GRPO 类方法;也可比较 PPO

组内比较有用,但生成、评分成本要算清

一个静态参数向量,实验昂贵

BO 等黑箱优化

不一定需要学习序列策略

PPO、SAC、TD3、DQN 系列仍是常见通用基线;原始 TRPO 和 DDPG 很适合学习原理,但实践中通常也应比较后续方法。LLM 场景中的 GRPO 有不少实现变体,不等于所有 RL 环境都应换成 GRPO。此类选择逻辑也可参考 Stable Baselines3 的算法建议

15.2 成本至少要分四笔账。

  1. 真实交互:机器人试验、模拟器运行、检索查询、工具调用或人工评分。

  2. 训练计算:前向、反向、目标网络、辅助模型与优化器状态。

  3. 数据与显存:回放池、rollout buffer、激活、模型副本。

  4. 部署计算:每步仅 Actor 前向,还是还要采样候选、规划、运行多个网络。

方法

主要训练开销

数据利用特点

单次决策开销

表格 Q-learning

查表、TD 更新

可重复经验

查表

DQN

Q 网络训练、回放、目标 Q

可长期回放

一次 Q 前向,输出全部离散动作

TRPO

策略/V、曲率向量积、线搜索

主要用近期轨迹

Actor 前向

PPO

Actor/V,多轮小批量更新

一批有限重用,需新 rollout

Actor 前向

GRPO

多回答生成、奖励计算、策略反传;可选参考模型

近期生成数据为主

通常普通语言模型解码

DDPG / TD3

Actor、一个/两个 Q 与目标网络

回放利用率较高

Actor 前向

SAC

双 Q、随机 Actor、温度与目标更新

可多次回放;仍需覆盖足够数据

Actor 前向与可选采样

BCQ

VAE、扰动、双 Q 与候选评估

固定数据

多候选生成、扰动及 Q 评分

CQL

基础 Q/Actor,加采样动作评分

固定数据

SAC 版通常只需 Actor

IQL

Q、V、加权策略回归

固定数据

Actor 前向

PETS / MPC

模型学习可选;反复规划

真实试验可能更省

规划可能成为主要瓶颈

MBPO

动力学集合+模型 rollout+SAC

用模拟补充真实数据

通常 Actor 前向

GAIL

交互+判别器+策略优化

专家数据和学习者新数据

Actor 前向

HER

存轨迹、重算奖励、普通 RL 更新

增强真实转移的利用

目标条件 Actor/Q

GRPO 省去 V-Critic 可以减少一部分参数和优化器开销,但对每个问题采 G 个、每个长 L token 的回答,生成量约随 BGL 增长。对生成本就昂贵的模型,省一个 Critic 不保证总体更快。

PETS 中若每轮 CEM 评估 K 条序列、每条使用 P 个粒子、时域 H、迭代 I 次,模型转移评估量粗略随 IKPH 增长。批量并行能减小时间,但不会消除工作量。MBPO 则把大量模型工作移到训练阶段。

off-policy 方法常能从相同真实交互中做更多更新,但过多更新也可能过拟合或放大估计误差。样本效率更高、训练计算更少、墙钟时间更短,是三个不同结论。 没有统一环境、网络、采样和预算,不能给所有算法排绝对成本名次。

15.3 每次实现时,先核对这些具体问题。

检查点

为什么会影响结果

奖励方向、尺度是否正确

会影响 Q 数值、温度和保守系数的相对强度

terminated 与时间截断是否区分

真正终止不自举;单纯时间上限通常还需末状态价值,但按任务定义处理

TD 目标是否停止梯度

避免把目标分支也当成同一 loss 的优化对象

Actor 更新时 Q 的动作梯度是否保留

detach 动作或 no_grad Q 会破坏 DDPG/SAC 的路径

PPO/GRPO 的旧 log 概率、优势是否固定

否则概率比与权重不再表示原来的替代目标

Actor loss 的动作到底来自哪里

历史动作、新策略动作、目标动作不能混用

训练与评估的归一化是否一致

否则同一状态被网络看成不同输入

HER 是否同步更新奖励与目标相关终止

否则会产生互相矛盾的标签

离线评估是否偷用了额外在线试验调参

会改变“固定数据”的预算与比较条件

是否看多个随机种子与真实任务指标

loss 下降不代表策略回报提高

15.4 连接到检索与设计任务时,先把接口写清楚。

例如语言模型改写检索式:状态可包含原查询和生成前缀,动作是 token,最终奖励来自检索指标。若使用 GRPO,同一查询的多条改写构成一组,评价结果决定组内优势;奖励函数或检索器不必可微,梯度经过模型 log 概率。

如果研究的是 DocID / Semantic ID 的生成顺序,目标则应写成“选择哪个位置或哪一步先确定,是否提高最终文档级检索收益”。需要明确动作是顺序决策、token 内容决策,还是二者联合;也需要明确状态是否暴露未生成内容。普通语言模型 token-level GRPO 不能不加修改就等同于顺序策略学习。这是用本文框架分析新问题的例子,不是已有实验结论。

对于电路参数调整,若只有最终参数向量的评价,可以先比较 BO;若参数调整改变后续约束、不同设计需求下需反复决策,才进一步考虑状态条件策略。算法名称不能代替任务建模。

十六、关键疑问复盘与速查表

16.1 这次学习真正跨过的几个坎。

当时的问题

最终应记住的回答

epsilon-greedy 选了左,为什么 Q 目标还 max?

实际动作决定更新哪一项;下一状态的 max 定义未来按什么策略评价

期望下标到底是什么意思?

说明样本从哪里取;先读来源,再读平均的内容

没枚举全部轨迹,怎么知道梯度?

log trick 把梯度改写为期望,用采样平均近似

TRPO 为什么先新旧相减?

用旧优势表达性能差异,再构造可用旧数据估计的局部目标

有概率比了,为什么还要 KL?

动作比值没有精确修正新状态分布,过大更新会破坏近似

Q 已经知道 0.7 好,Actor 为什么还出 0.3?

Q 是评分函数,不直接给全局最优;Actor 根据局部梯度学习快速选动作

是不是计算图保存着,所以 loss 能更新 Actor?

前向保存依赖,backward 计算梯度;只更新指定参数,仍保留必要输入梯度

所有 Actor 都经过 Q 反传吗?

不;PPO/GRPO 经 log 概率,DDPG/SAC 经动作的可微评分

SAC 用旧数据,为什么不是离线?

回放是 off-policy;是否 offline 看还能不能收集新交互

MPC 训练的究竟是什么?

MPC 规划主要优化动作;只有学习型版本才另外训练动力学模型

模型输出一串最优动作吗?

通常优化器提出动作,模型预测其后果;两者不要混

PETS 和 MBPO 为什么都用模型却不同?

PETS 执行时规划;MBPO 用模型经验训练 Actor

GAN 的判别器就是 Critic 吗?

来源分类与长期价值估计是两种任务;GAIL 还可同时有判别器和 V

占用度量是不是动作概率?

它是状态访问与动作选择的联合度量,包含“去哪里”和“怎么做”

BCQ 核心是不是在已有动作上微调?

更核心是限制在数据支持附近,微调只是局部改进的实现

CQL 为什么有生成和扰动?

那是 BCQ;CQL 主要改变 Q 的 loss

CQL 是不是所有 Q 下压、历史动作上抬?

这是保守项的直觉;最终还受 TD、相对评分、采样和共享参数影响

目标 g 是从当前状态提取的吗?

期望目标 g 与实际结果 h(s) 分开;后者用于评价是否完成

HER 是把失败伪造成成功吗?

实际转移不变,只换任务目标并重算奖励;原任务仍可能失败

学会去 3,就自动学会去 5?

不保证;共享目标条件网络让经验可能迁移,并帮助后续学习

16.2 每个方法只留下一个识别点。

方法

一眼识别的机制

Q-learning

r + γ max Q 的 TD 自举

DQN

神经 Q+经验回放+目标网络

REINFORCE

回报加权 log 概率

TRPO

旧数据概率比+KL 信赖域

PPO

概率比与优势的截断替代目标

GRPO

同题多回答,组内相对优势

DDPG

确定性 Actor,由 Q 的动作梯度指导

TD3

双 Q、延迟策略更新、目标平滑

SAC

可微随机 Actor+双 Q+熵目标

Dyna-Q

真实更新与模型模拟更新交替

MPC

模型评价动作序列,只执行首动作再规划

PETS

概率模型集合+粒子轨迹+MPC

MBPO

真实状态分支出的短模型 rollout 训练 SAC

BC

历史状态到历史动作的监督模仿

GAIL

判别器奖励驱动策略匹配专家占用度量

BCQ

行为候选附近的受限动作优化

CQL

TD loss 加保守 Q 正则

IQL

数据内价值学习+优势加权模仿

TD3+BC

Actor 同时提高 Q 并贴近历史动作

Decision Transformer

目标回报条件的动作序列预测

MOPO

离线模型经验+不确定性奖励惩罚

Goal-conditioned RL

状态与目标共同输入策略/价值网络

HER

真实转移不变,重标注目标与奖励

Bayesian Optimization

代理模型+采集函数选择下一次黑箱试验

16.3 梯度和数据的五句检查口令。

  1. 更新 Q:知道被评分动作来自哪里,目标怎么构造,目标停止梯度。

  2. 更新 PPO/GRPO:固定采样动作、旧概率和优势,重算当前 log 概率。

  3. 更新 DDPG/SAC:重新生成可微动作,固定 Q 参数,保留 Q 对动作的梯度。

  4. 更新环境模型:用真实观测提供监督;内部预测不能冒充真实结果。

  5. 更新目标条件经验:目标变了,奖励及相关终止条件必须一致地变化。

16.4 再读一遍时,按问题找答案。

想重新理解“强化学习为什么能学”,读第一到第三部分;想恢复 Actor 更新的直觉,直接读第六、七部分;遇到在线与离线混淆,读第八部分;看模型控制论文时读第九部分;看模仿或离线论文时读第十到十二部分;处理多目标稀疏奖励时读第十三部分;选方法或估预算时读第十五部分。

面对一篇新论文,可以先写下五句话:它的决策变量是什么;它能获得什么数据;它用什么信号构造目标;梯度最后更新谁;实际执行时调用哪些组件。 能把这五句话说明白,算法缩写就开始变成可以实现和比较的学习过程。


评论