预训练究竟发生了什么?
遮住下一个 token,猜它,猜错了就调整,重复一万亿次。一个极简的目标如何在海量规模下长出通用能力。
模型的能力几乎全部来自预训练。之后的每一个环节——指令微调、偏好训练——塑造的是行为,而不是构建能力。
它的目标简单到近乎荒谬。
训练目标
拿一段文本,给模型看一个前缀,让它预测下一个 token,和真实的对比,然后调整。
The cat sat on the ___ → 模型预测出一个分布 → 真实 token 是 ␣mat → 如果模型给 ␣mat 的概率很低,就调整参数把它调高。
不需要标签,不需要人工标注。文本自己提供答案,所以才能在一个任何人都标注不过来的语料库上训练。这也是它被称为自监督的原因。
关键在于,模型在每一个位置同时做预测,而不只是最后一个位置。一篇 1000 token 的文档,跑一遍就能提供 1000 个训练信号。
能力从哪来
下一 token 预测这样一个目标,为什么会产出一个通用的系统?这一点值得细想:想把这个任务做好,你需要一些你并没有主动要求的机制。
看看准确预测到底需要什么:
The keys to the cabinet ___→ 跨过一个插入语的主谓一致Marie told Ann that she ___→ 搞清楚 she 指的是谁247 + 158 = ___→ 真正的算术def is_prime(n): if n < 2: return ___→ 这个函数的语义The killer was revealed to be the ___→ 在工作记忆里装下整个剧情
查表做不到这些。要在全部人类文本上把预测误差压到最低,唯一的路径是在模型内部建立起语法、实体、因果、算术和代码语义的表征。
能力不是目标,而是目标逼出来的东西。
数据
语料库是可获取书面文本中很大的一部分:网页、书籍、代码仓库、工具书、论坛。
构成比绝对规模更重要。实验室在两个方向上投入很重:
过滤。 去掉模板化内容、垃圾信息和机器生成的垃圾。剩下文本的质量会显著影响最终能力。
去重。 重复段落导致的是记忆而不是泛化,还会虚增数据集体量,却不增加任何信息。
配比是刻意设计的。更多代码能提升推理能力,哪怕在非代码任务上——这个效应被反复观察到,很可能是因为代码要求精确的多步结构。语言比例决定多语言能力的强弱。而语料里什么占主导,就永久决定了 tokenizer 的合并决策。
规模,以及它带来的意外
三个量一起放大:参数、数据、算力。比例搞错就白跑——参数太多而数据太少,模型相对于自己的体量就是学不够的。
让整个领域转向的那个结果:某些能力不会随规模平滑提升,而是从无到有。多步算术、按不熟悉的格式执行指令、翻译训练中从未显式配对的语言对——这些能力在大模型上直接出现,在小模型上连雏形都没有。
同一个简单的东西堆得更多,就产生了质变。正是这个观察,让整个行业如此激进地追求规模。
预训练不会给你什么
一个助手。 预训练模型只会续写文本。你问它一个问题,可能会得到更多问题。基座模型 vs 对话模型 讲的就是这道鸿沟。
最新的知识。 知识截止线是硬性的,而且模型自己也不知道这条线划在哪。
可靠的事实性。 目标奖励的是「像样的续写」,而像样不等于正确。这就是幻觉的深层根源——它来自预训练本身,不是下游哪个环节出的错。
任何来源概念。 模型记住的一切都以统计结构的形式散布在参数里,没有哪份文档存着可供引用。
要点回顾
- 预训练在超大规模文本上预测下一个 token,用文本本身当标签。
- 通用能力涌现出来,因为准确预测本身要求语法、实体追踪、算术和代码理解。
- 数据构成和去重与数据量同样重要;更多代码能提升通用推理能力。
- 有些能力随规模突现,而不是平滑提升。
- 只有预训练,就没有助手行为、没有最新知识、也没有事实层面的保证。
下一篇: 「7B 参数」是什么意思?