跳到主要内容

蒸馏——把剪掉的知识蒸回来

这一章讲三件事: 为什么「删哪块」的决定决定了恢复的成本和上限;三路信号合成的总误差(行话叫损失——机器答完与目标之间的差距;三份各是:硬标签——练习册的标准答案,软标签——老师的把握表,隐藏状态——中间步骤的状态)怎么配平;以及进阶技巧在什么数据量下才值得开。 第 02 章的蒸馏只对齐了最终输出;本章把「过程」也纳入教学——为此必须先解决一个新问题:老师和学生层数不一样,中间层怎么一一对齐?

1. 这一章讲什么

第四、五章的剪枝必然掉能力,本章负责找回来。全书的方法论顺序在这里最明显:恢复不是从训练循环开始的,是从决定删哪块开始的——作者复盘自己最早的实验:同样删四块,按重要性删的模型恢复耗时明显更短1

它在全书链条里的位置: 它是剪枝(第四、五、八、九章)的通用善后,也是管线里唯一一章「同时消费前两章成果」的:删块用第四章的选法,恢复数据配平用第五章的教训。特化(第七章)则在它之后,免得在受伤的模型上做微调。

2. 顶层全景

第一步 选块(决定恢复的成本与上限)
四种策略同台:数据驱动散选 / 连续选 / 删尾 / 删尾保尾
→ 起点保留 78.6% 的那个,永远先到终点
第二步 对齐(老师 18 块,学生 14 块)
三种层映射:uniform(按比例)/ last(贴尾部)/ original(原索引)
第三步 训练(三信号复合损失)
total = α·硬标签 + β·软分布 + γ·隐藏状态对齐
默认 0.4 / 0.4 / 0.2;温度软化软分布;Skew KLD 与 FDD 按数据量加开
验收:困惑度 + 能力保留率 + LAMBADA(最难恢复的单项)

3. 核心原理

3.1 选块实验:起点决定终点

实验设定:gemma-3-270m,18 块删 4(约 22% 深度),恢复教材用 Cosmopedia——Hugging Face 出品的高质量合成数据(机器生成的教材),无噪声、四种文体混装2。四种删法先比「剪完还没恢复」的惨状,再比「2 千条样本、5 遍恢复」后的回升3:

删法删掉的块剪后困惑度(老师 13.38)剪后能力保留恢复后保留
数据驱动散选[9,8,14,16]126(约 9 倍)78.6%86.7%
数据驱动连续选[8,9,10,11]490(约 36 倍)65.8%86.4%
删尾 4 块[14-17]26466.6%82.4%
删尾保尾 2 块[12-15]46467%86%

两个结论。第一,保尾假设在这模型上垫底:保住末两块,剪后困惑度反而 464——如果删掉的中层本身关键,保尾巴救不了你4第二,恢复增益与起点成反比:连续选恢复增益 +31.31 个百分点(起点太惨),散选只 +10.31——但散选的终点最好。「起点好的学生,不用补那么多课」5

工程红线顺手带走:老师要冻结(锁住不许动)、关梯度;学生从老师深拷贝来,记得解冻——不解除冻结,训练静默失败,一个参数都不会动6。数据要切 90/10 的训练/验证:拿训练数据验恢复,测出的是背诵不是抽象7

3.2 层映射:14 块的学生怎么跟 18 块的老师对暗号

要对齐中间层,先回答「学生的第 i 块跟老师的第几块学」。三种映射8:

  • uniform(按比例): 学生第 7 块(正中)对老师第 9 块(也差不多正中)。学生能吸收老师全深的养分;
  • last(贴尾部): 学生整体后移四位,学生第 0 块对老师第 4 块。赌「最精炼的知识在深处」;
  • original(原索引): 学生每块对老师里原来就在那个位置的块,被删的位置留空。保住剪枝前的对应关系。

3.3 主走查:一轮蒸馏训练里发生什么

走查对象:同一批(比如 8 条一起送)训练文本。 六步,每步带具体的数:

① 学生前向:算出每个位置上「下一个词」的分数(logits),
顺带要求返回每一块的中间状态(γ>0 时才要,省显存)
② 老师前向:同样的事,但关梯度——显存直接省一半[^9]
③ 硬标签损失(α 份):学生的 logits 错位一格跟答案对齐
——logits 第 0 位预测第 1 个词,所以 logits 去尾、标签去头
("Work hard play hard" 要预测的是 [hard, play, hard, <eos>])[^10]
padding 位标成 -100,不计损失(不许学补位)[^11]
④ 软标签损失(β 份):两个分布算 KL 散度,再乘温度的平方
——除以温度会让梯度变小,乘 T² 补偿回来[^12]
⑤ 隐藏状态损失(γ 份):按层映射逐对取中间状态,
各自归一化后算余弦,损失 = 1 − 相似度,对所有对取平均[^13]
⑥ 合计:total = α·③ + β·④ + γ·⑤,反向传播只更新学生

温度——软化打分的旋钮——在 ④ 里干的事,值得单独看一眼。 输入「Work hard play」,老师原装的分布:hard 94.5%、well 3.7%、good 0.3%、harder 0.2%——照这个学,学生只知道「hard 对」。

把 logits(每个候选词的原始打分)除以温度 2.0 再 softmax:hard 掉到 23.9%,well 升到 4.7%,good 1.3%,harder 1.2%——学生第一次看见:老师也认真考虑过别的词。「答案表里老师知道的第二名」正是软标签的全部价值9

为什么隐藏状态只给 20% 的权重? 这些中间表示当初训练时只是为了「合力预测下一个词」,并不是设计来单独给人看的;给 20%,是借老师消化过的语义结构给学生托底,又不至于把它捆死在老师的思考路线上10。什么时候调高?当中间表示本身就是产品——embedding 模型、吃向量的分类器(拿数值特点判类别的部件)——γ 提到 0.3-0.4。

纯生成模型(只管往下写文字的)反而可以压到 0.1 甚至 0,让学生自由发挥11

为什么三个权重加起来要等于 1? 不是硬性规定,是读数习惯:加起来超 1 等于放大梯度、训练发飘,不足则学得没劲;动一个,记得另一个往回补12

成绩单(2K / 15K / 40K 条 Cosmopedia,老师对照): 老师困惑度 13.38→12.96→12.91;剪后残模型 125.6,能力保留 78.6%,LAMBADA 只有 0.177(老师 0.43)。只开 α+β(纯标签蒸馏):18.86 → 12.65 → 11.73——15K 时困惑度反超老师(12.96),40K 能力保留 90.1%13。加上隐藏状态对齐与进阶件(FDD+Skew KLD):40K 困惑度 11.54,比纯标签再低 0.19,代价是约 15% 的额外训练时间,能力保留几乎不动14LAMBADA 全员没有恢复满:最好的也只到 0.335——长程语言是删层伤得最重、也最难完全复原的能力,这条结论在第九章会再次出现15

3.4 进阶件:什么时候值得开

Skew KLD(修正分布落差)。 刚剪完的学生分布离老师很远:老师给「France」70%,残废的学生只给 30%,标准 KL 会产生过陡的梯度,逼学生一步到位地装老师。Skew 的改法:不跟老师直接比,跟一个混合目标比——90% 老师 + 10% 学生(skew_alpha=0.1)。学生差的时候,那 10% 的「自己的声音」缓冲惩罚;学生变好,混合目标自动收紧16

FDD(Feature Dynamics Distillation,对齐变化率)。 隐藏状态对齐问的是「你的第 5 层像不像我的第 9 层」;FDD 问的是**「你从第 5 层到第 6 层的变化方向,像不像我从第 9 层到第 10 层的变化方向」**——把相邻两层的状态差(delta)拿来算余弦。状态可以不同,处理信息的「方式」要一致17

什么时候开?书里的经验刻度:<10K 条样本,两个都不开,基础蒸馏一样好还便宜;15K 起 Skew KLD 开始稳定占优;>30K 两个都开,困惑度优势随数据量继续放大18反过来一句更重要:数据嘈杂或者块选错了,任何损失函数(就是上面那种总误差公式)都救不回来19

3.5 现成配置表

书里给了一张起点表(抄录要点,完整表见原文地图):

场景αβγSkewFDD
通用模型,数据 >30K0.40.40-0.20.10.1
通用模型,15K-30K0.40.40-0.20.10
通用模型,<10K0.40.40.200
激进剪枝(>20% 块)0.250.450.20.1-0.150.1
embedding/RAG 模型0.250.250.40.10.1-0.2
高质量任务数据0.50.30.100.1

温度的经验值:2.0 通用;老师分布特别尖(单 token 超 90%)时升到 2.5-3.5;老师本来就平,降到 1.0-2.020。与宽度剪枝完全兼容——宽度剪枝不动隐藏维,块级输入输出尺寸不变,对齐照常;先宽后深再蒸馏,可叠21

4. 作者的判断与证据

给了证据的: 四策略对比、三档数据量的完整表格全部来自作者在 A100 上的可复现实验(书里连跑一轮 KD 需要几分钟都写了);「纯标签蒸馏在 15K 以上反超老师」是从表中直接读出的事实。

书外 anchoring(行业对照): 本章的做法与 NVIDIA Minitron(2024)和 Mistral Ministral 3(2026)一致——这两家都发现蒸馏式恢复稳定优于普通微调,Mistral 甚至发现纯 logits 蒸馏目标好过任何混合(暗示硬标签可选);作者保留 α 是为了特定任务更早收敛(训练到成绩稳定、不再明显提升的状态)。层数映射上,NVIDIA 的经验是压缩不到一半用 uniform,删过半才轮到 last;注意 NVIDIA 说的「激进」是删 50%+,本书 270m 删 20% 就算激进——模型越大越扛删22。作者的社区挑战模型(gemma-3-270m-14L-distilled,A100 上 68 分钟)做到保留 89.5%、困惑度 10.85,当练习靶子23

5. 边界与局限

  • LAMBADA 恢复不满是系统性现象(0.177→0.32-0.335,老师 0.43),不是调参能解决的;对长文档任务要有心理预期。
  • 配置表是起点不是定律,作者原话:每个模型和数据集都有自己的脾气,数值要靠验证集调24
  • 恢复的天花板由选块决定,本章开头就是证据;蒸馏技巧不能倒推补救一次糟糕的剪枝。
  • 硬件口径: 主实验在 A100;T4 免费档可跑的是精简版,数字会浮动。
  • 进阶件的收益度量是困惑度;如果你的验收指标是任务准确率,γ/进阶件的取舍要重新算。

6. 可带走的

  1. 恢复成本在删块那一步就定了:起点保留多的学生,终点又好又便宜;
  2. 三种层映射:压缩不到一半用 uniform;别默认「贴着尾部学」最好;
  3. 三信号配平:硬标签教「答对」,软标签教「老师的犹豫」,隐藏状态教「思路」;生成模型 γ 可低,embedding 模型 γ 拉高;
  4. 温度不是生成参数,是教学参数:把 94.5% 软化,学生才看得见第二名;
  5. token shifting 与 -100:logits 去尾标签去头;padding 不许学;
  6. KL 损失乘温度平方——除法欠的梯度要还;
  7. 进阶件按数据量开关:<10K 全关;>30K 双开;数据差,啥都救不了;
  8. LAMBADA 是恢复的照妖镜:它恢复不满,说明长程能力最先受伤、最后痊愈;
  9. 蒸馏式恢复优于普通微调——这是 NVIDIA 和 Mistral 用生产管线背书的结论。

7. 原文地图

主题原书章原文位置
恢复始于选块6 Knowledge recovery through distillationtext/20-ch06-6-knowledge-recovery-through-distillation.txt:44(搜「significantly less training time」)
三信号预告6 Knowledge recovery through distillationtext/20-ch06-6-knowledge-recovery-through-distillation.txt:62(搜「intermediate blocks」)
四策略与实验设定6.1 Choosing what to prunetext/21-ch06-01-6-1-choosing-what-to-prune.txt:31(搜「22%」) · text/21-ch06-01-6-1-choosing-what-to-prune.txt:84(搜「Data-driven individual」) · text/21-ch06-01-6-1-choosing-what-to-prune.txt:19(搜「recovery ceiling」)
Cosmopedia 与冻结/解冻6.1 Choosing what to prunetext/21-ch06-01-6-1-choosing-what-to-prune.txt:135(搜「high-quality synthetic dataset」) · text/21-ch06-01-6-1-choosing-what-to-prune.txt:245(搜「Freezes all teacher parameters」) · text/21-ch06-01-6-1-choosing-what-to-prune.txt:677(搜「silent training failure」) · text/21-ch06-01-6-1-choosing-what-to-prune.txt:362(搜「90/10」)
剪后对比与恢复后对比6.1 Choosing what to prunetext/21-ch06-01-6-1-choosing-what-to-prune.txt:450(搜「126」) · text/21-ch06-01-6-1-choosing-what-to-prune.txt:506(搜「protection hypothesis」) · text/21-ch06-01-6-1-choosing-what-to-prune.txt:564(搜「86.7」) · text/21-ch06-01-6-1-choosing-what-to-prune.txt:620(搜「not a contradiction」)
三种层映射6.2 Aligning Teacher and Studenttext/22-ch06-02-6-2-aligning-teacher-and-student.txt:26(搜「uniform mapping」) · text/22-ch06-02-6-2-aligning-teacher-and-student.txt:57(搜「last mapping」) · text/22-ch06-02-6-2-aligning-teacher-and-student.txt:83(搜「original mapping」)
复合损失结构与配平6.3 Recovering the knowledgetext/23-ch06-03-6-3-recovering-the-knowledge.txt:84(搜「alpha * loss_task」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:106(搜「secondary stabilizer」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:112(搜「sum to 1.0」)
温度软化算例6.3 Recovering the knowledgetext/23-ch06-03-6-3-recovering-the-knowledge.txt:131(搜「94.5%」)
token shifting 与 padding6.3 Recovering the knowledgetext/23-ch06-03-6-3-recovering-the-knowledge.txt:187(搜「token shifting」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:200(搜「-100」)
软标签损失与 log 空间6.3 Recovering the knowledgetext/23-ch06-03-6-3-recovering-the-knowledge.txt:233(搜「temperature ** 2」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:251(搜「log space」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:264(搜「0.659」)
隐藏状态损失与权重取舍6.3 Recovering the knowledgetext/23-ch06-03-6-3-recovering-the-knowledge.txt:290(搜「10, 20, 30」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:352(搜「three mapping strategies」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:537(搜「semantic structures」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:556(搜「0.3 or 0.4」)
训练循环工程细节6.3 Recovering the knowledgetext/23-ch06-03-6-3-recovering-the-knowledge.txt:740(搜「approximately half」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:746(搜「embedding layer」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:752(搜「64 rows」)
三档数据成绩6.3 Recovering the knowledgetext/23-ch06-03-6-3-recovering-the-knowledge.txt:865(搜「0.177」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:876(搜「12.65」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:876(搜「11.73」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:949(搜「surpasses the teacher」) · text/23-ch06-03-6-3-recovering-the-knowledge.txt:961(搜「15% more training time」)
Skew KLD6.4 Advanced recovery techniques (FDD/ Skew KLD)text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:87(搜「steep gradient」) · text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:93(搜「90% teacher and 10% student」) · text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:140(搜「mixed_probs」) · text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:160(搜「softens the penalty」) · text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:172(搜「fewer than 10,000 samples」)
FDD 与结果刻度6.4 Advanced recovery techniques (FDD/ Skew KLD)text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:190(搜「rate at which」) · text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:286(搜「transformation vectors」) · text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:479(搜「0.19 points」) · text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:485(搜「hardest to fully recover」)
配置表与温度刻度6.5 Practical guidelines for knowledge recoverytext/25-ch06-05-6-5-practical-guidelines-for-knowledge-recovery.txt:37(搜「2.5-3.5」) · text/25-ch06-05-6-5-practical-guidelines-for-knowledge-recovery.txt:55(搜「15,000 or more samples」) · text/25-ch06-05-6-5-practical-guidelines-for-knowledge-recovery.txt:188(搜「Prioritize imitating」) · text/25-ch06-05-6-5-practical-guidelines-for-knowledge-recovery.txt:205(搜「hidden states are the final product」)
与宽度剪枝组合6.5 Practical guidelines for knowledge recoverytext/25-ch06-05-6-5-practical-guidelines-for-knowledge-recovery.txt:67(搜「remains intact」) · text/25-ch06-05-6-5-practical-guidelines-for-knowledge-recovery.txt:80(搜「recover lost knowledge」)
行业对照6.6 From paper to practicetext/26-ch06-06-6-6-from-paper-to-practice.txt:13(搜「2601.08584」) · text/26-ch06-06-6-6-from-paper-to-practice.txt:37(搜「consistently outperforms」) · text/26-ch06-06-6-6-from-paper-to-practice.txt:43(搜「any weighted combination」) · text/26-ch06-06-6-6-from-paper-to-practice.txt:61(搜「moderate compression ratios」) · text/26-ch06-06-6-6-from-paper-to-practice.txt:74(搜「larger the model」) · text/26-ch06-06-6-6-from-paper-to-practice.txt:107(搜「no loss function will fully compensate」)
挑战基线6.7 Hands-on labtext/27-ch06-07-6-7-hands-on-lab.txt:13(搜「10.85 perplexity」)

Footnotes

  1. 出处:「6 Knowledge recovery through distillation」第 44 段(text/20-ch06-6-knowledge-recovery-through-distillation.txt:44,搜「significantly less training time」)。

  2. 出处:「6.1 Choosing what to prune」第 31 段(text/21-ch06-01-6-1-choosing-what-to-prune.txt:31,搜「22%」)与第 135 段(text/21-ch06-01-6-1-choosing-what-to-prune.txt:135,搜「high-quality synthetic dataset」)。

  3. 出处:「6.1 Choosing what to prune」表 6.1 在第 404-495 行(text/21-ch06-01-6-1-choosing-what-to-prune.txt:450,搜「126」;text/21-ch06-01-6-1-choosing-what-to-prune.txt:452,搜「78.6」)与表 6.2 在第 518-609 行(text/21-ch06-01-6-1-choosing-what-to-prune.txt:564,搜「86.7」)。

  4. 出处:「6.1 Choosing what to prune」第 506 段(text/21-ch06-01-6-1-choosing-what-to-prune.txt:506,搜「protection hypothesis」)。

  5. 出处:「6.1 Choosing what to prune」第 620 段(text/21-ch06-01-6-1-choosing-what-to-prune.txt:620,搜「not a contradiction」)。

  6. 出处:「6.1 Choosing what to prune」第 245 行(text/21-ch06-01-6-1-choosing-what-to-prune.txt:245,搜「Freezes all teacher parameters」)与第 677 段(text/21-ch06-01-6-1-choosing-what-to-prune.txt:677,搜「silent training failure」)。

  7. 出处:「6.1 Choosing what to prune」第 362 段(text/21-ch06-01-6-1-choosing-what-to-prune.txt:362,搜「90/10」)。

  8. 出处:「6.2 Aligning Teacher and Student」第 26、57、83 段(text/22-ch06-02-6-2-aligning-teacher-and-student.txt:26,搜「uniform mapping」;text/22-ch06-02-6-2-aligning-teacher-and-student.txt:57,搜「last mapping」;text/22-ch06-02-6-2-aligning-teacher-and-student.txt:83,搜「original mapping」)。

  9. 出处:「6.3 Recovering the knowledge」第 131 段(text/23-ch06-03-6-3-recovering-the-knowledge.txt:131,搜「94.5%」)。

  10. 出处:「6.3 Recovering the knowledge」第 537 段(text/23-ch06-03-6-3-recovering-the-knowledge.txt:537,搜「semantic structures」)。

  11. 出处:「6.3 Recovering the knowledge」第 556-559 段(text/23-ch06-03-6-3-recovering-the-knowledge.txt:556,搜「0.3 or 0.4」;text/23-ch06-03-6-3-recovering-the-knowledge.txt:559,搜「freedom」)。

  12. 出处:「6.3 Recovering the knowledge」第 112 段(text/23-ch06-03-6-3-recovering-the-knowledge.txt:112,搜「sum to 1.0」)。

  13. 出处:「6.3 Recovering the knowledge」表 6.3 在第 807-931 行(text/23-ch06-03-6-3-recovering-the-knowledge.txt:865,搜「0.177」;text/23-ch06-03-6-3-recovering-the-knowledge.txt:876,搜「12.65」;text/23-ch06-03-6-3-recovering-the-knowledge.txt:876,搜「11.73」)与第 949 段(text/23-ch06-03-6-3-recovering-the-knowledge.txt:949,搜「surpasses the teacher」)。

  14. 出处:「6.3 Recovering the knowledge」第 961 段(text/23-ch06-03-6-3-recovering-the-knowledge.txt:961,搜「15% more training time」)。

  15. 出处:「6.4 Advanced recovery techniques (FDD/ Skew KLD)」第 485 段(text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:485,搜「hardest to fully recover」)。

  16. 出处:「6.4 Advanced recovery techniques (FDD/ Skew KLD)」第 87-93 段(text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:87,搜「steep gradient」;text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:93,搜「90% teacher and 10% student」)。

  17. 出处:「6.4 Advanced recovery techniques (FDD/ Skew KLD)」第 190 段(text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:190,搜「rate at which」)与第 286 段(text/24-ch06-04-6-4-advanced-recovery-techniques-fdd-skew-kld.txt:286,搜「transformation vectors」)。

  18. 出处:「6.5 Practical guidelines for knowledge recovery」第 55 段(text/25-ch06-05-6-5-practical-guidelines-for-knowledge-recovery.txt:55,搜「15,000 or more samples」)。

  19. 出处:「6.6 From paper to practice」第 107 段(text/26-ch06-06-6-6-from-paper-to-practice.txt:107,搜「no loss function will fully compensate」)。

  20. 出处:「6.5 Practical guidelines for knowledge recovery」第 37 段(text/25-ch06-05-6-5-practical-guidelines-for-knowledge-recovery.txt:37,搜「2.5-3.5」);配置表(table 6.5)在第 92-230 行(text/25-ch06-05-6-5-practical-guidelines-for-knowledge-recovery.txt:188,搜「Prioritize imitating」)。

  21. 出处:「6.5 Practical guidelines for knowledge recovery」第 67-80 段(text/25-ch06-05-6-5-practical-guidelines-for-knowledge-recovery.txt:67,搜「remains intact」)。

  22. 出处:「6.6 From paper to practice」第 13 段(text/26-ch06-06-6-6-from-paper-to-practice.txt:13,搜「2601.08584」)、第 37 段(text/26-ch06-06-6-6-from-paper-to-practice.txt:37,搜「consistently outperforms」)、第 43 段(text/26-ch06-06-6-6-from-paper-to-practice.txt:43,搜「any weighted combination」)、第 61 段(text/26-ch06-06-6-6-from-paper-to-practice.txt:61,搜「moderate compression ratios」)与第 74 段(text/26-ch06-06-6-6-from-paper-to-practice.txt:74,搜「larger the model」)。

  23. 出处:「6.7 Hands-on lab」第 13 段(text/27-ch06-07-6-7-hands-on-lab.txt:13,搜「10.85 perplexity」)。

  24. 出处:「6.5 Practical guidelines for knowledge recovery」第 7 段(text/25-ch06-05-6-5-practical-guidelines-for-knowledge-recovery.txt:7,搜「no magic formula」)。