大语言模型技术指南:预训练到底在学什么?语料、tokenizer、目标函数与 scaling law 详解

前一篇我们把 Transformer 这块地基先搭起来了。

如果说上一篇回答的是:

为什么今天的大语言模型大多都建立在 Transformer 之上?

那么这一篇要继续往下拆的,就是另一个经常被说烂、但其实很多人并没有真正搞明白的问题:

预训练到底在学什么?

很多人会顺口说,大模型就是“拿海量语料去做 next token prediction”。

这句话当然没错,但它实在太短了,短到很容易让人误以为:

  • 预训练就是“喂数据”

  • 目标函数就是“猜下一个词”

  • 数据越多越好

  • 模型越大越好

  • 只要堆算力,能力自然就会出来

可真实情况远没有这么简单。

因为预训练真正牵涉的是一整条链路:

  • 语料从哪里来,怎么清洗,怎么配比

  • tokenizer 到底怎么把文本切成 token

  • next token prediction 为什么能学出世界知识和推理能力

  • 为什么不是无限堆参数,而是要考虑数据量和训练 token 数

  • scaling law 到底在告诉我们什么

  • 到部署和微调阶段,预训练时的选择又会留下哪些“后遗症”

所以这篇文章,我想把预训练最值得真正理解的几个问题讲透:

  1. 预训练的本质到底是什么

  2. 语料质量为什么和模型上限直接相关

  3. tokenizer 为什么不是一个小配件,而是能力边界的一部分

  4. next-token prediction 为什么能学出这么多能力

  5. scaling law 为什么改变了大模型训练思路

  6. 从工程角度看,预训练最贵、最难、最容易踩坑的点在哪

如果这篇吃透,后面再去看:

  • 指令微调

  • 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 长什么样”,进入到了“知道它为什么要这样被训练”。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐