【微调】大模型微调(Fine-tuning)

第一部分:概述

大模型微调(Fine-tuning),在什么业务场景下需要微调而不是直接使用基础模型?

1. 从“通才”到“专才”

可以把基础大模型(如GPT-4、Llama)看作一位接受了通识教育(海量互联网文本)的大学毕业生。他知识渊博,能写诗、会编程、懂历史,但他不熟悉你公司的具体业务流程,也不知道你的“行话”。

微调的原理,就是在预训练模型已经学到的广泛知识基础上,通过特定领域的数据集进行“增量学习”。其数学本质是:预训练模型已有了一个较好的参数起点 ( W_0 ),微调通过梯度下降调整参数为 ( W_1 ),使其在目标任务上的损失函数 ( L ) 最小化。

2.业务场景

当出现以下“温差”时,微调比“提示词工程(Prompting)”更优:

  • 知识滞后/私有化:基础模型不知道你公司内部2025年的财报数据或私有代码库。
  • 格式硬约束:你需要模型严格输出JSON Schema、特定风格的客服话术或医疗诊断报告格式,仅靠提示词无法保证100%稳定性。
  • 成本与延迟权衡:如果每次调用都带上几十个示例(Few-shot),Token消耗极大且响应慢;微调后只需简短指令即可,长期来看性价比更高

第二部分:怎么改?有哪些主流玩法?

几种常见的微调策略的优缺点 & 低秩适配(LoRA)技术

微调策略分为两大流派:全量微调(FFT)参数高效微调(PEFT)。目前业界几乎统一转向了PEFT,而其中LoRA是当之无愧的王者。

1. LoRA 技术解读(低秩适配)

全量微调需要重写一本厚厚的百科全书(原始模型权重),成本极高。LoRA(Low-Rank Adaptation)发现了一个规律:微调带来的参数变化量(( \Delta W ))是“低秩”的,即不需要更新整个矩阵,只需要用一个很小的矩阵去模拟这个变化量。

数学原理
预训练层的权重为 ( W \in \mathbb{R}^{d \times k} )。
微调时不更新 ( W ),而是引入两个小矩阵 ( B \in \mathbb{R}^{d \times r} ) 和 ( A \in \mathbb{R}^{r \times k} ),其中 ( r \ll d, k )。
前向传播变为:
[
h = Wx + \Delta Wx = Wx + BAx
]

这相当于在原有特征的“子空间”里微调,极大减少了参数量(例如原本要训练700亿参数,现在只需训练几百万参数),且由于原始权重 ( W ) 被冻结,它天然地具有防止灾难性遗忘的特性。

原始前向传播

残差相加

LoRA 旁路

输入特征

矩阵 A
r x k 可训练

矩阵 B
d x r 可训练

旁路输出

输入特征

预训练权重 W
d x k 冻结

输出

最终输出 = H + Out

2. 常见微调策略优缺点对比

策略原理优点缺点
全量微调 (FFT)更新模型全部参数上限最高,适应能力最强显存极大,训练慢,极易遗忘旧能力
LoRA在权重旁增加低秩矩阵极省显存,训练快,可插拔(切换任务只需换LoRA文件)在极其复杂的多任务并行下,简单低秩假设可能成为瓶颈
Prefix Tuning在输入前添加可训练的连续向量(前缀)不侵入原网络,参数极少前缀占用了输入序列长度,影响下游任务处理空间
Adapter在Transformer层间插入小网络模块灵活推理时增加了网络深度延迟,不如LoRA轻量

第三部分:训练调优

微调中常用的优化器 & 微调的过拟合风险如何通过正则化缓解 & 防止灾难性遗忘

1. 优化器选择(稳字当头)

微调不是从零训练,不需要“开山辟路”,只需要“精修细节”。

  • 首选:AdamW。它目前是微调领域的“黄金标准”。核心在于解耦的权重衰减(Weight Decay),即直接在原损失函数上加上 ( \frac{1}{2}\lambda |W|^2 ) 对权重进行惩罚,同时利用动量和自适应学习率,非常适合Transformer这种深层网络。
  • 次选:SGD with Momentum。在数据量极大、算力有限时,带动量的SGD更简洁,但收敛速度慢,调参较困难。
  • 关键技巧——学习率预热(Warm-up):微调初期,模型梯度方向极其杂乱。前几步先用很小的学习率(如最大学习率的1/10)“试探性”更新,再逐步升到预定值,可以有效防止初期震荡。

2. 三大正则化手段缓解过拟合

过拟合表现为模型“死记硬背”了训练集,但在测试集上表现崩盘。

  • ① 权重衰减(L2正则化):严格约束参数的大小,不让LoRA矩阵 ( A, B ) 的数值过大,强制模型学习更平滑的分布。
  • ② Dropout(丢弃法):在训练中随机“关闭”一部分神经元。微调时务必开启,能有效打破神经元之间的共适应关系,防止模型对特定的训练样本过度敏感。
  • ③ 数据增强与早停法:通过同义词替换、回译等方式扩充数据集;同时监控验证集Loss,一旦验证集Loss不再下降反而上升,立即停止训练。

3. 防止灾难性遗忘(核心难题)

“灾难性遗忘”是指模型学会新任务后,把之前学到的通用知识(如语法、逻辑推理)给覆盖掉了。解决方案可从“数据”和“正则化”两个维度入手:

  • 方案A:复习机制(数据重放)——最直观。在微调数据中,混入10%~20%的基础通用数据(如百科、新闻)。这就好比在复习新知识时,不断穿插翻阅旧课本。
  • 方案B:EWC(弹性权重巩固)——数学正则化。计算预训练模型中的每个参数对于旧任务的重要性(费希尔信息矩阵),在微调新任务时,对重要参数的移动施加强烈的惩罚,不重要的参数则可以随意改动。

开始微调

选择防护策略

数据层面

算法层面

混合重放: 新数据 + 10%~20% 旧数据/通用数据

LoRA 天然防护: 冻结原始W,只改BA

EWC 正则: 对关键参数加约束锁

模型在新旧任务上皆表现稳健

结束

特别提示:如果你使用的是LoRA,那么灾难性遗忘的风险已经大幅降低,因为原始权重 ( W ) 被完全冻结。如果发现仍有遗忘,优先尝试数据重放(方案A)


第四部分:评估与高阶挑战——怎么判断好不好?多模态怎么做?

核心问题:如何判断微调效果是否达到预期? & 在多模态微调(如图文生成)中,如何确保对齐质量?

1. 微调效果评估的三层阶梯

判断效果不能只看Loss值(Loss很低可能是严重过拟合)。

  • 第一层:静态指标(定量)
    • 对于判别类任务(分类、抽取):看Accuracy、F1-Score
    • 对于生成类任务(摘要、对话):看BLEU-4(词重叠率)、ROUGE-L(召回率导向)和Perplexity(困惑度)——困惑度越低,说明模型对输出结果的“确定性”越高,即越自信。
  • 第二层:动态验证(定性)。抽取训练集中没有的“OOD(分布外)测试集”进行盲测,重点检查模型是否出现了“幻觉”或“机械重复”。
  • 第三层:人工对齐(终极标准)。建立G-Eval机制,让人类评估员根据“有用性(Helpfulness)”、“诚实性(Honesty)”和“无害性(Harmlessness)”进行打分,或使用更强的模型(如GPT-4)当裁判来给微调后的模型排位。

2. 多模态微调(如图文生成)中的“对齐”艺术

多模态模型(如CLIP、Stable Diffusion、GPT-4V)面临的核心问题是“异构鸿沟”——文本是离散符号,图像是连续像素,它们不在同一个语义空间。

确保对齐质量的三大杀手锏:

  • ① 对比学习损失(Contrastive Loss):这是CLIP的核心。训练时,将配对的(图像,正确文本)视为正样本,将(图像,错误文本)视为负样本。微调时,强制拉近正样本对在向量空间中的余弦距离,同时推远负样本对。必须确保负样本足够“难”(Hard Negative Mining),否则模型学不到精细差异。
  • ② 交叉注意力机制(Cross-Attention):在微调过程中,监控模型最后一层的交叉注意力图(Attention Map)。高质量微调时,输入文本“一只穿红衣服的狗”,注意力图的热点应当精准激活在图像中“红色”和“狗”的区域。如果激活点混乱,说明对齐失败。
  • ③ 数据质量的“木桶效应”:在多模态微调中,模型结构不是瓶颈,数据对齐质量才是。务必对微调数据进行严格的清洗:
    • 过滤掉图文完全不匹配的噪声数据。
    • 确保描述具有细粒度(不能只说“一辆车”,要说“一辆红色的、车顶有行李架的越野车”)。
    • 使用BLIP-2 或 LLaVA等强模型对低质量图像生成高精度伪标签(Caption),再用于微调,以此提升数据侧的对齐精度。

微调全流程

通用任务

特定格式/私有知识

首选

资源充足

基础预训练模型

业务需求判断

直接提示词工程

选择微调策略

低秩适配微调

全量微调

训练工程

优化器:AdamW + Warm-up

正则化:Dropout + 权重衰减

防遗忘:EWC 或 数据重放

效果评估

定量指标 F1/BLEU/困惑度

人工/模型裁判 定性评估

是否通过

调整学习率/数据比例/重训

部署上线