一、先把第 13 讲留下的黑箱打开
第 13 讲把预训练讲成"把 Decoder-only Transformer,在海量文本上反复跑训练循环",但一直没有回答一个具体的问题:这些"海量文本"到底是什么?从哪来?长什么样?
第 13 讲结尾已经埋下了答案的方向:"训练语料里哪种语言、哪个领域、哪种观点占比更高,模型自然会在那个方向上更擅长、更倾向——这不是训练算法的偏差,是数据决定的必然结果。" 这一讲要把这句话展开讲透:数据的规模、质量、去重、以及现在越来越重要的合成数据和分阶段训练策略。
二、打个比方:厨师和食材
一位厨艺再精湛的厨师,食材是发霉变质的,也做不出一道能吃的菜——架构设计得再精巧(第 7–12 讲),训练算法再高效(第 6、13 讲),如果喂进去的数据本身质量低劣,模型学到的东西也好不到哪里去。这句话在这个领域有一个专门的说法:“垃圾进,垃圾出”(garbage in, garbage out)。
反过来,一个普通厨师,如果食材是顶级的,做出来的菜也不会太差。数据的质量,是决定模型上限的一个和架构同样重要、甚至更根本的因素——这就是这一讲要讲的全部内容的出发点。
三、数据这件事拆开来看
规模:为什么需要"海量"
第 4 讲讲过 n-gram 的数据稀疏问题:语言的组合空间是天文数字,训练数据覆盖得越广,模型见过的语言现象就越多,能够可靠泛化的范围就越大。虽然神经网络(第 5 讲起)用连续向量替代了离散计数,缓解了"完全没见过就束手无策"这个死穴,但见得越多、学得越稳这条基本规律并没有消失——数据规模依然是决定模型能力的核心变量之一,下一讲的 Scaling Laws 会把这件事变成一个可以定量讨论的规律。
现实中,训练数据的主要来源是大规模抓取的互联网文本(网页、书籍、代码、论坛讨论……),规模巨大,但质量参差不齐——这正是下一小节要处理的问题。
质量:不是所有文本都同样有价值
互联网上的文本充斥着噪声:重复的样板文字(网站的版权声明、Cookie 提示)、低信息量的内容(为了搜索引擎排名堆砌关键词的灌水文章)、格式错乱的残留(网页抓取时混进来的代码片段、乱码)。如果不加处理直接拿来训练,模型会把大量的"学习预算"浪费在这些没有价值的内容上。
⚠️ “质量"这个词本身没有一个客观、统一的定义——什么样的文本算"高质量”,很大程度上取决于希望模型具备什么能力:如果目标是让模型擅长专业写作,教科书和高质量文章的权重就该更高;如果目标是让模型理解口语和日常对话,论坛和社交媒体的内容反而不该被过滤掉。“怎么定义质量、怎么过滤数据"本身,已经是一种隐含的价值取舍,不是一个纯粹中立的工程决策——这条线索和第 1 讲"目标函数只管统计上合理"放在一起看,会发现:连"用什么数据训练"这个更早的一步,也带着人为的选择,不是中立的起点。
去重:同一段话不该被学十遍
互联网上,同一段内容会以极高的频率被重复——同一篇文章被无数网站转载、镜像站点内容完全一致、大量网页共享相同的模板文字。如果不处理,这些重复内容会在训练数据里被过度代表,产生两个后果:
训练信号被稀释到无意义的重复上:模型在这些反复出现的内容上花费的训练"注意力”,和它们本身携带的信息量完全不成比例——第 13 讲讲的交叉熵损失,会在这些高频重复的片段上被反复优化,挤占本该用来学习更多样内容的训练资源。
⚠️ 重复的数据还会加剧模型"死记硬背"某些片段的风险:一段内容如果在训练数据里出现的次数远超其他内容,模型对这段内容的记忆会比对其他内容更精确、更接近逐字复述——这既浪费训练资源,也可能带来意料之外的输出行为(比如逐字吐出训练数据里的某个片段)。去重(deduplication)——识别并删除高度重复的内容——是几乎所有严肃的预训练数据处理流程里必不可少的一步。
合成数据:当天然数据不够用时
第 4 讲讲过 n-gram 因为数据稀疏而束手无策的问题,在数据总量的层面已经被互联网规模的数据缓解了,但在某些具体的能力上,天然数据依然是稀缺资源:比如详细展示"一步步推理过程"的高质量数学解题示范,互联网上这类内容的绝对数量本就不多。
一个近年越来越重要的做法是:用已经训练好的模型,生成新的训练数据——比如让一个已经具备一定推理能力的模型,针对大量数学题生成详细的解题步骤,把这些生成的内容,作为新一代模型的训练数据。这叫合成数据(synthetic data)。
⚠️ 合成数据不是没有代价的免费资源。如果新一代模型主要在上一代模型生成的内容上训练,而不是在真实、多样的人类数据上训练,容易出现"模型坍缩"(model collapse)的风险——就像反复复印一份复印件,每复印一次,细节会进一步丢失、走样,多样性会逐渐收窄,某些原模型的偏差或错误也可能被放大、固化到下一代模型里。合成数据是对天然数据稀缺之处的有效补充,但不能无限制地替代真实、多样的原始数据。
多阶段训练:先博览群书,再精读重点
预训练不是把全部数据混在一起、从头到尾按同一个配方喂给模型,而是通常会分阶段、有策略地调整数据的构成:
早期阶段: 广泛、多样、规模巨大的数据 → 建立广泛的语言能力和世界知识基础
│
后期阶段: 提高高质量、有针对性数据的比例 → 在基础之上强化特定能力
(这个阶段常和学习率逐步调低同时进行,叫"退火")
⭐ “退火(annealing)” 这个说法,和第 6、10 讲提到的"学习率 warmup"(训练开始时学习率从小逐渐调大)方向相反——是训练接近尾声时,学习率逐步调低,同时数据配比也向更精炼、更高质量的内容倾斜。这个"先广后精"的思路,可以类比人类的学习过程:先博览群书打下广泛基础,再针对性地精读重点内容强化特定能力——这不是巧合的类比,两者背后是同一个直觉:广泛的基础让系统具备足够的覆盖面,精炼的强化让系统在关键能力上更进一步。
⚠️ 关于时效性:具体分几个阶段、每个阶段用什么配比、训练多久,这些是会持续演化、且因训练目标不同而不同的工程细节,不是这一讲要记住的重点。要抓住的是这个设计思路本身:预训练不是"一锅炖",数据的构成和配比是随训练进程主动调整的变量,不是一开始定好就一成不变的常量。
四、这一讲机制自带的代价
⚠️ “知识截止(knowledge cutoff)“是数据这一讲带来的必然结构性后果,不是一个可以被简单修复的 bug——训练数据是在某个特定的时间点之前收集的,训练完成之后发生的事情,模型没有任何天然的途径知道。这不是模型"偷懒"或者"设计缺陷”,是"知识来自训练数据、训练数据必然有一个采集截止时间"这条逻辑的直接后果。第 25 讲讲 RAG 时,你会看到这正是那一讲要解决的核心动机之一:用外部检索,在不重新训练模型的前提下,弥补这个结构性的时间局限。
⚠️ 过滤和去重都有代价,不是没有副作用的操作:过滤标准定得太严,可能意外删掉小众语言、小众领域里本就稀少、但确实有价值的内容(它们的格式、用词往往和主流数据差异更大,更容易被过滤规则误伤);定得太松,噪声又会重新混进来。这是一个需要持续权衡、没有一次性完美答案的工程问题。
五、和后面课程的关系
- **第 15 讲(Scaling Laws)**要把这一讲讲的"数据规模"变成一个可以定量讨论的变量——数据、参数、计算量三者变大,损失会怎么系统性地变化。
- **第 16 讲(SFT)**用的数据和这一讲完全不同:预训练用的是自监督的海量原始文本,SFT 用的是人工准备的指令-回答对(真正意义上的监督数据)——这一讲讲的"质量"“配比"这些问题,会在 SFT 阶段以另一种形式重新出现。
- **第 25 讲(RAG)**存在的核心动机之一,正是这一讲讲的知识截止问题——用检索弥补训练数据在时间和覆盖面上无法避免的局限。
六、本讲小结
- 模型的全部知识和倾向,都来自训练数据,没有任何独立于数据之外的信息来源——这是这一讲所有内容共同指向的核心结论。
- 规模依然重要(延续第 4 讲"见得越多学得越稳"的直觉),但质量同样关键,而"质量"本身没有客观统一的定义,怎么过滤数据已经是一种隐含的价值取舍。
- ⭐ 去重避免训练信号被无意义的重复内容稀释,也降低模型对特定片段"死记硬背"的风险。
- ⭐ 合成数据用模型自己生成的内容补足天然数据在某些稀缺能力上的不足,但过度依赖会有"模型坍缩”——多样性收窄、误差累积——的风险,类比反复复印一份复印件。
- 多阶段训练:早期用广泛多样的数据打基础,后期(“退火"阶段)提高高质量数据比例、同时降低学习率,强化特定能力——“先博览群书、再精读重点”。
- ⚠️ 知识截止是数据必然带来的结构性局限,不是 bug,第 25 讲的 RAG 正是为了弥补这个局限而存在。
思考题
- “质量没有客观统一的定义”——请举一个具体的例子:某一类文本内容,对"日常对话助手"这个目标来说是有价值的数据,但对"专业学术写作助手"这个目标来说可能反而是噪声,或者反过来。
- 为什么说"去重"能降低模型逐字复述训练数据某个片段的风险?如果一段内容在训练数据里出现了 1000 次而不是 1 次,直觉上模型对这段内容的记忆会有什么不同(可以联系第 6 讲:这段内容对应的梯度更新会被执行多少次)?
- 用"反复复印一份复印件"这个类比,解释"模型坍缩"具体是在担心什么——如果一代又一代模型都主要用上一代模型生成的合成数据训练,可能会在哪些方面出问题?
- 为什么说"知识截止不是 bug”?如果一个模型能够在不重新训练的情况下"知道"训练完成之后发生的事,这在第 13 讲讲的预训练机制里,是通过什么途径实现的,还是根本不可能通过预训练本身实现(提示:想想第 25 讲要讲的 RAG)?
- 结合本讲和第 13 讲结尾"数据分布决定模型性格"这句话,如果一个模型的训练数据里,某个特定观点或立场的内容被过度代表(不管是因为互联网上本来就这类内容多,还是因为过滤/去重环节的某种偏差),你觉得这会在模型的输出里以什么方式体现出来?这是训练算法的问题,还是数据的问题?