微调你需要了解的一些事情
经常在各种文章或视频中听到“微调”这个词,而与它相关的还有“全量微调”、“LoRA 微调”,更专业的还包括“SFT”、“RLHF”等名词。刚接触这些术语时,常常会感到困惑:“它们分别属于训练的哪个阶段?彼此又是什么关系?”。
本文将借此机会,对这些概念进行系统梳理与澄清。上图是一个大语言模型(LLM, Large Language Model)诞生的大致过程,我们可以简要地分成三个阶段:
-
预训练(Pre-training)
从网络、图书、代码仓库等来源收集海量的数据,然后进行初次训练,得到一个基础模型(Base Model)。模型在这个阶段具备了通用语言理解和基础知识,但尚未具备处理具体任务(如问答、对话等)的能力。 -
微调(Fine-Tuning) 这是将基础模型变成能处理实际任务(比如聊天、写代码、总结文章)的关键一步。根据使用场景的不同,我们通常会基于特定数据集进一步训练模型。
-
部署(Deployment) 当模型训练完成,就可以部署上线了,提供 API 或 Web 服务供用户使用。
接下来我们重点讨论第二阶段:微调(Fine-Tuning)。
微调(Fine-Tuning)🔗
所谓“微调”,是一个覆盖范围较广的概念。很多人听到微调这个词,以为就是简单地再训练一下,但实际上它包含了一系列的过程。常见的 SFT 和 RLHF 都属于微调阶段的内容。
我们为什么要微调?虽然预训练模型已经拥有大量通用知识,但在很多真实场景中,它可能会出现理解偏差或不符合任务要求的情况。
例如:
TXT问:“请总结这篇文章的内容。” 预训练模型可能会误解成:“请续写这段话。” 虽然其底层机制仍是“预测下一个 token”,但由于缺乏指令训练,模型往往无法准确识别任务意图。
另外在特定领域(如医疗、金融)或者企业内部数据(私有文档、对话流程)中,模型缺乏专属知识,也需要我们进行进一步训练。
所以可以理解为:
微调是一个过程,包含多个步骤,常见的有:
- SFT
- RLHF
SFT:Supervised Fine-Tuning(监督微调)🔗
这是微调的第一步,目标是:教会模型按照人类的指令来完成任务。
我们通常会准备结构化的、有明确指令和参考答案的数据集,比如下面这些:
-
指令:请介绍一下光合作用
回答:光合作用是植物利用光能,将二氧化碳和水合成为有机物并释放氧气的过程。 -
指令:你是一位风趣幽默的导游,请介绍一下故宫
回答:各位游客欢迎来到紫禁城,它是中国古代皇家宫殿,走进这片金碧辉煌的世界…… -
指令:用 Python 写一个函数,计算斐波那契数列的第 n 项
回答:PYTHONdef fibonacci(n): if n <= 1: return n return fibonacci(n - 1) + fibonacci(n - 2)
这些样本数据不仅有助于模型理解任务意图,还提供了高质量参考答案,确保学习方向正确。
根据这些数据集训练完成之后,就会得到一个 SFT 模型(SFT Model)。
RLHF:Reinforcement Learning from Human Feedback(人类反馈强化学习)🔗
SFT 之后,模型已经能回答问题了,但这时候的回答可能还不够“好”,比如存在以下问题:
- 回答内容虽然正确,但可能过于啰嗦、跑题,甚至语气不礼貌。
- 在多个可能的正确答案中,有的更贴近人类的表达习惯,有的则显得“AI 味”很浓,缺乏人情味。
为了解决这些问题,我们需要让模型的“行为”和“价值观”进一步与人类的偏好对齐。这个至关重要的阶段,就叫做RLHF。
在正式开始 RLHF 之前,我们需要先“创造”一个能够理解人类偏好的“评判模型”。想象一下,一个刚毕业的实习生(SFT 后的模型)虽然掌握了专业技能,但还不太懂职场沟通的艺术。我们需要一位经验丰富的导师来指导他,告诉他哪种沟通方式更好。但在 AI 的世界里,我们不可能让一个人类导师实时在线指导,所以我们选择预先训练一个“评判模型”,也就是奖励模型(Reward Model, RM)。它的任务是:根据人类偏好,为模型生成的回答打一个能反映质量的奖励分数。
整个 RLHF 的流程通常可划分为三个关键步骤:
-
第一步:收集人类偏好数据,为“导师”提供教材 我们让 SFT 模型对同一个问题生成多个不同的回答,然后请人类标注员对这些回答进行排序,选出哪个更好。
- 例子:对于问题“我想减肥,有什么建议吗?”
- 回答 A:“很棒的想法!健康饮食和规律运动是关键。您可以先尝试每天散步 30 分钟,并减少高糖饮料的摄入。”(正面、可行、有帮助)
- 回答 B:“节食。不要吃碳水化合物。”(简单粗暴,可能不健康)
- 回答 C:“减肥很难,很多人都失败了。”(消极,无用)
- 人类标注员会给出明确的偏好排序:A > B > C。
- 例子:对于问题“我想减肥,有什么建议吗?”
-
第二步:训练奖励模型(Reward Model),让“导师”上岗 我们使用海量的、类似上一步的偏好排序数据,来训练这个奖励模型。最终,它将学会精准地预测对于任意一个回答,人类会给它打多高的“奖励分数”。
-
第三步:通过强化学习优化主模型,让“实习生”在“导师”的指导下成长 这是最后也是最关键的一步。主模型生成回答后,并由奖励模型实时打分。通过强化学习算法(如 PPO),主模型会不断调整自身的参数,目标只有一个:生成能让奖励模型打出最高分的回答。
这个循环训练的过程,类似实习生在导师持续指导和评分下逐步成长的过程。
最终,经过 RLHF“对齐”训练的模型,其回答会更安全、表达更自然、也更有帮助性,从而成为一个真正成熟、可靠的 AI 助手。
微调的实现方式🔗
在介绍完微调的两个核心阶段(SFT 和 RLHF)之后,我们再来看实现它们的两种主流技术手段:全量微调(Full Fine-Tuning) 和 PEFT (Parameter-Efficient Fine-Tuning, 参数高效性微调)。你可以把它们理解为在 SFT 或 RLHF 阶段,可供选择的两种不同的“施工方案”。
这里你可能会有疑问:为什么没有提 LoRA、QLoRA 这些名词?
这是因为,无论是 LoRA 还是其优化版 QLoRA,它们都属于 PEFT 这个大家族下的一个具体分支。PEFT 是一个总称,其背后的核心思想都是相近的。
全量微调(Full Fine-Tuning)🔗
模型在设计之初,其参数规模就已确定。例如,一个 7B 模型,就表示它有 70 亿个参数。所谓全量微调,就是指在训练时,对模型所有的参数进行更新和调整,网络中的每一层都参与训练。
-
优点:
- 灵活性和效果上限最高。可以最彻底地让模型“变成”你想要的样子。
-
缺点:
- 训练资源要求极高。需要大量的 GPU 显存和长时间的训练,成本高昂,不太适合普通开发者或小型团队使用。
PEFT (Parameter-Efficient Fine-Tuning, 参数高效性微调)🔗
PEFT 旗下有多种具体的微调方法,这里我们介绍其中最常见、也最成功的一种:LoRA。
LoRA(Low-Rank Adaptation,低秩适配)
这是一种更高效、更资源友好的微调方法,它的核心思想是:
我并不需要直接修改庞大而笨重的原始权重矩阵 W,而是可以通过引入两个“轻量级”的小矩阵 A 和 B,来模拟对 W 的增量更新。最终的计算效果可近似为:
W_new = W + α·A·B
,其中 α 是可调的缩放因子,用于控制更新强度。 这个公式虽然简单,但背后体现的是一种“低秩近似”的思想:用更少的参数模拟大模型的行为。
其中,A 和 B 是两个非常小的矩阵,在整个训练过程中,我们只训练它们,而原始的 W 始终保持冻结。
举个例子,直观感受一下效率差异:
- 假设原始权重矩阵 W 的维度是
1000×1000
,总参数量是 1,000,000。 - 如果我们设置 LoRA 的“秩”(Rank, r,可以理解为信息压缩的程度)为一个很小的值,比如
r = 8
:- 那么矩阵 A 的维度就是
1000×8
,矩阵 B 的维度是8×1000
。 - 我们需要训练的总参数量就变成了
(1000 * 8) + (8 * 1000) = 16,000
。
- 那么矩阵 A 的维度就是
相比全量微调需要调整 1,000,000
个参数,LoRA 只需调整 16,000
个,效率提升了超过 60 倍,这就是它的魅力所在。
-
优点:
- 训练成本极低,速度快,对硬件要求友好。
- 可以针对不同任务,快速微调出多个轻量的 LoRA“适配器”,即插即用,非常灵活。
- 非常适合个人开发者、小型任务和私有化部署场景。
-
缺点:
- 对模型能力的修改范围相对有限,在某些极其复杂的任务上,效果可能不如全量微调来得彻底。
总结🔗
最后,我们用一张表格来总结一下这些核心概念的关系:
概念 | 英文全称 | 核心作用 | 所属类型 |
---|---|---|---|
微调 | Fine-Tuning | 让基础模型适应具体任务 | 整体过程 |
监督微调 | SFT (Supervised Fine-Tuning) | 教模型完成特定任务(指令跟随) | 微调步骤 |
人类反馈强化学习 | RLHF (Reinforcement Learning from Human Feedback) | 对齐人类偏好,优化回答质量 | 微调步骤 |
全量微调 | Full Fine-Tuning | 对所有参数进行训练和更新 | 实现手段/工具 |
LoRA | LoRA (Low-Rank Adaptation) | 仅训练新增参数,保留主模型权重 | 实现手段/工具 (PEFT 的一种) |