一文讲透大模型是如何训练出来的Dudu Happy
大模型到底是怎么学会写文章、做数学题、翻译语言、分析问题和生成代码的,很多人会下意识地认为,开发者提前把知识和答案写进了模型,事实恰恰相反。
没有人能把互联网里的知识一条条整理出来,再逐项教给一个拥有数百亿乃至更多参数的模型。工程师真正做的,是设计训练目标,把海量数据交给模型,然后让它不断预测、不断犯错、不断修正。
经过数以万亿计的训练样本之后,模型逐渐从数据里压缩出语言规律、知识关系、代码结构,以及人类解决问题时经常使用的模式,所以,大模型的学习不是“老师讲、学生记”,它更像是:
给模型看无数例子,让它不断猜答案,猜错就调整内部参数,最终把海量数据中的规律压缩进神经网络。
这篇文章,我们就围绕 20 个核心机制,讲清楚一个大模型究竟是怎样从随机参数,成长为能够理解指令、回答问题和完成复杂任务的智能系统,全文将围绕五个关键问题展开,带你一步步拆解大模型背后的核心逻辑:
第一,大模型究竟“吃”什么才能学会这么多东西?
第二,它表面在处理文本,实际上到底在学什么?
第三,那些看似简单的错误,是如何一步步被转化为能力的?
第四,为什么当规模扩大到一定程度后,模型会突然“开窍”,涌现出新的能力?
第五,既然已经完成预训练,为什么还需要监督微调、RLHF、RLAIF、蒸馏和持续学习这些后续步骤?
如果你也对这些问题感到好奇,那么接下来,我们就一起把它们逐一拆开。
先纠正一个误解:大模型不是被“写”出来的
传统软件是程序员写出来的,工程师把规则写进代码:如果发生 A,就执行 B,如果满足 C,就返回 D,这种系统的行为边界,基本由程序员提前定义,大模型不同,工程师不会提前写下:遇到这道数学题应该怎样推理。
看到这段代码应该怎样修复,用户问历史问题应该引用哪些知识,模型的大部分能力,是训练出来的,而不是逐条编程写进去的,训练开始时,模型内部的参数大多接近随机状态。它并不知道什么是语言,不理解事实,也不会遵循人类指令。
工程师会给它大量文本,让它完成一个看似简单的任务:
根据前面的内容,预测下一个 Token。
模型猜错之后,训练系统计算误差,再通过反向传播和梯度下降调整参数,这个过程反复进行,模型便逐渐发现:哪些词经常一起出现,句子通常怎样组织,一个问题后面通常跟着怎样的回答,代码中的函数、变量和逻辑如何配合。
论证怎样从前提走向结论,换句话说,大模型不是直接学习一个个答案,它真正学习的,是数据背后的统计结构和解决问题的模式。
第一阶段:大模型拿什么训练?
学习的起点不是算法,而是数据,模型的上限,很大程度上取决于它见过什么、数据质量如何,以及这些数据能否覆盖足够丰富的知识和任务。
1. 训练数据:模型认识世界的原始材料
训练数据是大模型学习的原料,这些数据通常包括:网页、书籍、论文、新闻、代码、论坛讨论、百科资料、问答数据和经过授权或人工构造的内容,数据规模很重要,但规模并不是唯一标准。
如果数据中充斥重复内容、错误事实、垃圾文本和低质量表达,模型学到的也会是混乱模式,所以真正困难的,不只是“收集更多数据”,而是完成一整套数据治理:数据清洗,去重,质量筛选,隐私处理,有害内容过滤,语言和领域配比。
高质量数据往往比单纯堆积低质量数据更有价值,大模型领域正在逐渐从“数据越多越好”,转向“数据质量、结构和课程设计同样重要”。
模型吃进去的不是知识本身,而是知识留下的文本痕迹。
这些痕迹决定了它能够学到怎样的世界。
2. Tokenization:把人类语言切成模型能处理的单位
模型不能直接读取文字,在进入神经网络之前,文本必须先被 Tokenizer 切成一个个 Token,Token 可以是一个汉字、一个单词,也可能只是单词的一部分,例如,一个英文长单词可能被拆成词根和后缀,一段代码也会被拆成变量、符号和关键字。
Tokenization 看起来只是预处理,实际上会影响模型的学习效率,如果某种语言被切得过于零碎,同样一段内容就会占用更多 Token,训练和推理成本都会增加,如果代码、数学符号或专业词汇切分不合理,模型也更难学习其中的稳定结构。
所以,Tokenizer 相当于模型观察世界时使用的“颗粒度”,切分方式决定了模型以什么基本单位认识语言。
3. Batch:模型不是一次看完所有数据
大模型的训练数据规模极大,不可能一次全部送入模型,训练系统会把数据划分成很多小批次,每一批称为一个 Batch,模型处理一个 Batch 后:完成预测,计算误差,更新参数,然后继续处理下一个 Batch。
为什么不能每看一个样本就立刻更新,因为单个样本存在偶然性,更新方向可能非常不稳定,为什么不一次处理全部数据,因为计算资源和显存根本无法承受,Batch 是两者之间的折中,Batch 太小,训练噪声大,参数更新不稳定。
Batch 太大,计算成本高,还可能降低模型对数据细节的敏感度,所以,Batch Size 不是一个无关紧要的工程参数,它影响训练效率、稳定性和最终效果。
4. Epoch:把训练数据学几遍
Epoch 指模型完整看过一遍训练数据,如果数据集规模较小,模型可能训练多个 Epoch,也就是反复查看同一批数据,但在超大规模预训练中,情况更复杂,训练语料可能大到难以完整重复多轮,部分数据只出现一次,部分高质量数据可能被重复使用。
训练次数太少,模型可能还没有充分吸收规律,训练次数太多,又可能过度记住训练样本,导致过拟合,因此,Epoch 的核心不是“越多越好”,而是控制模型对数据的学习程度,真正好的训练,需要在“没有学会”和“死记硬背”之间找到平衡。
第二阶段:模型到底在学习什么?
数据进入模型之后,接下来的问题是:模型的学习目标到底是什么,它并没有一个老师逐句解释世界,而是通过一种自监督机制,从数据本身构造学习信号。
5. 预训练:先学习语言和世界的一般规律
预训练是大模型能力形成的基础阶段,这个阶段通常消耗最多的数据、算力和时间,模型会阅读海量文本,通过预测任务学习:语言结构,事实关联,常识模式,代码语法,知识关系,不同文体的表达方式,问题与答案的常见结构。
预训练不会直接把模型变成一个理想助手,它更像是给模型打下通识基础,完成预训练的模型可能已经知道很多,但不一定会按照用户要求回答,也不一定知道什么时候应该拒绝,更不一定能够稳定遵循复杂格式,可以这样理解:
预训练让模型“读过很多书”,后训练才教它怎样与人协作。
6. 自监督学习:数据自己成为老师
传统监督学习需要人工标注,例如,给模型一张图片,并标注“这是一只猫”,但互联网数据规模太大,不可能全部依赖人工标注,大模型采用的核心方法是自监督学习,所谓自监督,就是从原始数据中自动构造训练目标,一句话本身就可以同时提供问题和答案:
前面的 Token 是输入,后面的 Token 是答案,例如:“北京是中国的——”,真实文本中的下一个 Token,可能是“首都”,模型先预测,训练系统再拿它的预测与真实 Token 比较,这样,海量文本不需要逐条人工标注,也能形成训练信号。
自监督学习的突破意义在于:
它把整个互联网变成了一个近乎无限的训练场。
7. Next Token Prediction:为什么预测下一个词能学出智能?
大模型最核心的预训练任务,通常是预测下一个 Token,很多人因此认为:大模型不过是一个高级文字接龙系统,这句话只说对了一半,预测下一个 Token 的形式确实简单,但要在复杂文本中持续预测准确,模型必须学到非常深的规律。
比如,面对下面这段内容:“因为需求持续增长、供给短期受限,所以价格可能……”,模型要预测后面的词,就需要理解供需关系,面对一段代码,它要预测下一行,就需要学习变量类型、函数逻辑和程序结构。
面对一个数学证明,它要继续预测,就需要识别前提、推导步骤和结论之间的关系,面对一篇文章,它要写出下一段,就需要理解主题、语气和论证结构,所以,预测下一个 Token 不只是学习词语搭配,为了完成这个任务,模型被迫压缩人类语言背后的大量结构:
知识结构,逻辑结构,代码结构,因果结构,问题解决结构。
任务很简单,但要把它做到极致,模型必须学会复杂世界在语言中的投影。
8. 损失函数:模型如何知道自己错了多少?
模型完成预测之后,需要一个标准判断预测有多差,这个标准就是损失函数,模型预测的下一个 Token 与真实 Token 越接近,损失越小,预测越偏离,损失越大,可以把损失函数理解成一张成绩单,它不只是告诉模型“错了”,还要量化“错得有多严重”。
训练的整体目标,就是尽量降低损失,但模型不会看到损失之后产生主观反省,它没有“我这次做错了”的意识,损失只是一个数学信号,用来指导接下来参数应该怎样调整,因此,模型学习的本质可以概括为:
不断降低预测误差。
看起来,大模型在学习语言和知识,从数学上看,它一直在做同一件事:让自己的预测结果更接近训练数据中的真实结果。
第三阶段:错误如何变成能力?
知道自己错了还不够,真正的关键是:模型如何根据错误修改自己,这就涉及反向传播、梯度下降、学习率和参数更新。
9. 反向传播:把错误逐层传回模型内部
大模型由很多层神经网络组成,一次预测通常经过大量计算,最终才产生输出,当输出错误时,训练系统需要判断:模型内部哪些参数对错误负有责任,每个参数应该承担多大责任,应该朝哪个方向修改,反向传播就是解决这个问题的方法。
损失从输出端开始,逐层向后传递,训练系统计算每个参数对最终误差的影响,可以把它理解为一次“责任追踪”,最终答案错了,不是简单把整个模型推倒重来,而是沿着计算链条向后追查,找到哪些内部权重需要调整。
没有反向传播,损失函数只能告诉模型结果不对,却无法告诉模型应该怎样改变。
10. 梯度下降:沿着误差减小的方向前进
反向传播计算出梯度后,梯度下降负责更新参数,梯度可以理解为:如果稍微改变某个参数,损失会怎样变化,梯度下降会让参数向损失更小的方向移动,可以想象模型站在一座被浓雾笼罩的山坡上,它看不到整座山的全貌,只能感知脚下哪个方向更低。
于是向下走一步,再次测量,再向下走一步,经过无数次调整,逐渐接近误差更低的位置,大模型训练并不是一次找到正确答案,而是通过海量微小更新不断逼近。
能力不是突然被写入模型的,而是在无数次参数微调中慢慢形成。
11. 参数更新:学习最终落在哪里?
参数是模型训练过程中不断变化的内部权重,训练开始时,这些参数大多接近随机状态,模型第一次看见文本时,预测结果几乎没有意义,随着反向传播和梯度下降不断运行,参数开始发生变化,一些参数逐渐对语法关系敏感。
一些参数开始编码特定概念,一些网络层可能更擅长识别局部模式,另一些层开始形成更抽象的语义表示,需要注意的是,知识通常不会完整存储在某一个独立参数里,它往往分布在大量参数和神经元的协同结构中。
因此,大模型不像硬盘那样,把“巴黎是法国首都”保存到一个固定地址,更接近的理解是:大量参数共同形成了“法国—巴黎—首都”之间的关系结构,参数更新就是学习真正发生的地方,训练数据提供经验,损失函数衡量误差。
反向传播追踪责任,梯度下降决定方向,最后,参数把这些经验保留下来。
12. 学习率:每次应该改多少?
学习率控制每次参数更新的幅度,如果学习率太大,模型每次调整过猛,可能越过正确方向,训练过程不断震荡,甚至彻底失控,如果学习率太小,模型虽然比较稳定,但进步非常缓慢,可能训练很久也学不到足够能力,这就像纠正一个人的动作。


