news 2026/7/18 18:05:35

笔记七:大模型微调与高效训练——从 SFT 到 MoE 的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
笔记七:大模型微调与高效训练——从 SFT 到 MoE 的完整指南

目录

  • 第一部分:监督微调(SFT)与损失计算
    • 1.1 SFT 是什么?
    • 1.2 SFT 的损失是怎么计算的?(重点)
    • 1.3 预训练(CLM)和微调(SFT)的损失计算有什么区别?
    • 1.4 SFT 训练的最佳实践
  • 第二部分:LoRA 与参数高效微调
    • 2.1 为什么需要 LoRA?
    • 2.2 LoRA 的核心思想
    • 2.3 LoRA 的两个模块加在哪里?
    • 2.4 为什么只改 1% 的参数,影响却不小?
    • 2.5 为什么推理时要"吸收(合并)"LoRA?
    • 2.6 LoRA 的秩(Rank)怎么选?
    • 2.7 LoRA 的变种们
    • 2.8 QLoRA 和 DoRA 的区别
    • 2.9 QLoRA 的显存账单
  • 第三部分:混合专家模型(MoE)
    • 3.1 为什么需要 MoE?
    • 3.2 MoE 的架构拆解
    • 3.3 速度悖论
    • 3.4 负载均衡
    • 3.5 训练的核心谜团:TopK 不可导,路由器怎么学?
    • 3.6 著名的 MoE 模型
    • 3.7 总结:MoE 的优缺点

摘要:本文系统梳理了大模型训练中的三大核心主题:监督微调(SFT)的损失计算原理与最佳实践、参数高效微调方法 LoRA 及其变种的核心思想与选型指南,以及混合专家模型(MoE)的架构设计、训练谜团与工业界方案。文章以通俗易懂的比喻和手算示例,帮助读者从原理到实战全面理解这些关键技术。

第一部分:监督微调(SFT)与损失计算

1.1 SFT 是什么?

SFT(Supervised Fine-Tuning,监督微调),就是把一个已经会“文字接龙”的预训练大模型,调教成一个能听懂人话、按指令办事的智能助手。

  • 预训练模型:像个看过海量书籍的“书呆子”,只会根据上文猜下文(比如看到“今天天气真”,会接“好”)。
  • SFT 之后:变成了能回答问题的“助理”。你问它“今天天气怎么样?”,它能回答“今天天气晴朗,适合出游”。

这个过程需要给它看大量的“问题-标准答案”对,让它学习如何给出高质量的回答。

1.2 SFT 的损失是怎么计算的?(重点)

这是很多人的困惑:模型是一字一字地预测,那损失也是一字一字算的吗?

答案是:是的,数学上是“一字一字”算的,但显卡是“一眼”全看完一起算的(矩阵并行计算)。它的核心机制叫做“教师强制(Teacher Forcing)”

1.2.1 什么是“教师强制”?

在训练时,我们把“问题”和“答案”拼成一条完整的序列送进模型。模型会并行地预测每一个位置的下一个字。但关键点在于:模型预测时看到的“上文”,永远是正确的原文,而不是自己猜错的结果。

举个具体例子,我们要训练模型回答“我爱你”:

  • 训练数据:输入是 [我, 爱, 你]。
  • 模型内部计算
    • 看到 [我],预测下一个字是
    • 看到 [我, 爱],预测下一个字是

注意:在预测的时候,模型看到的输入是 [我, 爱],其中“爱”是数据里给的正确答案,而不是模型自己在第一步预测出来的结果(哪怕它第一步预测错了,算第二步时依然用正确的“爱”)。

打个比方:这就像老师给你做完形填空,句子是“我( )你”。

  • 训练时(Teacher Forcing):老师直接把正确答案“爱”写在括号里,让你看着“我爱”去填后面的“你”。就算你第一空填了“恨”,老师也会用板擦把“恨”擦掉,强行把“爱”写回去,再让你填第二空。
  • 推理时(生成答案):没有老师管你了,你第一空填了“恨”,第二空就只能基于“我恨”去填,所以会生成“我恨你”。
1.2.2 那损失到底怎么算?

我们用上一步的例子来手算一遍。

  1. 第一步:看位置 1(预测“爱”)
    • 模型根据输入的[我],预测下一个词。
    • 模型输出的原始分数(Logits)经过 Softmax 变成概率:概率(我)=0.4,概率(爱)=0.5,概率(你)=0.05,概率(EOS)=0.05
    • 计算这个位置的损失(负对数似然):Loss₁ = -log(概率_爱) = -log(0.5) ≈ 0.693
  2. 第二步:看位置 2(预测“你”)
    • 模型根据输入[我, 爱],预测下一个词。
    • 输出的概率:概率(我)=0.1,概率(爱)=0.2,概率(你)=0.6,概率(EOS)=0.1
    • 计算这个位置的损失:Loss₂ = -log(概率_你) = -log(0.6) ≈ 0.511
  3. 第三步:算出最终的 Loss
    • 因为答案长度是 2,所以总损失 = (Loss₁ + Loss₂) / 2 = (0.693 + 0.511) / 2 = 0.602
    • 这个 0.602,就是最终传回给模型、用来更新参数的那一个数字(标量)。
1.2.3 提示词(Prompt)有损失吗?

绝对没有!在 SFT 中,我们只计算“答案部分”的损失,提示词部分的标签会被设为 -100。PyTorch 的 CrossEntropyLoss 函数看到 -100 就会自动跳过,不计算损失,也不传回梯度。

打个比方:这就像老师改卷子,只改学生在答题卡上写的答案(Response),至于试卷上的题目(Prompt)本身写了什么,看都不看,更不会扣分,因为题目是本来就印在上面的!

1.3 预训练(CLM)和微调(SFT)的损失计算有什么区别?

对比维度预训练 (CLM)微调 (SFT)
数据长什么样连续的一段话:[A, B, C, D]拼凑的两段话:[问题, 答案]
标签(Label)设置[B, C, D, EOS](全是正常ID,没有-100)[-100, -100, 答案, 答案](问题部分挖掉,答案部分保留)
哪些位置算损失每个位置(除了开头的第一个字)只有“答案”部分的位置
学习目标学会预测任何一个下文单词(学语法、常识)只学会预测针对特定问题的回答(学指令跟随)

一句话总结:CLM 算所有位置,是因为全是正文;SFT 只算答案,是因为人为把前半段标记成了只读的“上下文”。

1.4 SFT 训练的最佳实践

1.4.1 数据质量:LIMA 原则

重质不重量:论文证明,1000 条极其精良的问答数据,训练效果能超过 5 万多条的粗糙数据。

好数据必须满足:

  • 多样性:涵盖问答、摘要、代码、数学、创意写作、多轮对话等。
  • 正确性:每个回答必须事实准确、格式规范。
  • 长度平衡
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/18 17:58:58

开关电源频率设计:核心原理与工程实践

1. 开关电源频率的基础概念第一次拆解开关电源时,我被电路板上那个不起眼的小磁环震惊了——它竟然能以每秒数万次的节奏控制着整个系统的能量流动。这种看似简单的周期性开关动作,背后却藏着电源设计的核心奥秘。开关频率(Switching Frequen…

作者头像 李华
网站建设 2026/7/18 17:58:29

锂电池过充过放防护与优化方案详解

1. 锂电池过充过放的危害本质锂电池过充时,正极材料中的锂离子过度脱嵌会导致晶体结构坍塌。以常见的NMC三元锂电池为例,当充电电压超过4.25V时,正极的镍锰钴氧化物会开始析出氧气,与电解液发生剧烈反应。我曾在实验室用差分扫描量…

作者头像 李华
网站建设 2026/7/18 17:57:47

BOM管理:制造业数字化转型的核心

1. BOM的基础概念与核心价值物料清单(Bill of Materials,简称BOM)是制造业的DNA图谱,它用结构化的数据语言描述了一个产品从原材料到成品的完整构成。想象一下组装一辆自行车:车架、轮胎、齿轮、螺丝等数百个零件如何准…

作者头像 李华
网站建设 2026/7/18 17:55:54

AI编程助手Cline的Prompt设计与实现解析

1. Cline 项目概述Cline 是一个基于 AI 的编程辅助工具,通过智能化的 Prompt 设计和任务执行引擎,帮助开发者更高效地完成编码任务。其核心在于将复杂的开发需求拆解为可执行的原子操作,并通过精心设计的 Prompt 工程与 AI 模型交互来实现自动…

作者头像 李华
网站建设 2026/7/18 17:55:27

PCB阻焊层与助焊层的核心区别及设计要点

1. PCB阻焊层与助焊层的本质区别在PCB制造和设计中,阻焊层(Solder Mask)和助焊层(Paste Mask)是两类完全不同的工艺层,它们的功能、制作方式和实际应用场景有着根本性的差异。作为PCB设计中最容易混淆的两个…

作者头像 李华