LLM的训练过程

一般来说,训练一个完整的 LLM 需要经过如下图中的三个阶段——Pretrain、SFT 和 RLHF。

第一阶段:Pretrain

Pretrain(预训练)可以说是大模型“练基本功”的第一步,也是最烧钱、最耗资源的一步。就像让一个AI读遍互联网上所有的书和文章,自己学着怎么把话接下去。

LLM 的预训练和传统预训练模型非常类似,现在主流的大模型,比如GPT、LLaMA,都用的是一种叫“Decoder-Only”的类 GPT 结构。它们训练的方式特别自然——就是给你一句话的前半部分,让你猜下一个字该是什么。这跟我们自己小时候学造句、写作文的逻辑挺像的,一点一点往下续。

你可能会问,那这跟以前的预训练模型(比如BERT)有啥不同?
说白了,最大的差别就是:大模型实在是太大了。

以前的BERT-large,BERT-large 模型由 24个 Encoder 层组成,hidden_size 为 1024,有 16个头,整体参数量为 3亿(340M),训练用了30多亿个词,在当时已经算是巨无霸了,用了64块顶级TPU跑了四天才训完。

而现在我们说的大语言模型(LLM),动不动就百亿、千亿参数。GPT-3,参数量高达1750亿,是BERT的几百倍不止。
就算是现在一些“轻量版”的开源模型,比如Qwen-1.8B,也差不多有18亿参数——放在五年前,这已经是个大模型了。

一般而言的 LLM 通常具有数百亿甚至上千亿参数,即使是广义上最小的 LLM,一般也有十亿(1B)以上的参数量。例如以开山之作 GPT-3 为例,其有 96个 Decoder 层,12288 的 hidden_size 和 96个头,共有 1750亿(175B)参数,比 BERT 大出快 3个数量级。即使是目前流行的小型 LLM 如 Qwen-1.8B,其也有 24个 Decoder 层、2048的 hidden_size 和 16个注意力头,整体参数量达到 18亿(1.8B)。

模型 hidden_layers hidden_size heads 整体参数量 预训练数据量
BERT-base 12 768 12 0.1B 3B
BERT-large 24 1024 16 0.3B 3B
Qwen-1.8B 24 2048 16 1.8B 2.2T
LLaMA-7B 32 4096 32 7B 1T
GPT-3 96 12288 96 175B 300B

第二阶段:有监督微调 (Supervised Fine-Tuning, SFT)

目标:教模型模仿人类,学会对话的基本格式和指令跟随能力。

在这个阶段,模型学习的是“什么是好的回答”。

对于能力有限的传统预训练模型,我们需要针对每一个下游任务单独对其进行微调以训练模型在该任务上的表现。例如要解决文本分类问题,需要对 BERT 进行文本分类的微调;要解决实体识别的问题,就需要进行实体识别任务的微调。

而面对能力强大的 LLM,我们往往不再是在指定下游任务上构造有监督数据进行微调,而是选择训练模型的“通用指令遵循能力”,也就是一般通过指令微调的方式来进行 SFT。

所谓指令微调,即我们训练的输入是各种类型的用户指令,而需要模型拟合的输出则是我们希望模型在收到该指令后做出的回复。例如,我们的一条训练样本可以是:

1
2
input:告诉我今天的天气预报?
output:根据天气预报,今天天气是晴转多云,最高温度26摄氏度,最低温度9摄氏度,昼夜温差大,请注意保暖哦

模型训练:将这些“提示-回答”对组成一个高质量的、有监督的微调数据集。

进行微调:用这个数据集来微调(Fine-Tune)预训练好的基础GPT模型。模型通过学习这些范例,开始理解指令的意图,并模仿人类生成符合期望格式和风格的回答。

通俗比喻:
这就像教一个已经博览群书(预训练)的学生如何参加问答比赛。我们给他看大量的“标准问题”和“完美答案”(人工编写的对话),让他学习和模仿,知道遇到什么样的问题,应该给出什么样格式和内容的回答。

阶段成果:
一个经过SFT微调的模型。它已经能很好地遵循指令,但其回答的质量和多样性受限于人工编写的数据量,并且它还不具备分辨答案好坏的能力。

类似于 Pretrain,SFT 的数据质量和数据配比也是决定模型指令遵循能力的重要因素。

首先是指令数据量及覆盖范围。为了使 LLM 能够获得泛化的指令遵循能力,即能够在未训练的指令上表现良好,需要收集大量类别各异的用户指令和对应回复对 LLM 进行训练。一般来说,在单个任务上 500~1000 的训练样本就可以获得不错的微调效果。但是,为了让 LLM 获得泛化的指令遵循能力,在多种任务指令上表现良好,需要在训练数据集中覆盖多种类型的任务指令,同时也需要相对较大的训练数据量,表现良好的开源 LLM SFT 数据量一般在数 B token 左右。

为提高 LLM 的泛化能力,指令数据集的覆盖范围自然是越大越好。但是,多种不同类型的指令数据之间的配比也是 LLM 训练的一大挑战。OpenAI 训练的 InstructGPT(即 ChatGPT 前身)使用了源自于用户使用其 API 的十种指令:

指令类型 占比
文本生成 45.6%
开放域问答 12.4%
头脑风暴 11.2%
聊天 8.4%
文本转写 6.6%
文本总结 4.2%
文本分类 3.5%
其他 3.5%
特定域问答 2.6%
文本抽取 1.9%

第三阶段:RLHF

RLHF,全称是 Reinforcement Learning from Human Feedback,即人类反馈强化学习,是利用强化学习来训练 LLM 的关键步骤。

相较于在 GPT-3 就已经初见雏形的 SFT,RLHF 往往被认为是 ChatGPT 相较于 GPT-3 的最核心突破。事实上,从功能上出发,我们可以将 LLM 的训练过程分成预训练与对齐(alignment)两个阶段。

预训练的核心作用是赋予模型海量的知识,而所谓对齐,其实就是让模型与人类价值观一致,从而输出人类希望其输出的内容。

在这个过程中,SFT 是让 LLM 和人类的指令对齐,从而具有指令遵循能力;而 RLHF 则是从更深层次令 LLM 和人类价值观对齐,令其达到安全、有用、无害的核心标准。

ChatGPT 在技术报告中将对齐分成三个阶段,后面两个阶段训练 RM 和 PPO 训练。

训练奖励模型 (Reward Model Training)

目标:训练一个“裁判”模型,让它学会判断什么样的回答更受人类偏爱。

在这个阶段,模型学习的是“如何评价回答的好坏”。

数据准备:

首先,从数据集中选取一个提示(Prompt)。

然后,让第一阶段微调过的SFT模型针对这个提示生成多个不同的回答(例如4到9个)。

接着,人类标注员会对这些回答进行排序,从最好到最差进行标记。

数据转换:这些排序数据会被转换成大量的比较数据对。例如,如果排序是 A > C > B,那么就可以生成 (A, C), (A, B), (C, B) 三个数据对,表示人类更喜欢A而不是C,更喜欢A而不是B等。

训练“裁判”:用这些比较数据来训练一个全新的、独立的模型,这个模型被称为奖励模型(Reward Model, RM)。奖励模型的输入是一个“提示+回答”对,输出则是一个标量分数(Reward)。通过训练,奖励模型学会了给人类偏爱的回答打高分,给不好的回答打低分。

通俗比喻:
继续上面的比喻,现在我们不再直接给学生标准答案。而是让他针对一个问题写出好几份不同的答案草稿。然后我们(人类标注员)告诉他:“A答案比C好,C答案比B好”。通过成千上万次这样的比较练习,这个学生心中就形成了一套“评分标准”(奖励模型),他自己就具备了判断答案好坏的“品味”。

阶段成果:
一个能模仿人类偏好进行打分的奖励模型。这个模型是第三阶段强化学习的核心基础。

PPO,Proximal Policy Optimization,近端策略优化算法

在完成 RM 训练之后,就可以使用 PPO 算法来进行强化学习训练。PPO,Proximal Policy Optimization,近端策略优化算法,是一种经典的 RL 算法。事实上,强化学习训练时也可以使用其他的强化学习算法,但目前 PPO 算法因为成熟、成本较低,还是最适合 RLHF 的算法。

在具体 PPO 训练过程中,会存在四个模型。两个 LLM 和两个 RM。两个 LLM 分别是进行微调、参数更新的 actor model 和不进行参数更新的 ref model,均是从 SFT 之后的 LLM 初始化的。两个 RM 分别是进行参数更新的 critic model 和不进行参数更新的 reward model,均是从上一步训练的 RM 初始化的。目的是,根据奖励信号来更新LLM的参数,目标是让LLM生成能够获得更高奖励(更高分)的回答。同时,PPO会确保更新后的模型不会与初始的SFT模型偏离太远,以保持语言的流畅性和稳定性。


觉得不错的话,支持一根棒棒糖吧 ୧(๑•̀⌄•́๑)૭



wechat pay



alipay

LLM的训练过程
http://yuting0907.github.io/posts/2025/09/9b8e12b6.html
作者
Echo Yu
发布于
2025年9月19日
许可协议