大语言模型技术指南:预训练到底在学什么?语料、tokenizer、目标函数与 scaling law 详解
大语言模型技术指南:预训练到底在学什么?语料、tokenizer、目标函数与 scaling law 详解
前一篇我们把 Transformer 这块地基先搭起来了。
如果说上一篇回答的是:
为什么今天的大语言模型大多都建立在 Transformer 之上?
那么这一篇要继续往下拆的,就是另一个经常被说烂、但其实很多人并没有真正搞明白的问题:
预训练到底在学什么?
很多人会顺口说,大模型就是“拿海量语料去做 next token prediction”。
这句话当然没错,但它实在太短了,短到很容易让人误以为:
-
预训练就是“喂数据”
-
目标函数就是“猜下一个词”
-
数据越多越好
-
模型越大越好
-
只要堆算力,能力自然就会出来
可真实情况远没有这么简单。
因为预训练真正牵涉的是一整条链路:
-
语料从哪里来,怎么清洗,怎么配比
-
tokenizer 到底怎么把文本切成 token
-
next token prediction 为什么能学出世界知识和推理能力
-
为什么不是无限堆参数,而是要考虑数据量和训练 token 数
-
scaling law 到底在告诉我们什么
-
到部署和微调阶段,预训练时的选择又会留下哪些“后遗症”
所以这篇文章,我想把预训练最值得真正理解的几个问题讲透:
-
预训练的本质到底是什么
-
语料质量为什么和模型上限直接相关
-
tokenizer 为什么不是一个小配件,而是能力边界的一部分
-
next-token prediction 为什么能学出这么多能力
-
scaling law 为什么改变了大模型训练思路
-
从工程角度看,预训练最贵、最难、最容易踩坑的点在哪
如果这篇吃透,后面再去看:
-
指令微调
-
RLHF / DPO
-
长上下文扩展
-
LoRA / QLoRA
-
多模态预训练
你会清楚很多。
一、先说结论:预训练不是“背答案”,而是在学一个压缩后的世界模型
很多初学者第一次听到“预测下一个 token”时,都会本能觉得:
“这不就是高级版自动补全吗?”
从表面任务上看,确实像。
但如果你只把预训练理解成自动补全,就会低估它真正学到的东西。
因为要把下一个 token 预测得足够好,模型就必须在内部逐渐学会很多更底层的结构:
-
语言统计规律
-
句法结构
-
语义关联
-
知识共现关系
-
文档组织模式
-
代码语法与 API 调用习惯
-
某些弱形式的推理模式
换句话说,模型不是在显式背“标准答案”,而是在通过大规模压缩预测任务,学一套对世界和语言的内部表示。
所以更准确的说法应该是:
预训练是在用“预测任务”逼模型学会语言、知识和结构的分布。
这也是为什么 next-token prediction 虽然形式简单,却能长出很复杂的能力。
二、为什么大模型训练第一步不是调参数,而是找语料
很多人以为模型训练最核心的是:
-
选架构
-
选优化器
-
设学习率
-
配多少卡
这些当然都重要。
但在真正的大模型训练里,语料本身往往才是第一资源。
因为模型最终能学到什么,本质上受它看过什么、看得多不多、看得干不干净直接影响。
你可以把语料理解成模型的“经验来源”。
经验来源如果有问题,再好的架构也救不回来。
语料至少决定三件事。
1)知识覆盖范围
如果训练数据里几乎没有法律文本,那模型的法律理解就很难强;如果代码语料占比高,代码能力通常更容易起来。
2)语言风格和表达习惯
语料偏论文、偏论坛、偏百科、偏代码仓库,模型最后说话方式和组织结构都会受影响。
3)噪声上限
如果脏数据、重复数据、模板垃圾、低质量机翻、SEO 农场内容太多,模型就会把这些坏模式也学进去。
所以大模型训练并不是“能抓到多少网页就抓多少网页”,而是要做很重的数据治理。
三、预训练语料通常来自哪些地方?
虽然不同团队的数据策略差很多,但常见来源大致有这些:
-
通用网页文本
-
新闻和百科
-
论坛、问答、博客
-
学术论文与技术文档
-
书籍与长文档
-
代码仓库
-
多语言平行或非平行文本
-
结构化转文本的数据
如果是多模态模型,后面还会加上:
-
图文对数据
-
OCR 文档
-
表格、图表、截图等视觉文本混合内容
这里最容易被忽视的一点是:
不同来源不只是“数量不同”,而是会把模型往不同能力方向上拉。
比如:
-
代码数据会显著影响补全、修 bug、工具调用风格
-
数学和论文语料会影响长链条说明和术语表达
-
对话和问答语料会影响 instruction-following 的先天基础
-
高质量长文档会影响模型维持长程结构的能力
所以训练数据配比,本质上就是能力分配表。
四、为什么“数据清洗”不是可选项,而是核心工程
很多非训练方向的人会低估数据清洗,觉得那只是前处理。
实际上,它几乎决定预训练值不值得烧那笔钱。
因为互联网原始语料的问题非常多:
-
大量重复
-
页面模板噪声
-
导航栏、广告、脚本残留
-
低质量机翻
-
错别字、乱码、截断文本
-
色情、暴力、违法违规内容
-
极端立场或错误事实堆积
-
自动生成垃圾内容
如果不清洗,模型就会把这些模式也吸进去。
常见清洗动作包括:
-
去重
-
语言识别
-
文本质量打分
-
文档长度过滤
-
特殊字符和乱码过滤
-
PII / 敏感信息处理
-
黑名单域名剔除
-
分类采样与重加权
这里有一个非常重要的现实:
预训练最贵的不只是 GPU,还是你有没有高质量数据管线。
因为低质量数据不只是“浪费一点训练 token”,而是会直接污染模型分布。
五、tokenizer 到底是什么?为什么它不是小工具,而是模型输入世界的切刀
很多初学者会觉得 tokenizer 就是“分词器”,可有可无。
实际上,它远比这个重要。
Tokenizer 的作用,是把原始文本切成模型能处理的离散 token 序列。
比如一句话:
Transformer changed NLP forever.
在送进模型之前,不会直接以“字符串”形式被理解,而是会先被 tokenizer 切成 token,再映射成 id。
这件事为什么重要?
因为 tokenizer 决定了:
-
什么样的文本片段会被当作基本单元
-
一个句子会被切成多长
-
哪些语言更省 token,哪些语言更吃亏
-
代码、数字、符号、公式会被怎样拆分
-
长上下文预算到底够不够用
所以 tokenizer 不是外围组件,它实际上参与定义了模型“如何看世界”。
六、为什么不同语言和代码,对 tokenizer 特别敏感
如果 tokenizer 设计不合理,会出现很多实际问题。
1)某些语言 token 过碎
比如中文、日文、代码、数学表达式,如果切分策略不合适,可能导致原本很短的一段内容,被切成特别多 token。
结果就是:
-
上下文更快被耗尽
-
训练和推理成本升高
-
模型更难捕捉稳定片段
2)代码结构被切坏
如果代码中的关键模式、API 名、缩进或符号组合被切得很碎,模型学代码分布会更困难。
3)数字和特殊符号泛化变差
比如日期、金额、长数字串、版本号、路径名、命令行参数,这些如果切分不合理,模型在工程场景下的稳定性会受影响。
所以很多强代码模型、多语言模型,都会特别重视 tokenizer 设计和词表覆盖。
七、预训练最常见的目标函数:next-token prediction
现在主流大语言模型里,最常见的训练目标就是:
给定前文,预测下一个 token。
例如一句话:
Deep learning is changing the world
模型看到前面的 token,要尽量把下一个 token 预测对。
训练时不是只对一句话最后一个位置算 loss,而是对整段序列中很多位置一起算。
这件事表面看很简单,但为什么它这么有效?
因为如果模型想把下一个 token 猜准,它就不得不学会:
-
哪些词常一起出现
-
哪些句法结构更自然
-
哪些事实搭配更常见
-
哪种上下文接下来更可能出现什么内容
-
某些任务里应该先推什么中间步骤
所以 next-token prediction 虽然形式统一,但能逼出非常广的能力。
八、为什么“只做预测下一个 token”也能学出知识和推理?
这其实是很多人最困惑的点。
直觉上会觉得:
“只是猜词,怎么会学出世界知识?”
关键在于,大规模文本本身就把世界知识和推理痕迹编码进去了。
比如当模型大量看到这些模式:
-
“巴黎是法国的首都”
-
“水在 1 个标准大气压下 100 摄氏度沸腾”
-
“Java 中 ArrayList 底层是动态数组”
-
“当 X > 0 时,函数单调递增”
它并不是显式建立一张知识图谱,而是在参数里逐渐把这些统计关系压缩下来。
更进一步,当训练数据中大量存在:
-
解释型文本
-
解题步骤
-
代码推演
-
论文式论证
-
问答结构
模型也会学习到某些“生成过程模式”。
这不等于它像人一样理解世界,但它确实会在参数空间里形成相当强的结构性表示。
所以你可以把预训练看成一种非常大规模的分布压缩,而不是死记硬背。
九、预训练时最容易被误解的一件事:不是参数越大就一定更强
大模型时代大家都很容易被参数规模吸引。
-
7B
-
14B
-
32B
-
70B
-
671B
参数当然重要。
但预训练领域一个关键认知是:
模型规模、数据量、训练 token 数和计算预算必须一起平衡。
如果模型很大,但训练 token 明显不够,它就可能没有被充分训练好。
相反,一个相对小一点、但训练得更充分、数据质量更高的模型,在很多任务上完全可能打过更大的模型。
这也是 scaling law 变得关键的原因。
十、scaling law 到底在说什么?
如果用最朴素的话来讲,scaling law 想说明的是:
模型效果不是随机上涨的,而是会随着模型参数、数据量、训练计算量的增加,呈现某种相对稳定、可预测的改善规律。
这件事为什么重要?
因为它把“大模型训练”从某种拍脑袋堆料,逐步变成了更可规划的工程。
团队可以开始问:
-
如果我有这么多算力,参数做多大更划算?
-
数据 token 应该准备多少才不浪费模型容量?
-
是先加模型,还是先加数据,收益更高?
-
训练到多少 token 时边际收益开始下降?
这些问题背后,其实都是 scaling law 在起作用。
十一、为什么 Chinchilla 思路会影响后来很多训练策略
早期很多团队更偏向“大模型优先”,觉得参数越大越好。
但后来一个重要趋势是:
与其只盲目加参数,不如让模型和训练 token 更匹配。
Chinchilla 这条线带来的关键启发就是:
-
很多模型其实是“参数大了,但没喂够数据”
-
在固定算力下,适当减小模型、增加训练 token,整体效果可能更优
这件事直接改变了后面很多训练配置的思路。
所以当你今天看一个模型时,不能只问它多少参数,还要问:
-
它训练了多少 token
-
数据质量怎么样
-
训练是否充分
-
是否存在明显欠训练或过度堆料的问题
这比单独看参数规模靠谱得多。
十二、从工程角度看,预训练最贵的成本到底是什么
很多人第一反应会说:GPU。
对,但不完整。
如果从完整工程链路看,预训练至少有四类大成本。
1)算力成本
包括:
-
GPU / TPU 采购或租用
-
多机多卡通信
-
长时间训练稳定性
-
checkpoint 存储和恢复
2)数据成本
包括:
-
数据收集授权与治理
-
数据清洗、去重、打分
-
高质量领域语料的获取
3)工程成本
包括:
-
分布式训练框架
-
容错与监控
-
数据管线调度
-
实验管理
-
训练异常排障
4)机会成本
因为一次大规模预训练非常慢、非常贵,方向选错或者数据选错,回头成本很高。
所以真正做预训练,不是“跑个脚本”那么简单,而是高投入、高耦合的大工程。
十三、几个预训练阶段常见的关键参数,应该怎么理解
虽然预训练参数非常多,但入门阶段我建议你先抓最关键的一批。
1)训练 token 数
这是比“训练了多少轮”更重要的指标。
大模型训练里,更常看总 token 数,因为不同语料长度分布差异很大。
2)batch size
会影响训练稳定性、吞吐和优化行为。
通常真实工程里看的是 global batch size,而不只是单卡 batch。
3)learning rate
这是最敏感的超参数之一。
太大容易不稳,太小又学得慢、浪费算力。
4)warmup steps
很多大模型训练前期需要 warmup,让学习率慢慢升上去,避免一开始就把训练打崩。
5)sequence length
会影响:
-
每步计算开销
-
显存压力
-
模型能看到的局部上下文长度
6)vocab size
也就是 tokenizer 词表大小。
它会影响嵌入层规模、覆盖能力和切分效果。
这些参数没有脱离任务和预算的统一最优值,它们永远要结合:
-
模型规模
-
数据类型
-
硬件条件
-
训练目标
一起看。
十四、预训练阶段的选择,会怎样影响后续部署和微调
这点非常重要,但常被低估。
预训练不是“训完就过去了”,它会长期影响后面所有阶段。
1)tokenizer 设计会影响后续推理效率
如果某类内容天然更碎,后面部署时它就更费上下文和显存。
2)语料配比会影响模型先天偏好
比如代码能力、数学能力、多语言能力,很大程度上会留下预训练烙印。
3)预训练 context length 设计会影响后续长上下文扩展难度
不是所有模型都能低成本扩上下文。
4)数据噪声会影响对齐阶段上限
如果底座已经学进太多坏模式,后面指令微调和偏好优化往往只能部分修补。
所以预训练阶段的很多决定,后面都得继续买单。
十五、如果从部署视角反推,应该如何理解预训练质量
很多工程同学平时不直接参与预训练,但这不代表预训练和你无关。
因为你在线上看到的很多问题,根源往往就在底座训练阶段。
比如:
-
为什么某些模型中文 token 消耗异常高
-
为什么某些模型代码补全风格不稳定
-
为什么某些模型事实问答容易“会说但不准”
-
为什么某些模型长文档里结构保持能力差
-
为什么某些模型量化后掉点特别严重
这些问题表面上像推理或对齐问题,但很多时候都和预训练数据、tokenizer、训练充分性有关。
所以一个成熟的模型使用者,不能只看 benchmark,也要学会从预训练视角判断底座质量。
十六、最后总结:预训练真正学的,不只是“下一个词”,而是一整套语言和世界分布
如果只用一句话概括这篇,我会说:
预训练的形式是预测下一个 token,但它真正逼模型学到的是语言、知识、结构和任务模式的统计分布。
你这篇真正应该带走的,是下面这几个核心认识:
1)预训练不是简单喂数据,而是在大规模预测任务里学习世界与语言的压缩表示
2)语料质量和配比,几乎直接决定模型能力边界和表达风格
3)tokenizer 不是小配件,而是模型输入世界的切刀,会影响效率、覆盖和泛化
4)next-token prediction 看起来简单,但足够大的数据和模型下,它会逼出知识、结构和某些弱推理能力
5)scaling law 的价值,在于告诉我们模型、数据和算力要一起平衡,而不是只迷信参数规模
6)预训练阶段的很多选择,最终都会延续到后续微调、部署和线上表现中
从这里开始,你对大语言模型的理解,就从“知道 Transformer 长什么样”,进入到了“知道它为什么要这样被训练”。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)