跳到主要内容

nndl-practice 节级大纲(审读意见改后定稿)

这份是草稿层的东西,不进主线。 一节一行,写成「进来时以为…… → 出去时知道……」。 两头是同一件事的,那一节就该合并掉。

审读意见落实清单(改了哪些、改在哪)

第一档 —— 五处主走查的输入本身在书里不成立,不改就是错:

原来写的改成依据
16 章走查「电脑怎么录像?」那一对,23 个位置,10 个 0 + 13 个 1改用 8.3.1.2 的「什么花一年四季都开 / 什么花一年四季都是开的」,23 个位置,11 个 0 + 12 个 1,id 串原样引text/09-ch08.txt:1441:1443
09 章走查「同一套超参,只改一个布尔开关」删掉「同一套超参」;第 6 节照实写 0.005 对 0.01,点明这组对照没它自称的那么干净text/06-ch05.txt:1136:1198
01 章走查 ④t[0,1] 取出 6t[0,1] 取出 [6,7,8,9,10](形状 [5]),t[0,1,0] 才是 6;末句改成「形状和取值取自书里的实际输出;ndim 与 numel 是按定义算出来的」text/02-ch01.txt:279:294
13 章走查 ③「同一份数据训 100 轮」主走查只留 ①②(不训练,只看一次前向的逐层方差);③ 拆成本章第二处走查,明说网络换成 2→300→500→700→400→1、数据换成 300 条弯月text/08-ch07.txt:1370:1456
04 章走查末句「真实 1.92 万美元档」「真实房价 1.92 个十万美元档(约 19.2 万美元)」;第 8 节把「单位是十万美元」当读表第一件事讲text/03-ch02.txt:898:1059

第二档 —— 结构病五处:

  1. 03 §2 落点改成「先记住这个骨架是全量喂的,以及为什么真跑起来不能这么干」;批/批大小当作「下一步要解决的问题」引入,分小撮怎么做记进兑现表指向 07 章;主走查五步保持全量,第 ⑤ 步旁写明「这一步用的是全部 256 条算出来的一个梯度」。
  2. 14 §2 两头重写:进来时以为「加惩罚项就一种写法」,出去时知道「取绝对值之和会把一部分参数压到 0、取平方和只是一起往小里拽」;04 §4 不动。
  3. 12 §8 只留「惯性更新公式差在学习率乘在哪一步」和三段式学习率调度,AdamW 连同 newTerms 一起挪到 14 §6。
  4. 15 §6 缩放讲成「除以这份向量维度的平方根」;第 7 节切出多头之后再补一句「切成 M 份之后,这里的维度指的是每个头的维度」。
  5. 21 §6 拆成两节:§6 讲「标准答案里没有『哪种更好』的信号」+ 人给的两两优劣(RLHF / 奖励模型 / 强化学习 / PPO),§7 讲一步的新路(DPO / 参考模型)。

第三档 —— 交稿前会咬人的四处:

  1. Sigmoid / Logistic 挂牌:05 §2 大白话讲透之后名字挂句末(torch.sigmoid / Logistic 函数 / Sigmoid);14 §4 给暂退法挂上 nn.Dropout
  2. 书外说法 → 书架锚对照表:见下面「书外说法锚表」。
  3. 两处覆盖缺口:07 章末补「换个数据集再跑一遍:鸢尾花上加一层隐藏层值多少」(90/30/30、批 16、4→16→3、Adam 0.01、150 轮);12 章补「换到真拟合任务上再看一遍」(Linear(2)、30 轮、批 64、均方误差、按迭代/按回合两张图)。
  4. 章节文件边界错位四处,写脚注按实际文件名指:
    • 第 11 章影评实验 → text/08-ch07.txt:N
    • 第 14 章暂退法 → text/09-ch08.txt:N
    • 第 19 章 PROTEINS → text/11-ch10.txt:N
    • 第 21 章 DPO / 智能体 / RAG → text/12-fm.txt:N(该文件第 153 行之后才是索引正文,前 152 行是正经章节正文,可以引)

JSON 大纲自身两处:删掉 newTerks 拼写错误的键;第 6 章第 1 节的 newTerms 由「神经网络」换成「神经元」。

书外说法 → 书架锚对照表(动笔前先钉死)

说法落在哪
梯度截断用取最小值而不是 if 判断10 §7shelf=ai-frontier-reference/pytorch@src:torch/nn/utils/clip_grad.py:164
卷积底层走 im2col + GEMM(书里提了一句,补出处)08 §7书内 text/06-ch05.txt:410;不另引源码
低秩旁路的 B 初始化为全 021 §4shelf=ai-frontier-reference/peft@src:src/peft/tuners/lora/layer.py:343
偏好对齐的对比损失在工程里长什么样21 §7shelf=ai-frontier-reference/trl@src:trl/trainer/dpo_trainer.py:1465
只在回答上算损失靠 -100 标位21 §5shelf=ai-frontier-reference/trl@src:trl/trainer/sft_trainer.py:112
强化学习那条老路的工程实现21 §6shelf=ai-frontier-reference/docs/verl#06-algorithms.md
字节对编码每轮挑最高频那一对20 §3shelf=ai-frontier-reference/minbpe@src:minbpe/basic.py:35
均方根规范化砍掉减均值那一步17 §3shelf=ai-frontier-reference/transformers@src:src/transformers/models/llama/modeling_llama.py:65
少数几组键值被多组查询共用17 §5shelf=ai-frontier-reference/transformers@src:src/transformers/models/llama/modeling_llama.py:187
门控前馈层是三个投影而不是两个17 §4shelf=ai-frontier-reference/transformers@src:src/transformers/models/llama/modeling_llama.py:175
现成实现直接调框架的融合注意力20 §7shelf=ai-frontier-reference/nanogpt@src:model.py:64
分块与重叠21 §9shelf=ai-frontier-reference/docs/llamaindex#02-ingestion-chunking.md · shelf=ai-agent-reference/docs/chonkie#01-chunkers.md
智能体的停止条件与兜底21 §8shelf=ai-frontier-reference/docs/smolagents#01-agent-loop.md
解耦权重衰减14 §6shelf=ai-frontier-reference/pytorch@src:torch/optim/adamw.py:95

二十一章的节级大纲

01 张量:数据在框架里长什么样

主走查:一个装着 1~30 的 [3,2,5] 张量,从建出来到取出一个数。

  1. 现象:同一份数据换个摆法,程序就跑不动了 → 知道框架为什么要求所有数据长成同一种容器。
  2. 以为「维度」就是向量有几个分量 → 知道这里的「维度」指的是嵌套了几层,形状是每一层各有几个。
  3. 以为张量像 Python 列表什么都能装 → 知道同一个张量里所有元素必须同一种数据类型,这是按固定步长寻址的前提。
  4. 以为取下标就是取一个数 → 知道少写一层下标取出来的是一个向量;顺带记住原地写和共享内存这两个坑。
  5. 以为形状不一样就不能相加 → 知道补 1 对齐、逐维取大的两步规则。
  6. 以为矩阵乘法只对二维成立 → 知道高阶张量上只有最后两维做矩阵乘,其余当批维广播。
  7. 边界:书里跳过了什么(稀疏张量、复数、自动混合精度),以及出门会撞见的名字。
  8. 可带走的。
  9. 原文地图。

02 算子:一个能自己求导的最小零件

主走查:g = exp(a×b + c×d),a=2、b=3、c=2、d=2,前向算出 22026.4658,反向拿回四个偏导。

  1. 现象:网络一深,手推导数就推不动了 → 知道框架为什么把每个基础运算都封成「带前向也带反向」的零件。
  2. 以为反向传播是一个大算法 → 知道它是每个零件各自的反向函数按链条串起来的。
  3. 加法零件:以为要重新推 → 知道它把上游的数原样分给两个输入。
  4. 乘法零件:知道梯度要乘到「另一侧」的输入上。
  5. 指数零件 + 组装:走查跑通 22026.4658。
  6. 以为要自己写反向 → 知道框架边算边记一张图,调一次就回放。
  7. 以为梯度是覆盖的 → 知道它是累加的,所以训练循环必须先清零。
  8. 边界:关掉求导、切断追踪,以及这一章故意没讲的。
  9. 可带走的。
  10. 原文地图。

03 一个最小的训练循环

主走查:256 条二维样本拟合 y = x1 + x2 + 噪声,五步走完一轮。

  1. 现象:模型不会自己变好 → 知道「训练」这两个字具体是哪五个动作。
  2. 进来时以为骨架应该一小撮一小撮喂 → 出去时知道这个骨架是把 256 条一口全塞的,以及为什么真跑起来不能这么干(分小撮怎么做在 07 章讲)。
  3. 主走查:前向 → 算差多远 → 清零 → 反向 → 更新,五步各带一个具体的数或状态。
  4. 以为每种任务的训练代码都不一样 → 知道换模型换损失换数据,循环主体几乎原样保留。
  5. 以为把整个模型存下来最省事 → 知道只存参数字典才不会被改名重构咬到。
  6. 以为加载完就能用 → 知道少一句切推断模式,同一份输入会给出不一致的输出。
  7. 边界与局限。
  8. 可带走的。
  9. 原文地图。

04 机器学习的五个零件

主走查:加州房价 20 640 条,8 个特征,一路走到单条样本预测。

  1. 现象:「这个模型好不好」这句话没法直接回答 → 知道要先把任务拆成五件东西。
  2. 数据:以为数据越多越好 → 知道三份数据各管什么,以及测试集只能在最后一步用。
  3. 模型:以为模型是个黑箱 → 知道它就是一族带参数的函数,训练是在里面挑一个。
  4. 学习准则:以为把训练集误差压到最低就对了 → 知道要在目标后面再加一项罚参数走极端(正则化、结构风险在这里命名)。
  5. 优化算法:以为有公式就直接解 → 知道能解析解的很少,大多数只能一步步挪。
  6. 评价指标:以为损失就是成绩 → 知道很多指标不可微,只能另找一个替身当训练目标。
  7. 主走查前半:数据加载、8:2 切分、只用训练集的均值方差做标准化。
  8. 主走查后半:训练/测试均方误差 0.2631 / 0.2584,权重排序,以及读这张表的第一件事——目标列的单位是十万美元。
  9. 主走查末步:单条样本真实 1.92 个十万美元档(约 19.2 万美元)、预测 1.95(约 19.5 万美元)。
  10. 边界与局限。
  11. 可带走的。
  12. 原文地图。

05 两条直线:二分类与多分类

主走查:1 000 条弯月数据训 500 轮,损失 0.6931 → 测试成绩 0.8450 / 损失 0.3245。

  1. 现象:线性回归吐出的是任意实数,而分类要的是「是/否」 → 知道中间缺一步。
  2. 那条两端压平、中间近似直线的 S 形曲线——大白话讲透,名字挂在同一段句末(torch.sigmoid、Logistic 函数、Sigmoid)。
  3. 以为衡量分类好坏还是用平方差 → 知道交叉熵只关心「模型给正确答案打了多少分」。
  4. 主走查:参数全零 → 概率全 0.5 → 损失 0.6931(= ln 2)→ 训 500 轮 → 0.8450。
  5. 以为多分类就是跑多个二分类 → 知道 Softmax 把 C 个分数归一成一个分布;并且照公式直接算指数会溢出,做法是先整体减去最大值
  6. 三簇三分类:1.0986(= ln 3)起步 → 0.7850。
  7. 案例:鸢尾花 150 条按 120/15/15 切,训 300 轮,损失 1.0986 → 测试 0.9333。
  8. 边界与局限:15 条测试样本的单点成绩不能全信(书里自己说了)。
  9. 可带走的。
  10. 原文地图。

06 从一个神经元到一层网络

主走查:两条 5 维样本过一个神经元,净活性值 1.1149 / 1.2194。

  1. 现象:一条直线分不开两条弯月 → 引出神经元。
  2. 一个神经元里发生了什么:加权求和 → 过非线性 → 输出;主走查给出 1.1149 / 1.2194。
  3. 两条 S 形与两条折线:书里画的四条激活曲线各自的形状与取值区间。
  4. 以为层是个新东西 → 知道一层就是把同样的动作并排做很多次,写成一次矩阵乘。
  5. 主走查续:5→10→1 的两层网络吃一条随机样本,吐出 0.6587。
  6. 反向传播落到代码上:损失 → 激活 → 线性,逐个零件补反向。
  7. 弯月上训 1 000 轮:手写零件版 0.8150 / 0.4548,换成框架内置零件 0.8200 / 0.5561。
  8. 边界与局限:书外会撞见的激活函数名字。
  9. 可带走的。
  10. 原文地图。

07 深了之后的两个坑

主走查:五层网络在弯月数据上只跑一个回合,打印每层权重梯度的长度。

  1. 现象:层加多了损失反而更难降 → 引出这一章。
  2. 以为参数随便初始化都行 → 知道全设成同一个值会让同一层所有神经元变成一个。
  3. 主走查 ①:S 形激活,四组梯度 0.4650 / 0.2292 / 0.03566 / 0.01021 / 0.001497,跨 2.5 个数量级。
  4. 主走查 ②:换成折线激活,各层梯度回到相近量级。
  5. 主走查 ③:偏置初始化成 −8,五层梯度全为 0——神经元卡死在负半轴。
  6. 主走查 ④:换成带泄露的版本,梯度从全零恢复到 0.06857 … 1.355e-8。
  7. 换个数据集再跑一遍:鸢尾花上加一层隐藏层值多少(90/30/30、批 16、4→16→3、Adam 0.01、150 轮),与 05 章那条 0.9333 并排;书里没打印这一版的具体成绩,照实说。
  8. 顺带记住:输出层别再叠一层归一,框架的交叉熵内部已经做了。
  9. 边界与局限。
  10. 可带走的。
  11. 原文地图。

08 卷积:让一小片权重滑过整张图

主走查:一个 3×3 的输入配 2×2 的核,四个位置分别算出 25、31、43、49。

  1. 现象:一张 32×32 的图接全连接层要多少参数 → 引出局部连接与权重共享。
  2. 主走查:25 / 31 / 43 / 49 四步各写出乘加过程。
  3. 以为卷积核尺寸决定一切 → 知道步长和补零两个旋钮怎么改输出尺寸(3×3 补 1:步长 1 保持 8×8,步长 2 变 4×4)。
  4. 拿一个固定的核当探针:拉普拉斯算子提边缘。
  5. 以为一层只有一个核 → 知道输入通道要按位相加、输出通道要并排堆叠;书里那张图给出 25 + 271 + 805 = 1101。
  6. 汇聚层:把一小片响应压成一个。
  7. 主走查续:LeNet 七层的形状演化,1×32×32 → … → 1×10;MNIST 子集 1 000/200/200 训 5 轮,测试 0.8800 / 0.4177。
  8. 边界与局限:书里的嵌套循环实现与工程实现差几个数量级(书里点了 im2col + GEMM 这个名字)。
  9. 可带走的。
  10. 原文地图。

09 直连边:让梯度越过中间几层

主走查:同一份 MNIST 子集,同一个 ResNet18,只改一个布尔量(不写「同一套超参」)。

  1. 现象:把网络从七层加深到十八层,成绩反而掉了 → 引出这一章。
  2. 残差单元长什么样:主干两层 3×3 加一条直连边。
  3. 形状对不上怎么办:直连边上插一个 1×1 卷积跟着变形。
  4. 十八层怎么拼:六个模块,通道 64 → 128 → 256 → 512,尺寸逐段减半。
  5. 主走查:关掉直连边 0.8100 / 0.6627,打开 0.8750 / 0.3543。
  6. 对照实验干不干净:照实写出两边学习率是 0.005 对 0.01,点明书里说超参一致但代码里差一倍;再用判断块给出我们的看法(残差有用这个结论仍站得住,依据是损失曲线形态,不是那 0.065 的分差)。
  7. 案例:CIFAR-10 上训 30 轮,0.7094 / 0.9058。
  8. 边界与局限。
  9. 可带走的。
  10. 原文地图。

10 记忆:让网络记住上一步

主走查:数字求和任务,长度 10 的一条序列从嵌入走到 19 类打分。

  1. 现象:一句话的意思跟词序有关,而前馈网络看不见顺序 → 引出隐状态。
  2. 任务长什么样:前两位相加,其余位主要是 0,序列越长越难。
  3. 主走查:数字 → 查表成向量 → 逐步刷新隐状态 → 取末时刻 → 19 类打分。
  4. 以为序列越长模型越吃力是慢慢来的 → 知道成绩随长度下滑,但书里点名长度 30 处略有回升
  5. 主走查续:长度 10 时约 0.35、长度 35 时约 0.15;这两个数是从书里那张折线图上读的,书正文没有给出逐点数值
  6. 梯度爆炸:批 64、学习率 0.2、损失求和不取平均,梯度冲上去再坍缩成零。
  7. 按模截断:超过阈值 5.0 就等比例缩回去;框架里为什么用取最小值而不是 if 判断(书架锚)。
  8. 边界与局限。
  9. 可带走的。
  10. 原文地图。

11 门:让信息沿时间近似直着走

主走查:同一条数字序列 [6, 7, 0, 0, 1, 0, 0, 0, 0, 0] 过三个门。

  1. 现象:上一章那条隐状态每步都被压一次 → 引出内部状态这条几乎只做加法的线。
  2. 三个门各管什么:写多少、忘多少、说多少。
  3. 主走查:候选状态 → 遗忘门乘旧 + 输入门乘新 → 输出门乘压缩后的状态。
  4. 同一批实验换成门控版:各长度稳定在 0.4 左右,每个长度都优于上一章那条线。
  5. 书里的热图说明了什么、没说明什么:遇到 0 时输入门稳定、数字 1 出现后遗忘门部分维度下降。
  6. 案例前半:影评二分类,25 000 条,截到 256、按批补齐、记下真实长度。
  7. 案例后半:双向 + 掩码平均汇聚,训 3 轮、梯度截断 1.0,测试约 0.85。
  8. 边界与局限。
  9. 可带走的。
  10. 原文地图。

12 优化器:同一条路的五种走法

主走查:碗形函数 0.2x₁² + 2x₂² 从 (3, 4) 出发,五种走法各走一遍。

  1. 现象:同一个模型换个学习率就发散 → 引出这一章的三根杠杆。
  2. 批大小与学习率一起缩放:五组 (16, 0.01) 到 (256, 0.16),按回合看谁降得快,以及这个对照为什么不是单变量。
  3. 按历史梯度平方累积缩放步长:分母只增不减,走着走着就迈不动了。
  4. 换成滑动平均:分母可升可降。
  5. 惯性:方向一致就加速,方向打架就抵消。
  6. 主走查:两者合一,从 (3, 4) 出发的轨迹最顺滑。
  7. 三维鞍点:从 (0.2, 1.5) 出发跑 150 步,五种都绕开鞍点滚向 (1, 0),但快慢和摆动不同。
  8. 换到真拟合任务上再看一遍:Linear(2)、30 轮、批 64、均方误差,按迭代和按回合两张图,五种走法的名次。
  9. 学习率三段式:预热、余弦衰减、最低学习率(AdamW 挪到 14 章,这里不提)。
  10. 边界与局限。
  11. 可带走的。
  12. 原文地图。

13 起点与刻度:初始化与逐层规范化

主走查(第一处):一条 torch.normal(0, 0.1, [1,100]) 的随机输入走一遍 100→200→400→300→200→100 的网络,不训练,只看一次前向的逐层方差

  1. 现象:同样的网络同样的数据,换个起点就训不动 → 引出这一章。
  2. 三类起点:随机、拿别人训好的、按先验固定。
  3. 主走查 ①:按输入输出维度缩放的高斯起点,四层方差 0.005416 / 0.003292 / 0.003820 / 0.004489。
  4. 主走查 ②:换成同一套缩放的均匀起点,0.005596 / 0.003397 / 0.004084 / 0.005171——同一量级。
  5. 第二处走查:换网络也换数据(2→300→500→700→400→1、300 条弯月按 200/100 切、批 10、学习率 0.005、100 轮),缩放起点对不缩放起点的两条损失曲线。
  6. 逐层规范化:沿批维拉回还是沿特征维拉回。
  7. 沿批维那一版的两组数:不规范化时 (0.688, −0.806) / (18.35, 15.49),规范化后回到 (0, 1) 附近;给不同层指定不同缩放平移,第 0 层出来均值 3、标准差 1,第 3 层均值 2、标准差 5。
  8. 训练时累积、推断时改用:50 次前向后滑动均值 (−0.633, 0.176)、滑动方差 (149.98, 267.16)。
  9. 沿特征维那一版:没有双模式,小批量下更稳。
  10. 边界与局限:书外会撞见的名字。
  11. 可带走的。
  12. 原文地图。

14 让它别把训练集背下来

主走查:200 条训练 + 100 条测试的弯月数据,一个三层网络训 50 000 步,四种配置的成绩。

  1. 现象:训练集 0.91、测试集 0.71 → 引出这一章。
  2. 进来时以为加惩罚项就一种写法,系数大点小点而已 → 出去时知道取绝对值之和会把一部分参数直接压到 0(等于顺手筛特征)、取平方和只是把所有参数一起往小里拽;代码上只改两处;主走查第二格 0.86 / 0.77。
  3. 换个作用位置:每步更新前先把参数整体缩小一点;主走查第三格 0.845 / 0.75。
  4. 训练时随机关掉一部分神经元:掩码、放大 1/(1−p)、推断时全开;名字挂在句末(nn.Dropout、暂退法);主走查第四格 0.855 / 0.76。
  5. 四组数并排,以及决策边界图看到的差别。
  6. 解耦权重衰减与 AdamW:最朴素更新下两者等价、自适应优化器下不等价,这正是那个版本出现的原因(书架锚)。
  7. 边界与局限。
  8. 可带走的。
  9. 原文地图。

15 注意力:先挑再算

主走查:this great science fiction film is really awesome 八个词的注意力权重。

  1. 现象:平均汇聚把「great」和「the」同等对待 → 引出打分。
  2. 打分函数两种写法:先过一层非线性再打分,还是直接做内积。
  3. 补齐位置怎么办:先置成一个极小的负数,归一后自然变成 0。
  4. 主走查:八个权重 0.0935 / 0.2561 / 0.0858 / 0.1134 / 0.0907 / 0.0906 / 0.0928 / 0.1771——great 和 awesome 最高。
  5. 三组成绩并排:不加 0.86064、加性 0.86488、点积 0.86936。
  6. 以为查询向量只能从外面给 → 知道让每个位置自己当查询就是自注意力;加三组可学习的投影,并把打分除以这份向量维度的平方根(维度越高内积方差越大,不除会落进压平区)。
  7. 切成 M 份各看各的:多头;这时才补一句「切成 M 份之后,上一节说的维度指的是每个头的维度」;两条长度 1 和 2 的序列,权重 [1, 0] 与 0.519 / 0.481。
  8. 三组成绩再并排:多头版 0.86520,介于加性和点积之间;书里自己给了解释。
  9. 边界与局限。
  10. 可带走的。
  11. 原文地图。

16 Transformer 编码器:把两句话拼成一句来判

主走查:「什么花一年四季都开」和「什么花一年四季都是开的」拼成 23 个位置,id 串 101 … 102,标记 11 个 0 + 12 个 1。

  1. 现象:A「什么花一年四季都开」、B「什么花生一年四季都开」、C「哪些花可以全年开放」——字面上 A 像 B,意思上 A 像 C。
  2. 拼接模板:开头一个句子特征位、中间和结尾各一个分隔符。
  3. 主走查:23 个位置的 id 串与 0/1 标记(书里原样打印过这一串)。
  4. 三种编码相加:词的意思、它在第几位、它属于第几句。
  5. 位置怎么编:一组频率不同的正余弦曲线,取值落在 [−1, 1]。
  6. 一个组块里有什么:多头自注意力 → 相加再拉回刻度 → 逐位前馈 → 再来一次。
  7. 主走查末步:取第 0 个位置的向量过分类头;训 3 轮,测试 0.66485;书里自己解释了为什么只有这个数。
  8. 另一条走查(预测):「电脑怎么录像?」对「如何在计算机上录视频」——20 个位置、9 个 0 + 11 个 1,书里没打印这一串的具体数值,只给了预测标签 1
  9. 热图看到什么:句子特征位与「计」「视」「像」「何」关联紧密。
  10. 边界与局限。
  11. 可带走的。
  12. 原文地图。

17 现代 Transformer 改了什么(全章书外说法最多,每条配锚)

主走查:同一个组块,从书里那一版改到大模型里那一版,逐处对照。

  1. 现象:书里这一版和你今天打开的 Llama 源码对不上 → 引出这一章。
  2. 规范化挪到残差之前:前置版训练稳、后置版上限高。
  3. 均方根规范化:砍掉减均值那一步(书架锚)。
  4. 门控前馈层:两个投影变三个(书架锚)。
  5. 旋转位置编码:不加到输入上,而是把查询和键在平面上转一个角度;书里给的四维例子。
  6. 少数几组键值被多组查询共用(书架锚)。
  7. 三种架构范式,以及为什么大模型偏向只留解码器那一支。
  8. 混合专家:一组小前馈层加一个路由器,每个词元只走 1~2 个;书里那组路由打分是为演示编的
  9. 长上下文:算法层的稀疏注意力与系统层的分块 + 在线归一。
  10. 边界与局限。
  11. 可带走的。
  12. 原文地图。

18 图:节点数可变、邻居数不定

主走查:34 个节点、78 条边的空手道俱乐部,只给 2 个标签。

  1. 现象:社交网络、分子、引用网络都不是规则的方阵 → 引出图。
  2. 三种存法:邻接矩阵、边列表、邻接表,以及各自的开销。
  3. 主走查前半:34 节点、156 条有向边、平均度 4.59、邻接矩阵占 4 624 字节。
  4. 消息传递三步:造消息、合邻居、更新自己。
  5. 图卷积:按度数归一后求和;主走查:只给 2 个标签训 200 轮,34 个点里对 33 个(0.9706)。
  6. 另外三种:采样加聚合、给邻居学权重、单射聚合加多层感知器。
  7. 四种并排:0.9706 / 0.9706 / 0.8824 / 0.9118;换五个种子的均值方差 0.96 / 0.81 / 0.89 / 0.66。
  8. 堆深了会怎样:2 / 4 / 6 / 8 层的成绩 0.9706 / 0.9412 / 0.9118 / 0.5294,余弦相似度 0.7177 / 0.5280 / 0.7596 / 1.0000。
  9. 三条缓解思路,以及带直连边的六层版本回到约 0.88。
  10. 边界与局限。
  11. 可带走的。
  12. 原文地图。

19 图上的另两类任务

主走查:同一张空手道图挖掉 30% 的边,预测它们本来连没连。

  1. 现象:「可能认识的人」不是给节点贴标签 → 引出链接预测。
  2. 编码器加解码器:图神经网络编成向量,内积打分。
  3. 负采样:正样本 78 条、负样本几百倍,每轮重采同样多的不存在的边。
  4. 主走查:切出约 23 条测试边,四个检查点的曲线下面积 0.5501 / 0.6238 / 0.5709 / 0.7694。
  5. 为什么不用准确率:大多数「边」本来就不存在。
  6. 图级任务:多一步读出,把所有节点压成一张图的表示。
  7. 真实数据集:2 708 篇论文、10 556 条边、140 个训练标签,两层图卷积测试 0.8120;三条基线并排 0.58 / 0.68 / 0.81 / 0.83。
  8. 蛋白质图二分类:1 113 张图按 8:1:1 切,批 64,混淆矩阵 43 / 25 / 10 / 34,曲线下面积 0.768。
  9. 边界与局限:书里为了讲清楚用的是稠密写法,大图上装不下。
  10. 可带走的。
  11. 原文地图。

20 从零搭一个能写字的模型

主走查:同一个提示词「ROMEO:」在五个训练阶段的输出。

  1. 现象:一个只会「猜下一个字」的模型,怎么会写出成段的话 → 引出自回归。
  2. 训练目标就是错开一位:输入前 T 个,目标后 T 个。
  3. 怎么切字:字符级最简单,子词才是工业做法;书里那 30 次合并的顺序(th → the → ou → at …),以及 Shakespeare 从 11 个词元降到 6 个(书架锚:每轮挑最高频那一对)。
  4. 因果掩码:不加就等于抄答案。
  5. 主走查:1 500 步,五个检查点的验证损失 2.69 / 2.21 / 1.94 / 1.78 / 1.72 与对应的输出片段。
  6. 这个数好不好:随机起步约 4.4(理论均匀基线 log 65 ≈ 4.17),数据熵下限约 0.9,压到 1.7 是均匀基线的 41%。
  7. 怎么采样:贪心、温度、前 k、核采样各自的毛病;缓存历史键值把每词元代价从平方降到线性(书架锚:现成实现直接调框架的融合注意力)。
  8. 边界与局限:1M 参数学到的是统计规律,不是语义;书里自己说了。
  9. 可带走的。
  10. 原文地图。

21 从「会写」到「会办事」

主走查:同一个模型,四步各改一处——加低秩旁路、只在回答上算损失、给偏好信号、让它去调工具。

  1. 现象:让它「用一句话概括」,它继续写独白 → 引出微调。
  2. 全量改一遍代价多大:7B 全量约 80 GB,只训低秩旁路约 16 GB。
  3. 低秩旁路长什么样:主干冻住,旁边挂一条先降到 r 维再升回去的窄路;7.0B → 8.39M(0.120%);挂到书里那个小模型上是 0.025M / 0.838M = 2.93%。旁路的第二个矩阵初始化成全 0(书架锚)。
  4. 主走查 ①:大小写转换玩具任务,133 步内损失从 7 降到 0.4 以下。
  5. 只在回答上算损失:提示词那一段的目标位填成一个忽略标记(书架锚)。
  6. 标准答案里为什么没有「哪种更好」的信号:人给的两两优劣 → 奖励模型 → 强化学习那条三步老路(书架锚:工程实现)。
  7. 一步的新路:把三步压成一个对比损失,参考模型冻住不动(书架锚:工程实现里那一行)。
  8. 让它去调工具:想 → 做 → 看,循环到给出答案为止;停止条件与兜底(书架锚)。
  9. 先查资料再答:切块、编码、检索、拼回提示词;分块与重叠(书架锚两条)。
  10. 边界与局限。
  11. 可带走的。
  12. 原文地图。