一份沿着真实疑问展开的学习复盘。重点不是背算法缩写,而是能回答:数据从哪里来,网络输入输出是什么,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 看成完全不同的东西。实际上,它们都在处理同一个循环:智能体观察当前情况,做一个动作,得到反馈,再改变下一次的决策方式。
一条交互记录写成:
这里统一约定:rₜ 是执行 aₜ 后得到的奖励;dₜ = 1 表示任务真正终止。某些教材把这个奖励记作 rₜ₊₁,只是下标约定不同。
强化学习通常关心累计回报,而不只关心这一步:
眼前奖励低的动作,也可能为后面的大收益创造条件。这就是“序列决策”的含义。
V、Q、A 是三个不同的问题。
表示“现在处于这个状态,后面按策略 π 行动,平均有多好”。
表示“现在先做动作 a,后面按策略 π 行动,平均有多好”。
表示“这个动作比当前策略在这个状态下的平均水平好多少”。例如 Q(s,a) = 8、V(s) = 5,优势就是 3。优势为负,表示这个动作比基准差,不等于环境奖励一定为负。
读公式时,先读期望的下标。
先看这个期望:
操作含义是:先从数据集取状态,再让策略采样动作,计算 f,最后平均。它与下面这个期望不同:
后者把状态和动作一起从历史记录中取出。区别就在期望符号下面写的采样来源。
如果从分布中独立采样 N 次,那么:
这就是 Monte Carlo 估计的基本想法:用抽样平均近似总体平均。无需枚举所有轨迹,但有限样本会有误差。
Monte Carlo 与 TD 的区别在“未来用什么表示”。
Monte Carlo:等后续奖励实际发生,用观测到的回报作为目标。
TD:用“当前奖励+对后续价值的估计”构造目标,不必等整条轨迹结束。
TD 用估计去更新估计,称为自举 bootstrapping;它能更快传播信息,也可能传播估计错误。
后面很多算法的分歧,恰恰发生在“未来价值怎么估计”以及“能不能相信这个估计”。
二、Q-learning 与 DQN:先学会给动作打分
既然 Q 表示动作的长期价值,一个自然想法是:先学 Q,再挑最高分动作。
2.1 Q-learning:一条真实记录,加一个未来价值目标。
η 是学习率。后一式也可以写成 (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。典型离散版本输入状态,一次输出所有动作的评分:
用经验回放池保存交互,抽取小批量训练:
在线网络 Qθ 接受梯度更新;目标网络 目标 Q 给出暂时较稳定的目标。y 在这次更新中停止梯度。目标参数可以定期复制,或缓慢跟随:
目标网络不是“更正确的老师”,而是当前估计的滞后版本,用来减少双方一起快速变化造成的不稳定。它不能从根本上消除错误估计。
**训练与推理:**训练时采样、存回放、更新在线 Q、更新目标 Q;推理时通常只运行在线 Q,取最高分动作。Double DQN 进一步把下一动作的选择与评价分开:在线 Q 选动作,目标 Q 评价,有助于缓解 max 带来的过估计。
问题也随之出现:如果动作是连续实数,不能把无穷多个动作全部打分。接下来可以直接学习“怎样生成动作”。DQN 的经典来源见 原论文。
三、策略梯度:没有正确动作标签,怎么训练策略?
直接学习策略 πφ,并不意味着必须有人告诉它“标准动作是什么”。环境回报可以告诉我们:这次做法总体表现好不好。
3.1 从“让好轨迹更常发生”开始。
为简化推导,先用有限时域、无折扣的轨迹回报 R(τ):
连续变量时求和换成积分。我们希望调整参数,让高回报轨迹的概率增加。
之前最难理解的恒等式,其实来自链式求导:
所以:
代回去,就重新得到一个期望:
轨迹概率是初始状态概率、每步动作概率、状态转移概率的乘积。取 log 后乘积变求和;当环境动力学不直接依赖策略参数时,对固定采样轨迹求导,留下的是策略项:
于是,自己采样若干轨迹,就能近似这个梯度。不是完全知道每种行为的价值,而是让采样结果统计地指引概率调整。 完整推导及代码对应关系见 Spinning Up 策略梯度教程。
3.2 REINFORCE 与优势:好坏要有参照。
最简单的实现用回报加权 log-probability;利用因果关系,还可以用从当前时刻开始的 reward-to-go。进一步减去与当前动作无关的状态基线,得到常见的优势形式:
这里的 aₜ 已经采样完成,估计优势 Âₜ 作为固定权重。正优势推动增加该动作概率,负优势推动减小概率。以上是常见批量实现写法;严格折扣目标中的时间权重需要与状态采样约定保持一致。
V 网络由此有了作用:预测状态基准,减少单纯使用随机回报造成的方差。V 的 loss 是回归回报目标;Actor 的 loss 是概率调整,两个 loss 的任务不同。
常见的 GAE 用多步 TD 残差估计优势:
实际递推需要在轨迹边界处正确截断。GAE 系数 λ 调节偏差与方差,不能与 CQL 的保守系数混为一谈。优势估计的来源见 GAE 原论文。
这一支 Actor 的梯度是经过 log 概率的,不是经过环境,也不要求对采样动作本身求导。 这为后面理解 TRPO、PPO、GRPO 打下基础。
四、TRPO:把“新策略比旧策略好多少”变成可计算目标
学会策略梯度之后,新的问题是:方向对了,一次迈多大?网络参数只变化一点,动作分布也可能变化很大;对同一批轨迹反复猛学,未必带来真实回报提高。
TRPO 的思路是:寻找能提高表现的更新,同时限制新旧策略分布变化。理解它的最佳入口,是曾经那句复盘:“先做新旧相减,用优势表达差异;新状态分布难采样,就局部近似;动作概率用新旧比值转换;再加 KL 约束。”
4.1 新旧策略的差异,为什么和旧优势有关?
定义归一化折扣状态分布:
在共同初始分布、γ < 1 的常规设定下,性能差异恒等式是:
它告诉我们:沿新策略可能经历的状态和动作,用旧策略的优势评价这些选择,平均优势决定新旧表现差异。
直观上,旧策略优势 A_old 包含“这一步奖励+下一状态旧价值−当前状态旧价值”。沿轨迹求折扣和,中间的价值项会相互抵消,留下新策略回报减去旧策略的初始价值。这是公式成立的关键。
4.2 为什么变成了旧数据和概率比值?
我们只有旧策略采到的数据。对每个待尝试的新策略重新采集完整轨迹,成本很高。于是局部近似:
对动作则做重要性加权:
前提是旧分布覆盖新分布所需的动作支持。忽略不影响最优解的常数后,得到替代目标:
例如某动作旧概率 0.2,新概率 0.3,比值 1.5,表示新策略更倾向这个动作。比值修正的是同一状态下动作的分布,不会自动修正状态访问分布的变化。
4.3 KL 约束与拉格朗日函数。
为了让局部近似更可信,限制平均 KL:
KL 衡量分布差异,不是普通的对称距离。不同实现可采用不同方向的局部 KL;必须保证推导和实现一致。理论性能界与实践中的采样平均 KL 也不能直接等同。
把目标局部线性化、KL 二次化,令 Δ = φ − φ_old:
策略梯度 g_pg 是目标梯度,F 是 KL 的局部曲率。拉格朗日函数把“想提高多少”和“越界代价”合成一个表达式:
对 Δ 求导并令其为零,可得方向与 F⁻¹g_pg 成正比,再按 KL 预算缩放。实现通常用共轭梯度求近似方向、用矩阵向量积避免显式求逆,再回溯线搜索检查目标改善与 KL。
**训练:**旧策略采轨迹,算回报和优势,固定旧 log 概率,进行受约束的策略更新,再回归训练 V。**推理:**只需策略网络。TRPO 的价值在于控制策略更新幅度,但神经网络、有限数据与近似求解并不保证每轮真实回报必然上升。参见 TRPO 原论文 与 实现解释。
五、PPO 与 GRPO:简化更新,改变优势的来源
5.1 PPO:用更容易优化的目标,抑制过度更新。
TRPO 的约束求解比较复杂。PPO-Clip 保留旧数据、概率比值和优势,改用:
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,典型组内标准化优势为:
例如奖励为 [0,0,1,1],较好的回答得到正优势,较差的回答得到负优势。若组内奖励全相同,这种优势通常为零,不能提供区分回答的奖励学习信号。
简化理解其 Actor 目标:对回答中的 token 使用新旧概率比和 PPO 式截断,用组内优势加权;可再加相对参考策略的 KL 惩罚。若问题为 q,第 i 个回答为 oᵢ,长度为 Tᵢ,则 token 概率比是:
一个结果级奖励版本的简化目标可写成:
把每个 token 的截断目标取平均,再减去 KL 惩罚:
𝒦 表示在相关前缀上的 KL 惩罚或其估计,KL 系数 β 控制强度,Actor 最小化 −J。这里同一回答的优势用于多个 token;具体 token/序列归一化、过程奖励、KL 和采样机制依版本而异。
一轮训练就是:采一批问题,每题生成一组回答;计算奖励与组内优势;固定回答 token、旧概率和优势;重新前向计算当前概率,做有限轮参数更新;再生成新回答。判断训练是否进步,需要看任务奖励与独立评估,而不能只看这个替代 loss 是否下降。
GRPO 通常省去独立训练的 V-Critic,但“没有 V”不等于“没有评分”:奖励仍然可以来自规则、测试器、检索指标或奖励模型。它也不意味着直接对文本奖励反向传播;梯度仍来自回答 token 的 log 概率。
训练时多生成并评分,推理时通常仍是一个语言模型解码。 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 使用真实经验构造:
Actor 则从回放池取状态,重新输出动作:
更新 Actor 时,固定 Q 的参数,但保留它对输入动作的梯度:
第一项告诉我们动作往哪里改可以提高评分;第二项告诉我们怎样改 Actor 参数才能产生这种动作变化。交互时常给确定性动作加探索噪声;推理时通常去掉探索噪声。见 DDPG 原论文。
6.2 那个真正想通的问题:Q 知道 0.7 好,为什么 Actor 还生成 0.3?
神经网络 Q 通常只会对输入动作打分,并不会直接返回连续动作空间的全局最优点。Actor 相当于学习一个快速的动作选择函数。当前生成 0.3,只说明它还没学好;Q 在 0.3 附近的梯度,给它提供局部改进方向。
设一个演示用 Critic:
令随机策略的简化动作生成式为 a = φ + 0.1ε,当前 φ = 0.2,本次抽到 ε = 1,因此 a = 0.3。只考虑 Q 项:
若学习率为 0.1,则 φ 更新为 0.28。为了比较同一次噪声下的变化,仍取 ε = 1,新动作是 0.38,更接近 0.7。
这里没有提供“正确动作标签 0.7”,也没有先把最优动作求出来。Actor 根据可微评分获得改进方向。 真实 Q 可能不准确、非凸,有时也会指错方向。
“生成动作时保存了计算图,所以可以按 loss 更新”这个理解是对的,但更精确的是:前向计算记录操作依赖,调用 backward 时才计算梯度。并不是采样阶段已经存好了所有梯度。
6.3 TD3:减少 Actor 被错误 Q 引导的机会。
DDPG 的单 Q 容易受估计误差影响。TD3 的三个标志性改动是:双 Q 取较小值构造目标、延迟策略更新、目标动作平滑。
这里目标平滑噪声通常还会单独限幅。Actor 常用 −Q₁(s,μφ(s)) 更新。它仍是确定性 Actor,推理时可直接输出动作。见 TD3 原论文。
6.4 SAC:在提高价值的同时,保留策略熵。
SAC 优化的是奖励与熵的组合。熵写成 H(π(·∣s)) = E[−log π(a∣s)];离散熵表示分布分散程度,连续动作使用微分熵,数值可以为负。
常见现代结构是:随机 Actor、两个在线 Q、两个目标 Q,以及固定或学习的熵系数 α。早期 SAC 有单独 V 网络,不能把不同版本结构混在一起。
Actor 输出高斯参数并重参数化:
固定本次随机噪声后,动作是参数的可微函数。动作范围还可缩放;计算 log π(a∣s) 时必须包含 tanh 变换的雅可比修正,不能直接用变换前高斯的 log 密度。
**更新 Critic:**从回放池取真实历史动作 a;下一动作 a′ 由当前 Actor 在 s′ 上采样:
整个目标 y 停止梯度。**更新 Actor:**从回放池取状态 s,重新重参数化采样动作 新采样动作 ã:
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,否则会切断需要的梯度。
若自动调整熵系数,可以最小化:
这一步固定 log 概率。熵低于目标时提高 α,熵过高时降低它;工程里常优化 log α 保持正值。温度更新与 Actor 更新是分开的。
一轮完整 SAC:交互入池;抽批更新双 Q;重新采样更新 Actor;按需更新温度;软更新目标 Q。推理时通常只使用 Actor,可采样,也常用变换后的均值作确定性评估。见 SAC 算法与应用论文 和 SAC 实现解释。
七、把训练和推理彻底分开
“这个算法有五个网络”,不等于部署时每次选动作都要调用五个网络。学习系统里有老师式的目标网络、辅助评价器和数据生成器;部署时可能只保留一个决策网络。
最重要的梯度分界线:
交互采样通常在无梯度模式下执行,保存状态、动作、奖励和必要旧概率。训练时重新前向建立所需计算图。不能把“训练时动作需要可微”理解成“整条真实交互轨迹一直保留巨大计算图”。
八、在线、离线、同策略、异策略:四个词不能混用
学习过程中反复出现过一个误区:“PPO 在线,SAC 用回放,所以 SAC 离线。”其实这里混合了两条分类轴。
在线/离线,问的是训练时能不能获取新的环境交互。
在线 RL:训练过程中继续收集新反馈。
离线 RL:策略训练主要限定在固定数据集里,不能靠新交互纠正错误。
离线预训练后在线微调:两个阶段,应分别说明。
on-policy/off-policy,问的是学习能否使用不同于当前目标策略的行为数据。
on-policy:通常依赖当前或近期策略采样的数据;PPO 允许一批数据上有限轮更新。
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′)。一轮包括:
与环境交互,得到一条真实转移,用 Q-learning 更新。
用这条记录更新环境模型。
从模型记住的状态动作对中采样,查询模拟奖励和下一状态。
用这些模型转移再做若干次 Q-learning 更新。
为什么重复模拟旧转移还有用? 假设刚知道终点前一个状态很好,重新更新更早的转移,就能把这个新价值向前传播。模型记录的转移没变,下一状态的 Q 却可能已经变了。
这是一种“用模型做 planning”的含义:在内部进行价值更新,不一定每次显式输出一整条动作路线。模型若处于随机环境,需要学习转移与奖励分布,不能永远只记最后一次结果。Dyna-Q 通常仍在线交互,推理可直接使用学到的 Q。
9.2 MPC:规划动作,与训练模型是两件事。
MPC 是 Model Predictive Control,模型预测控制。它本身是控制框架,不要求必须训练神经网络。最核心的区分如下:
在时刻 t,规划器搜索 从 aₜ 到 aₜ₊H₋₁ 的动作序列,使用固定的模型递推预测未来状态,并优化累计代价:
还可以加动作、状态和终端约束。找到序列后,只执行第一个动作,读取真实新状态,再重新规划。
“模型怎么预测一串最优动作?”这个问题的答案是:通常是优化器提出和改进动作序列,模型预测每条序列的后果。 二者角色不同。优化器可以是梯度法、二次规划,也可以是采样优化。
以 CEM 为例:先采样很多候选动作序列;用模型评估;保留表现较好的少数序列;拟合它们的采样分布;继续采样和筛选。这里调整的是当前规划的搜索分布,不等于训练一个长期保留的 Actor。
拿到真实结果之后怎么训练? 如果动力学已知且固定,MPC 只更新当前状态并重规划,并不训练模型。如果是学习型 MPC,再把真实 (s,a,s′) 加入数据,周期性拟合模型。
例如 fψ(s,a) = s + ψa,当前 s = 4、a = 2、ψ = 1,预测下一状态为 6,实际是 5.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。
奖励可由模型预测,或由已知奖励函数计算。真实与模拟数据按配置组合使用;模型经验需要随模型、策略更新而刷新。
为什么短 rollout?模型每一步都有误差,长展开容易逐步偏离真实分布。从许多真实状态重新起步,用短段模拟限制误差积累。短模拟并不等于只优化短期收益:SAC 的 Q 仍然可以通过自举表示长期价值。
标准 MBPO 把生成的转移当训练数据,不需要让 Actor 梯度穿过整段动力学 rollout。Critic 用这些转移拟合目标;Actor 再按 SAC 的 Q 梯度更新。动力学训练依赖真实数据,不应把自己的预测冒充真实标签循环强化。
与 PETS 的关键区别是:PETS 在每次执行时用模型规划;MBPO 用模型帮助训练 Actor,部署时通常只跑 Actor。MBPO 通常仍需真实在线交互,不能因为有模型经验池就叫离线 RL。见 MBPO 原论文。
十、GAN、GAIL 与占用度量:没有奖励,能不能向专家学?
前面默认环境能提供任务奖励。如果很难设计奖励,却有人类或专家演示,就可以从行为中学习。
10.1 BC:直接模仿历史动作。
Behavior Cloning 把专家 (s,a) 当监督数据:离散动作用交叉熵,连续动作可用动作回归或概率似然。它不需要 Q、不需要任务奖励,也不必在训练期间与环境交互。缺点是策略一旦进入专家数据较少覆盖的状态,误差可能累积。
10.2 GAN:先理解“生成器与判别器”怎样交替学习。
GAN 中生成器 G(z) 根据噪声生成样本,判别器 D(x) 判断样本来自真实数据的概率。固定生成器训练判别器:
常用的非饱和生成器 loss 为:
更新 G 时固定 D 参数,但梯度经过 D 的输入回到 G,这与“固定 Q 参数仍保留动作梯度”在计算图上有相似之处。GAN 的判别器判断数据来源,不是在估计动作的长期回报。见 GAN 原论文。
10.3 GAIL:从判别器获得模仿奖励。
GAIL 把策略产生的状态动作对和专家状态动作对送入判别器,再使用判别器输出构造奖励,让策略学出类似专家的行为分布。
为与之前截图一致,这里约定 D(s,a) 表示“来自学习者”的概率:专家标签 0,学习者标签 1。因此:
策略可使用奖励 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。归一化折扣版本为:
这里使用无限时域或吸收终止状态等一致约定;有的文献省略 (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-learning 对一条真实记录算目标,若 r = 1、γ = 0.9,就会得到 y = 91。
当前转移是真的,但训练目标里“未来能拿到 100”的部分是估计。 所以,即使训练只读取真实数据,Q 的自举目标也可能被陌生动作的错误高分污染。
重复训练固定数据,不会凭空获得 C 的真实后果。在线 RL 也会有外推误差,只是还可能通过新交互纠正。离线算法需要主动约束这种无依据的乐观。
11.2 表格 BCQ:只在数据支持的下一动作中取 max。
刚才只比较 8 与 3,目标就变成 8.2。注意限制是“在这个状态 s′ 下出现过”,不是某动作在整个数据集任意地方出现过就能选。
11.3 连续 BCQ:生成、微调、择优分别解决什么问题?
连续状态难以精确查表,连续动作也无法枚举。BCQ 使用条件生成模型学习历史动作分布:
同一个状态采样多个候选,不是规划未来多个时刻的动作。G 常用条件 VAE,负责生成像历史行为的动作;ξ 负责输出幅度不超过 Φ 的小调整;Q 负责在调整后的候选中选高分。多维动作通常逐分量限幅,并处理环境动作边界。
例如生成 0.40,允许最多改 0.05,可以调整成 0.43。基础候选来自学到的行为分布,不一定是从历史数据里原样取出的动作。
为什么不一步直接输出好动作? 可以,但仍需要控制偏离数据的风险。BCQ 把“像历史行为”与“在附近提高 Q”分开实现。去掉扰动,只生成多个候选再择优,仍保留批量限制的核心;扰动帮助在有限候选附近进一步改进。
VAE 通过历史 (s,a) 的重建误差和 KL 正则训练。扰动网络则用:
这一步固定 G 和 Q 的参数,基础动作也作为固定输入;梯度穿过 Q 对调整后动作的导数,更新扰动网络。与前面 DDPG Actor 的原理相同,只是输出的是有限调整量。
Q 的 TD 训练仍使用历史动作和真实奖励;下一状态的动作由生成与扰动构造。原始深度 BCQ 配有双 Q、目标网络及保守组合,不能仅凭简化单 Q 公式复现全部实现。
BCQ 的核心不是“微调”本身,而是“在数据支持的行为附近优化”。 生成模型可能拟合不准,动作接近也不自动保证以后每个状态都熟悉。见 BCQ 原论文与算法。
11.4 CQL:不先限制候选结构,而是让评分更保守。
CQL 可以保留 DQN 或 SAC 的主体,修改 Critic 的 loss。常见 CQL(H) 的离散形式是:
其中,TD 损失是:
新增的保守项是:
读这个公式时,先把两个来源区分开: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:
对单个评分求导,有一个很直观的式子:
没有数据支持的高分 C 被压低;随着其相对评分降低,压力也会变小。数据动作也不一定净上升:若已经高得超过其数据支持,保守项本身也可能压低它,TD 还会进一步修正。
不能把所有 Q 统一减 100 代替 CQL。 统一平移不改变动作排序,而且上述保守项对共同平移不变。它约束的是相对评分,而不只是数字绝对大小。单用保守项也不够,否则容易主要反映行为频率;TD 让算法继续学习回报差异。
连续动作无法枚举,常从均匀分布与当前策略等来源采样,结合概率密度修正,近似相应积分。采样动作只是查询 Q,不用真的执行,也不需要捏造奖励。不能把任意采样后的裸 log-sum-exp 当成连续公式的无偏精确实现。
11.5 CQL+SAC 的一轮更新,到底谁变化?
从固定数据集取 (s,a,r,s′,d)。
用目标 Q、下一状态策略动作与真实奖励构造 TD 目标,停止梯度。
对数据动作与比较动作评分,计算保守项。
最小化 “TD 损失+保守系数 × 保守项”,更新在线双 Q。
在数据状态上重新生成可微动作,按 SAC Actor loss 更新策略。
按实现更新熵系数与目标 Q;保守系数可固定,也可按约束进行单独调节。
CQL 的 Actor 不需要“生成+扰动”两段结构。它沿用 SAC 的方式,只是依赖经过保守训练的 Q。熵系数 α 与保守系数 CQL 保守系数 λ 是不同超参数,不能因为教材用了同一个字母就混成一个。
保守系数太弱可能压不住外推误差,太强可能过度悲观。理论中相应条件下的策略期望价值下界,不等于实际神经网络每个 Q(s,a) 都保证小于真实值。见 CQL 原论文。
十二、其他离线方法:IQL、TD3+BC、DT 与 MOPO
BCQ 与 CQL 代表两条思路,但离线 RL 不只有这两种方法。复习时,先问它们如何减少对不可靠分布外估计的依赖。
12.1 TD3+BC:给 Actor 同时提出两个要求。
一个简化的连续 Actor loss 是:
Q 项要求提高回报,BC 项要求不要离历史动作太远,c 用于平衡尺度。这与 BCQ 显式生成候选的结构不同:它可用一个 Actor 直接输出动作,并在训练目标里加约束。Critic 沿用 TD3 机制;推理用 Actor。见 TD3+BC 原论文。
12.2 IQL:先从数据内学价值,再加权模仿。
IQL 的基本结构是 Q、V 与 Actor。它避免在价值学习的 Bellman 目标中对新生成的分布外动作直接做 max。
先用数据动作的 Q 来训练偏向较高价值的 V:
正残差获得更大权重,所以 V 会偏向数据中较好的行为价值;这是 expectile 回归,不是直接取一个分位数,也不是精确 max。
Q 再学习 y = r + γ(1 − d)V(s′)。Actor 使用优势加权行为克隆:
权重通常会限幅。高于基准的历史动作被更强地模仿。这里 Actor 的动作来自数据,梯度通过 log 概率,不是 SAC 式穿过“Q 对新动作的导数”。 推理通常只用 Actor。见 IQL 原论文。
12.3 还有哪些路线?
对应来源:Decision Transformer、MOPO、Diffusion-QL。它们分别改变序列建模方式、模型使用方式、策略表达方式。不能把所有扩散策略都叫离线 RL,也不能认为给 DT 一个极高目标回报就保证产生对应能力。
真正对比离线方法时,应保持同一固定数据集、奖励定义、评估任务与调参预算,避免把不同数据质量造成的差别误当成算法优劣。
十三、目标条件学习与 HER:失败经历怎样变成有用的数据?
前面的算法主要改变如何学习。现在换一个角度:如果每局要求到达不同目的地,应该怎样表示任务?
13.1 把目标作为输入。
在同一个位置,去食堂可能向左,去图书馆可能向右。如果网络只知道现在在哪里,却不知道想去哪里,就无法区分任务。因此输入状态与目标:
同一套参数服务不同目标。传统 RL 并非天然只能完成一个目标:如果目标本来已经包含在状态中,也可以条件决策。把 g 单独写出来,是明确告诉模型任务要求。见 目标条件价值函数 UVFA。
13.2 期望目标与实际结果必须分开。
截图把映射写作 φ(s);为避免和 Actor 参数混淆,这里改用 h(s)。如果状态包含位置、速度、朝向,h 可能只是取出位置分量,并不需要额外训练模型。
一种奖励定义是:
距离阈值表示“足够接近就算到达”。这是一种稀疏奖励:离目标 5 米与 1 米都可能得 −1。到达奖励 0 仍有效,因为在到达终止且忽略折扣的示例里,三步到达回报 −2,六步到达回报 −5,算法偏好前者。
同一个真实转移,对不同目标奖励可以不同。Q 因而也要带目标。训练目标例如:
前后都针对同一个 g。整体目标写成:
意思是在各种起点和目标上提高平均表现。
13.3 HER:没有到原目标,也确实到过别的地方。
假设原目标是 5,实际轨迹只到 3:0 → 1 → 2 → 3。原目标下每一步奖励都是 −1。HER 重新提出一个有真实依据的问题:“如果目标是 3,这些经历意味着什么?”
改变的是目标和对应奖励,实际状态、动作、下一状态都不变。 原任务没有成功这件事仍然成立;只是同一条经验也能帮助学习另一个目标。
对记录 (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 三种“新增经验”不要混。
十四、贝叶斯优化:什么时候根本不必把问题写成 RL?
学习 RL 后,容易看到调参就想定义状态、动作和奖励。但如果任务是选择一个固定参数向量 x,运行一次昂贵实验,得到一个分数 f(x),黑箱优化可能更直接。
贝叶斯优化用已有试验数据 (xᵢ,f(xᵢ)) 拟合代理模型,预测候选位置的均值与不确定性;再用采集函数选择下一次值得试验的参数;执行真实评估后更新模型。
它的不确定性是“对未知函数了解多少”,不等于 SAC 的动作分布熵。BO 通常也在顺序采集新数据,但这不使它自动成为离线或在线 RL 算法;任务结构和学习对象不同。
如果只为一个固定设计找最优参数,先比较 BO、随机搜索和合适的数值优化。若需要跨不同任务状态持续决策、动作影响后续约束和可选项,才更有理由学习策略。也可以用 BO 调 RL 超参数,两者并不互斥。见 贝叶斯优化教程。
十五、环境选择、成本对照与工程检查
“哪个最先进、哪个最好”必须落到数据权限、动作空间、环境成本和部署约束上。下面是建立基线的判断依据,不是跨任务的性能排名。
15.1 先判断你到底拥有什么。
PPO、SAC、TD3、DQN 系列仍是常见通用基线;原始 TRPO 和 DDPG 很适合学习原理,但实践中通常也应比较后续方法。LLM 场景中的 GRPO 有不少实现变体,不等于所有 RL 环境都应换成 GRPO。此类选择逻辑也可参考 Stable Baselines3 的算法建议。
15.2 成本至少要分四笔账。
真实交互:机器人试验、模拟器运行、检索查询、工具调用或人工评分。
训练计算:前向、反向、目标网络、辅助模型与优化器状态。
数据与显存:回放池、rollout buffer、激活、模型副本。
部署计算:每步仅 Actor 前向,还是还要采样候选、规划、运行多个网络。
GRPO 省去 V-Critic 可以减少一部分参数和优化器开销,但对每个问题采 G 个、每个长 L token 的回答,生成量约随 BGL 增长。对生成本就昂贵的模型,省一个 Critic 不保证总体更快。
PETS 中若每轮 CEM 评估 K 条序列、每条使用 P 个粒子、时域 H、迭代 I 次,模型转移评估量粗略随 IKPH 增长。批量并行能减小时间,但不会消除工作量。MBPO 则把大量模型工作移到训练阶段。
off-policy 方法常能从相同真实交互中做更多更新,但过多更新也可能过拟合或放大估计误差。样本效率更高、训练计算更少、墙钟时间更短,是三个不同结论。 没有统一环境、网络、采样和预算,不能给所有算法排绝对成本名次。
15.3 每次实现时,先核对这些具体问题。
15.4 连接到检索与设计任务时,先把接口写清楚。
例如语言模型改写检索式:状态可包含原查询和生成前缀,动作是 token,最终奖励来自检索指标。若使用 GRPO,同一查询的多条改写构成一组,评价结果决定组内优势;奖励函数或检索器不必可微,梯度经过模型 log 概率。
如果研究的是 DocID / Semantic ID 的生成顺序,目标则应写成“选择哪个位置或哪一步先确定,是否提高最终文档级检索收益”。需要明确动作是顺序决策、token 内容决策,还是二者联合;也需要明确状态是否暴露未生成内容。普通语言模型 token-level GRPO 不能不加修改就等同于顺序策略学习。这是用本文框架分析新问题的例子,不是已有实验结论。
对于电路参数调整,若只有最终参数向量的评价,可以先比较 BO;若参数调整改变后续约束、不同设计需求下需反复决策,才进一步考虑状态条件策略。算法名称不能代替任务建模。
十六、关键疑问复盘与速查表
16.1 这次学习真正跨过的几个坎。
16.2 每个方法只留下一个识别点。
16.3 梯度和数据的五句检查口令。
更新 Q:知道被评分动作来自哪里,目标怎么构造,目标停止梯度。
更新 PPO/GRPO:固定采样动作、旧概率和优势,重算当前 log 概率。
更新 DDPG/SAC:重新生成可微动作,固定 Q 参数,保留 Q 对动作的梯度。
更新环境模型:用真实观测提供监督;内部预测不能冒充真实结果。
更新目标条件经验:目标变了,奖励及相关终止条件必须一致地变化。
16.4 再读一遍时,按问题找答案。
想重新理解“强化学习为什么能学”,读第一到第三部分;想恢复 Actor 更新的直觉,直接读第六、七部分;遇到在线与离线混淆,读第八部分;看模型控制论文时读第九部分;看模仿或离线论文时读第十到十二部分;处理多目标稀疏奖励时读第十三部分;选方法或估预算时读第十五部分。
面对一篇新论文,可以先写下五句话:它的决策变量是什么;它能获得什么数据;它用什么信号构造目标;梯度最后更新谁;实际执行时调用哪些组件。 能把这五句话说明白,算法缩写就开始变成可以实现和比较的学习过程。