主题
第 4 章 · LLM 是怎么"学会"说话的
上一章拆开 Transformer 时,我们反复提到一个概念:FFN(前馈网络)里面存着模型的"世界知识"。那一章的原话是——FFN 是一张以"模式"为键、以"语义修改"为值的键值表,模型读过的几百亿句话,最后都变成了这张表里的条目。
但那张表里的数字不是程序员手动敲进去的,它们是自己长出来的。
这一章讲的就是:这些数字是怎么长出来的。这并非无关紧要的学术背景,了解一个模型是如何被训练出来的,是理解它为什么会产生“幻觉”、为什么会呈现出某种特定的语气,以及为什么有时候“听不懂人话”的根本前提。
章节概要
- 从零开始:一个刚出生的 Transformer 所有参数都是随机的,它一无所知。
- 预训练(Pre-training):通过海量数据的“猜词游戏”硬生生从随机数里长出了语法和常识,但它只会“续写文本”,不会“对话”。
- 监督微调(SFT):教模型从“无目的续写”切换成“回答人类指令”,使其具备基础的问答能力。
- 偏好对齐(RLHF / DPO):为模型引入人类价值观,教它区分好坏与安全。不同的对齐策略,造就了不同性格特点的模型。
一、从随机开始
上一章我们跟着「小李昨天买了一只小猫,今天它就把家里的沙发抓」这句话走完了 Transformer 的每一个房间。当时我们默认所有参数都已经就位——FFN 里的键值表是完整的,attention 里的 Q、K、V 矩阵是有意义的,模型自然而然地在「抓」字之后,给出了「坏」的最高概率。
但如果你回到模型刚被初始化的那一刻,它长什么样?
全是无意义的随机数。
几十亿个参数,每个都是一个服从某种概率分布的随机小数。当你给这个刚出生的模型喂进「小李昨天买了一只小猫,今天它就把家里的沙发抓」时,指望它猜出「坏」?不可能。在它的眼里,「坏」、「炒」、「飞」、「的」等数万个词的概率几乎完全一样。它不知道猫是什么,不知道沙发是什么,甚至不知道基本的中文主谓宾结构。
要让它从随机噪音变成一个能流畅对话的智能体,这几十亿个参数必须被千锤百炼地调整。这个调整的过程,分为三个逐渐递进的阶段。
二、第一阶段:预训练 —— 暴读万卷书
预训练(Pre-training)做的事情,本质上就是一场进行了几万亿次的填空游戏:给模型一段互联网上的真实文本,遮住下一个字,让它猜。猜错了,就修正;猜对了,就巩固。
老师的红笔与痛苦的翻书
怎么衡量“猜错”?怎么进行“修正”?在机器学习中,这对应着损失函数(Loss Function)和反向传播(Backpropagation)。为了方便理解,你可以把它想象成一个极度严厉的老师在批改填空题:
- 红笔扣分,也就是计算 Loss:老师只看一件事——你给正确答案「坏」分配了多大的概率。模型给「坏」分了九成的概率,就接近满分、Loss 极小;只分了千分之一,把概率全押在「炒」这种荒唐答案上,红笔就会划一个巨大的红叉,Loss 极大。请注意,老师并不关心错误答案错得“像不像”,只关心你给正确答案留了几分把握。
- 回去改错,也就是反向传播与梯度下降:拿到红叉后,模型必须顺着报错信息“往回找”,系统地审视它内部那几十亿个参数,特别是 FFN 层里的。它需要把导致它猜错的那些神经元权重稍微调低一点,把指向正确答案的权重调高一点。
这个“猜词 -> 算误差 -> 调参数”的循环(称为一个 Step),在成千上万张最顶级的 GPU 上,日以继夜地重复了几千亿甚至上万亿次。
预训练到底学会了什么?
当预训练结束时,奇迹发生了:模型不仅学会了背书,还自动涌现出了常识和逻辑。
它发现,要想在「猫抓__」这个填空题里不被扣分,最聪明的办法不是死记硬背每一句话,而是总结出“猫是一种动物”、“沙发是家具”、“动物的爪子会破坏布料”这种深层规律。这些规律被压缩成了 FFN 里庞大的键值对。模型之所以显得懂物理、懂历史,是因为不懂这些,它就无法在海量文本的预测中拿到高分。
为什么现代模型需要几万亿 token 的数据?
在 2020 年,OpenAI 提出著名的 Kaplan 缩放定律 (Scaling Laws),认为想让模型变聪明,最划算的方法是将计算资源投入到增加模型参数量上,数据量只需温和增长。
但到了 2022 年,DeepMind 用一系列实验(Chinchilla 模型)推翻了这一点。他们发现大家都“饿着”模型了——参数和数据必须等比例增加。如果你有一个 700 亿参数的模型,你至少得喂给它 1.4 万亿 token 的数据才能达到算力最优解。这也是为什么如今的前沿模型动辄使用 8 到 15 万亿 token 数据量的原因。
预训练的局限:它只会“接话”
预训练模型(Base Model)拥有了无可匹敌的知识储备,但它完全不会回答问题。
假设你给一个纯预训练模型输入这样一个问题:
中国的首都是哪里?
你期望它回答“北京”,但它实际生成的可能是:
美国的首都是哪里? 英国的首都是哪里?
为什么?因为它以为你在编写一份地理考试题库!在它读过的海量网页中,多个疑问句排在一起是非常常见的统计分布。它学会了“顺着语境往下写”,但它不知道“当人类提出问题时,我应该直接给出答案”。
要让它从“文本接龙机器”变成“智能助手”,需要进入第二步。
三、第二阶段:监督微调 (SFT) —— 教它听懂指令
解决模型不会回答问题的关键,是监督微调(Supervised Fine-Tuning,简称 SFT),也被称为指令微调(Instruction Tuning)。
从“猜网页”变成“学对话”
在这个阶段,研究人员不再给模型喂庞杂的无结构网页文本,而是喂给它人类精心编写的“指令 -> 回答”对照表(Prompt -> Response)。
人类标注员会手写几万到几十万条高质量的对话数据:
- 用户指令:
请帮我写一首关于秋天的七言绝句。
- 模型回答:
秋风萧瑟天气凉,草木摇落露为霜。……
模型在这些结构化数据上继续做预测,但这一次,它专门学习“当人类下达指令时,什么样的回复格式和语气是正确的”。
经过 SFT,模型完成了蜕变:当它看到问号或请求时,不再去模仿论坛盖楼或试卷排版,而是切换到“解答者”的模式。
SFT 的局限:缺乏深层判断力
SFT 确实让模型变得听话了,但它存在一个核心缺陷:它只是在模仿好回答的格式,而没有建立对回答质量的深层判断力。
面对复杂问题(例如“如何平衡工作与生活”),SFT 训练出的模型只能机械地套用标注员写过的文章结构(如“第一点、第二点、总结”),它不知道如果换一种更幽默、或者更深刻的表达方式会不会更好。由于标注员的平均工作标准倾向于“安全、规范、不犯错”,SFT 往往会让模型的文风变得中庸、平淡,呈现出一种枯燥的“AI 客服腔调”。
四、第三阶段:偏好对齐 —— 塑造价值观与品味
为了让模型不仅“会回答”,还能回答得“讨人喜欢”或“符合特定规范”,我们需要第三个阶段:偏好对齐(Alignment)。
RLHF:引入人类裁判
最经典的对齐方法是由 OpenAI 发扬光大的 RLHF(基于人类反馈的强化学习)。 它的做法不再是让人类写标准答案,而是让人类当裁判。
针对同一个问题,语言模型生成两个不同的回答(A 和 B),人类裁判只需投票“哪个更好”。比如 A 回答得啰嗦,B 回答得精炼,裁判就选 B。 收集了几万次人类投票后,研究者会训练出一个独立的“打分系统(奖励模型)”。最后,让语言模型在这个打分系统的监督下不断试错——如果它说出的话得分高,就保留参数调整;如果得分低,就退回修改。
- 优势:经过 RLHF 的模型更懂得拒绝有害请求、承认自己不知道的事,表达也更贴合人类的阅读习惯。ChatGPT 相对于原始 GPT-3 的脱胎换骨,大半要归功于这一步。
- 代价:人类裁判的标准直接决定了模型的性格。商业公司的裁判标准通常是“绝对安全、政治正确、不冒犯任何人”,这就不可避免地给模型戴上了严格的枷锁(Censorship),模型可能会为了避免风险而拒绝回答稍微带点争议性的问题。
DPO:更高效的对齐路径
由于 RLHF 过程极其复杂且训练不稳定,斯坦福大学的研究者在 2023 年提出了一条捷径:DPO(直接偏好优化,Direct Preference Optimization)。
DPO 发现了一个数学上的等价关系:我们完全可以绕过那个复杂的“打分系统”。只需要把人类投票的偏好数据(A 比 B 好),通过一种特殊的损失函数直接喂给语言模型,模型自己就能在内部更新权重,偏向受人类欢迎的表达方式,远离不受欢迎的表达。
DPO 极大降低了偏好对齐的门槛。现在,研究者甚至开源社区,只需要收集一批特定风格(例如更有文采、更有逻辑,或是专用于特定写作风格)的对比数据,用普通显卡做一次 DPO 微调,就能彻底改变语言模型的行事风格。这也是为什么如今有着各种各样不同“脾气”和“专长”的模型百花齐放的原因。
五、对提示词工程的启发
理解了这三个训练阶段,我们就能明白编写系统提示词(System Prompt)的本质原理。
写提示词,并不是像写传统代码那样给机器下发不可违抗的执行指令;写提示词,本质上是在唤醒模型在训练阶段见过的某种数据分布模式。
- 面对模型的对齐偏好:如果一个模型经过了极其严苛的通用商业标准 RLHF 训练,它对风险词汇会非常敏感。此时的提示词需要提供足够的上下文或假设性情境(即所谓的越狱技巧),以绕过安全策略的误伤。
- 格式的约束与引导:模型在 SFT 阶段见过了大量的特定排版(如 Markdown 列表、JSON 格式)。在提示词中明确给出“请使用以下格式化输出”的示例(Few-Shot),能够极大概率唤醒模型底层的结构化输出能力,避免其胡言乱语。
- 角色的注入:如果你希望模型以特定的口吻回答问题,你需要在系统提示词的开头,用强有力的设定覆盖掉它在 SFT 阶段学到的默认“AI 助手”人格。你给出的设定越详细、词汇越具特征性,模型就越能精准定位到 FFN 中对应的相关语义区块。
遇到模型表现不佳时,学会诊断:是它的预训练知识不够(幻觉/常识错误)?是 SFT 的指令跟随能力太弱(格式崩溃/无视指令)?还是对齐阶段的束缚太强(动辄拒绝回答)?找准了病根,才能对症下药。
六、写给下一章
到这里,我们已经亲眼看着一堆随机数,经历了暴读万卷书的预训练、学会回答指令的 SFT、以及被注入价值观的偏好对齐,最终变成了一个能听懂人类语言的智能体。
但是,这台智能机器在实际应用中依然受制于一个冷酷的物理规律。
无论它的参数再庞大、学识再渊博,当它每次处理你发去的一大段文本时,它的“短时记忆容量”是有限的。如果一段输入长达几十万字,它还能像读几句话一样精准地捕捉每一个细节吗?如果超出容量,它会发生什么?
这就是下一章我们要彻底剖析的真相——上下文窗口(Context Window)的物理极限与注意力机制的边界。
要点回顾
- 预训练(Pre-training):依靠算力暴力预测下一个词,让模型长出了语言逻辑和世界常识,但它只会“续写”,不懂得“交互”。
- 监督微调(SFT):教模型回答人类的指令。它让模型变得听话,掌握了问答的形式,但也容易产生平庸的机械感。
- RLHF(人类反馈强化学习):通过裁判打分机制,塑造了模型的底层偏好,使其变得更安全、更符合大众预期。
- DPO(直接偏好优化):一种无需训练独立奖励模型的偏好微调捷径,极大降低了对齐成本,促进了定制化模型的发展。
- 写提示词的本质:了解模型背后的训练轨迹,通过构建合适的上下文来“唤醒”它内部已经被训练好的能力网络。
参考文献
- Radford, A., Narasimhan, K., Salimans, T., & Sutskever, I. (2018). Improving Language Understanding by Generative Pre-Training. OpenAI Technical Report.
- Brown, T. B., Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P., ... & Amodei, D. (2020). Language Models are Few-Shot Learners. Advances in Neural Information Processing Systems, 33, 1877-1901. arXiv:2005.14165.
- Kaplan, J., McCandlish, S., Henighan, T., Brown, T. B., Chess, B., Child, R., ... & Amodei, D. (2020). Scaling Laws for Neural Language Models. arXiv:2001.08361.
- Hoffmann, J., Borgeaud, S., Mensch, A., Buchatskaya, E., Cai, T., Rutherford, E., ... & Sifre, L. (2022). Training Compute-Optimal Large Language Models. Advances in Neural Information Processing Systems, 35, 30016-30030. arXiv:2203.15556.
- Ouyang, L., Wu, J., Jiang, X., Almeida, D., Wainwright, C. L., Mishkin, P., ... & Lowe, R. (2022). Training language models to follow instructions with human feedback. Advances in Neural Information Processing Systems, 35, 27730-27744. arXiv:2203.02155.
- Rafailov, R., Sharma, A., Mitchell, E., Ermon, S., Manning, C. D., & Finn, C. (2023). Direct Preference Optimization: Your Language Model is Secretly a Reward Model. Advances in Neural Information Processing Systems, 36. arXiv:2305.18290.