预训练不是往模型里存知识,而是把语料压进参数
很多人以为预训练是往模型里"存知识",像往硬盘里拷资料。拷进去多少,就能取出多少。
不是。预训练只做一件事:预测下一个词;知识是这件事的副产品,而且是有损的。
想明白这一点,幻觉从哪来、为什么必须上 RAG、为什么微调灌不进大量新知识,三个问题会一次性解释通。
先约定用词。本文说的"模型",指记录了海量参数的权重文件,加上让它能被正常推理的必要组件——结构定义与配置、tokenizer、对话模板这些,而不是单独一个权重文件。
一、"知识储量"这个说法错在哪
数据库的直觉是:知识一行行存着,给个键就能取出准确的那一行。很多人把这个直觉套到模型上,于是默认它内部有一张巨大的表。
模型没有"查表"这个动作。它做的是根据上文,算出下一个 token 的概率分布,再从中采样。所谓"回答",是这条概率链一路走出来的结果。
这个差别带来一个直接后果:模型不会主动说"我不知道"。数据库查不到会返回空,模型查不到会返回一个最像答案的句子,而且语气和真答案一样稳。
优化的目标也不是"真",是"像"。训练时它只要让下一个词更符合语料里的分布,损失就低;至于这句话在世界上是否成立,目标函数不直接管。
所以"知识储量"这个词,错不在"知识",错在"储量"。储量暗示可计量、可定位、可取回;模型里的知识是分布式的、近似的、混在一起的。
这个误解之所以普遍,是因为两边的词太像了。产品介绍里常说"知识库""记忆""记住",这些词天然带着存储的暗示;人又习惯用熟悉的东西做类比,硬盘就成了最顺手的那个。
有个简单的检验方法:同一个事实,换三种问法问模型。如果三次回答的具体措辞和细节都不一致,它更像是在三次不同的上下文里重新生成,而不是取出同一条记录。数据库不会这样。
一旦把"储量"换成"概率分布",后面那些奇怪行为才有统一解释。反过来,如果坚持数据库式想象,会得出两个错误结论:知识可以精确检索,知识可以精准写入某一行。
前一个结论让你低估检索的必要性,后一个让你高估微调的能力。
一个示意的例子:问一个训练语料里极少出现的地方性政策,模型不会说"未收录",而是给出一个结构完整、细节可疑的回答。它不是故意编,它只是在低置信区域里继续生成最像话的下文。
那预训练到底在做什么?
二、下一词预测,加上自监督
预训练的做法可以用一句话说完:拿海量文本,遮住下一个词,让模型猜。
猜错就反向传播,把参数往"下次猜得更准"的方向挪一点;猜对则只做很小的修正。这个动作重复的次数是万亿级的。
数据是网页、书籍、代码、论文,规模在万亿级 Token 的量级。它们没有人工标注,也不需要标注——文本自身就是答案。
这就是自监督学习:监督信号从数据内部长出来,不依赖人逐条打标签。它是预训练能吞下海量数据的前提;如果要人工标注几万亿条,这件事根本做不成。
一个示意的小例子:给一句"水在零度会____",模型要猜"结冰"。这个例子不是真实训练样本,只是把任务形态摆出来。
看起来太简单了,但要把下一个词稳定猜准,模型必须顺带学会语法、搭配、事实共现和推理套路。猜"结冰"不难,难的是在几万亿个不同上下文里都猜得准。
这里有个容易被忽略的细节:预测不是只发生在句尾。一段文本的每个位置都可以作为一次预测,前文是输入,下一个词是答案。一句话有几十个词,就提供了几十个训练信号。
所以一条语料的价值被反复利用:同一段文字,从不同位置切开,就是不同难度的题。这也是自监督比人工标注高效的地方——人工标注只能给一个标签,文本自己能给出成千上万个监督点。
为什么这个游戏能逼出推理能力?因为人类文本里本来就写着推理过程:因为……所以……、如果……那么……、先……再……。要预测这些连接词后面的内容,模型必须跟着这条链走,久了就把链的形状学下来了。
训练本身还有一堆工程细节:学习率怎么调、批次怎么切、梯度怎么稳、数据要不要重复几轮。这些不改变目标函数,但直接决定最后能不能收敛。
所以预训练不是在背"知识清单",是在学"什么样的上文后面接什么样的下文"。知识是把这个游戏玩好之后的副产品,不是训练时被逐条写进去的。
数据这一关值得单独说。采集、清洗、去重、脱敏、分词,这些工作发生在训练之前,工作量常常比训练本身还大。语料质量决定上限,训练只是把上限兑现。
训练这一关则是资源密集型的。参数越多、语料越多,单次前向与反向的计算量越大;这类投入通常是集群级、团队级的,具体规模因模型与数据而异,本文不给数字。
那它到底学到了哪几层东西?
三、三层东西,混在同一个分布里
预训练压进参数的东西,大致可以分三层。
语言层:语法、词性、句法、多语种之间的对应关系。模型先学会"话怎么说"。
常识与事实层:"巴黎是法国首都""水在零度结冰"这类反复共现的规律。日常说的"知识",主要落在这一层。
结构层:逻辑推理的模式、代码的语法、数学推导的习惯。它学的不只是结论,还有得出结论的常见路径。
关键在于,这三层不是分门别类存放的。它们混在同一批参数里,以概率分布的形式存在,没有行号,没有主键,也没有"第 100 行"。
所谓分布式,可以粗略理解成:一个概念不是由一个参数负责,而是由一大片参数共同编码。改其中一个,几乎改不动这个概念;改一片,又会牵连到别的概念。
参数越多,容量越大,能编码的关系越复杂;但定位也越难。这就是容量和可控性之间的交换:想要更强的表达能力,就得接受更差的局部可编辑性。
这解释了为什么改一条事实那么难。你以为改的是一个知识点,实际动到的是一片连接;改完之后,相邻的能力可能一起偏移。
也解释了为什么模型会"记混"。两个相似的事实共享大量上下文特征,参数把它们压得很近,生成时就容易串。人也会记混,但人能查证,模型只能继续生成。
还解释了为什么模型给不出出处。参数里没有原文,只有被压过、被平均过的统计痕迹;你让它引用,它只能生成一个"看起来像出处"的句子。
这也意味着"模型知道什么"很难审计。你不能打开参数表查某条知识,只能通过提问去探测;探测结果还受问法影响,换个问法就换一个侧面。
图注:三层语料被压进同一片参数;被丢掉的细节,正是幻觉与 RAG 的由来。
那这个"有损压缩"能解释哪些具体问题?
四、三个现象,一个机制
先看幻觉。模型优化的是"像不像真话",不是"真不真"。某个事实在语料里出现得少,参数里没有稳定支撑,它照样能生成语法完美、逻辑顺滑、语气自信的句子。
所以幻觉不是撒谎,也不是数据库缺了一条记录。它是生成机制在低置信区域里的正常输出。模型没有"我不知道"这个默认动作,除非后训练专门教过它。
幻觉也有不同来源。有的是长尾事实没有足够支撑,有的是时间敏感信息停在旧版本,有的是多个相似实体被压得太近、生成时张冠李戴。表现都很像,机制都指向同一件事:参数里没有一条可靠的记录可查。
再看 RAG 为什么必需。压缩是有损的,而且预训练结束后,参数不会因为世界有了新事实就自动更新。最新发生的事、企业内部的私有文档,模型压根没见过。
没见过的东西,不能指望它"想起来"。只能把原文检索出来,放进上下文,让它照着说。RAG 的价值不是让模型更聪明,是给它一份可以照抄的资料。
RAG 也不是万能补丁。检索到的原文如果和参数里的旧印象冲突,模型仍可能顺着旧印象说;要在提示里明确"以资料为准",并且让资料足够醒目。
最后看微调为什么灌不进大量新知识。微调的数据量通常比预训练小好几个数量级,训练目标也不是"覆盖语料",而是"调整输出倾向"。
用少量问答对硬灌事实,常见结果是模型记住了问法,换个问法就答错。它学到的是"这类问题该回这类答案"的形状,不是事实本身。
微调也能记住一些事实,但那是"记住了这批问答",不是"掌握了这个知识"。数据量够大、重复够多时,它确实能背下一些;可这种记忆脆弱,换个问法就掉。
一个示意的例子:用几百条内部制度问答做微调,模型能把原题答对;把问题换个说法、加个前提,它可能给出一个格式正确但内容过时的答案。
三个现象到这里收束到同一组条件:压缩、有损、参数冻结。幻觉是有损压缩在低置信区的表现,RAG 是对有损和冻结的补丁,微调灌不进知识是数据量与目标函数共同决定的。
还有一层现实含义:模型见到的只是被写下来的那部分世界,行业里真正值钱的经验往往没被写下来——现场会出什么问题、客户嘴上说的和真实诉求差多远、数据在真实场景里有多脏。它没在场,学不到,所以给出的常常是行业的平均认知,不是隐性知识。
这句话不是贬低模型,而是在划清能力边界:平均认知足够搭框架,隐性知识只能靠人到现场去补。
那从一个空网络到能用的助手,中间还有几步?
五、预训练只是第一步
预训练产出的是基座模型(Base Model)。它知识面广,但不太会聊天:你问它一个问题,它可能顺着你的话往下续写,而不是回答。
一个可以自己验证的例子:拿一个未做后训练的基座模型,输入"帮我写一首诗",它很可能顺着"写一首诗"这个短语继续补全文本,而不是把它当成一条指令来执行。
要让基座变成助手,还要两步。
第一步是监督微调(SFT):用人工写的高质量问答对,教它对话格式、指令跟随、什么时候该停。数据量比预训练小得多,但它改变的是"怎么答"。
SFT 的数据长什么样?一条指令配一条理想回答,可能还有多轮对话、拒绝示例、格式示范。它不是在教新知识,是在教"遇到这类请求,应该这样回应"。
第二步是对齐训练:用人类偏好给回答打分,让模型更符合偏好、更少输出有害内容。RLHF 和 DPO 都属于这一类,机制各有细节,这里只取一句定义:让模型的输出向人类偏好靠。
对齐训练解决的是另一个问题:同样有用的回答,哪种更让人满意、更安全。它调的是偏好,不是知识,也不是格式。
三步走完,才是日常用的对话模型。所以严格说,我们平时用的那些模型,不是"预训练模型",是"预训练 + 后训练"的产物。
三者的顺序不能乱。没有预训练,SFT 没有可教的对象;没有 SFT,对齐训练不知道该往哪个方向偏。每一层都建立在前一层的产出上。
| 预训练 | 微调 | |
|---|---|---|
| 起点 | 随机初始化的网络 | 已预训练的基座 |
| 数据 | 万亿级无标注文本 | 标注数据,量小得多 |
| 成本 | 集群级投入,周期长 | 小集群级投入,周期较短 |
| 产出 | 基座模型 | 特定行为或领域的模型 |
| 学到什么 | 语言、常识、推理结构 | 行为模式、输出风格 |
这张表最容易被误读的一行是"数据"。预训练的数据是"世界文本",微调的数据是"示范样本";前者教它世界长什么样,后者教它该怎么回应你。
打个比方:预训练是把一个人从小养大,让他读遍能读到的书;微调是给一个已经受过教育的人做岗前培训。培训能改习惯,补不了通识。
图注:预训练产出基座,SFT 教格式,对齐调偏好;每一段的输入输出都不同。
那"继续预训练"又是什么?
六、继续预训练,和微调不是一回事
继续预训练(Continual Pre-training)是拿一个已有基座,再用某个领域的大规模无标注语料,把"预测下一个词"这个游戏接着玩下去。
继续预训练的门槛比微调高。数据规模要足够大,配比要重新设计,训练稳定性要重新调;它不是"把文档丢进去再跑一遍"那么轻。
它和微调的差别在两头:数据形态与目标。继续预训练用无标注语料,目标是注入知识;微调用标注数据,目标是调整行为。
所以企业想让模型真的"懂"一个专业领域,常见路径是继续预训练 + 微调 + RAG,而不是只做微调。
继续预训练负责把领域语料的分布压进参数,微调负责把输出习惯调到位,RAG 负责接住那些还在变的事实。三者各有各的活,不能互相替代。
反过来,只用微调去补领域知识,通常会失望:数据量不够,目标也不对。只用继续预训练也不行:模型懂了词,但不一定懂你要的答法。
更稳妥的顺序是:先看 RAG 够不够用,再评估要不要继续预训练,最后才用微调收口。因为越往后,成本越高,回滚越难。
模型不是在图书馆里查资料,它是在用一套被压扁的世界模型造句。压得越狠,越流畅,也越容易在细节上骗你。
但还有一个问题没答:为什么参数大到某个量级,这套压缩模型会突然像"懂了"?这大概要归到"涌现"这个说法上。