LLM 是怎么预测下一个 token 的 把模型内部的计算拆开看了一遍:查 embedding 表、过几十层注意力、给全词表打分、抽签选字。但有个问题一直没讲清楚:模型里那几亿到几万亿个参数,是怎么变成「正确的值」的?
这篇文章就来讲训练。把训练流程走一遍,前面几篇留下的疑问也会一个个解开:
- 看懂 Hugging Face 和模型文件 说日常聊天要选
-Instruct版本,-Base版只会接话。同一个模型为什么要发两个版本? - Ollama 上累计下载量超 9000 万次的
deepseek-r1,7b 版本的介绍里却写着基于 Qwen,名字和血统为什么对不上? - 都说训练大模型烧钱,到底烧多少钱?普通开发者能不能训练自己的模型?
老规矩,不需要机器学习背景,我们出发。
预训练:先把互联网读一遍
一个模型刚被创建出来时,所有参数都是随机数。这时候让它预测下一个 token,输出的就是纯乱码。
训练要做的事,就是把这几百亿甚至几万亿个随机数一点点调整成「有用的值」。第一个阶段叫预训练(pretraining),它要回答的问题是:怎么让模型学会人类的语言和知识?
语料本身就是标准答案
方法说穿了就是刷题。给模型看一段文本的开头,让它预测下一个 token,再把它的预测和正确答案对比:预测对了,相关参数被巩固;预测错了,参数就朝着正确答案的方向微调一点。
一道题只能把参数挪动一丁点,但这个过程可以重复几万亿次。
妙就妙在,题目不用人出。「今天天气真不错」这句话,截在「天气」后面就是一道题,标准答案就是「真」;截在「真」后面又是一道题,标准答案是「不」。互联网上的任何一段文本,天然就是一沓做好答案的考卷。
这种不需要人工标注的训练方式叫自监督学习(self-supervised learning):答案就藏在语料自己身上。这也是大模型能「读遍互联网」的前提,如果每道题都要人工写答案,万亿级的训练数据想都不用想。
LLM 是怎么预测下一个 token 的 里提到,embedding 表和注意力层里的每个数字都是「训练出来的」,指的就是这个不断做题、不断修正的过程。
万亿 token 和几百万美元
预训练的规模有多大?看两个 2026 年发布的模型的公开数字:DeepSeek 最新的 V4 系列用了超过 32 万亿(32T)token,智谱的 GLM-5 用了 28.5T token。粗略换算一下,30T token 相当于几亿本书的文字量。
这些语料当然不是从网上爬下来直接就能用的,还要经过大量清洗、去重和过滤,不过这属于工程细节,这里不展开。
钱花在哪看一份账单就知道了。DeepSeek 在 2024 年底的 DeepSeek-V3 技术报告 里公开过完整成本:14.8T token 的预训练,在 2048 张 H800 显卡上跑了不到两个月,全部训练合计 279 万 GPU 小时,按每小时 2 美元的租价折算约 558 万美元。
这份账单珍贵在它是绝版:直到今天,包括 DeepSeek 自家 2026 年的 V4 在内,再没有哪家厂商公开过同等粒度的成本数据。而且 V3 还是业界公认的省钱典范,闭源模型的花费只会更夸张:斯坦福 AI Index 2024 报告 曾估算 GPT-4 的训练算力成本约 7800 万美元,Google 的 Gemini Ultra 约 1.9 亿美元。
DeepSeek-V3 的账单里还有个更值得记住的比例:279 万 GPU 小时中,本文后面要讲的 SFT、RLHF 等后训练环节加起来只占 0.2%,其余几乎全部花在了预训练上。
预训练是绝对的大头,后面的步骤全是花小钱办大事。
Base 模型:只会接话,不会回答
烧完几百万美元,得到的是什么?
一个只会接话的博学者,因为预训练产出的 base 模型是个文档补全器(document completer),不是聊天机器人。
道理很直白:它见过的所有训练数据都是「一段文本接着一段文本」,所以它唯一会做的事就是往下续写。你输入「中国的首都是」,它会接「北京,位于华北平原……」,像百科词条一样滚下去;你输入「你好吗?」,它可能接一段小说对白,因为语料里「你好吗?」后面跟着的往往就是小说的下一句。
这就是 Hugging Face 上 -Base 后缀的含义:DeepSeek-V4-Pro-Base、DeepSeek-V4-Flash-Base 这些都是预训练直接产出的原始模型。
看懂 Hugging Face 和模型文件 说 Base 模型一般用作继续训练的起点。现在你知道「起点」是什么意思了:接下来的所有步骤,都是在这个博学但不会聊天的模型上做加工。
SFT:几万条对话教会它「回答」
换数据,继续训
怎么把补全器变成助手?答案简单得出人意料:把训练数据从互联网文本换成人工写好的高质量对话,用一模一样的方式继续训练。
对话数据大概长这样:
用户:怎么查看一个端口被哪个进程占用了?
助手:想查看端口占用情况,可以用 lsof 命令。比如查看 8080 端口的命令是:lsof -i :8080 ...模型在这批数据上继续做「预测下一个 token」的练习,参数就会朝着「见到问题就给出回答」的方向偏移。换掉的只是数据,训练算法本身什么都没变。
这一步叫 SFT(Supervised Fine-Tuning,监督微调)。「监督」指的是数据带着人工确认过的标准答案,「微调」指的是在预训练权重的基础上小幅调整,而不是从零开始。
需要多少条对话?OpenAI 2022 年的 InstructGPT 论文(ChatGPT 的直系前身)只用了约 1.3 万条。对比预训练的万亿 token,九牛一毛。如今的模型用的对话数据更多,但量级上依然悬殊,前面 0.2% 的算力占比就是证据。
所以这两步的分工是:预训练给了模型全部的知识和语言能力,SFT 只是教会它「用回答的姿势说话」。
经过 SFT(以及后面要讲的 RLHF)加工出来的对话版模型,就是 Hugging Face 上带 -Instruct 或 -Chat 后缀的版本。也有像 DeepSeek-V4 这样反过来命名的:对话版就叫 DeepSeek-V4-Pro,预训练原始版才带 -Base 后缀。不管哪种命名,我们日常用的 AI 助手都是这类对话版模型。
chat template:把对话包装成接龙题
这里有个细节值得单独说:模型只会接龙,那「对话」是怎么变成接龙题的?
上下文是什么?token 怎么计费? 讲过,你发给 API 的 messages 数组会被拼接成一大段文本。现在可以揭晓拼接的具体格式了,以 Qwen 用的 ChatML 格式为例:
<|im_start|>user
推荐一部科幻电影<|im_end|>
<|im_start|>assistant<|im_start|> 和 <|im_end|> 是专门的控制 token,标记出每段话的边界和说话人。这套包装格式叫 chat template(对话模板)。
SFT 的对话数据全部会包装成这个格式再送进模型,于是模型学到的规律就是:看到 <|im_start|>assistant,后面就该接一段回答,答完输出 <|im_end|>。
推理时同样如此:把对话历史包成这个格式,末尾留一个 <|im_start|>assistant,让模型接龙。等模型输出 <|im_end|>,服务端就知道这轮回答结束了。LLM 是怎么预测下一个 token 的 里说的那个「表示说完了的特殊 token」,就是它。
所以「对话」只是一层包装,模型从头到尾都在做同一件事:文字接龙。
RLHF:教它答得「好」
用人类的排序训一个打分模型
SFT 之后还剩一个问题:模型会回答了,但答得好不好没有保障。
「好」很难用标准答案定义。同一个问题可以有一百种正确回答,有的简洁有的啰嗦,有的循循善诱有的敷衍了事。SFT 的方式是「给一份标准答案让模型模仿」,覆盖不了这种相对的好坏判断。
好坏难以定义,但很容易比较:把两个回答摆在一起,人一眼就能看出哪个更好。
RLHF 就是从这个观察出发的,分两步走。
第一步,让模型对同一个问题生成多个回答,人类标注员把它们按好坏排序,再用这批排序数据训练一个奖励模型(reward model)。你可以把它理解成一个打分模型:输入问题和回答,输出一个分数。人类的偏好被它「学」了下来,之后它就能代替人类,给任意回答打分。
这种偏好数据的收集,你八成亲身参与过:ChatGPT 这类产品时不时会并排给出两个回答,问你更喜欢哪个。你随手点的那一下,就是在帮厂商标注偏好数据。
第二步,用奖励模型指挥原模型改进:模型不断生成回答,奖励模型不断打分,训练算法朝着「得分更高」的方向微调模型参数。这一步用的是强化学习(Reinforcement Learning):没有标准答案,只有一个分数信号,模型在反复试错中强化能拿高分的行为。
合起来就是 RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)。
这套流程要达成的目标,业界有个专门的词叫对齐(alignment):让模型的行为符合人类的期望。Anthropic 把期望概括成三个词:helpful(有用)、honest(诚实)、harmless(无害)。
1.3B 打败 175B
RLHF 的效果有多明显?InstructGPT 论文里有个著名结论:13 亿参数的模型经过 SFT 加 RLHF 之后,人类评估者更喜欢它的输出,胜过了参数量大它 100 倍的 1750 亿参数原版 GPT-3。
这个结论值得多想一下:「聪明」和「好用」是两回事。预训练决定模型有多聪明,后训练决定它好不好用,而后者的成本只是前者的零头。
如今各家模型的后训练基本都是 RLHF 思路的延续和组合。比如一个流行的简化方案叫 DPO:跳过奖励模型和强化学习,直接拿「回答 A 比回答 B 好」的偏好数据去微调模型,流程简单得多,效果也不错。Ai2 完全公开训练过程的 OLMo 3 就是这么组合的:SFT、DPO,再加下一节要讲的可验证奖励强化学习,三步走完后训练。
推理模型:拿对错当奖励
RLHF 有个天然的瓶颈:奖励来自人类的判断,而人类标注又贵又慢,数据规模总是有限的。
但有一类任务不需要人类当裁判:数学题算得对不对,代码能不能跑过测试用例,机器自动就能判。让奖励不再来自「人类觉得好」,而来自「答案验证正确」,这个思路叫 RLVR(Reinforcement Learning with Verifiable Rewards,可验证奖励强化学习)。
判分一旦自动化,规模限制就解除了:模型可以没日没夜地刷数学和编程题,答对了强化,答错了惩罚。
神奇的是,模型为了拿高分,会自发地学出「先写一长段推理过程,再给最终答案」的习惯,因为多想几步确实能提高正确率。
OpenAI 对 o1 训练方式的官方描述就一句话:用大规模强化学习,训练模型使用思维链来推理。2025 年初的 DeepSeek-R1 走的也是这条路,而且论文公开了完整的训练方法,这篇论文后来还登上了 Nature。
R1 论文里有个流传很广的瞬间:一个纯用强化学习训练、没有使用过任何人工对话数据的实验版模型,解题解到一半突然写出「Wait, wait. Wait. That's an aha moment I can flag here.」,然后回头重新检查自己的推理。没有人教过它反思,「反思能提高得分」是它自己从奖励信号里悟出来的。
如今「先想后答」已经是新模型的标配能力,训练配方也越来越公开,比如智谱在 GLM-5 的技术报告里给出了完整的三段式强化学习流水线:先做推理 RL,再做 Agent 任务的 RL,最后做通用场景的 RL。
产品形态上,「推理模型」甚至不再是一个单独的模型:DeepSeek 从 V4 开始砍掉了独立的 deepseek-reasoner,思考变成请求里的一个开关参数。这里先不展开讲,推理模型的训练还有不少有意思的细节,值得以后单独写一篇。
蒸馏:老师做题,学生刷题
现在可以解开开头的 deepseek-r1 名字之谜了。
2025 年初 DeepSeek-R1 爆火时,无数人涌进 Ollama 想在本地跑一个。但 R1 本尊有 671B 参数,普通电脑根本跑不动,所以大家实际拉取的多是 7b、14b 的小尺寸版本。这些小「R1」是**蒸馏(distillation)**出来的。
蒸馏的思路:让训练好的大模型当老师(teacher),小模型当学生(student),学生通过学习老师的输出,把老师的能力「萃取」到更小的模型里。
这个词是 Hinton 等人在 2015 年的论文里提出的。原始做法是让学生模仿老师输出的整个概率分布,「蒸馏」这个名字就来自其中一个技术细节:把老师的 temperature 调高,输出的概率分布会变「软」,携带的信息更丰富。temperature 你在 LLM 是怎么预测下一个 token 的 里已经见过了,正是同一个参数。
现代 LLM 场景的做法更简单直接:老师批量生成带完整解题过程的问答数据,学生拿去做 SFT。还是熟悉的配方,只是把人工写对话换成了大模型写对话。
DeepSeek 就是这么干的:用 R1 生成 80 万条训练样本,去微调 Qwen 和 Llama 系列的开源模型。所以 deepseek-r1:7b 的真身是 DeepSeek-R1-Distill-Qwen-7B:底子是 Qwen2.5-Math-7B,被 R1 生成的解题数据调教出了推理风格。名字叫 R1,血统是 Qwen。
蒸馏版和 671B 满血版的能力差距不小,但性价比极高:它把大模型的部分能力搬进了普通电脑跑得动的小模型。
而且这是行业的普遍做法,不是 R1 独一份。你在 用 Ollama 在本地运行大模型 里跑的 qwen3:0.6b,就是 Qwen 官方从几百倍大的旗舰型号蒸馏出来的,官方管这叫 strong-to-weak(以强带弱)蒸馏,能省下大量训练算力。
蒸馏甚至还引发过大厂之间的纠纷:2025 年初 OpenAI 和微软调查 DeepSeek 是否用 OpenAI API 的输出训练了自己的模型,因为 OpenAI 的服务条款禁止用它的输出去开发竞争模型。用别家 API「偷师」算不算蒸馏、该不该禁止,行业里至今没有定论。
你能训练自己的模型吗
看完整个流程,回到开头的最后一个问题:普通开发者能参与哪个环节?
预训练可以死心了,几百万美元只是入场券。开源项目 nanochat 演示过 100 美元能买到什么:租 8 张 H100 跑 4 个小时,完整走完预训练加 SFT 全流程,得到一个「连天空是什么颜色都拿不准」的模型。流程谁都能跑,能力是实打实用算力堆出来的。
但微调是真的平民化了,关键技术叫 LoRA:冻结原模型的全部权重,只在旁边训练一小块「增量」参数。论文里的数据是,对比全参数微调,可训练参数能减少一万倍。
后来的 QLoRA 把量化和 LoRA 结合,一张 48GB 显存的显卡就能微调 65B 模型。配合 Hugging Face 的 PEFT 库或 Unsloth 这类工具,消费级硬件也能跑。
顺带纠正一个常见误会:Ollama 是纯推理工具,不能用来微调,它只能加载别人训练好的模型或 LoRA 增量。
最后泼一盆冷水:大多数「我想微调一个模型」的需求,其实用不着微调。OpenAI 的官方优化指南给的顺序是:先把 prompt 写好;如果模型缺少你的领域知识,用 RAG 把资料放进上下文(后面 RAG 原理和使用场景 会展开讲);只有当你需要固定模型的行为风格,比如输出格式不稳、语气不对,微调才是对的工具。
一句话记住这个分工:微调改变的是模型的行为习惯,不是给它灌新知识。
总结
把全流程串起来:预训练用万亿 token 的互联网语料做自监督的接龙练习,把一堆随机参数变成博学但只会补全的 Base 模型,这一步烧掉几乎全部算力;SFT 用几万条人工对话教会它「回答」,变成你熟悉的 Instruct 模型;RLHF 再用人类偏好训练出的奖励模型引导它「答得好」;把奖励换成自动判分的对错,就能大规模训练出先想后答的推理模型。
模型训练好之后,蒸馏负责能力搬运:老师生成解题数据,学生拿去 SFT,大模型的能力就这样装进了小模型。
对普通开发者来说,预训练遥不可及,LoRA 微调触手可及,但动手前先问一句:这个需求,prompt 和 RAG 是不是就能解决?
现在再回头看 Hugging Face 上的 -Base 后缀,或者 Ollama 里 deepseek-r1 介绍中「基于 Qwen」的说明,背后的门道你就都清楚了。