从硬件加速(混合精度)切入,深入到架构降本(冻结层与PEFT),再延展到数据工程(SFT指令构建)与价值升华(指令微调收益),最后收尾于模型“排毒”与“纠偏”(解决重复与幻觉)。
第一部分:概述
需要混合精度训练
在微调大模型时,显存(VRAM)是黄金资源。我们通常默认使用FP32(32位浮点数)存储参数,但这极其奢侈。
1. “混合”
混合精度不是单纯地用FP16(16位浮点数)替代FP32,而是**“三态并行”**:
- 权重主备份(FP32):始终保留一份完整的FP32权重用于累加更新(防止梯度下溢)。
- 计算与前传(FP16/BF16):将FP32权重转换为FP16进行矩阵乘法(GeMM),计算速度翻倍,显存占用减半。
- 梯度存储(FP16):反向传播时计算的梯度使用FP16存储。
2. 用“混合”而非纯“半精度”?
如果完全使用FP16,由于它的数值范围窄(容易溢出),当梯度数值小于 ( 5.96 \times 10^{-8} ) 时,会被直接“抹零”,导致模型无法收敛。
3. 损失缩放(Loss Scaling)
在反向传播前,将损失值放大 ( 2^{12} ) 到 ( 2^{16} ) 倍,梯度随之放大,落入FP16的有效表示范围;更新权重前再将梯度缩回原尺度。这一放一缩,既保住了速度与显存,又没丢掉精度。
第二部分:架构降本核心——冻结层的作用与PEFT的极致压缩
核心问题:冻结层在微调中的作用是什么? & 参数高效微调(PEFT)如何减少计算成本?
这两个问题是“母子关系”,理解“冻结”是理解PEFT的前提。
1. 冻结层的本质:把“特征提取器”变成“只读数据库”
冻结层意味着在反向传播时,不计算该层的梯度,且不更新该层权重。
- 作用一:显存断崖式下降。反向传播需要存储每一层的中间激活值(Activations)用于计算梯度。冻结底层后,前向传播完该层即可释放显存,不再需要保留其计算图。
- 作用二:保留通用知识。大模型底层学习的是“词法、句法、通用语义”,强行改动容易引发灾难性遗忘,冻结它们相当于保留了模型作为“通才”的核心素养。
2. PEFT 的降本公式(数学视角)
假设模型维度为 ( d=4096 ),原权重矩阵 ( W ) 尺寸为 ( d \times d )。
- 全量微调成本:需要训练 ( 4096 \times 4096 \approx 1678 ) 万个参数,必须为每个参数存储梯度和两种动量状态(Adam优化器需额外占用12倍于参数的显存)。
- PEFT(以LoRA为例)降本逻辑:
设置秩 ( r=8 ),引入 ( A (8 \times 4096) ) 和 ( B (4096 \times 8) )。
可训练参数量= ( 4096 \times 8 + 8 \times 4096 = 6.5 ) 万。
显存节省比例= ( 1678万 / 6.5万 \approx 258 ) 倍。
3. 为什么PEFT能大幅减少计算FLOPs?
因为冻结了原始权重 ( W ),前向传播中 ( Wx ) 这部分巨大的矩阵乘法结果可以缓存(Cache)复用。每次迭代只需计算极小的 ( BAx ) 增量部分。这使得GPU的算力(FLOPs)消耗从“重载运算”降级为“轻量级微调”。
第三部分:数据燃料精炼
SFT 指令微调数据构建
指令微调(Supervised Fine-Tuning)是将“续写机”转变为“对话助手”的关键。数据的质量远大于数量(几千条高质量数据往往优于百万条垃圾数据)。
1. 数据构建的“三源法”
- ① 公开基准清洗(开源):取用 Alpaca、ShareGPT 或 Belle 等公开数据集,但必须经过去重和敏感词过滤。直接用原始数据容易让模型输出“AI味”极重的套话。
- ② 真实场景脱敏(自产):从业务日志中抽取真实的用户与客服/助手的多轮对话,脱敏后转化为
{"instruction": "用户问", "output": "标准答"}格式。这是微调中价值最高的数据。 - ③ 强模型反哺(Self-Instruct):利用 GPT-4 或 Claude 作为“教师”,给无标注的原始文本自动生成高质量的“指令-回复”对。
2. 关键细节:响应质量的“金线”标准
构建时,必须设置严格的拒答数据。例如,对于“如何攻击网站”这类指令,输出必须是“对不起,我不能提供帮助”。如果数据中缺乏拒答样本,模型微调后会对有害指令唯命是从。
第四部分:战略价值与纠偏
指令微调的好处 & 模型输出重复和幻觉微调解决
1. 指令微调的“三大降维打击”优势
- 优势一:零样本(Zero-shot)泛化能力。经过指令微调,模型学会了“听从指令”这个元能力(Meta-Learning)。即使面对没见过的任务表述,它也能理解并执行,不再需要繁琐的Few-shot示例。
- 优势二:对齐人类偏好。基础模型只在乎“下一个词的概率”,而指令微调后的模型学会在乎“回复是否有用、是否切题”,输出结构更规整。
- 优势三:交互体验质变。从“续写下文”变为“解答问题”,极大地降低了非技术用户的使用门槛。
2. 针对性解决“输出重复”与“幻觉”问题
这两个是微调中最高频的“翻车事故”,可以通过微调策略针对性修复:
① 解决输出重复(死循环式复读)
- 根源:模型陷入了概率分布的“高确定性陷阱”,即某个词的预测概率极高,导致陷入循环。
- 微调对策:在构建SFT数据时,刻意增加“去重惩罚”样本。此外,引入对比性训练(SimCTG),在损失函数中加入对比损失,强制模型增大不同Token序列之间的向量距离,防止其停留在语义平坦区反复输出。
② 解决幻觉(一本正经地胡说八道)
- 根源:模型为了“讨好”指令,强行生成看似连贯但无事实依据的内容。
- 微调对策(核心手段):
- 检索增强微调(RAFT):在微调数据中,强制将检索到的外部知识作为上下文前缀(Context),让模型的回答严格基于给定的文档。微调时不断训练模型遵循“未提供信息时,明确回答‘我无法从现有资料中确认’”的行为模式。
- 事实性微调(Factuality Tuning):在SFT数据中加入**“不确定性表达”样本。例如,当问题模糊时,标准答案不是硬猜,而是“根据现有信息,可能存在以下几种情况……”。通过这种软标签(Soft Label)**微调,显著降低模型硬生成的幻觉概率。