跳到主要内容

从「算法对」到「跑得起来」 — 工程判断

这一章讲三件事: 一个新任务该按什么顺序推进; ★ 三条在前面任何一章的理论里都推不出来的坑 ★; 以及那一串算法为什么会长成今天这个样子。

★ 它在全书链条里的位置:落点。★ 第 11 章把「算法齐了却不好用」拆成八个障碍并派给了六章; 而这一章处理的是那六章都处理不了的那一层 —— 没有理论,只有经验。 书里对这一章的定位也是这句:这些技巧「有时可以产生显著效果,但不总是这样」1

顶层全景:一次真实的排错,按顺序查五处

这一章从头到尾用同一个场景:你在倒立摆上写好了一个 PPO,跑起来,奖励曲线纹丝不动。

★ 按这一章给的顺序查一遍(每一步的数都是**为演示编的**;每一条判断都是书里第 18 章的条目)。★

① 看策略的「有多说不准」(熵) §12
第 1 轮 1.40 → 第 200 轮 **0.05**
★ 判断:探索已经停了。它现在每次都做同一个动作。★

② 看终止信号 §8
发现:片段跑满 200 步时,那个信号被置成了真
★ 判断:第 200 步的价值被强按成 0,而它实际大约值 −15。价值网络被带偏了。★

③ 看归一化 §7
发现:代码里把这一批奖励减了均值(−5.2)再除以标准差(3.1)
★ 判断:原本全是负的奖励变成有正有负 —— 智能体的「想活久一点还是想早点结束」被改掉了。★

④ 看随机种子 §13
换 3 个种子重跑:最终平均回报 **−180 / −950 / −210**
★ 判断:第二个种子那条曲线根本不能拿来下任何结论。★

⑤ 换一个度量来看 §10
不看奖励值,改看「摆杆偏离竖直位置的平均角度」:1.6 弧度 → **0.3 弧度**
★ 判断:它其实一直在进步,只是奖励曲线看不出来。★

★ 这五步就是这一章的主走查。★
★ 而其中 ②③⑤ 三条 —— 也就是本章最要命的那三条 ——
在前面十九章的任何一条推导里都推不出来。★

1. 先问一句:这个任务该用强化学习吗

这一节回答:动手之前该先排除什么。

书里给的判据很干净2:

什么样的任务用什么
连续决策问题,而且能用马尔可夫过程描述或近似强化学习
★ 有标签数据的预测任务 ★★ 书里明说:「通常不需要强化学习算法,而监督学习方法可能更直接和有效」★

书里还给了强化学习任务的两个必要零件:一个提供动态过程和奖励信号的环境, 和一个由策略控制的智能体2

★ 而书里点了一件很实在的事:前面那些章用的都是标准环境(比如 OpenAI Gym), 「你不需要过多关心环境,因为它们已经被设计好且经过标准化和正则化」; 而应用那几章的项目「则需要人为定义环境」★2 —— 也就是第 18 章那一整章的活。

2. 三个阶段,顺序不能反

这一节给出全章的骨架。

书里把整个推进过程分成三步3:

阶段做什么★ 关键的一句 ★
① 简单测试用「你对其正确性有高置信度」的模型,在简单任务上探路,甚至先用随机策略★「而不是直接使用一个复杂的模型」★
② 快速配置快速测试模型设置,尽可能可视化;然后逐步增加复杂度★「如果你无法百分之百确定更改的有效性,你应当每一次都进行测试」★
③ 部署训练大规模训练,用并行、用云上的机器书里说这一步常和第二步交替进行,实践中可能花很长时间

★ 这三步的核心是一个纪律:每一次只加一样不确定的东西,加完就测。★ 书里在实现那一节又说了一遍:「你应当从比较清晰的模型或环境开始测试,然后逐步增加新的部分, 而不是一次将所有的模块组合起来测试和调试」4

书里还加了一句很不客气的:「除非你是这个领域的专家并且很幸运, 否则你不应当期望一个复杂的模型可以一次实现成功并得到很好的结果」4

3. 不要过拟合论文里的实现细节

这一节兑现第 10 章第 3 节埋的那笔债。

书里的原话

★「当你实现这些方法的时候,不要过拟合到论文细节上, 而是去理解论文作者为何在这些特定情形下选择使用这些技巧。」★5

书里给了两个具体的反例,而第一个正是第 10 章那个:

★ 反例一(第 10 章第 3 节欠下的那笔债,现在还了):★
DDPG 那篇论文建议用一种「这一刻的随机量和上一刻有关」的噪声来探索。
★ 而书里说:「实践中,有时很难说 OU 噪声是否比高斯噪声更好,
而这往往在很大程度上依赖于具体任务。」★[^5]

★ 反例二(更狠,因为它推翻的是「更高级」):★
在那个下《星际争霸 II》的工作里,★ 朴素的多步回报方法「被证实比其他更高级的
离线策略修正方法更有效」。★[^5]
→ 而那个「更高级的方法」正是第 17 章第 6 节讲的重要性加权那一套。

书里给的收口判据:「如果这些技巧不足够通用,那么它们可能不值得你花精力去实现」; 但「理解作者在这些情况下为何使用这些技巧则是更关键和有意义的」5

★ 一句话:抄结论没用,要抄的是「他当时面对的是什么问题」。★

4. 输入:值域不归一化,第一层一开局就废

这一节讲一个非常具体、而且一犯就废的坑。

书里的话:如果环境观测的值在一个很大的或者未知的范围内,「你就应该把它的值归一化」; 理由是 —— 如果你用 Tanh 或者 Sigmoid 当激活函数, 「较大的输入值将可能使第一个隐藏层的节点饱和」,而这在训练开始时 「将导致较小的梯度值和较慢的学习速度」6

★ 「饱和」是什么意思:这两个函数把任意的数压进一个固定的小区间。★
★ 输入一大,输出就贴在区间的边上不动了 —— 输入再大一倍,输出几乎不变。★
★ 于是「输入变一点、输出变多少」这个量趋近 0,也就是梯度趋近 0。★

举例:输入是 300(比如某个没归一化的传感器读数)
→ Sigmoid(300) ≈ 1.000000
→ Sigmoid(301) ≈ 1.000000
→ ★ 差值几乎是 0,梯度也就几乎是 0 —— 这一层从第一步起就没在学。★
(这个例子是我们编的;那条因果是书里的。)

★ 而书里在同一节还提了一句很实在的做法:可以先用一个随机动作的智能体去跑一遍环境、 把过程可视化,「以找到一些极端情况」;书里说,如果环境是你自己搭的,「这一步可能很重要」。★6

5. 输出:激活函数要配动作的值域

这一节讲输入那一头的对偶问题。

书里的话:常用的 ReLU「可能从计算时间和收敛表现上都对隐藏层来说可以很好地工作, 但是它对有负值的动作输出范围来说可能是不合适的」7

★ 为什么:ReLU 的定义是「负数一律变成 0」。★
→ 如果你的动作值域是 (−1, 1),而输出层用了 ReLU
→ ★ 这个策略永远输出不了任何一个负动作。★ 方向盘只会往一边打。

书里给的做法:「最好将策略输出值的范围跟环境的动作值域匹配起来」——
比如动作值域是 (−1, 1) 时,输出层用 Tanh。[^7]

★ 这一条和 §4 合起来是一对:输入那头怕值太大(饱和),输出那头怕值域不匹配(截掉一半)。★

6. 每个算法都有自己的脾气

这一节兑现第 09 章第 7 节欠下的那笔债,并给出这一章唯一一条选型判据。

先看现象:算法不是可以随便换的零件

书里说得很直接:「熟悉你所用的强化学习算法的性质」8★ 而它给了三条具体的脾气,每一条都能直接决定你该不该用它。★

脾气一:信赖域那一路要很大的批量

★ 这就是第 09 章第 7 节欠下的那笔债。★ 那里说「二阶方法贵,而且需要很大的批量样本才近似得准,第 20 章会说它因此扩不到大网络」—— 下面这一段就是它。

书里给的机理:这一路「需要用一个较大批尺寸的原因是,它需要用共轭梯度来近似 Fisher 信息矩阵,这是基于当前采样到的批量样本计算的」; 如果批尺寸太小或者有偏差,「可能对这个近似造成问题」,导致学习表现下降8

★ 而结论是一条很硬的限制:「TRPO 有时也无法较好地扩展到大规模的网络 或较深的卷积神经网络和循环神经网络上。」★8

书里还给了一条可操作的调法:「算法 TRPO 和 PPO 中的批尺寸需要被增大, 直到智能体有稳定进步的学习表现为止」8

★ 顺带给了一条读曲线的判据:对这一路的方法,你应当期待「策略表现稳定的进步」, 而不是学习曲线上某个位置突然大幅下降。★8

脾气二:DDPG 对超参数敏感,而这在真任务上是致命的

书里说 DDPG「通常被认为对超参数敏感」,尽管它在许多连续动作任务上很有效; 而把它用到大规模或现实任务上时,「这个敏感性会更加显著」8

★ 书里给的因果链非常实在,而且它是一条选型判据:★[^27]

① 在一个简单的模拟环境里,通过 ★ 彻底的超参数搜索 ★ 最终能找到一个很好的效果
② 而现实世界中的学习过程,「由于时间和资源上的限制可能不允许这种超参数搜索」
③ → ★ 所以书里的结论是:「DDPG 相比与其他 TRPO 或 SAC 算法可能不会有很好的效果。」★

★ 注意这个论证的形状:它不是说 DDPG 算法差,是说
「它的好成绩依赖一件你在真项目里做不起的事」。★
★ 这才是真正的选型判据 —— 论文上的分数不算数,能不能在你的预算内复现才算数。★
(最后这两句是我们的归纳;前面三条都是书里的。)

脾气三:为连续动作设计的算法,也能改到离散上

书里给了一条很实用的救场手段:DDPG 起初是为连续动作设计的, 「这并不意味着它不能在离散值动作的情况下工作」8

★ 而书里给的两条改法,第二条正是第 08 章第 3 节那个技巧:★

改法做什么
硬凑用一个系数很大的 Sigmoid 当输出激活,再把结果修剪成 0/1,并保证截断误差比较小8
★ 用那个技巧 ★直接用第 08 章第 3 节那个「让从类别分布里采样也能求导」的耿贝尔-softmax,把确定性输出改成一个类别分布8

★ 第 08 章第 3 节埋的那个技巧,到这里是第三次也是最后一次出场:★ 理论章埋(08)、算法章用(10 的 SAC 降方差)、工程章救场(这里)。★

顺带:网络别太深

书里在选网络结构那一条里给了一个很有用的量级9:

★「超过 5 层的神经网络在强化学习应用中不是特别常见。」★9

★ 而书里给的理由不是算力,是一条很深的观察:★[^23]

在监督学习里:网络相对数据足够大 → 它可以 ★ 过拟合到数据集上 ★(至少能把训练集背下来)
在这一行里: 网络更大 → ★ 它「可能只是缓慢地收敛甚至是发散」★
书里给的原因:探索和利用之间的强关联作用

★ 也就是说:「够大就一定能拟合」这条监督学习的直觉,在这里不成立。★

★ 书里还列了三种常见的网络结构,而它们的英文缩写你出门一定会撞见:★[^23]
多层感知机(MLP) —— 低维的一串数用它
卷积神经网络(CNN) —— 基于视觉的策略用它当主干(第 05 章第 9 节那个)
循环神经网络(RNN) —— 不完全可观测或非马尔可夫的场合用它(第 05 章第 10 节那个,详见 §11)
★ 书里说更复杂的结构「很少用到」,除非有具体的微调要求或特殊情况。★[^23]

书里给的规模对照:
几十个状态-动作组合的离散环境 → 一张表,或者一两层的网络就够
几十维的连续状态与动作(第 17、18 章那两个项目)→ 可能要大于 3 层
★ 但书里紧接着说:相比其他深度学习领域的巨型网络,「这仍旧是很小的规模」。★[^23]

★ 书里还在这里塞了一条很反直觉的话,值得单独记:★ 策略网络和价值网络可以吃不一样的输入 —— 因为价值网络只在训练时用来指导策略, 「而在动作预测时不再可以使用」9(也就是第 16 章第 8 节那个「训练时集中、执行时分散」的同一条道理。)

7. 奖励归一化:只能缩放,不能平移

这一节走主走查的第 ③ 步,是这一章第一条推不出来的坑。

书里的规矩

★「你需要通过缩放而不是改变均值来归一化奖励函数值。」★10

也就是说:除以标准差可以,减均值不行。

为什么

★ 书里给的理由非常漂亮,而且完全不是数值稳定性那一类的考虑:★

「均值平移可能会影响到智能体的存活意愿。」11

书里紧接着限定了适用范围:「这个结论只适用于你使用『Done』信号的情况」; 如果你事先没有用终止信号来结束片段,那么「你可以使用均值平移」11

★ 把这个因果完整走一遍(书里的推理):★

① 片段一旦结束,之后的奖励实际上就是 0 了 —— 因为不再有奖励可拿。[^9]

② 如果这个任务的奖励基本是 ★负数★:
那么「早点结束」得到的那一串 0,比继续拿负分要好
→ ★ 智能体倾向于尽早结束片段。★[^9]

③ 如果这个任务的奖励基本是 ★正数★:
那么继续拿分比结束要好
→ ★ 智能体会选择「活」得更久一些。★[^9]

④ ★ 现在减去均值:原本全是负的,变成有正有负 —— 整个正负号结构被改掉了。★
书里的说法:这「会打破以上情形中智能体的存活意愿」,
使得它「即使在奖励值基本为正时不会选择存活得更久」。[^9]

★ 一句话:那个均值不是一个可以随便挪的常数 —— 它编码着「你希望它活多久」。★

主走查第 ③ 步:那批奖励的均值是 −5.2,全是负数(倒立摆的奖励通常是负的偏差惩罚)。 减掉均值之后,一半变成正数 —— 智能体从「想早点结束」翻成了「想拖」。

书里还提了一句相关的:归一化目标 Q 值可以缓解一些基于 DQN 的算法里 「平均 Q 值会在学习过程中意外地不断增大」的问题,而那正是第 07 章那个过估计12

8. 终止信号只在真正结束时才该为真

这一节走主走查的第 ② 步,是这一章第二条推不出来的坑,也是整本书最具体的一条。

那个定义

书里的定义:终止状态指的是「智能体已经完成片段的情况,要么成功要么失败」, ★ 而不是任意一个到达时间限度或最大片段长度的状态 ★13

书里举的例子:如果任务是让机械臂到达空间中某个位置, 那么这个信号「只应当在机械臂确实到达这个位置时为真」,而不是在跑满默认最大长度时13

为什么这么要紧:书里把机理写到了底

★ 书里的推理链(以 PPO 为例):★[^12]

① 从某个局面往后累计的奖励,被用来估计这个局面的价值
② ★ 而一个终止状态的价值是 0 ★ —— 因为之后什么都拿不到了,这是定义
③ 如果在一个 ★ 不是终止状态 ★ 的地方把这个信号置成真
→ ★ 那个局面的价值就被强制设成了 0 ★
④ 而它实际上可能远不是 0
→ 书里的话:「这会在价值网络估计之前状态值的时候让其产生混淆,从而阻碍学习过程。」

★ 主走查第 ② 步:第 200 步摆杆还在转,后面明明还有几十步的分可以拿(大约值 −15),
却被当成「到此为止,价值 0」。★
★ 而这个错会顺着贝尔曼方程往回传:第 199 步、第 198 步的价值全被拉高了。★
(−15 这个数与「往回传」这句是我们补的;前面那条推理链是书里的。)

★ 书里还点了一句很重要的话:这个差别「可能使得实践中即使是相同算法的不同实现也会有截然不同的表现」。★13

书里给了两种常见的实现方式:一是设最大片段长度,二是用终止信号跳出循环; 而「当使用『Done』信号作为采样过程中的中断点时, 它不应当在片段由于到达最大长度的时候设为真」13

补充(不在书里,依据我们的 frontier 书架): 这条口头忠告在 2022 年之后变成了接口层面的强制。 现在通行的环境接口每走一步返回五样东西,其中把「真的结束了」和「只是步数用完了」 拆成了两个独立的信号 —— 也就是说,你想犯这个错都犯不了了。14 ★ 所以照着这本书的代码(返回四样东西的那一版)写的人,要留意这个接口变化。★

9. 折扣因子:它有一个可以算出来的有效视野

这一节给一条很省事的换算。

书里给的式子和结论15:

1 + γ + γ² + γ³ + ⋯ = 1 / (1 − γ)

★ 这个数可以当作「这一步的决策大致管到多少步之后」。★

γ = 0.99 → 1 / 0.01 = **100** ★ 书里的说法:「我们经常可以忽略 100 个时间步后的奖励」★
γ = 0.9 → 1 / 0.1 = **10** ← 只管十步之后的事
γ = 0.999 → 1 / 0.001 = **1000** ← 管一千步

★ 拿它去对任务:★
一个 200 步的片段,用 γ = 0.9(有效视野 10)—— 它根本看不到终点。
一个 20 步的任务,用 γ = 0.999(有效视野 1000)—— 折扣几乎不起作用,方差会很大。
(0.9 与 0.999 那两行、以及这两个例子都是我们按同一个式子算的;
0.99 对应 100 是书里的。)

书里说这个小技巧「可以加速你设置参数时的过程」15

10. 奖励曲线不等于学习表现

这一节走主走查的第 ⑤ 步,是这一章第三条推不出来的坑。

先把两件事分开

书里的说法:奖励函数是最终目标的一种量化(把一个说不清的目标折算成一个能算的数) 形式,「这也意味着它们可能是两个不同的东西」;而在某些情况下它们之间会有分歧16

书里给的机理:「一个强化学习智能体能够过拟合到你为任务所设置的奖励函数上」, 于是你会发现训练出来的策略「在达成最终目标上与你所期望的不同」16

★ 这就是第 18 章第 6 节那个具体样本:夹具贴着物体压,奖励很高,东西没抓起来。★

书里也给了一句很实在的限定:让奖励函数「倾向于」最终目标是容易的, 但设计一个「与最终目标在所有极端情况下都始终一致」的奖励函数,是不容易的16 —— 而书里能给的最好建议只是「尽可能减少这种分歧」16

于是画曲线时要小心

书里指出的问题:大家习惯拿奖励值画曲线来展示算法能力, 「然而,如同上面所说,最终目标和你所定义的奖励函数之间可能有分歧」, 这使得「一个较高奖励的状态可能对应一个在达成最终目标方面较差的情况」17

★ 书里给的解法很朴素:另外报一个「对这个任务更具体的度量」。★17

★ 书里给的例子:★[^16]
位置到达任务 → 报「机器夹具跟目标点的距离」
物块推动任务 → 报「物块跟目标的距离」
以及「是否物块被抓取」

书里说这些「都是对任务目标的真实度量方式」。[^16]

★ 主走查第 ⑤ 步:倒立摆上,不看奖励值,改看「摆杆偏离竖直位置的平均角度」——
1.6 弧度掉到 0.3 弧度。它一直在进步,只是奖励曲线看不出来。★
(这两个角度是为演示编的;换一个任务度量这个做法是书里的。)

★ 书里还点了一句最实用的场合:如果你要比较多个不同的奖励函数,
「那么这些额外的度量也很关键」——★ 因为不同奖励函数的曲线本来就没法直接比。★[^16]

11. 非马尔可夫:一个和「部分可观测」很像、但不是一回事的病

这一节兑现第 03 章第 2 节和第 05 章第 10 节两处许诺。

先把那条假设摆回来

书里承认得很干脆:这本书介绍的绝大多数理论结果「都基于马尔可夫过程的假设或者状态的马尔可夫性质」; 「然而,实践中,马尔可夫过程的假设不总是成立」18

★ 而书里给了这一章最要紧的一句判据,它正是第 03 章第 2 节那条:★

★「我们需要记住马尔可夫性质是状态或环境的性质,因此它是由状态的定义决定的。」★18

★ 也就是说:这不是环境的错,是你怎么定义状态的问题。★ 而这条判据的价值在于:它意味着这个病 ★ 是你能改的 ★。

两个很像的病,怎么分

书里说这两者「的差异有时是细微的」,并用同一个游戏给了对照18:

★ 游戏是乒乓球(第 01 章那个)。问题:单帧画面看不出球往哪飞。★

┌─ 情况一:部分可观测 ──────────────────────────────────┐
│ ★ 状态被定义成「球的位置 ★ 和 ★ 速度」★ │
│ 而你只能观测到位置 │
│ → 状态本身是完整的,只是你看不全 │
│ → ★ 这叫部分可观测,不是非马尔可夫。★[^28] │
└──────────────────────────────────────────────────────┘
┌─ 情况二:非马尔可夫 ──────────────────────────────────┐
│ ★ 状态被定义成「每一时间步的一张静止画面」★ │
│ → 那么状态里 ★ 本来就没有 ★ 速度这个信息 │
│ → 书里的说法:当前状态「没有智能体能够做出最优动作选择的 │
│ 所有信息」 │
│ → ★ 这才是非马尔可夫。★[^28] │
└──────────────────────────────────────────────────────┘

★ 一句话记住这个区分:★
★ 部分可观测 = 信息在状态里,只是你没看到;★
★ 非马尔可夫 = 信息压根不在状态的定义里。★
(这两句归纳是我们的;那个对照是书里的。)

两条修法,而第一条你已经见过

书里给的第一条:堆叠帧18

★ 把最近四帧当成一个状态 —— 这正是第 07 章第 10 节那条预处理链的最后一步。★

书里的说法很讲究:如果我们「把所有的堆叠帧看作一个单一状态」,
并假设它包含了做最优动作所需的全部信息,
★ 那么这个任务「实际上仍旧遵从马尔可夫过程假设」。★[^28]

★ 也就是说:第 07 章那个「堆四帧」不是一个工程小技巧,
它是把一个非马尔可夫问题 ★ 改写成 ★ 马尔可夫问题的手术。★
(这句定性是我们点的;那句「仍旧遵从假设」是书里的。)

书里还顺带给了一句边界:因为模拟环境里时间是离散的,不像现实那样连续,
「我们经常可以用这种转化方式来把一个非马尔可夫过程看作一个马尔可夫过程」。[^28]

★ 第二条:用循环网络 —— 这就是第 05 章第 10 节那笔债。★

书里明说:循环网络或者更高级的长短期记忆方法「也可以用于以历史记忆进行决策的情况, 来解决非马尔可夫过程的问题」18

★ 什么时候必须用它(第 05 章第 10 节问的正是这个):★

该记的历史 ★ 长度固定且很短 ★ → 堆叠几帧就够(第 07 章那条链)
该记的历史 ★ 长度不定、可能很长 ★ → ★ 只能用循环网络 ★

举例:乒乓球只要知道「球上一帧在哪」,堆两帧就够;
而一个要记住「三分钟前那扇门开过」的任务,堆帧堆不过来。
(这条判据与这个例子是我们补的;两条修法都是书里的。)

★ 而第 17 章第 8 节那条对照也在这里合上:书里说选网络结构时,
循环网络「可以用于不是完全可观测的环境或者非马尔可夫过程」——
也就是最优动作不仅依赖当前状态,还依赖之前状态的情况。★[^23]

12. 该往程序里加哪些探针

这一节走主走查的第 ① 步,并给出这一章最可操作的一份清单。

为什么需要探针

书里的话:通常的报错系统「可能不是针对其中一些错误的,尤其是逻辑错误」; 而「模型中类似的潜在问题将会是很危险和难以察觉的」19

★ 也就是说:强化学习跑不动的时候,通常不报错。它只是安静地不学。★

那份清单

书里列的探针19:

看什么★ 它在告诉你什么 ★
损失函数的变化别只盯着奖励;价值函数拟合得怎么样要单独看
★ 随机策略的熵 ★★「如果策略输出分布熵过早下降,那么基本上表明智能体不能通过当前策略探索到更有用的样本」★
新旧策略的 KL 散度信赖域那一路(第 09 章)必看 —— 它告诉你模型是否正常工作
★ 每一层的梯度值 ★★「正常网络层的梯度值不应该过大或全为 0」★ —— 前者是异常梯度,后者是没有梯度流
输出空间和参数空间的更新步长就是第 09 章第 1 节那两个空间

★ 第二条就是主走查第 ① 步:熵从 1.40 掉到 0.05,探索停了。★

书里给的补救:可以用熵奖励或者 KL 惩罚项来缓解; 而 SAC 那类算法「使用了适应性熵类自动解决这类问题」19 —— 就是第 10 章第 5、6 节那套。

13. 随机种子:3 到 5 次起步,而且越多越好

这一节走主走查的第 ④ 步,并回收第 11 章那条最刺眼的实测。

书里的说法:随机种子「甚至都会很大地影响学习表现」; 而种子不止一个 —— 数值库的、深度学习框架的、还有环境的,「所有这些种子都需要被合适地随机化」20

★ 而书里给的操作口径很具体:★

「根据经验,我们采用不同的随机种子进行 3 到 5 次试验便可以得到一个相对可信的结果, 但是越多越好。」20

判断(我们的,不是书里的): 这一条和第 11 章第 4 节那条实测是冲突的。 那里引的调研说的是:「5 个随机种子(通常的报告设置)可能不足以论证显著的结果」, 而且精心挑种子能得到完全不重合的置信区间。 ★ 而这一章说 3 到 5 次「便可以得到一个相对可信的结果」。★ 我们的读法:这一章说的是「你自己判断算法有没有在学」的门槛(3 到 5 个够了), 而第 11 章说的是「拿去和别人比、下显著性结论」的门槛(5 个不够)。 两个门槛不是一件事,而书里没有把它们分开说。 如果错,会错在: 也可能作者只是在两章里给了不一致的建议。 判据是:你要拿这条曲线做什么 —— 自己调试,还是写进对比表。

书里还给了一个很实用的调试手法:先把所有种子固定住,看采样轨迹上还有没有差异; 如果仍有随机性,「可能表现系统内还有其他随机因素」20

★ 这是一个纯粹的排查技巧:把所有已知的随机源摁住,还在动的就是你不知道的那个。★

14. 平台期不是没救,而是要先分清两种病

这一节讲这一章诊断部分的落点。

先看现象

书里说:学习曲线在早期有一个平台期,「这在强化学习过程中不是一个罕见的, 而是一个十分常见的情况」21

书里给的原因很清楚:学习样本不是提前准备好的,而是靠当前策略探索出来的; 所以「当前策略能否探索到较高奖励值的轨迹在强化学习训练中可能是很关」21

那个分诊法

★ 这是这一章最有操作价值的一条判断:★

★ 先问一个问题:这个智能体到底有没有探到过好的轨迹?★[^19]

┌─ 没探到 ────────────────────────────────────────┐
│ ★ 书里的判词:「至少说明当前的探索方式可能有问题」★ │
│ → 去改探索:加熵奖励、换算法(第 10 章的 SAC)、 │
│ 或者拿人的示范开路(第 12、13 章)、分层(第 15 章) │
└────────────────────────────────────────────────┘
┌─ 探到了,但学不会 ──────────────────────────────┐
│ ★ 书里的判词:「那么可能是利用问题」★ │
│ 书里给的四个可能原因: │
│ ① 样本效率低 ② 价值函数拟合得差 │
│ ③ 价值函数的学习率太低 ④ 策略网络学得不好[^19] │
└────────────────────────────────────────────────┘

★ 这两条路要花的力气完全不同 —— 分错了就白干。★

书里还给了一条读曲线的提示:那个平台期未必是坏事 —— 它给的例子里,平台期之后策略更新「会使学习表现会显著提升」, 而这是「一个健康的学习进步」21

★ 所以看到平台期先别急着改代码,先判断它是「在攒好样本」还是「根本探不到」。★

而最先该怀疑的是你自己

书里在这一节的最后给了整章最重的一句:

★「一个糟糕的学习表现可能由很多因素导致,如不充足的训练时间、 对超参数的糟糕选择、未经归一化的输入数据等,而最常见的原因是代码实现中的错误。」★22

★ 书里给的次序很硬:「算法实现的正确性总是要先于微调一个相对好的结果」—— 也就是说,在确认实现正确之前,调超参数是在浪费时间。★22

书里还很诚实地补了一句:代码刚写完「它不会工作,是很常见的」22

15. 三十年的谱系:每一个算法都是被上一个逼出来的

这一节是全书的收口,而书里正好给了倒着讲的材料。

那条链

书里在第 7 章开头有一段,把这些算法按「它治什么病」串了一遍23★ 我们把它排成一条链 —— 而这正是全书那句「打补丁史」的样子:★

★ 每一行的读法:「上一个的什么毛病」→「于是有了谁」★
(每一处因果都是书里的原话转写;排成链是我们做的。)

策略梯度方差大
└→ 引入一个批判者去估动作价值 = 演员-批判者 (第 08 章)

表格写不下(要从小规模扩到大规模)
└→ 拿深度网络换掉表格 = DQN (第 07 章)

取最大导致过估计
└→ 多用一个 Q 网络 = Double DQN (第 07 章)

探索太笨
├→ 把噪声放进网络参数里 = Noisy DQN (第 07 章)
└→ 给策略分布配一个自适应的熵 = SAC (第 10 章)

只能离散,接不了连续动作
└→ 让网络直接吐出那个最好的动作 = DDPG (第 10 章)

DDPG 不稳
└→ 多一个网络 + 延迟更新 = TD3 (第 10 章)

在线策略的更新不安全
└→ 把步子限在一个信赖域里 = TRPO (第 09 章)

TRPO 的二阶优化太慢
└→ 改成一阶近似 = PPO (第 09 章)

二阶自然梯度还是想要,但要更快
└→ 用分块方式近似那个逆矩阵 = ACKTR (第 09 章)

★ 还有一支书里也提了:把策略优化看成一个概率推断问题(MPO 与它的在线策略变体)。★[^21]

★ 这条链就是这本书真正的内容。★ 读完它,你不是记住了十个算法,而是记住了九个具体的毛病 —— 而后者才是能带走的。

附录里还有什么

书里的三个附录各管一件事24:

附录里面是什么★ 什么时候翻它 ★
A一张算法总结表:每个算法的在线/离线、动作空间、年份、论文、作者★ 要找某个算法的原论文时 ★
B把算法和关键概念分成四部分(深度学习、强化学习、深度强化学习、高等),每个算法配一份伪代码要动手实现时
C中英文对照表看英文文献对不上号时

★ 书里对附录 B 给了一句很实在的承诺:「我们尽量在行文中保持数学符号、 变量记号和术语与整本书一致」★24 —— 也就是说,它和正文的符号是通着的。

判断(我们的,不是书里的): 这一章的十几条建议里,只有三条是「不知道就一定会栽」的: ★ 终止信号只在真正结束时为真(§8)、奖励归一化只能缩放不能平移(§7)、 奖励曲线不等于学习表现(§10)。★ 其余的(先做小实验、多跑几个种子、加探针、按算法的脾气选型)都属于「通用的工程素养」—— 你在别的领域也会这么做。 ★ 而那三条是强化学习独有的,而且都不是从任何一条理论里推出来的 —— 它们来自「奖励是唯一信号」这个设定本身。★ 如果错,会错在: 这是按「不知道会不会栽」来分的,不是按「有多难做对」分的。 平衡 CPU 与 GPU 那一条做不好也会白白慢几倍,只是它不会让结果错。 判据是:这一条做错了,是「慢」还是「错」—— 那三条会让结果错。

作者的判断与证据

书里给了完整机理的:

  • ★ 均值平移会改变存活意愿 ★11 —— 书里把因果链一步步写了出来,而且限定了适用条件;
  • ★ 终止信号置错会把一个非零的价值强按成 0 ★25 —— 同样给了完整的推理;
  • 输入不归一化会让第一层饱和6输出激活要配动作值域7;
  • 折扣因子的有效视野那个式子15;
  • 平台期的两种病与它们的分诊21

作者的经验判断(没有实验支撑的):

  • 「3 到 5 次试验便可以得到一个相对可信的结果」20 —— ★ 而这和第 11 章第 4 节那条实测有张力,见 §13 那个判断块;★
  • 「超过 5 层的神经网络在强化学习应用中不是特别常见」9;
  • ★「最常见的原因是代码实现中的错误」★22 —— 一句经验之谈,但它排在整章诊断顺序的最前面;
  • 不要过拟合论文细节5 —— 举了两个例子,没有做对照实验。

书里对这一章自己的定位:

「这些经验上的技巧有时可以产生显著效果,但不总是这样。 这是由于深度强化学习模型的复杂性和敏感性造成的,而有时需要同时使用多个技巧。」1

书里还大方地列了它参考的外部资源(几份公开的实践指南与讲稿), 并建议读者也去看那些「总结得较好的建议和来自研究人员的经验」26

边界与局限

  • ★ 这一章一个实验数字都没有。★ 十几条建议,零对照 —— 而这恰恰说明了它的性质: 它是经验的汇编,不是研究结果;
  • 条目之间没有优先级 —— 书里按「实现阶段」和「训练调试阶段」分了两大块, 但同一块里哪条更要命,没有排序(§15 那个判断块是我们补的);
  • ★ 全书不覆盖的三大块,这里要说清楚:★
    • 离线强化学习 —— 完全不与环境交互、只从一个固定的数据集里学策略。 这条路在这本书成书前后已经很活跃,而全书一句没提;
    • ★ 把决策当成写文章来做 ★ —— 补充(不在书里): 有一条路把强化学习整个改写成「续写一段序列」的问题, 论文题目是《Decision Transformer: Reinforcement Learning via Sequence Modeling》, 摘要第一句就是「我们提出一个把强化学习抽象成序列建模问题的框架」27★ 它绕开了这本书前十章的整个价值函数地基 —— 没有贝尔曼方程、没有时间差分。★ 这本书对这条路一个字都没有;
    • 大语言模型上的对齐 —— 第 09 章第 10 节说过,PPO 后来的主战场在那边, 而书架上有一整本讲它28;
  • 这一章的建议默认你在用书里那套代码基座 —— 而那个框架的现状见总纲第 2 节;
  • 接口已经变了(见 §8 那条补充):书里写的是每步返回四样东西那一版。

可带走的

全章那条走查,一行写完: 倒立摆上的 PPO 跑不动,按顺序查五处 —— ① 熵从 1.40 掉到 0.05(探索停了)② 终止信号在跑满 200 步时被置真(那一步的价值被强按成 0,而它实际值 −15)③ 奖励被减了均值 −5.2(存活意愿被改掉了)④ 换 3 个种子重跑得到 −180 / −950 / −210(第二条曲线不能拿来下结论)⑤ 改看摆杆偏离竖直的平均角度:1.6 弧度 → 0.3 弧度(它其实一直在进步)。 (数字是为演示编的;每一条判断都是书里第 18 章的条目。)

  1. ★ 先问这个任务该不该用强化学习:有标签的预测任务用监督学习更直接有效。★
  2. 三个阶段顺序不能反,而它们的核心是一个纪律:每次只加一样不确定的东西,加完就测;
  3. ★ 不要过拟合论文里的实现细节。★ 书里给了两个反例 —— DDPG 论文推荐的那种噪声未必比普通高斯噪声好;而在星际那边,朴素的多步回报赢过了更高级的方法;
  4. 观测值域不归一化,Tanh/Sigmoid 的第一层一开局就饱和,梯度几乎是 0;
  5. 输出层的激活要配动作的值域 —— 动作有负值就不能用 ReLU(它永远输出不了负动作);
  6. ★ 奖励归一化只能缩放(除以标准差),不能平移(减均值)。★
  7. ★ 理由:片段结束之后的奖励实际是 0。奖励基本为负时它想早点结束、基本为正时它想活久 —— 而减均值会把这个正负号结构整个改掉,也就改掉了它的存活意愿。★ (这一条只在你用终止信号的时候成立。)
  8. ★ 终止信号只在真正终止时才该为真 —— 跑满步数不算。★
  9. ★ 理由:终止状态的价值是 0,而把一个非终止状态标成终止,就是把一个本不该是 0 的价值强按成 0; 这个错还会顺着往回传。★ 书里说这能让同一个算法的不同实现表现截然不同;
  10. 折扣因子有一个能算的有效视野:1 除以(1 减去折扣)。 0.99 大约是 100 步,0.9 只有 10 步 —— 拿它去对你的片段长度;
  11. ★ 奖励曲线不等于学习表现。★ 奖励只是目标的量化形式,两者会分歧,而智能体会过拟合到你写的那个奖励上;
  12. ★ 所以要另外报一个任务本身的度量 ★ —— 比如物体最终离目标还有多远。要比较不同的奖励函数时,这一条是必需的;
  13. 探针清单:损失、★ 策略的熵(过早掉下去就是探索停了)★、新旧策略的 KL、每一层的梯度 (不该过大也不该全是 0);
  14. 随机种子 3 到 5 次起步 —— ★ 但注意:这是「自己判断有没有在学」的门槛;要下显著性结论,第 11 章说 5 个可能都不够。★
  15. ★ 遇到平台期先分诊:是「没探到更好的轨迹」,还是「探到了却学不会」—— 前者去改探索,后者去查样本效率、价值函数拟合和学习率。分错了就白干。★
  16. ★ 而最先该怀疑的永远是自己的实现 —— 书里说这是最常见的原因; 而且「算法实现的正确性总是要先于微调」。★
  17. ★ 全书的收口:这一串算法不是十个发明,是九个具体的毛病。★ 策略梯度方差大 → 加批判者;表格写不下 → DQN;取最大高估 → Double;探索太笨 → Noisy 与 SAC; 接不了连续 → DDPG;DDPG 脆 → TD3;步子没法定 → TRPO;TRPO 太贵 → PPO;PPO 扩不动 → ACKTR。

原文地图

主题原书章原文位置
这一章的定位与自我限定第18章 深度强化学习应用实践技巧text/24-ch18.txt:8(搜「这些经验上的技巧有时可以产生显著效果」)
该不该用强化学习第18章 深度强化学习应用实践技巧text/24-ch18.txt:24(搜「一个有标签数据的预测任务通常不需要强化学习算法」) · text/24-ch18.txt:28(搜「你不需要过多关」)
三个阶段第18章 深度强化学习应用实践技巧text/24-ch18.txt:32(搜「简单测试阶段」) · text/24-ch18.txt:37(搜「快速配置阶段」) · text/24-ch18.txt:41(搜「部署训练阶段」)
逐步增加复杂度第18章 深度强化学习应用实践技巧text/24-ch18.txt:91(搜「从简单例子开始逐渐增加复杂度」) · text/24-ch18.txt:93(搜「否则你不应当期望一个复杂的模型可以一次实现成」)
不要过拟合论文细节第18章 深度强化学习应用实践技巧text/24-ch18.txt:66(搜「不要过拟合到论文细节上」) · text/24-ch18.txt:72(搜「有时很难说 OU 噪声是否比高斯噪声更」) · text/24-ch18.txt:74(搜「方法被证实比其他更高级的离线策略」)
输入归一化与饱和第18章 深度强化学习应用实践技巧text/24-ch18.txt:83(搜「较大的输入值将可能使第一个隐藏层的节点饱和」) · text/24-ch18.txt:85(搜「你也可以用能进行随机动作选取的智能体来探索环境并」)
输出激活配动作值域第18章 深度强化学习应用实践技巧text/24-ch18.txt:89(搜「但是它对有负值的动作输出范围来说可能是不合适的」)
奖励归一化只能缩放第18章 深度强化学习应用实践技巧text/24-ch18.txt:147(搜「你需要通过缩放而不是改变均值来归一化奖励函数值」) · text/24-ch18.txt:150(搜「值平移可能会影响到智能体的存活意愿」) · text/24-ch18.txt:151(搜「个结论只适用于你使用」) · text/24-ch18.txt:156(搜「那么智能体会倾向于尽可能早地结束片段」)
归一化目标 Q 值第18章 深度强化学习应用实践技巧text/24-ch18.txt:161(搜「归一化目标 Q 值可」)
折扣因子的有效视野第18章 深度强化学习应用实践技巧text/24-ch18.txt:164(搜「对于 γ = 0.99,我们经常可以忽略」)
终止信号第18章 深度强化学习应用实践技巧text/24-ch18.txt:166(搜「信号只在终止状态时为真」) · text/24-ch18.txt:172(搜「而不是任意一个到达时间限度或最大片段长度的状态」) · text/24-ch18.txt:179(搜「而只应在终止状态到达时为真」) · text/24-ch18.txt:183(搜「那么该状态的值被强制设为 0」)
奖励与目标的分歧第18章 深度强化学习应用实践技巧text/24-ch18.txt:189(搜「注意奖励函数和最终目标之间的分歧」) · text/24-ch18.txt:191(搜「奖励函数是目标的一种量化形式」) · text/24-ch18.txt:196(搜「你」)
换一个任务度量第18章 深度强化学习应用实践技巧text/24-ch18.txt:198(搜「奖励函数可能不总是对学习表现的最好展示」) · text/24-ch18.txt:205(搜「用机器夹具跟目标点的距离来实现位置到达」) · text/24-ch18.txt:210(搜「如果你想比较多个不」)
非马尔可夫与堆叠帧第18章 深度强化学习应用实践技巧text/24-ch18.txt:222(搜「马尔可夫性质是状态或环境的性质」) · text/24-ch18.txt:228(搜「所以这种情」) · text/24-ch18.txt:230(搜「堆叠帧可以」)
探针清单第18章 深度强化学习应用实践技巧text/24-ch18.txt:253(搜「向程序中添加有用的探针」) · text/24-ch18.txt:258(搜「果策略输出分布熵过早下降」) · text/24-ch18.txt:264(搜「正常网络层的梯度值不应该过大或全为0」)
随机种子第18章 深度强化学习应用实践技巧text/24-ch18.txt:269(搜「使用多个随机种子并计算平均值来减少随机性」) · text/24-ch18.txt:272(搜「你可以固定这些种子」) · text/24-ch18.txt:276(搜「我们采用不同的随机种子进行 3 到 5 次试验便」)
网络别太深第18章 深度强化学习应用实践技巧text/24-ch18.txt:103(搜「超过 5 层的神经网络在强化学习应用中不是」) · text/24-ch18.txt:109(搜「能只是缓慢地收敛甚至是发散」) · text/24-ch18.txt:126(搜「而在动作预测时不再可以使用价值网络的情况」)
平台期的分诊第18章 深度强化学习应用实践技巧text/24-ch18.txt:313(搜「学习曲线在早期训练阶段有一个平台期」) · text/24-ch18.txt:318(搜「你需要研究这个智能体是否已经探索到那些」) · text/24-ch18.txt:320(搜「那么可能是利用问题」)
先质疑自己的实现第18章 深度强化学习应用实践技巧text/24-ch18.txt:327(搜「首先质疑你的算法实现」) · text/24-ch18.txt:332(搜「而最常见的原因是代码实现中的错误」)
外部参考资源第18章 深度强化学习应用实践技巧text/24-ch18.txt:333(搜「我们在写本章的过程」)
算法谱系那一段第7章 深度强化学习的挑战text/12-ch07.txt:72(搜「多数算法是针对一些传统算法中的特定缺陷」) · text/12-ch07.txt:87(搜「用」)
三个附录附录B 算法速查表text/26-apx-b.txt:1(搜「总结了」) · text/25-apx-a.txt:3(搜「我们将那些常见的强化学习算法总结成一张表格」)

Footnotes

  1. 出处:「第18章 深度强化学习应用实践技巧」第 8 段(text/24-ch18.txt:8,搜「这些经验上的技巧有时可以产生显著效果」)。原书还说,这些方法涉及算法实现阶段和训练调试阶段,有时需要同时使用多个技巧。 2

  2. 出处:「第18章 深度强化学习应用实践技巧」第 23 段(text/24-ch18.txt:23,搜「强化学习可以用于连续决策制定问题」)、第 24 段(text/24-ch18.txt:24,搜「一个有标签数据的预测任务通常不需要强化学习算法」)与第 28 段(text/24-ch18.txt:28,搜「你不需要过多关」)。 2 3

  3. 出处:「第18章 深度强化学习应用实践技巧」第 32 段(text/24-ch18.txt:32,搜「简单测试阶段」)、第 37 段(text/24-ch18.txt:37,搜「快速配置阶段」)、第 40 段(text/24-ch18.txt:40,搜「你应当每一次都进行测试」)与第 41 段(text/24-ch18.txt:41,搜「部署训练阶段」)。原书在第二阶段还建议尽可能可视化学习过程,并在看不出关系时用一些统计量(方差、均值、极大极小值等)。

  4. 出处:「第18章 深度强化学习应用实践技巧」第 91 段(text/24-ch18.txt:91,搜「从简单例子开始逐渐增加复杂度」)与第 93 段(text/24-ch18.txt:93,搜「否则你不应当期望一个复杂的模型可以一次实现成」)。 2

  5. 出处:「第18章 深度强化学习应用实践技巧」第 66 段(text/24-ch18.txt:66,搜「不要过拟合到论文细节上」)、第 72 段(text/24-ch18.txt:72,搜「有时很难说 OU 噪声是否比高斯噪声更」)、第 74 段(text/24-ch18.txt:74,搜「方法被证实比其他更高级的离线策略」)与第 75 段(text/24-ch18.txt:75,搜「如果这些技巧不足够通用」)。原书还说,论文里那些网络结构与超参数的细节「你不需要在自己的实现版本中严格遵循」。 2 3

  6. 出处:「第18章 深度强化学习应用实践技巧」第 81 段(text/24-ch18.txt:81,搜「如果环境观察量的值在一个很大的」)、第 83 段(text/24-ch18.txt:83,搜「较大的输入值将可能使第一个隐藏层的节点饱和」)与第 85 段(text/24-ch18.txt:85,搜「你也可以用能进行随机动作选取的智能体来探索环境并」)。原书还说要为强化学习选择包含环境有用信息的输入特征。 2 3

  7. 出处:「第18章 深度强化学习应用实践技巧」第 87 段(text/24-ch18.txt:87,搜「给每一个网络选取一个合适的输出激活函数」)、第 89 段(text/24-ch18.txt:89,搜「但是它对有负值的动作输出范围来说可能是不合适的」)与第 90 段(text/24-ch18.txt:90,搜「在输出层使用 Tanh 激活函数」)。 2

  8. 出处:「第18章 深度强化学习应用实践技巧」第 127 段(text/24-ch18.txt:127,搜「基于信赖域的方法可」)、第 130 段(text/24-ch18.txt:130,搜「它需要用共轭梯度来近似 Fisher 信息矩阵」)、第 133 段(text/24-ch18.txt:133,搜「中,算法 TRPO 和 PPO 中的批尺寸需要被增大」)、第 136 段(text/24-ch18.txt:136,搜「无法较好地扩展到大规模的网络」)、第 137 段(text/24-ch18.txt:137,搜「算法则通常被认为对超参数敏感」)、第 141 段(text/24-ch18.txt:141,搜「因此 DDPG 相比与其他 TRPO 或 SAC 算法可能不会有很好的效果」)与第 145 段(text/24-ch18.txt:145,搜「或者你可以直接使用 Gumbel-Softmax 技巧来更改」)。 2 3 4 5 6 7 8 9

  9. 出处:「第18章 深度强化学习应用实践技巧」第 103 段(text/24-ch18.txt:103,搜「超过 5 层的神经网络在强化学习应用中不是」)与第 109 段(text/24-ch18.txt:109,搜「能只是缓慢地收敛甚至是发散」)。原书还给了一条反直觉的提示:价值网络可以和策略网络吃不一样的输入,因为它「在动作预测时不再可以使用」(text/24-ch18.txt:126,搜「而在动作预测时不再可以使用价值网络的情况」)。 2 3 4

  10. 出处:「第18章 深度强化学习应用实践技巧」第 147 段(text/24-ch18.txt:147,搜「你需要通过缩放而不是改变均值来归一化奖励函数值」)。原书还说,值函数的预测目标也要用同样的方式标准化,而奖励的缩放基于训练中采样的批样本。

  11. 出处:「第18章 深度强化学习应用实践技巧」第 150 段(text/24-ch18.txt:150,搜「值平移可能会影响到智能体的存活意愿」)、第 151 段(text/24-ch18.txt:151,搜「个结论只适用于你使用」)、第 154 段(text/24-ch18.txt:154,搜「信号之后的奖励值实际为 0」)、第 156 段(text/24-ch18.txt:156,搜「那么智能体会倾向于尽可能早地结束片段」)与第 158 段(text/24-ch18.txt:158,搜「它会打破以上情形中智能体的存活意愿」)。 2 3

  12. 出处:「第18章 深度强化学习应用实践技巧」第 160 段(text/24-ch18.txt:160,搜「一些基于 DQN 的算法的平均 Q 值会在学习过程中」)与第 161 段(text/24-ch18.txt:161,搜「归一化目标 Q 值可」)。原书说这个现象是最大化操作对 Q 值的过估计造成的,而归一化目标 Q 值可以缓解,或者用 Double Q-Learning。

  13. 出处:「第18章 深度强化学习应用实践技巧」第 166 段(text/24-ch18.txt:166,搜「信号只在终止状态时为真」)、第 168 段(text/24-ch18.txt:168,搜「践中即使是相同算法的不同实现也会有截然不同的表现」)、第 172 段(text/24-ch18.txt:172,搜「而不是任意一个到达时间限度或最大片段长度的状态」)与第 179 段(text/24-ch18.txt:179,搜「而只应在终止状态到达时为真」)。原书给的例子是操控机械臂到达空间中某个具体位置。 2 3 4

  14. 补充(不在书里,依据我们的 frontier 书架):2022 年之后通行的环境接口每走一步返回五样东西,把「真的结束了」和「只是步数用完了」拆成了两个独立的信号。依据: shelf=ai-frontier-reference/openenv#01-contracts.md 事实=那一章里写明 Gymnasium 的 (obs, reward, terminated, truncated, info) 五元组。

  15. 出处:「第18章 深度强化学习应用实践技巧」第 163 段(text/24-ch18.txt:163,搜「一个关于折扣因子的小提示」)与第 164 段(text/24-ch18.txt:164,搜「对于 γ = 0.99,我们经常可以忽略」)。 2 3

  16. 出处:「第18章 深度强化学习应用实践技巧」第 189 段(text/24-ch18.txt:189,搜「注意奖励函数和最终目标之间的分歧」)、第 191 段(text/24-ch18.txt:191,搜「奖励函数是目标的一种量化形式」)、第 192 段(text/24-ch18.txt:192,搜「因为一个强化学习智能体能够过拟合到你为任务所设置的奖励函数上」)与第 196 段(text/24-ch18.txt:196,搜「你」)。原文的说法是:设计一个在所有极端情况下都与最终目标一致的奖励函数「是不平庸的」,也就是不容易。 2 3 4

  17. 出处:「第18章 深度强化学习应用实践技巧」第 198 段(text/24-ch18.txt:198,搜「奖励函数可能不总是对学习表现的最好展示」)、第 201 段(text/24-ch18.txt:201,搜「标方面较差的情况」)、第 205 段(text/24-ch18.txt:205,搜「用机器夹具跟目标点的距离来实现位置到达」)与第 210 段(text/24-ch18.txt:210,搜「如果你想比较多个不」)。 2

  18. 出处:「第18章 深度强化学习应用实践技巧」第 217 段(text/24-ch18.txt:217,搜「非马尔可夫情况」)、第 220 段(text/24-ch18.txt:220,搜「马尔可夫过程的假设不总是成立」)、第 222 段(text/24-ch18.txt:222,搜「马尔可夫性质是状态或环境的性质」)、第 225 段(text/24-ch18.txt:225,搜「而观察量」)、第 228 段(text/24-ch18.txt:228,搜「所以这种情」)、第 230 段(text/24-ch18.txt:230,搜「堆叠帧可」)与第 235 段(text/24-ch18.txt:235,搜「或更高级」)。 2 3 4 5

  19. 出处:「第18章 深度强化学习应用实践技巧」第 253 段(text/24-ch18.txt:253,搜「向程序中添加有用的探针」)、第 254 段(text/24-ch18.txt:254,搜「通常的报错系统可能不是针对」)、第 258 段(text/24-ch18.txt:258,搜「果策略输出分布熵过早下降」)、第 262 段(text/24-ch18.txt:262,搜「你需要新旧」)与第 264 段(text/24-ch18.txt:264,搜「正常网络层的梯度值不应该过大或全为0」)。原书还推荐了一个常用的可视化工具。 2 3

  20. 出处:「第18章 深度强化学习应用实践技巧」第 269 段(text/24-ch18.txt:269,搜「使用多个随机种子并计算平均值来减少随机性」)、第 272 段(text/24-ch18.txt:272,搜「你可以固定这些种子」)与第 276 段(text/24-ch18.txt:276,搜「我们采用不同的随机种子进行 3 到 5 次试验便」)。原书列的种子来源有:数值库、深度学习框架、以及环境本身。 2 3 4

  21. 出处:「第18章 深度强化学习应用实践技巧」第 313 段(text/24-ch18.txt:313,搜「学习曲线在早期训练阶段有一个平台期」)、第 316 段(text/24-ch18.txt:316,搜「当前策略能否探索到较高奖励值的轨迹在强化学习训练中可能是很关」)、第 318 段(text/24-ch18.txt:318,搜「你需要研究这个智能体是否已经探索到那些」)、第 320 段(text/24-ch18.txt:320,搜「那么可能是利用问题」)与第 323 段(text/24-ch18.txt:323,搜「展示了一个健康的学习进步」)。 2 3 4

  22. 出处:「第18章 深度强化学习应用实践技巧」第 327 段(text/24-ch18.txt:327,搜「首先质疑你的算法实现」)、第 328 段(text/24-ch18.txt:328,搜「算法实现的正确性总是要先于微调一个相对好的结果」)与第 332 段(text/24-ch18.txt:332,搜「而最常见的原因是代码实现中的错误」)。 2 3 4

  23. 出处:「第7章 深度强化学习的挑战」第 72 段(text/12-ch07.txt:72,搜「多数算法是针对一些传统算法中的特定缺陷」)、第 76 段(text/12-ch07.txt:76,搜「算法使用了一个额外的 Q 网络」)与第 87 段(text/12-ch07.txt:87,搜「用」)。这一段在原书第 7 章开头,不在第 18 章;它把从演员-批判者一直到 ACKTR 与 MPO 的每一步都写成了「为了治什么毛病」的形式。

  24. 出处:「附录B 算法速查表」第 1 段(text/26-apx-b.txt:1,搜「总结了」)与「附录A 算法总结表」第 3 段(text/25-apx-a.txt:3,搜「我们将那些常见的强化学习算法总结成一张表格」)。附录 C 是一份中英文对照表。 2

  25. 出处:「第18章 深度强化学习应用实践技巧」第 182 段(text/24-ch18.txt:182,搜「而一个终止状态」)与第 184 段(text/24-ch18.txt:184,搜「这会在价值网络估计之前状态值的时候让其产生混淆」)。原书是以 PPO 为例讲的这条因果。

  26. 出处:「第18章 深度强化学习应用实践技巧」第 333 段(text/24-ch18.txt:333,搜「我们在写本章的过程」)。原书列了三份外部资源:一份公开的入门指南、一份研究者的讲稿、以及一篇博客。

  27. 补充(不在书里):把强化学习整个改写成序列建模的那条路,代表工作是《Decision Transformer: Reinforcement Learning via Sequence Modeling》,作者依次为 Lili Chen、Kevin Lu、Aravind Rajeswaran、Kimin Lee、Aditya Grover、Michael Laskin、Pieter Abbeel、Aravind Srinivas、Igor Mordatch,预印本编号 arXiv:2106.01345(2021 年 6 月 2 日)。摘要开篇写着「We introduce a framework that abstracts Reinforcement Learning (RL) as a sequence modeling problem」。来源:arXiv 摘要页 https://arxiv.org/abs/2106.01345 (查阅于 2026-08-29)。

  28. 补充(不在书里,依据我们的 book 书架):强化学习在大语言模型对齐上的完整用法,书架上有一整本拆解。依据: shelf=ai-book-reference/the-rlhf-book-reinforcement-learning-from#05-policy-gradient-ppo.md 事实=那一章从 REINFORCE 一路讲到 PPO 在语言模型上的截断与信任区。