01-outline:《深度强化学习:基础、研究与应用》拆解切分(总纲 + 20 章)
读者设定:会写点 Python,没学过机器学习、没学过强化学习、不知道什么是神经网络。 判据:读完我们这 21 份文档、不看原书,能把这本书讲给别人听。
原书 18 章 + 3 附录,正文 72.8 万字符(chapters.json 的 chars 字段之和;
此前写的 116 万是字节数,中文一字三字节,系统性夸大 1.6 倍 —— 下表已全部改用字符数)。
参照:原书最大的第 2 章 11.4 万字符,最小的第 9 章 0.96 万字符。
切分按新词密度,不按字数:一个小节塞不下的概念另起一节,一章的节数多到找不着北就拆章。
切分决定(拆了三处、合了四处,理由写在这里)
| 决定 | 怎么处理 | 为什么 |
|---|---|---|
| 拆:原书第 2 章 | → 我们的 01、02、03、04、06、08、10 共七处 | 一章 11.4 万字符(全书最大的一章,是第二大的第 5 章 8.0 万的 1.4 倍)、五十多个承重概念,是全书的地基章。按每小节最多 5 个生面孔算,它至少要 25 个小节 —— 塞进一个文件读者必然断线 |
| 拆:原书第 5 章(策略梯度) | → 08(方 差)+ 09(步长) | 它治的是两种病:REINFORCE 方差大、更新步长没法定。两条推理链,分两章 |
| 拆:原书第 8 章(模仿学习) | → 12(把示范当数据用)+ 13(反推奖励) | 5.1 万字符、五大类方法、30 多个承重词。分界线是「要不要把奖励函数反推出来」 |
| 合:第 2.7.1–2.7.2 + 第 3 章 | → 06 | 第 3 章只有 1.13 万字符(全书第二短)、通篇是分类轴,单独成章会空;和「表格失效之后」接在一起才立得住 |
| 合:第 11 章 + 第 17 章 | → 16 | 第 11 章讲有对手时「最优」要换成「均衡」,第 17 章的 Arena 把合作/竞争定义成了对奖励函数的五类约束 —— 后者是前者的工程化落地 |
| 合:第 12 章 + 第 13 章 | → 17 | 第 12 章是并行架构谱系,第 13 章是一个真写出来的并行 SAC(还踩了三个坑)。理论 + 它的具体实例 |
| 合:第 14 章 + 第 16 章 | → 18 | 两个都不是游戏:状态、动作、奖励、终止全得自己定。一个离散一个连续,正好对照 |
| 移位:原书第 1 章(深度学习入门) | 放到我们的 05,不放 02 | 03、04 讲的全是表格法,一个神经网络都用不上。把它挪到「表格装不下了、需要一个能吃状态吐价值的函数」之后,它才有出场的理由,而不是一堆先备知识的堆砌 |
| 不做的一个备选 | 曾考虑把 01 与 02(赌博机)合成一章 | 合了之后这一章会有两条主走查,而承重机制(探索与利用怎么量化)落在次要的那一条上 —— 违反红线二。且赌博机的置信上界是第 19 章 AlphaZero 的地基,合并会让这处伏笔断掉 |
总纲 index.md 六节照标准写(handwritten: true);第 3 节就是下面这条主线。
文件名(定死,后面写正文时不许改):
01-decision-problem-shape · 02-bandits-and-exploration · 03-mdp-and-bellman ·
04-dp-mc-td · 05-deep-learning-prereq · 06-function-approximation-deadly-triad ·
07-dqn-and-rainbow · 08-policy-gradient-and-variance · 09-trust-region-trpo-ppo ·
10-ddpg-td3-sac · 11-eight-challenges · 12-imitation-behavior-cloning ·
13-imitation-inverse-rl · 14-model-based-planning · 15-hierarchical-rl ·
16-multi-agent-equilibria · 17-parallel-and-scaling · 18-designing-your-own-mdp ·
19-alphazero-tree-search · 20-practical-engineering
全书一条主线(总纲第 3 节的骨架)
只读这一段、不看任何拆解章,也能把这本书的主张复述出来。
① 有一类问题没有标准答案:没人告诉你这一帧该按哪个键,只有一局打完的输赢。 (01)
↓ 可只要开始试错,就撞上第一个真问题:试错本身有代价
② 守着每天两克的金矿,还是去找可能有五克的那座?这个两难在只剩「拉哪根杆」的
最小问题上就能算清楚:给没试过的选项按「我对它有多没把握」加一分。
这个式子十七章之后会在 AlphaZero 决定往哪儿搜的那一行里原样回来。 (02)
↓ 可真实问题不止一步,一步一步之间还互相牵连
③ 把它写成「状态 → 动作 → 奖励 → 下一个状态」,才有一套能推的数学。 (03)
↓ 可这套数学要求你知道「做这个动作之后会怎样」,而真实环境里你不知道
④ 那就采样:整局跑完取平均(准但每次差很多),或者只走一步就用估计更新估计
(稳但有偏)。两条路各有代价,中间是连续可调的。 (04)
↓ 可无论哪条路,都要把每个状态的价值记在一张表里 —— 围棋约 10^170 个状态
⑤ 表格必须换成一个函数,而这个函数就是神经网络。 (05)
↓ 换上去之后,原来的收敛保证没了:函数逼近 + 用估计更新估计 + 学别人走的路,
三件凑齐可以直接发散(两两组合却都安全)
⑥ 于是开始打补丁:DQN 用两个补丁把它按住,消融实验显示缺一个就是数量级的差别;
接着六个补丁各补一个洞。 (06–07)
↓ 可这一整条线天生接不了连续动作 —— 方向盘该打多少度,没法「对每个动作算一遍再取最大」
⑦ 换一条线:不学价值,直接调策略。它天生能连续,代价是方差大、步长难定,
于是又是一串专治方差与步长的补丁。 (08–09)
↓ 两条线各有长短,而它们的长短正好互补
⑧ 合流:把确定性策略塞进价值线的框架里,再依次修它的脆弱与探索不足。 (10)
↓ ★ 到这里算法已经很齐了。可它们还是不好用。★
⑨ 这本书真正的转折点在这里:作者把「不好用」拆成八个结构性障碍 —— 它们不是调参
能治的,而是同一个机器人抓取任务上八个不同位置的账:光采样就是 7 台真机、
800 小时、连续 4 个月;换一个随机种子,曲线可以完全不重合。
八个障碍分别是什么,第 11 章讲。 (11)
↓ 接下来的六章,每一章治其中一个
⑩ 拿人的示范省样本(12–13);拿学出来的环境模型造样本(14);把长任务拆成两层
来治难探索(15);把对手当成环境的一部分重新定义「最优」(16);用机器换时间(17)。
↓ 然后把它们真的跑起来,理论没说的那部分就露出来了
⑪ 真项目里最花力气的不是选算法,是把任务改写成状态、动作、奖励、终止四件事;
而奖励函数往往要改三版才对。 (18)
即使是最漂亮的那个成功案例(自博弈下棋),赢的也是树搜索,神经网络只是给它两个提示。(19)
↓ 最后
⑫ ★ 落点:把前十九章压成一份工程判断 清单。而其中最要命的几条 —— 终止信号只在真正
结束时才为真、奖励归一化只能缩放不能平移、奖励曲线不等于学习表现 —— 在前面
任何一章的理论里都推不出来。★ (20)
一句话主张: 强化学习的算法史是一部打补丁史;而「算法正确」与「它在我的任务上能跑」 之间,还隔着一整层没有理论、只有经验的工程判断。
判断(我们的,不是书里的): 枢纽是第 11 章(原书第 7 章)—— 它把算法清单变成工程议程; 落点是第 20 章(原书第 18 章)—— 它给出这层工程判断的具体条目。 如果错,会错在: 原书前言把阅读重心放在第 2 章(「最关键、最基础」), 而内容简介与前言都把第三部分写成「第 13~17 章」、根本没把第 18 章算进去 —— 作者本人未必这么看。备选读法是「落点在第 7 章,后面十一章都是它的注脚」。 总纲里要选一个并说明理由,不许含糊。
章级 + 节级大纲
每行一节:「进来时以为…… → 出去时知道……」。两头是同一件事,这一节就不该存在。 每章末尾两行:主走查(红线二:一条具体输入贯穿全章)与承重词(单开一节从现象讲起,一到两个)。
01 没有标准答案的问题长什么样(原书 前导知识 + 前言 + 2.1)
- §1 进来时以为「让机器学会做事 = 多喂点带答案的数据」→ 出去时知道有一类问题根本没有标准答案:Pong 的每一帧没人告诉你该按上还是按下,只有一球打完的输赢,监督学习的形状对不上
- §2 进来时以为「智能体就是一段程序」→ 出去时知道这套说法的零件怎么划:能被你改的叫智能体,改不了的一律算环境,中间只有动作与奖励两条线来往
- §3 进来时以为「看到的就是当前状态」→ 出去时知道单帧 Pong 看不出球往哪飞,「观测」与「状态」是两件事,完全可观测(围棋)与部分可观测的分别从这里来
- §4 进来时以为「奖励就是打分」→ 出去时知道它是全套方法里唯一的学习信号,而且可能很稀疏、来得很晚、还可能和你真正想要的东西不一致(这条到第 20 章会变成最贵的一课)
- §5 进来时以为「一次决策就是一次决策」→ 出去时知道轨迹与片段怎么把一串决策打包成一个可评价的单位,以及中间某一步好不好其实没人告诉你
- §6 进来时以为「学会了就一直用最好的那个」→ 出去时知道淘金者的两难:守着已经找到的 2 克金矿,还是去找可能有 5 克的那座 —— 探索与利用是这门学问的第一个真问题
- §7 进来时以为「深度强化学习就是两个词拼在一起」→ 出去时知道「深」具体加在哪一处,以及 2013 年那七个雅达利游戏和 2017 年赢柯洁各证明 了什么
主走查: Pong 的一个片段 —— 一帧画面进来 → 只有两个动作(上/下)→ 中间每一步奖励都是 0 → 这一球结束时给 +1 或 −1。每一步旁边标出:这一帧只是观测不是状态(看不出球速)、这一步的奖励是 0、这一整球是一个片段、最后那个 ±1 要摊回前面几百步。(Pong 的动作与 ±1 奖励是书里 2.1 的设定。) 承重词: 奖励(从「赢一球给 +1,中间全是 0」讲起)· 观测与状态之别 / 部分可观测(从「单帧看不出球往哪飞」讲起)。
02 只有一步的决策:赌博机与置信上界(原书 2.2)
- §1 进来时以为「要学会做事得先会走迷宫」→ 出去时知道把状态砍光、只剩「拉哪根杆」的最小问题里,探索与利用的矛盾已经完整存在,所以先在这里把它解干净
- §2 进来时以为「在线学习就是边跑边学」→ 出去时知道它和统计学习差在三处(样本有先后、看最坏情况、比的是后悔值而不是经验风险),这决定了这门学问怎么算好坏
- §3 进来时以为「好不好看总收益」→ 出去时知道后悔值把「我本可以更好」变成一个可算的数,以及伪后悔值为什么更好分析(取最大与取期望的顺序不能换)
- §4 进来时以为「先试几次再挑最好的就行」→ 出去时知道贪心会被一次运气锁死在次优杆上,ε-贪心用固定比例的浪费换「不被锁死」
- §5 进来时以为「探索就是随机瞎试」→ 出去时知道置信上界给每根杆加一项「我对它有多没把握」:拉得越少这一项越大,不确定性本身就值一分
- §6 进来时以为「环境是中立的」→ 出去时知道如果收益是对手故意安排的,确定性玩家的后悔值至少是回合数的一半;Hedge 与 Exp3 靠随机化把损失压回来
- §7 进来时以为「赌博机只是个玩具」→ 出去时知道上下文赌博机(先看一眼提示再拉杆)正好卡在赌博机与完整强化学习之间,而 §5 那个式子会在第 19 章的 AlphaZero 里原样回来
主走查: 一台三臂老虎机跑六轮。三根杆的真实中奖率是 0.2 / 0.5 / 0.9(玩家不知道)。每一轮写出:三根杆当前的估值、置信上界那一项各是多少、这一轮选了谁、累计后悔值涨了多少。贪心在第 3 轮就锁死在 0.5 那根;置信上界在第 5 轮把 0.9 那根挖出来。(这组数是为演示编的,不是书里的真实数值;置信上界的公式取自书里 2.2.2。) 承重词: 后悔值(从「怎么给『我本可以更好』标一个数」讲起)· 置信上界(从「没试过的选项凭什么值得试」讲起)。
03 把决策写成数学:MDP 与贝尔曼方程(原书 2.3)
- §1 进来时以为「写成数学是为了好看」→ 出去时知道写成马尔可夫过程之后,「接下来会怎样」只剩一张转移概率表,后面所有算法都站在这张表上
- §2 进来时以为「记住越多历史越好」→ 出去时知道马尔可夫性是「当前状态已经包含了所 有该记的东西」;它不是环境的性质,是你怎么定义状态的性质(第 20 章会拿这一条去分辨两种很像的失败)
- §3 进来时以为「奖励加起来就是成绩」→ 出去时知道折扣因子为什么非有不可(无限长的过程否则算出无穷),以及同一条轨迹的回报从 5 变成 2.87 是怎么来的
- §4 进来时以为「价值就是奖励」→ 出去时知道价值是「从这里出发,以后总共能拿到多少」的期望,而最土的算法就是采样几条轨迹取平均
- §5 进来时以为「有状态和奖励就够了」→ 出去时知道加上动作才成为决策过程:奖励从节点搬到边上,而同一个动作的结果还可能是随机的(休息之后 0.8 留在原地、0.2 回到上一个状态)
- §6 进来时以为「策略是一套 if-else」→ 出去时知道策略是「状态 → 动作的概率」,确定性策略只是它的一个极限,而随机性在有对手时不可替代
- §7 进来时以为「评价一个策略只能一路跑到底」→ 出去时知道贝尔曼方程把「以后能拿多少」拆成「这一步 + 折扣 × 下一步的价值」,一个递归就把它变成可解的方程组
- §8 进来时以为「最优策略要在所有策略里挑」→ 出去时知道贝尔曼最优方程把「长期最优」变成「每一步取最大」,而直接解它要 O(n³) —— 这就是后面所有近似方法的存在理由
主走查: 书里那张学生生活图,全程用它(全是书里的真数)—— 打游戏 r=−1、两项作业各 r=−2、休息 r=+1、通过 r=+10、睡觉 r=0。轨迹(游戏 → 作业1 → 作业2 → 通过 → 睡觉)的非折扣回报是 5 = −1−2−2+10;折扣因子取 0.9 时是 2.87;要估「作业2」这个状态的价值,采四条轨迹得到 −2、7、4.57、−0.178,平均 2.348;最后把「休息」这个动作(0.8 留在原地、0.2 回到作业1) 加上去,同一张图就从奖励过程变成了决策过程。 承重词: 马尔可夫性(从「为什么只看当前一眼就够」讲起)· 价值函数(从「从这里出发以后能拿多少」讲起)。
04 三种算价值的办法:动态规划 / 蒙特卡罗 / 时间差分(原书 2.4–2.6)
- §1 进来时以为「有了方程就能算」→ 出去时知道解方程要知道转移概率,而真实环境里你没有;这一章的三种办法正是按「知不知道模型」分的
- §2 进来时以为「动态规划是算法课上的东西」→ 出去时知道它就是把贝尔曼方程从等号改成赋值:评估当前策略、再照评估结果改进策略,两件事轮流做 —— 这个来回是后面所有算法的原型
- §3 进来时以为「反复迭代凭什么会停」→ 出去时知道每迭代一次,与真值的差距至少乘上一个小于 1 的折扣,所以必然收敛到唯一解(收缩映射)
- §4 进来时以为「不知道模型就没办法」→ 出去时知道蒙特卡罗法:整局跑完、把实际拿到的回报平均一下,一个模型都不需要;代价是必须等到片段结束,而且要求每个动作都有机会被试到
- §5 进来时以为「估计越准越好」→ 出去时知道「不准」有两种:平均下来就是对的但每次差很多(方差),和每次都差不多但系统性偏一点(偏差);蒙特卡罗属于前者,而这正是下一节要换招的原因
- §6 进来时以为「必须等片段结束」→ 出去时知道时间差分只等一步,用「下一步的估计」去更新「这一步的估计」—— 这个动作叫自举,它把方差压下来,代价是引入偏差
- §7 进来时以为「蒙特卡罗与时间差分是两派」→ 出去时知道它们是同一根轴的两端,资格迹与 TD(λ) 就是这根轴上的连续旋钮
- §8 进来时以为「学的当然是自己走出来的经验」→ 出去时知道 Sarsa 照自己现在的策略估,Q-Learning 在目标里取最大、等于照一个自己没在走的策略估 —— 在线策略与离线策略的分野从这一个 max 开始
主走查: 接着上一章那张学生生活图不换。同一个状态「作业2」的价值,三种办法各算一遍并把结果摆在一起:动态规划(知道转移概率,迭代到收敛)、蒙特卡罗(四条轨迹平均 2.348)、时间差分(只走一步就更新,步长 0.1 时这个数被挪到哪里)。三个数一并排,偏差与方差的差别当场看得见。(蒙特卡罗那四条轨迹与 2.348 是书里的;动态规划与时间差分那两步由我们按书里给的转移概率与奖励算出,正文里写明是我们算的。) 承重词: 自举(从「拿一个还没学准的数去更新另一个数」讲起)· 偏差与方差(从「同一个状态估十次,得到十个差很远的数 vs 十个很接近但都偏的数」讲起)。
05 先备:你真正需要的那部分深度学习(原书 第 1 章)
- §1 进来时以为「状态多就多开点 内存」→ 出去时知道围棋约有 10^170 个状态、雅达利一帧的可能画面数是天文数字,表格法不是慢、是根本写不下;所以我们要的是一个「吃进状态、吐出一个数」的可学函数,而这一章只讲够用的那部分,并且明说哪几样后面根本用不上(这一节从原 06§1 前移而来:「表格装不下了」是把深度学习挪到这里的全部理由,它必须排在深度学习之前)
- §2 进来时以为「神经元很玄」→ 出去时知道一层就是「一堆权重乘输入再加个偏置」,踢足球那个例子里每个权重代表什么、偏置为什么让分界线不必穿过原点
- §3 进来时以为「层数多就是深」→ 出去时知道不加非线性,叠多少层都塌回一层;异或用一层隐藏层先学出「或」和「与非」、再用「与」分开 —— 这是「学表示」的最小例子
- §4 进来时以为「激活函数随便挑」→ 出去时知道 sigmoid 两头会把梯度压没、ReLU 为什么成了默认、softmax 为什么只放在输出层
- §5 进来时以为「损失就是差多少」→ 出去时知道分类为什么用交叉熵(从 KL 散度掉一项得来),以及「熵」在这里量的到底是什么 —— 这个词到第 10 章会以完全不同的用途回来
- §6 进来时以为「几百万个参数不可能一起调」→ 出去时知道梯度就是「往哪边挪一丁点会变好」,反向传播靠链式法则把这份信息从损失一路回传,代价只比正向算一遍多一个常数倍
- §7 进来时以为「训练就是一直练」→ 出去时知道一次只拿一小撮样本算梯度(小批量)是拿噪声换速度,学习率大了震荡小了太慢,而 Adam 的两个动量各替你自动调掉一半的手工活(对应原书 1.6)
- §8 进来时以为「练得越久越好」→ 出去时知道练过头会把训练集背下来而对新数据失灵(过拟合),权重衰减、Dropout、批标准化各在防这件事的哪一面(其中批标准化到第 17 章会有个 RL 专用的替代品)(对应原书 1.7)
- §9 进来时以为「图像要用别的魔法」→ 出去时知道卷积就是「同一小块模板在整张图上滑一遍」,局部连接与参数共享把一张 84×84 的画面压成一串数,参数比全连接少几个数量级(第 07 章的 DQN 直接用它)
- §10 进来时以为「序列也照这么办」→ 出去时知道循环网络靠一个隐状态把过去带到现在,而它记不住太远的东西,LSTM 用一条单元状态加三道门解决(第 20 章会说什么时候必须用它)
主走查: 一张 4×4 的三通道小图走到一次参数更新 —— 3×3×3 的卷积核在左上角算出第一个输出格子的具体数 → 池化取那 2×2 里最大的 → 拉平接全连接得到两个分数 → softmax 变成概率 → 交叉熵算出损失 → 反向传播把其中一个权重挪一丁点。(卷积与池化那两步的矩阵与数是书里 1.5 节给的;损失与更新那两步的数是为演示编的,正文写明。) 承重词: 梯度(从「往哪边挪一丁点」讲起,§6 独占)· 卷积(从「一张 84×84 的画面怎么变成一串数」讲起,§9 独占)。 节数:8 → 10。 拆的理由:原 §7 一节里首现七个承重词(小批量、学习率、Adam 的两个动量、过拟合、权重衰减、Dropout、批标准化),原 §8 六个(卷积、局部连接、参数共享、循环网络、LSTM、隐状态),都超了「一节 ≤5」的配额。按原书 1.6 / 1.7 / 1.5 / 1.8 的结构拆,不许靠砍解释压密度。
06 表格换成网络之后:函数逼近、死亡三件套与四条分类轴(原书 2.7.1–2.7.2 + 第 3 章)
- §1 进来时以为「用网络代替表格只是换个存法」→ 出去时知道换成函数之后,更新一个状态会连带改动所有长得像的状态 —— 这份泛化正是好处,也正是麻烦的来源
- §2 进来时以为「监督学习那套直接搬过来就行」→ 出去时知道强化学习的样本不是独立同分布的(连着采的画面几乎一样),而且它的「标准答案」自己还在动
- §3 进来时以为「不收敛就多训一会儿」→ 出去时知道函数逼近、自举、离线策略三件凑齐时值可以直接发散,而两两组合都安全 —— 这就是死亡三件套,后面几章的补丁全是在跟它打交道
- §4 进来时以为「算法五花八门记不住」→ 出去时知道四条轴就能给任何一个算法定位:知不知道环境怎么动 / 学价值还是学策略 / 等整局结束还是走一步就更新 / 学的是不是自己走出来的路
- §5 进来时以为「基于模型 = 用了神经网络」→ 出去时知道在这一行「模型」专指环境的动力学(下一个状态是什么、给多少奖励),和「策略网络」是两回事 —— 这个歧义会一直跟到第 14 章
- §6 进来时以为「知道了分类就知道该选谁」→ 出去时知道每条轴各有代价:学价值的样本效率高但接不了连续动作,学策略的能连续但方差大 —— 而这两个缺点正好互补,第 07 到第 10 章就按这个顺序走
主走查: 接第 05 章那笔账不换 —— 84×84 个格子、每格 256 级灰度的一帧画面,换成神经网络之后参数只有几百万,但代价是「改一个状态会连带改多少个」;再把这个网络接上自举与离线策略,写出发散那三步各自把值推高了多少。(84×84 与 10^170 在第 05 章 §1 已给,这里只回指;发散那三步的数是为演示编的。) 节数:7 → 6(原 §1 前移到 05§1)。主走查从「换上网络之后」起算。 承重词: 函数逼近(从「一张写不下的表怎么换成一个能算的函数」讲起)· 死亡三件套(从「两两都安全、三个一起必炸」讲起)。
07 价值这条线:DQN 与它的六个补丁(原书 第 4 章)
- §1 进来时以为「Q-Learning 换成神经网络就是 DQN」→ 出去时知道直接换会不收敛甚至发散,DQN 真正的贡献是两个让它稳下来的补丁
- §2 进来时以为「样本就是样本」→ 出去时知道连着采的几帧几乎一模一样,直接喂进网络等于反复看同一张图;回放缓存把经验存下来再随机抽,顺手让每条经验被用很多次
- §3 进来时以为「目标值当然用最新的网络算」→ 出去时知道那等于追一个自己也在动的靶子;目标网络隔一段才同步一次,把靶子钉住
- §4 进来时以为「这两个技巧是锦上添花」→ 出去时知道消融实验那四个数:两个都用 316.8、只留回放 240.7、只留目标网络 10.2、都不用 3.2 —— 缺一个就是数量级的差别
- §5 进来时以为「Q 值高一点低一点无所谓」→ 出去时知道对一堆带噪的估计取最大会系统性偏高,把「选哪个动作」和「这个动作值多少」交给两个网络就消掉大半
- §6 进来时以为「每个状态都得学清楚各动作的好坏」→ 出去时知道看日出的时候做什么都一样,把 Q 拆成「这个局面本身值多少」加「这个动作比平均好多少」学得更稳
- §7 进来时以为「经验一视同仁」→ 出去时知道按误差大小偏心抽样能学得快,但偏心会让统计偏掉,所以要配一个纠偏权重,并且这个权重要慢慢加满
- §8 进来时以为「探索只能靠 ε」→ 出去时知道把噪声放进网络参数里,探索的幅度本身就能被学出来;在蒙特祖玛的复仇这类要走几十步才有分的游戏上它才见效
- §9 进来时以为「Q 值就是一个数」→ 出去时知道可以估整条回报分布(51 个离散点,或者一串分位数),Rainbow 就是这六件的合体
- §10 进来时以为「照着论文实现就能跑」→ 出去时知道雅达利那套预处理每一层在补什么:跳帧、相邻两帧取最大、一条命当一个片段、84×84 灰度、奖励只取符号、堆四帧;以及 Huber 损失在防什么
主走查: Breakout 的一帧走到一次参数更新 —— 210×160 的彩色帧 → 跳 4 帧并取相邻两帧的最大值 → 转 84×84 灰度 → 堆最近 4 帧 → 网络吐出每个动作的 Q → ε 选动作 → 把这条经验写进缓存 → 从缓存随机抽一批 → 用目标网络算出目标值 → Huber 损失 → 更新。消融的四个数挂在「拆掉这条链上的哪一步」上;六个补丁各自改这条链的哪一段,一句话定位。(链条与四个数都是书里的;抽样批次里的具体数值为演示编。) 承重词: 经验回放(从「连着采的四帧长得一模一样」讲起)· 过估计(从「对一堆带噪的数取最 大,结果会系统性偏高」讲起)。
08 策略这条线:直接优化策略,与方差(原书 2.7.3 + 5.1–5.6)
- §1 进来时以为「把 Q 学好就够了」→ 出去时知道方向盘该打多少度这类连续动作上,「对每个动作算一遍 Q 再取最大」根本做不到,只能直接学策略
- §2 进来时以为「策略就是网络输出一个动作」→ 出去时知道它输出的是一个概率分布:离散用类别分布、连续用一组均值和标准差;而随机性本身在有对手时是必需品
- §3 进来时以为「采样出来的动作没法求导」→ 出去时知道再参数化把随机性挪到外面(动作 = 均值 + 标准差 × 一个标准噪声),离散动作有对应的一招 —— 这两个技巧在第 10 章和第 20 章都会回来
- §4 进来时以为「奖励高就多做,这句话没法写成公式」→ 出去时知道策略梯度定理写的正是这句话,而且推导时环境的转移概率整项消失 —— 这就是它不需要模型的原因
- §5 进来时以为「改策略只能靠梯度」→ 出去时知道还有一支完全不算梯度的办法:随机撒一批参数、留下表现最好的那几个、照它们重新估一遍均值和方差,下一轮照新分布再撒(交叉熵方法);它快、实现简单,但分布会过早收拢到一个点、常停在次优解,补救是往方差里持续掺噪声。原书 2.7.3 一上来就把策略优化分成「基于梯度」与「无梯度」两支,这一节是后者;本章其余各节走的都 是前者。
- §6 进来时以为「梯度算对了就能训」→ 出去时知道它的方差大到几乎不能用,而有两个不花钱的办法:动作之前已经拿到的奖励与它无关,可以砍掉;再减去一个只与状态有关的基准,期望一点不变
- §7 进来时以为「基准随便挑个常数」→ 出去时知道基准取这个状态的价值时,回报减基准就成了优势 ——「这个动作比这个局面的平均水平好多少」
- §8 进来时以为「非得整局跑完才知道好坏」→ 出去时知道让一个批判者去估价值、拿一步的时间差分误差当优势,就成了演员-批判者:演员改策略、批判者算价值,两个网络通常共享底层。交接口径(必须写进正文):把这一套复制几十份同时跑,就是原书 5.5 的 A2C 与 5.6 的 A3C —— 它们不是新算法,是「演员-批判者 + 并行」,整块让给第 17 章讲。
- §9 进来时以为「生成对抗网络和强化学习是两个圈子」→ 出去时知道生成器对判别器,正是演员对批判者的同一个结构(作者专门写了一节讲这件事),而这一节到第 13 章才兑现
节数:8 → 9(补了无梯度那一支;原 §5–§8 顺延为 §6–§9)。覆盖声明:原书 5.5 A2C 与 5.6 A3C 不在本章展开,在 §8 末尾写明交接给第 17 章。
主走查: Pong 上用 REINFORCE 跑一条 20 步的轨迹,这一球赢了(回报 +1)。同一条轨迹上写三遍权重:原始写法下 20 步的权重全是 +1(包括开局那几步毫无关系的动作)→ 砍掉动作之前的奖励后,前 10 步的权重变成什么 → 再减去基准(这个局面的价值 0.6)之后,哪几步的权重变成负数、即被压低。三行权重并排,降方差在做什么一目了然。(Pong 的设定与三个公式是书里的;轨迹长度、基准值这几个数是为演示编的。) 承重词: 策略梯度定理(从「奖励高的动作以后多做一点,怎么变成一个能求导的式子」讲起)· 优势函数(从「全是正奖励时,好动作和坏动作一起被鼓励」讲起)。
09 步长这件事:信赖域、TRPO 与 PPO(原书 5.7–5.9)
- §1 进来时以为「学习率调小一点就安全」→ 出去时知道参数挪一样多,策略可能几乎没动、也可能整个翻过来,所以「步长」这个词在参数上量是没有意义的
- §2 进来时以为「走错一步再走回来就行」→ 出去时知道在强化学习里走错一步会污染接下来采到的样本,策略崩了往往爬不回来 —— 这是它和监督学习最要命的一处不同
- §3 进来时以为「要衡量两个策略差多远,比参数就行」→ 出去时知道该在策略空间里量,而 KL 散度就是那把尺子(第 05 章讲交叉熵时已经见过它)
- §4 进来时以为「新策略好不好只能试了才知道」→ 出去时知道用旧策略采的样也能估新策略的表现,方法是给每条样本乘一个新旧概率的比值;代价是两者差得越远这个估计越不可信,而误差界正好由 KL 给出
- §5 进来时以为「在参数上挪一小步就是走一小步」→ 出去时知道该在策略空间里量距离,而把这把尺子写成矩阵就是 Fisher 信息矩阵;沿它给出的方向走,同样的「策略变化量」在参数上可能是很不一样的步子 —— 这个方向叫自然梯度,它对参数怎么写(再参数化)不敏感
- §6 进来时以为「TRPO 是个新算法」→ 出去时知道它就一句话:在 KL 不超过一个上限的范围里,把那个替代目标顶到最大;解出来要对上一节那个矩阵求逆,而共轭梯度让你不必真的求逆
- §7 进来时以为「二阶方法更准所以更好」→ 出去时知道它贵、而且需要很大的批量样本才近似得准(第 20 章会说 TRPO 因此扩不到大网络),PPO 就是把这个约束改成一行截断
- §8 进来时以为「截断是个工程 hack」→ 出去时知道它的效果等价于「比值一旦跑出区间就不再给梯度」,以及另一版用自适应系数做惩罚项的写法为什么更难调
- §9 进来时以为「信赖域那一路到 PPO 就完了」→ 出去时知道还有一条把 Fisher 矩阵按层拆成分块近似(K-FAC)的路:求逆的代价从「整块一起求」降到「每层两小块各求」,二阶方法因此扩得动大一点的网络 —— 这就是 ACKTR,它同时兑现了第 20 章那句「信赖域那一路扩不到大网络」的债(原书 5.9)
- §10 进来时以为「PPO 只是强化学习圈的算法」→ 出去时知道它后来成了大语言模型对齐的默认选择,而这本书完全没有这一段(书架上有一整本讲它)
主走查: 书里那个两参数策略的例子,全程用它(前半是书里的真数)—— 策略是「一个 sigmoid 值和它的补」。第一种情况参数从 6 挪到 3,策略从 (1.00, 0.00) 变成 (0.95, 0.05);第二种情况参数从 1.5 挪到 −1.5,策略从 (0.82, 0.18) 翻成 (0.18, 0.82)。参数都挪了 3,一个几乎没动、一个整个反过来。接着在同一组数上算出两种情况的 KL 各是多少、新旧概率比值各是多少、截断在哪一边生效。(后半这几步由我们按同样的数算出,正文写明。) 承重词: 信赖域(从「凭什么敢往前走这一步」讲起,§6)· 自然梯度与 Fisher 信息矩阵(从「在参数上量距离是错 的」讲起,§5 独占一节)。 节数:8 → 10。 拆的理由:原 §5 一节里塞了替代目标、KL 约束、矩阵求逆、共轭梯度四件事,而本章自己指定的承重词「自然梯度与 Fisher 信息矩阵」按标准要单开一节从现象讲起;另补 §9 兑现原书 5.9 的 ACKTR(此前整章无落点)。
10 两条线合流:DDPG → TD3 → SAC(原书 2.7.4 + 第 6 章)
- §1 进来时以为「两条线各走各的」→ 出去时知道它们的长短正好互补(一个能重复利用旧经验、样本效率高但只能离散,一个能连续但必须用刚采的样),合流的目标就是把优点凑齐
- §2 进来时以为「连续动作上没法取最大」→ 出去时知道让一个网络直接输出「最好的那个动作」,取最大这一步就被这个网络替掉了 —— 这就是确定性策略
- §3 进来时以为「DDPG 是全新算法」→ 出去时知道它就是 DQN 那两件套套在确定性策略上,外加一条:确定性策略自己不会探索,得往输出的动作上加噪声(论文推荐的那种噪声其实未必更好,第 20 章会打脸)
- §4 进来时以为「加了目标网络就稳了」→ 出去时知道 DDPG 依然脆弱,病根还是过估计:两个批判者取最小的那个、策略少更新几次、目标动作上加一点噪声抹平尖峰 —— 三招各治一处
- §5 进来时以为「探索靠加噪声就够了」→ 出去时知道更彻底的做法是把「保持不确定」写进目标函数本身,而那个系数就是「多想探索一点 」的价钱
- §6 进来时以为「熵项只是个正则化」→ 出去时知道加了它之后策略迭代仍然单调变好、仍然收敛,所以 SAC 不是拼凑而是有推导的
- §7 进来时以为「这三个算法差别很大」→ 出去时知道它们在同一步更新里只差目标值那一行,而第 17、18 章那两个真实项目为什么都选了 SAC
主走查: 倒立摆环境(3 维状态、1 维连续动作)上,同一条经验的一次更新,三种算法各写一遍目标值 —— DDPG 用目标批判者对目标策略给出的动作打分;TD3 换成两个批判者取小,并且给目标动作加一点截断噪声;SAC 再减去一项与策略随机性成正比的量。给定两个批判者打 2.1 和 1.6、这一步奖励 −1.2、折扣 0.99、温度 0.2、动作的对数概率 −0.8,三个目标值各是多少,过估计被砍掉了多少。(环境维度与三个公式是书里的;这几个数是为演示编的。) 承重词: 确定性策略(从「连续动作上没法把每个动作都试一遍」讲起)· 最大熵目标(从「策略太早认死一个动作」讲起;「熵」本身在第 05 章已从现象讲过,这里只用一句接回去)。
11 算法齐了,却还是不好用:八个挑战(原书 第 7 章)【全书枢纽章,不许压缩】
- §1 进来时以为「剩下的只是调参」→ 出去时知道作者把「不好用」拆成了八 个结构性障碍,而接下来六章正是分别去治其中五个 —— 这一章是全书的转折点
- §2 进来时以为「多跑几天就行」→ 出去时知道人玩 Pong 几十次就上手、无模型算法要成百上千个样本;在真机器上这笔账是 7 台机器人、800 小时、连续 4 个月
- §3 进来时以为「奖励总会给一点」→ 出去时知道成功/失败的二值任务里中间样本的奖励全是 0、彼此毫无区别,梯度无从谈起 —— 稀疏奖励是后面模仿学习、分层、内在奖励共同的动机
- §4 进来时以为「曲线抖是正常的」→ 出去时知道有两种不稳:一次训练内部忽上忽下,和多次训练之间根本不重合;而最刺眼的一条实测是,精心挑随机种子能得到两个完全不重合的置信区间,即使实现一模一样
- §5 进来时以为「学过的东西不会忘」→ 出去时知道强化学习一直在追一个移动的数据分布,在线策略的样本高度相关最容易忘;换个阶段换了损失函数,同样会忘
- §6 进来时以为「探索就是多随机」→ 出去时知道蒙特祖玛的复仇一个房间要几十个连贯动作、全游戏 23 个房间;两家宣布解决它的团队都用了人的示范,作者对这个结果的评价是「可能不令人满意」
- §7 进来时以为「学会一个任务就能推广」→ 出去时知道元学习(内外两层循环)与表征学习在补什么:物体表面那些随它怎么动都不变的关键点,才是稳的输入
- §8 进来时以为「多智能体就是多开几个」→ 出去时知道对手本身构成了会变的环境,智能的上限由环境决定 —— 围棋的发明者从没定义过什么策略能赢
- §9 进来时以为「模拟里跑通就能上真机」→ 出去时知道现实鸿沟的一个具体来源:模拟里默认采集与推理不花时间,真机上智能体永远在拿滞后的观 察做决定;两类解法是把差异当成随机性练进去,或者让策略自己适应
- §10 进来时以为「规模就是多加机器」→ 出去时知道 AlphaStar 里深度强化学习只占一小块,作者的明确判断是当前算法端到端解决大规模任务仍不够有效;他在结尾引了《苦涩的教训》
主走查: 一个真实的机器人抓取任务,八个挑战逐一落在同一个任务上 —— 采样要多久(7 台真机、800 小时、4 个月)、换个随机种子曲线会变成什么样、奖励只在抓到时才给会发生什么、模拟里学的搬到真机差在哪(观察滞后)、想扩到一百种物体还缺什么。同一个任务,八个位置,每个位置写出这一处的具体代价。(数字取自书里 7.1 与 7.7。) 承重词: 样本效率(从「人几十次上手,机器要几百万帧」讲起)· 现实鸿沟(从「模拟里学会的策略搬到真机就废」讲起)。
12 抄专家的作业(上):把示范当数据用(原书 8.1–8.2、8.5–8.7)
- §1 进来时以为「有专家演示就简单了」→ 出去时知道模仿学习的正式说法是「让我走过的状态-动作分布贴近专家那一份」,这一句决定了后面每种方法到底在优化什么
- §2 进来时以为「模仿就是监督学习」→ 出去时知道行为克隆确实就是监督学习,连样本顺序都可以打乱;问题不在训练,在部署
- §3 进来时以为「训练误差小就没事」→ 出去时知道你的策略一偏,就走到示范里从来没出现过的状态上,而它在那里什么都不会 —— 训练时见到的分布和用起来遇到的分布不是同一个
- §4 进来时以为「小误差可以忽略」→ 出去时知道序列决策本身就是放大器:偏一点 → 到达更陌生的状态 → 偏更多,误差沿轨迹复合
- §5 进来时以为「多标点数据就能补上」→ 出去时知道要在自己走出来的新状态上请专家补标注、一轮轮聚合进数据集;这个办法有效,但代价是专家得一直在场
- §6 进来时以为「深度网络给出的动作就够用」→ 出去时知道另一类做法给的是带协方差的预测,你能读出「它对这一步有多没把握」,而且小数据下更快、有解析解
- §7 进来时以为「模仿完就结束了」→ 出去时知道更实用的用法是拿它当强化学习的起点:直接当初始策略,或者把它冻住、只学一个修正量(六个网络怎么摆,书里给了完整清单)
- §8 进来时以为「示范和自己采的经验要分开用」→ 出去时知道可以把专家轨迹直接灌进回放缓存,再加一个过滤条件 —— 只有批判者认为示范动作更好时,才让克隆损失生效,免得被次优示范限死
- §9 进来时以为「奖励是环境给的,动不得」→ 出去时知道给奖励加上「下一状态的势减去当前状态的势」这一项,最优策略一个字都不变,所以可以拿示范构造出势函数来给稀疏任务铺路标(这个式子到下一章会调头变成一个大麻烦)
主走查: 一条五步的驾驶示范。第 1 步策略偏 2 度(示范里有类似画面,救得回来)→ 第 2 步偏 5 度(示范里最接近的画面已经差得远)→ 第 3 步车头压线(示范里根本没有这种画面,输出的动作没有意义)→ 第 4、5 步彻底出界。同一条轨迹再走一遍聚合式做法:第 3 步那张 画面被送去请专家标注、进数据集,下一轮就有救了。(机制、混合系数的写法来自书里;这条轨迹的角度是为演示编的。) 承重词: 协变量漂移(从「训练时见到的画面和开起来遇到的画面不是同一批」讲起)· 复合误差(从「偏一点会让下一步偏更多」讲起)。
13 抄专家的作业(下):不学动作,反推奖励(原书 8.3–8.4)
- §1 进来时以为「照着做就行,管他为什么」→ 出去时知道有些任务的奖励根本写不出来 —— 视觉自动驾驶里该给哪个后视镜分多少注意力,你写不出公式,但可以从专家的行为里把它反推出来
- §2 进来时以为「反推奖励是个良定义的问题」→ 出去时知道它是病态的:上一章那个塑形式子证明有无穷多个奖励函数产生同一个最优策略,光看示范分不出来
- §3 进来时以为「反推出来就能用」→ 出去时知道在最大熵那套框架里,外循环走一步、内循环就要解一整个强化学习问题 —— 这就是它贵在哪
- §4 进来时以为「必须先拿到奖励函数才能学策略」→ 出去时知道 GAIL 干脆跳过它:训一个判别器去分辨「这是专家还是它」,判别器的打分直接当奖励;省算力,而且训练时不需要专家在场
- §5 进来时以为「更省事所以更好」→ 出去时知道它有个硬缺陷:训到最优时判别器对谁都输出 0.5,你拿不回任何奖励函数,换个环境就不能复用
- §6 进来时以为「那把奖励函数塞回去就行」→ 出去时知道可以用「奖励越高、这条轨迹越可能」的分布把两者挂钩,但归一化那一项在大空间里算不准,只能靠采样绕过去
- §7 进来时以为「按整条轨迹算就行」→ 出去时知道那样方差太大;改成对单步判别之后,判别器学到的其实是优势,而优势里混着一个与动作无关的基线,于是又要用上一章那个塑形式子把它拆开 —— 同一个式子第三次出现,这次是当工具
- §8 进来时以为「示范里当然有动作」→ 出去时知道从视频学的时候只有画面:一条路是先学一个「看前后两帧倒推出动作」的模型,把动作补出来再回到上一章的做法;另一条路是让判别器只看状态
- §9 进来时以为「状态分布对上就行」→ 出去时知道那个环形反例:两个智能体一顺一逆同速转圈,状态分布完全一样、动作完全相反;把判别器的输入从单个状态换成「前后两个状态」才分得开
- §10 进来时以为「视频里的人和机器差不多」→ 出去时知道具象不匹配(机械臂对人手)与视角差异是两道真坎,时间对比那类自监督表示是目前的答案:同一时刻不同视角的两帧要靠近,同一视角相邻时刻的两帧要推开
主走查: 一段「拉开抽屉」的专家视频。GAIL 走一遍:判别器给专家的帧打 0.9、给策略的帧打 0.3 → 策略这一步拿到的奖励由这个打分算出 → 更新一轮后判别器变成 0.7 与 0.45 → 再往下两边都收敛到 0.5,这时奖励恒定、什么也拿不回来(书里的结论)。同一段视频再走一次单步判别的版本:判别器改成对每个(状态,动作)出分,再把它拆成「与动作有关的一项 + 前后状态的势差」。(打分数字是为演示编的;两个结论与拆法都是书里的。) 承重词: 逆向强化学习(从「他为什么这么做」讲起)· 判别器与对抗式训练(从「训一个裁判去分辨真假,裁判的打分就是奖励」讲起;生成对抗网络的最小解释在第 08 章 §9 已给过)。
14 自己造环境:模型、规划与树搜索(原书 第 9 章)
- §1 进来时以为「省样本只有『找人来教』这一条路」→ 出去时知道还有第二条:既然真实交互贵(第 11 章那笔 800 小时的账),就自己造一个能无限产样本的环境,在里面练。第 12/13 章拿人的示范省样本,这一章拿学出来的环境省样本 —— 两条不同的药方,分界在「样本从谁那里来」。(「模型」在这一行专指环境本身,第 06 章 §5 已经挂过牌,这里一句带过、不重讲)
- §2 进来时以为「在环境里走一遍就叫规划」→ 出去时知道用词是分开的:在真实环境里展开叫演算,在模型里展开才叫规划 —— 这一章所有算法省下的钱都在这一个字上
- §3 进来时以为「模型得自己写」→ 出去时知道学模型就是一个监督学习问题,而它有两处致命:学不准策略就跟着学偏;环境一变模型要迭代很久才跟得上,所以对实时性高的场合不适用
- §4 进来时以为「有了模型就不用真实经验了」→ 出去时知道 Dyna 的做法是两样一起喂:真实经验保准(压偏差)、模拟经验保量(压方差)
- §5 进来时以为「模拟经验要另一套算法」→ 出去时知道 Dyna-Q 只是在普通 Q-Learning 后面多做几次「从模 型里抽一条假经验、做一次一模一样的更新」
- §6 进来时以为「搜索就是把所有可能都试一遍」→ 出去时知道以当前状态为根建一棵树、用采样代替穷举:给每个动作跑若干条模拟、取平均回报最高的那个
- §7 进来时以为「模拟用什么策略无所谓」→ 出去时知道固定模拟策略的坏处正是「搜索中学到的东西用不上」;蒙特卡罗树搜索把结果存进树、边搜边改模拟策略,只在树外才退回默认策略
- §8 进来时以为「必须整条走完才更新」→ 出去时知道每走一步就更新的版本,以及为什么要用两套参数分开记「长期在真实环境里学到的」和「这一局在模拟里学到的」,后者每局清零
主走查: 一个 4×4 的迷宫,把 Dyna-Q 的七个步骤走一遍 —— 真实走一步(从起点往右,奖励 0)→ 更新 Q 表那一格 → 把「这个状态做这个动作会到哪、给多少」写进模型 → 然后从历史里抽 5 次假经验重放,其中抽到终点前一步那条时,那一格的 Q 从 0 跳到 0.9 → 下一次真实走到附近时,值已经传回来了。同一个迷宫再跑一次固定模拟策略的搜索与树搜索,对比「模拟策略变不变」造成的差别。(七个步骤与树搜索的四步是书里的;迷宫与数值是为演示编的。) 承重词: 模型(强化学习里的专指义,从「什么叫知道环境怎么动」讲起;第 06 章 §6 只挂了个牌,讲透放这里)· 规划与演算之别(从「在脑子里试和真的试一次,代价差多少」讲起)。
15 把任务拆开:分层强化学习(原书 第 10 章)
- §1 进来时以为「任务长就多训一会儿」→ 出去时知道奖励稀疏加上跨度长时,底层动作的组合根本探不完;分层押的注是找到时间和空间上的抽象,顺带还能换来可移植与可解释
- §2 进来时以为「分层就是先做 A 再做 B」→ 出去时知道一个「选项」是三样东西打包:哪些状态可以启动它、启动后按什么策略走、什么时候算结束
- §3 进来时以为「上层每一步都要决策」→ 出去时知道选项一旦启动会持续若干步,上层看到的过程因此变成「每次转移还要花多少时间」也是随机的 —— 时间本身成了变量
- §4 进来时以为「选项人工定好就行」→ 出去时知道人定的选项很脆(为「充电器在视野内」写的策略,视野外立刻作废),所以要自动发掘;分野在于要不要把执行结果反馈回来
- §5 进来时以为「自动发掘只能靠启发式」→ 出去时知道可以把「未来若干步的动作计划」和「什么时候重新规划」都做成可学的矩阵,并且用一项损失专门惩罚「老是改主意」
- §6 进来时以为「终止条件学不出梯度」→ 出去时知道选项-批判者把策略梯度定理扩到了选项上,而终止函数的梯度前面带一个负号乘优势:这个选项还在占便宜,就压低它的终止概率
- §7 进来时以为「上层怎么指挥下层是个工程细节」→ 出去时知道封建制给了两条硬原则(下级只管服从、双方互相不知道对方的任务),而 FuN 让管理者在潜空间里给一个方向当目标、工作者靠「有没有朝那个方向走」拿内在奖励,两者之间不传梯度
- §8 进来时以为「上层的旧数据还能接着用」→ 出去时知道下层一直在变,旧的高层数据已经不对 应现在的下层了;办法是给旧数据重新贴一个「现在的下层最可能是在追哪个目标」的标签
- §9 进来时以为「分层已经被证明有效」→ 出去时知道作者自己的收尾判断:有效果提升,但没有足够证据表明它真的实现了分层抽象,还是只是探索得更有效
主走查: 一个「进屋充电」的任务贯穿全章。选项版:「开门」这个选项的启动条件、内部策略(靠近 → 抓门把 → 转)与终止条件各是什么,某一步的「继续用这个选项还是换一个」的值在终止概率 0.2 时算出多少。封建制版:上层每 10 步给一个方向目标,第 0 步的目标向量、第 3 步实际移动方向与目标的夹角换算出的内在奖励、第 10 步上层重设目标。(开门的例子与两个公式是书里的;数值是为演示编的。) 承重词: 选项(含终止函数,从「把一串动作打包成一件事」讲起)· 内在奖励(从「环境不给分的时候,谁来给下层发工资」讲起)。
16 环境里有别人:三种均衡与一个多智能体平台(原书 第 11 章 + 第 17 章)
- §1 进来时以为「多智能体就是多开几个智能体」→ 出去时知道只要还有第二个会学的家伙,「最优策略」这个词就失效了:你的最优取决于他怎么选,他的也取决于你
- §2 进来时以为「收益就是奖励」 → 出去时知道博弈论用效用说话(总收益减总成本),以及一次性决策、反复决策、多状态决策三种框架各允许什么 —— 只见一次面可以骗,反复见面会被报复
- §3 进来时以为「均衡就是双赢」→ 出去时知道纳什均衡只是「谁单方面改都不会更好」;胆小鬼博弈里它有两个,而且都不是双方最舒服的那个格子
- §4 进来时以为「混合策略是玄学」→ 出去时知道它是解一个「让对手对两个选择无所谓」的方程,解出来是 0.75,双方各以 0.75 选怯懦,期望效用各 4.5
- §5 进来时以为「均衡就到此为止」→ 出去时知道所有纳什均衡的总效用都是 9,而让双方按一个外部信号协调时总效用能到 9.3333;关联性均衡凭什么没人想偏离,书里给了逐条验算
- §6 进来时以为「大家同时决策」→ 出去时知道谁先动很关键:先动的一方能预判对方的最佳回应,在这张收益表上直接拿到 6
- §7 进来时以为「三种均衡各讲各的」→ 出去时知道原书 11.4 把它们收成了一张图:同一时刻把智能体分层级,高层级先动、低层级看过再动,层级之间求斯塔克尔伯格均衡、同层级内部按能不能收到共同信号求纳什或关联性均衡;而这张图一旦要落到几十个智能体上,就必须有平台来管谁跟谁是什么关系 —— 这就引出了本章下半段
- §8 进来时以为「多智能体算法就是每人跑一份 DQN」→ 出去时知道一种做法要求每个智能体建模所有人的价值表(代价立刻爆炸),而更实用的折中是训练时用一个能看见所有人动作的集中批判者、执行时各自只看自己
- §9 进来时以为「合作与竞争是形容词」→ 出去时知道可以把它们定义成对奖励函数的五类约束(谁都学不动的、互不相干的、总和不变的、利益一致 的、其余全归混合),每一类都是一个能验算的条件
- §10 进来时以为「多智能体环境要一行行写规则」→ 出去时知道社交树的做法:在哪一层挂什么奖励机制,就定义了那一层的孩子之间是什么关系;四只机器蚂蚁分两队推箱子那个例子把三层一次讲透
主走查: 胆小鬼博弈的一张收益表,走完三种均衡(全是书里的真数)—— 双方都硬各得 0、一硬一软是 6 与 3、双方都软各得 5。先找出两个纯策略均衡;再解混合策略得 0.75、期望效用 4.5;再算出所有纳什均衡的总效用都是 9;换成外部信号协调、三种组合各三分之一时总效用 9.3333;逐条验算为什么没人想偏离(被通知选软时老实照做得 4、私自改硬只有 3);最后改成一先一后,先动的一方拿到 6。同一张表,六个结论。 另起的一处走查(显式声明,本章共两处): 四只机器蚂蚁分两队推箱子。个体层挂「独立类」奖励(每只蚂蚁自己学走路,它的回报与别人的策略无关)→ 队伍层挂「合作类」(两只蚂蚁的回报同增同减,取合力推动的距离)→ 全局层挂「竞争类」(两队回报之和恒定,比谁先把箱子推到目标)。每一层写出:这一层挂的是五类里的哪一类、它对奖励函数的约束条件是什么、这一步某只蚂蚁最终拿到的奖励是三层加权求和之后的哪个数。(三层的挂法与五类约束是书里的;加权求和的具体数是为演示编的。) 承重词: 效用函数(从「赢一局到底值多少」讲起)· 均衡(从「有对手时,『最优』这个词还成立吗」讲起)。 节数:9 → 10(补原书 11.4 的分层博弈分析架构,它同时是从上半段过渡到下半段的桥)。
17 用机 器换时间:并行架构与一个真跑起来的项目(原书 第 12 章 + 第 13 章)
- §1 进来时以为「跑得慢就换块好显卡」→ 出去时知道时间花在与环境交互上,而交互天生只能一步接一步;这个赛跑项目里单个片段在普通 CPU 上就要几十秒,而它需要上百个 CPU/GPU 小时才能拿到好策略
- §2 进来时以为「并行就是多开几个进程」→ 出去时知道要分开看两件事:算得开(多个单元分子任务,收益先升后被瓶颈卡住)和传得动(带宽是瓶颈,拓扑决定冗余与延时)
- §3 进来时以为「大家算完一起更新最稳」→ 出去时知道同步要等最慢的那台、算力强的白等,异步不等人但提交的梯度是基于旧参数算的;而这种「过期更新」意外地产生了类似动量的效果。开头必须明写:这就是第 08 章 §8 欠下的 A2C 与 A3C —— A2C 是同步版(有协调器,等齐了再更新),A3C 是异步版(去掉协调器,谁算完谁提交)。
- §4 进来时以为「一个主节点就够了」→ 出去时知道星形拓扑的主节点必须更快更宽,而且它一停全系统停摆;完全去中心化时两两通信的成本爆炸,于是有了树形(轮数是对数级)与蝴蝶形(任何一个进程故障,其余照常同步)
- §5 进来时以为「分布式算法有一大堆要背」→ 出去时知道分辨它们只看一件事:节点之间传的到底是什么 —— 有的传梯度、有的传整条轨迹、有的传带优先级的经验、有的干脆把「怎么决策」也搬 到学习端去算
- §6 进来时以为「传轨迹和传梯度差不多」→ 出去时知道传轨迹意味着采样用的策略已经比学习中的策略旧了几步,要用两个截断的比值把这个时差纠回来,这就是「重要性加权」这个名字的来历
- §7 进来时以为「架构越新越好」→ 出去时知道拆开看只有五个零件(环境、行动者、回放缓存、学习者、参数服务器),所有架构不过是这五个零件的不同摆法与不同连线
- §8 进来时以为「照着架构图写代码就行」→ 出去时知道真写一个并行版本会撞上什么:多进程之间内存不共享,网络要显式共享,连优化器内部那两份统计量都得手动共享;而为了让子进程能用显卡换的那种启动方式,直接导致这套代码在 Windows 上跑不了
- §9 进来时以为「跑通了就等结果」→ 出去时知道这个项目另外五个调法各在救什么(奖励按批标准差缩放、换一个在零点也可导且有负值的激活、按单个样本做标准化而不是按批、每个动作重复 3 次、同一批样本学 3 次),以及 4 张 GPU 加 56 个 CPU 训 3 天是个什么概念
主走查: 一条经验从产生到被用上,走完整条链 —— 某台 CPU 上的一个片段(41 维观测:骨盆位置速度、各关节角度角速度、质心、七个部位位置;18 维动作:每条腿 9 块肌肉的发力;奖励是骨盆沿前进方向的位移减去用韧带的惩罚;骨盆低于 0.65 米就结束)跑几十秒 → 经验进共享回放缓存 → GPU 上的学习者抽一批做反向传播 → 新参数写回共享内存 → 采样进程读到新参数。每一步旁边写:在哪台机器上、传的是什么、谁在等谁。然后把那几种分布式架构各自改了这条链的哪一段,一句话定位。(观测与动作的维度、奖励与终止条件、机器规模都是书里的。) 承重词: 异步(从「一台慢机器拖住所有人」讲起)· 重要性加权(从「我用的样本是几步之前那个策略采的」讲起)。
18 自己定义 MDP:两个不是游戏的任务(原书 第 14 章 + 第 16 章)
- §1 进来时以为「接上算法就能跑」→ 出去时知道真项目里最花力气的是把一个不像游戏的任务改写成状态、动作、奖励、终止这四件事,而这四件全得你自己定
- §2 进来时以为「状态就是原始输入」→ 出去时知道修图这类任务直接喂像素学不动:改成一个预训练网络最后一层的 2048 个数,再拼上两种颜色空间的直方图各 1000 个数,问题才变得可学
- §3 进来时以为「动作空间是给定的」→ 出去时知道它可以是设计出来的:13 个动作里 12 个是「对比度、饱和度、亮度、三组颜色偏移各上下调 5%」,剩下那个是「什么都不做」
- §4 进来时以为「终止由环境决定」→ 出去时知道修图没有输赢,谁来喊停是个设计问题;前人用「所有动作的价值都变成负的就退出」,而这里的做法是把「不做」当成一个显式的退出键(顺带绕开了第 07 章那个过估计问题)
- §5 进来时以为「奖励就是目标」→ 出去时知道机器人抓取上作者试了三版:只在抓到时给 +10,几乎学不动;再减去夹具到物体的距离,能学了,但距离项把夹具往物体正中吸、抓取姿势全错;再加旋转惩罚、把零惩罚点上移 8 厘米,姿势才对
- §6 进来时以为「奖励设计属于调参」→ 出去时知道每改一版都在改变优化问题本身的形状,而作者坦白这类人为设计与「科研上想减少奖励工程」的诉求是冲突的
- §7 进来时以为「模拟器都差不多」→ 出去时知道渲染好的、物理准的、跑得快的是三类不同的东西;而最要紧的一句是「一个『真实』的模拟可以有很多种实现,其中只有一种与现实相同」
- §8 进来时以为「模拟里学会了就算成功」→ 出去时知道要把差异当成随机性练进去(随机物体质量、摩擦力、颜色、光照),而随机的范围必须覆盖真实世界的那一段,否则白练
- §9 进来时以为「书里的项目都很成功」→ 出去时知道作者如实写下的局限:抓取姿势不完美、成功率不高、全程无示范无预训练;修图那边只要局部需要提亮,全局亮度就会被一起拉高
主走查: 机器人抓取的奖励函数三级演进,同一个抓取动作各算一遍(设定全是书里的)—— 第一版只有稀疏奖励:这一步的奖励是 0、下一步还是 0,整个片段直到抓到才有一次 +10;第二版减去夹具到物体中心的距离:同一步立刻有了非零的数,可学,但把夹具引到了物体正中;第三版加上旋转惩罚(系数 0.02)并把零惩罚点上移 0.08 米:同一步的奖励又变了多少、为什么这回姿势是对的。另起一处走查修图:一张偏暗的图 → 2048 + 2000 维的观测 → 选中「亮度 ×1.05」→ 在颜色空间里算它离专家修图近了多少 → 重复到选中「不做」退出(最多 20 步)。 承重词: 奖励设计(稀疏与密集,从「只在抓到时给分会发生什么」讲起)· 域随机化(从「模拟里的摩擦力永远和真的不一样」讲起)。
19 AlphaZero:把一次树搜索完整走一遍(原书 第 15 章)
- §1 进来时以为「AlphaZero 就是神经网络下棋」→ 出去时知道下棋的是树搜索,神经网络只做两件事:给每一步一个先验概率、给当前局面一个估分
- §2 进来时以为「这套办法什么游戏都能用」→ 出去时知道它吃的是一类很窄的游戏:两个玩家、没有骰子、双方看到的信息完全一样、回合制且有限步结束 —— 三个人以上就不算,因为会出现合作
- §3 进来时以为「树里存的是局面」→ 出去时知道每个节点存五样东西:到达它的那一步、被访问过几次、累计的奖励和、两者相除得到的均值、以及网络给的先验概率;而这些数是从父节点那个玩家的视角记的
- §4 进来时以为「树搜索要模拟到终局才知道好坏」→ 出去时知道 AlphaZero 砍掉了随机模拟那一步,直接让价值网络给出估分,传统的四步于是变成三步
- §5 进来时以为「选哪个子节点看估分就行」→ 出去时知道选择公式是「均值 + 一项探索加成」,而这一项正是第 02 章那个置信上界的第三代写法:先验概率乘上「兄弟们总共被访问了多少次的平方根,除以自己被访问的次数」
- §6 进来时以为「回溯就是把分数往上加」→ 出去时知道黑白两方的视角必须逐级取反,一处符号错整棵树就废 —— 作者专门为这件事写了一段警告
- §7 进来时以为「搜索完选估分最高的那步」→ 出去时知道落子看的是访问次数,并且由一个温度参数控制:自博弈的前若干步按访问次数的比例随机选(保证数据多样),之后以及和真人下棋时只挑访问最多的
- §8 进来时以为「训练数据从棋谱来」→ 出去时知道它全部来自自己跟自己下:最终胜负当价值的标签,访问次数归一化后当策略的标签 ——「概率由访问次数算出来」正是树搜索与网络训练的接合点
- §9 进来时以为「实现照抄论文就行」→ 出去时知道本书这一版与原版的三处不同(搜索次数、前几步用高温的步数、新模型要对打 400 局赢过 55% 才替换),以及数据增强为什么在五子棋能用、在国际象棋不能
主走查: 书里那三轮树搜索,原样走完(全是书里的真数)—— 第 1 轮:根节点既是根又是叶,直接扩展并评估,回溯时根节点只把访问次数从 0 改成 1,累计奖励与均值都不动;第 2 轮:按「均值 + 探索加成」选出一步,到新叶子扩展评估,价值网络给的 −0.1 是从黑方视角说的,而这个节点的信息属于白方,取反后变成访问次数 1、累计 0.1、均值 0.1,根节点的访问次数变成 2;第 3 轮:再往下走一步撞上终局 —— 不扩展、两个网络都不用,直接从游戏规则拿结果,白方输了是 −1,而这一步是黑方走出来的,所以记成 +1,沿路三个节点逐级取反地往上更新。 承重词: 访问次数与它的均值(从「为什么最后按『去过几次』落子,而不是按『哪一步分最高』」讲起)· 自博弈(从「一开始谁都不会下,数据从哪来」讲起)。
20 从「算法对」到「跑得起来」:工程判断(原书 第 18 章 + 附录 A/B/C)
- §1 进来时以为「跑不通就是参数没调好」→ 出去时知道深度强化学习难在三处(奖励信号本身残缺、目标一直在动、常常要同时训好几个网络),以及作者给的三阶段推进顺序
- §2 进来时以为「先上真任务」→ 出去时知道先在最简单的环境里把自己实现的基本算法验通、再一点点加复杂度;每加一次不确定的东西就测一次
- §3 进来时以为「照论文的超参抄就行」→ 出去时知道不要过拟合论文细节:某篇论文推荐的那种时间相关噪声在实践中很难说赢过普通高斯噪声;而在 AlphaStar 那边,朴素的多步回报反而赢过更高级的离线策略修正
- §4 进来时以为「输入直接喂进去」→ 出去时知道值域没归一化时,第一层的 Tanh/Sigmoid 一开局就饱和、梯度几乎为零;输出层的激活也必须配动作的值域(动作有负值就不能用 ReLU)
- §5 进来时以为「归一化就是减均值除以标准差」→ 出去时知道奖励只能缩放不能平移:平移会改变智能体想早点结束还是想活久一点(因为片段结束之后的奖励实际上是 0),除非你压根没用终止信号
- §6 进来时以为「网络越深越强」→ 出去时知道强化学习里超过 5 层都不常见,「够大就能过拟合」在这里可能只是慢慢收敛甚至发散;还有一条反直觉的:价值网络只在训练时用,所以它和策略网络可以吃不一样的输入
- §7 进来时以为「算法可以随便换」→ 出去时知道每个算法有自己的脾气:信赖域那一路需要大批量样本(否则那个矩阵近似不准,也因此扩不到大网络),而 DDPG 对超参敏感 —— 现实项目里没时间做彻底的超参搜索,这本身就是选型依据
- §8 进来时以为「片段跑满就算结束」→ 出去时知道终止信号只在真正终止时才该为真:终止状态的价值是 0,把「步数跑满」也标成终止,等于把一个本不该是 0 的价值强按成 0,价值网络会被带偏(2022 年之后 Gymnasium 把这件事写进了接口,书里那一版还没有)
- §9 进来时以为「折扣因子是个感觉值」→ 出去时知道它有个可算的有效视野:0.99 大约就是「一百步以后的奖励可以忽略」
- §10 进来时以为「奖励曲线涨了就是学会了」→ 出去时知道奖励只是目标的量化形式、两者是两个东西,智能体会过拟合到你写的那个奖励上;所以要另外报一个任务本身的度量(比如物体最终离目标还有多远)
- §11 进来时以为「训练不动只能瞎试」→ 出去时知道该往程序里加哪些探针:损失、随机策略的熵(过早掉下去就是探索停了)、新旧策略的 KL、每一层的梯度(不该过大也不该全是 0);以及平台期的诊断法 —— 先分清是「没探到更好的轨迹」还是「探到了却学不会」
- §12 进来时以为「结果不好就换算法」→ 出去时知道先质疑自己的实现(作者说最常见的原因就是代码里的错),再往上是初始化和随机种子:3 到 5 次起步,而第 11 章那条实测说 5 个可能都不够
- §13 进来时以为「这一串算法是各自独立的发明」→ 出去时能把 1988 到 2018 这三十年的谱系倒着讲一遍:每一个算法都是被上一个的某个具体毛病逼出来的(策略梯度方差大 → 加批判者;表格写不下 → DQN;取最大高估 → Double;探索太笨 → Noisy 与 SAC;接不了连续 → DDPG;DDPG 脆 → TD3;步子没法定 → TRPO;TRPO 太贵 → PPO;PPO 扩不动 → ACKTR)—— 这正是全 书「打补丁史」那句主张的收口。(材料取自附录 A 的年份表与原书 7.1 那段倒序总结;附录 B 的 42 条伪代码与附录 C 的中英对照表只出现在本章的原文地图里,不占正文节)
主走查: 一次真实的排错。在倒立摆上写好一个 PPO,第一次跑,奖励曲线纹丝不动。按这一章的顺序查一遍:先看熵(第 200 轮就掉到接近 0 → 探索已经停了)→ 看终止信号(发现步数跑满 200 步时被置成了真 → 那一步的价值被强按成 0)→ 看归一化(奖励减了均值 → 存活意愿被改掉了)→ 看种子(换 3 个种子,两条曲线完全不重合)→ 最后改看任务本身的度量(摆杆离竖直位置的平均角度)而不是奖励值。每一步写出看到的具体数和据此做出的判断。(每一条判断都是书里第 18 章的条目;排错过程里的数是为演示编的。) 承重词: 归一化(从「奖励除以标准差可以,减均值不行」讲起)· 终止信号 Done(从「跑满步数算不算结束」讲起)。
自查:哪两行的「出去时知道」险些是同一件事
- 01§6(探索与利用)与 02 全章:01 只把矛盾提出来(守 2 克还是找 5 克),02 才给量化(后悔值)和解法(置信上界)。写 01 时不许提前给公式。
- 03(方程长什么样)与 04(怎么把它算出来):03 到「解它要 O(n³)」为止,04 全部是求解办法。不重。
- 04§6(自举)与 06§3(死亡三件套):前者是「怎么用、好 处是什么」,后者是「它和另外两件凑齐会炸」。写 06 时只回指一句,不重讲。
- 06§6(两条线互补)与 10§1(合流动机):06 只给坐标系、当预告,不许把第 6 章那张三行对照表提前搬过来;10 才拿它当动机。
- 07§5(过估计,离散)与 10§4(过估计,连续):同一个病、两种药(两个网络分工 vs 两个批判者取小)。两处必须互相点名,否则读者以为是两件事。
- 04§5(估计的方差)与 08§6(梯度估计的方差):同一个统计概念、两个不同的被估对象。08 里必须明说「就是第 04 章那个方差,只是这次被估的是梯度」。
- 11§2(样本效率是病)与 12/13/14(三种药):11 只写病和代价;12/13 用人的数据、14 用学出来的模型,两条药方的分界就是 14§1 的「出去时知道」,已写进 14§1。
- 12§9(奖励塑形当工具)与 13§2(同一个式子当病因):这是故意的,13 必须回指并点破「同一个式子第二次出现,这次是麻烦」,13§7 是第三次。
- 14§7(通用树搜索)与 19§4(AlphaZero 的树搜索):14 讲带随机模拟的四步版本,19 只讲「砍掉模拟那一步之后有什么不同」。19 的前置是 14,不许重讲四步。
- 15(分层治探索)与 11§6(探索是病):15§1 只用一句回指,动机段不重写。
- 08§8(演员-批判者)与 17§3(A2C/A3C):08 只到「一个演员配一个批判者」为止,并当场声明并行版整块交给 17;17§3 必须点名接的是 08§8。这次交接写在两边,漏一边就会各写各的。
- 17§9(那个项目的五个调法)与 20(通则):17 的属于那个项目,20 的是普适判断。20 里不许再讲一遍激活函数怎么换。
- 18§5(奖励改了三版)与 20§10(奖励不等于目标):18 是案例、20 是通则,20 只用一句回指这个案例。
- 02§5(置信上界)与 19§5(它的第三代写法):19 必须写成「第 02 章那个式子的第三代」,而不是重新介绍一个新公式。
承重词的归属(跨章会撞车的,先钉死在哪一章讲透)
表里的章号一律是「我们的章号」,不是原书章号。
| 词 | 第一次出现 | 从现象讲透放在哪 | 后面怎么用 |
|---|---|---|---|
| 熵 | 05§5(交叉熵) | 05§5 | 10§5 讲最大熵目标、20§11 讲熵探针,都只回指 |
| 方差 / 偏差 | 04§5 | 04§5 | 08§6(梯度的方差)、09§4(估计不可信)回指 |
| 范数 | 04§3(收缩证明要量「两个价值表差多远」) | 04§3(取所有状态里差得最多的那个) | 05§5 的损失函数、20§(我们的章号)那条梯度范数裁剪都只回指 |
| 马尔可夫性 | 03 | 03 | 20§ 非马尔可夫与 POMDP 之别回指 |
| 在线策略 / 离线策略 | 04§8(Sarsa 对 Q-Learning) | 04§8 | 06 当四条轴之一、07 与 10 当合流条件 |
| 模型(=环境动力学) | 06§5(挂牌点明歧义) | 14§2–§3(14§1 只用一句接回 06§5,不重讲定义) | 06 只写一句消歧,不展开 |
| 重要性采样 | 07§7(纠偏权重,就地一段) | 09§4 | 17§6 的截断版本回指 |
| 确定性 | 03§5–6(确定性转移、确定性策略只给一句) | 10§2(确定性策略) | 「转移是确定的」与「策略是确定的」是两件事,10 里必须写明区别 |
| 稀疏(奖励) | 01§4(就地一句:一整局只在最后给一次分、中间全是 0,这种奖励叫稀疏) | 11§3(它为什么让梯度无从谈起) | 15、18 回指 |
| 归一化 | 05§8(批标准化) | 05§8 + 20§5(强化学习专用的那条) | 17§9 的层标准化回指 05§8 |
| 生成对抗网络 / 判别器 | 08§9 | 08§9 给最小解释,13§4 讲透 | — |
跨章伏笔与许诺(写完要逐条核,进总纲的兑现表)
| 埋在 | 收在 | 是什么 |
|---|---|---|
| 02§5 置信上界 | 19§5 | 跨 17 章,原书明写「详见 2.2.2 节」 |
| 03§2 马尔可夫性是状态定义的性质 | 20§(非马尔可夫) | 用它去分辨非马尔可夫与部分可观测 |
| 05§5 熵 | 10§5 最大 熵 | 同一个词,两种用途 |
| 08§3 再参数化 | 10§5(SAC 降方差)、20§3(离散动作的技巧) | 理论章埋、算法章用、工程章救场 |
| 08§9 生成对抗与演员-批判者同构 | 13§4 GAIL | 第 5 章那一节读着像闲笔,其实是铺路 |
| 12§9 奖励塑形式子 | 13§2(当病因)、13§7(当解药) | 同一个式子三次转身 |
| 11§9 域随机化 | 18§8 | 概念 → 具体到随机哪几样 |
| 14§7 树搜索 | 19 全章 | 通用版 → 砍掉模拟的版本 |
| 17§8 并行框架 | 18§5(机器人项目复用了它) | 原书明说复用第 13 章的框架 |
| 18§5 奖励三版 | 20§10 | 案例 → 通则 |
| 01§4「这条到第 20 章会变成最贵的一课」 | 20§10(奖励不等于目标) | 奖励与真实目标会分家 |
| 01§7「『深』具体加在哪一处」 | 05§1–§2 | 口径写死:01§7 只许说「深加在『那个函数』这一处,而它是一个能自己学的东西;它长什么样、凭什么调得动,第 05 章讲」。把债写在明处,不许让读者以为是自己没看懂 |
| 05§8「批标准化到第 17 章会有 RL 专用替代品」 | 17§9(层标准化) | 同一件事的两种做法 |
| 05§10「第 20 章会说什么时候必须用循环网络」 | 20§6(非马尔可夫与部分可观测) | 何时非用不可 |
| 09§7「第 20 章会说 TRPO 因此扩不到大网络」 | 20§7,并由 09§9 的 ACKTR 给出补救 | 债 → 兑现 + 补救 |
| 10§3「论文推荐的那种噪声其实未必更好,第 20 章会打脸」 | 20§3(不要过拟合论文细节) | 具体案例 → 通则 |
| 08§8「A2C/A3C 整块让给第 17 章」 | 17§3(必 须明写「这就是第 08 章欠下的 A2C/A3C」) | 章际交接,写下来才不会各写各的 |
每章要补的书外内容(先翻书架,再上网;一次只抓一个)
| 落在哪一章 | 补什么 | 去哪找 |
|---|---|---|
| 05 | TensorLayer 现状:全书代码基座,2021 后基本停更,读者照书敲多半跑不起来(作者是它的创始人,这条利益相关写进总纲第 2 节) | 先 ls ../ai-*-reference/aiRef/repos/ | grep -i tensorlayer,没有再上网核 |
| 07 与 20 | Gym → Gymnasium:书里 step 返回四元组,2022 年之后是五元组,恰好把第 20 章那条「终止信号只在真正结束时为真」从口头忠告变成了接口强制 | 书架上有:shelf=ai-frontier-reference/openenv#01-contracts.md |
| 09 | PPO 后来成了大语言模型对齐的默认选择;以及「实现细节决定性能」的两篇实证 | 书架上有:shelf=ai-book-reference/the-rlhf-book-reinforcement-learning-from#05-policy-gradient-ppo.md;两篇论文要核原文 |
| 11 | 表 7.1 星际的动作空间在转码文本里是 1026,实为 10^26,绝不能照抄;Go-Explore 2021 年上了 Nature 且用了策略网络(书里的断言要加时间戳);Henderson 2018 与《苦涩的教训》要核到原文 | 前两条核论文;《苦涩的教训》书架上 docs/ren-gong-zhi-neng-jian-shi/ 讲过 |
| 14 与 19 | MuZero 填的正是本书的结构洞:19 章的 AlphaZero 必须知道规则,14 章又说模型可以学出来,中间缺的就是它 | 核 Nature 2020 原文的标题、年份、作者 |
| 18 | MuJoCo 2021-10 被收购并开源,书里当商业软件写 | 核官方公告与仓库 |
| 20 与总纲第 5 节 | 不覆盖的三大块:离线强化学习(CQL/IQL)、把强化学习当序列建模的那条路(它绕开了本书整个价值函数地基)、以及大语言模型上的对齐 | 前两条核论文;第三条指书架 |
同一件事说三遍: 书架上已有三本强化学习拆解(reinforcement-learning-sutton-barto 16 章、
an-introduction-to-deep-reinforcement-learning 14 章、the-rlhf-book… 16 章)。
01–10 章的理论部分与第一本重得厉害 —— 我们的角度必须是**「工程上怎么用、为什么会有这一串补丁」**,
而不是「理论上为什么对」。力气往这本书独有的六处倾斜:12/13(模仿)、15(分层)、17(并行)、
16(三种均衡的完整验算)、19(逐轮树搜索)、20(工程判断)。
转码陷阱(照抄会出错)
- 上标全丢:
1026= 10^26、10170= 10^170、γ 2= γ²。看到连在一起的怪数字先怀疑上标。 - 公式常被拆成多行、下标跑到行首,引用时要把上下几行一起读。
- 图注与正文交错(图片本身没提取出来),这些行不能当正文引。
- 目录页与中英对照表提取质量 差,不要当出处引(对照表可以查术语译法)。
- 每章尾部一大段是参考文献,定位段号时别落进去。