Theme
下面按“期末复习笔记”整理 Lecture 13 + 14。Lecture 13 主线是 Base LM → SFT aligned model;Lecture 14 主线是 Full fine-tuning → PEFT → LoRA → QLoRA。材料来自你上传的 lecture-13 与 lecture-14。
总体进化树
text
Pretraining
↓
Base foundation model
↓ 为什么不够?
只会 continuation,不一定 helpful / harmless / honest
↓
Supervised Fine-Tuning, SFT
├─ Single-task SFT:一个任务很多样本 → 专家模型
└─ Multi-task SFT / Instruction tuning:多任务混合 → 通用助手
↓
工业化 SFT
├─ 数据构造:人工标注 → Self-Instruct / AI-generated data
├─ Loss mask:只训练回答部分,或给 prompt 小权重
├─ 课程学习:easy → hard
└─ 多任务混合:防止 catastrophic forgetting
↓
Full-parameter FT 太贵
↓
PEFT
├─ classifier head:参数少,但适应能力弱
├─ adapter layer:适应能力更强,但增加推理延迟
├─ LoRA:低秩更新,几乎无额外推理延迟
└─ QLoRA:LoRA + 4-bit quantization + NF4 + paged optimizerLecture 13:Supervised Fine-Tuning, SFT
1. 本章核心目标【★★★★★】
预训练模型的目标是学会“语言建模”,也就是给定前文预测下一个 token。但 alignment 的目标不是让模型单纯续写,而是让模型变成一个可交互助手。
核心问题是:
text
Pretrained LM is good at continuing text,
but not necessarily good at following instructions.所以 SFT 要解决的是:
| 目标 | 含义 | 预训练模型的问题 | SFT 想修正什么 |
|---|---|---|---|
| Helpful | 能按用户指令完成任务 | 可能只是续写,不回答问题 | 学会 instruction-following |
| Harmless | 遵守安全约束 | 可能生成有害内容 | 学会拒绝 unsafe request |
| Honest | 承认不确定性,减少幻觉 | 可能胡编 | 学会更可靠地回答 |
直觉上,pretraining 让模型获得语言和知识能力;SFT 把这些能力“格式化”为 assistant behavior。
2. Pretraining vs SFT【★★★★★】
两者数学形式非常像,核心都是 next-token prediction / maximum likelihood。
区别不在 loss 形式,而在数据分布。
| 项目 | Pretraining | SFT |
|---|---|---|
| 数据 | 大规模 raw text | prompt-response pairs |
| 学习目标 | 学会语言统计规律和世界知识 | 学会按指令输出高质量回答 |
| 数据规模 | 极大 | 相对较小 |
| loss 是否覆盖全部文本 | 通常覆盖训练文本 | 通常 mask 掉 instruction,只对 response 算 loss |
| 结果 | base model | aligned / instruction-following model |
重要理解:SFT 不是换了一个神秘目标函数,而是用监督问答数据把“续写模型”校准成“助手模型”。
3. SFT 的两种形态【★★★★★】
3.1 Single-task SFT
形式:
text
many examples from one task → specialized model比如只训练 summarization、classification、translation 或 coding bug fixing。优点是特定任务强,缺点是泛化较弱。
3.2 Multi-task SFT / Instruction Tuning
形式:
text
diverse tasks mixed in one dataset → generalist model它把 QA、summarization、translation、classification、multi-turn chat、few-shot imitation 等任务混合起来,让模型学到更抽象的“服从指令”能力。
期末重点:instruction tuning 本质上是 multi-task SFT,不是单个任务微调。
4. SFT 数据来源:人工标注 → 机器生成【★★★★★】
4.1 早期:人工标注
InstructGPT 早期收集了 11,295 个由 annotators 写出的 diverse prompts,包含 QA、多轮聊天、few-shot imitation 等。
人工标注的优点:
| 优点 | 解释 |
|---|---|
| 质量高 | 人类可以写出符合期望行为的答案 |
| 不依赖 teacher model | 早期没有足够强的 aligned model |
| 避免 self-generated error amplification | 弱模型自己生成数据会放大错误 |
人工标注的缺点:
| 缺点 | 解释 |
|---|---|
| 慢 | 写 prompt 和 response 很费时间 |
| 贵 | 需要雇佣 annotators / experts |
| 多样性有限 | 人会疲劳,很难持续创造大量不同任务 |
| 规模受限 | 难以覆盖足够多场景 |
LIMA 的观点是:alignment 不一定需要海量数据,因为 SFT 主要学习 assistant behavior,不是重新学习世界知识。
4.2 后期:AI-generated SFT data
代表方法是 Self-Instruct。
流程可以理解为:
text
少量 seed tasks
↓
LM 生成新 instructions
↓
判断 task 类型:是否需要 input
↓
生成 input-output instances
↓
filtering
↓
加入 task pool,继续迭代Self-Instruct 的核心思想是:当 teacher model 足够强时,可以从人工标签迁移到机器标签,从而大规模扩展 instruction data。
5. 常见 SFT 数据格式【★★★★☆】
| 格式 | 适用场景 | 结构 |
|---|---|---|
| Alpaca format | single-turn | instruction / input / output |
| GPT format | multi-turn | conversations: role + value |
| ChatML format | role-based chat | system / user / assistant |
期末容易考概念:这些格式本质上只是 prompt-response 的序列化方式,最终都会变成 token sequence 输入 decoder-only LM。
6. SFT Loss Function【★★★★★】
课件给出的数据对:
其中:
| 符号 | 含义 |
|---|---|
| SFT 数据集 | |
| 第 个 instruction / prompt / user input | |
| 第 个 reference response / completion | |
| 第 个 response 的第 个 token | |
| response 中第 个 token 前面的 tokens | |
| 模型参数 | |
| 参数为 的模型预测概率 | |
| response 长度 |
SFT loss:
含义:给定 prompt 和之前已经生成的 response tokens ,模型要最大化正确 token 的概率。
它等价于最大化:
取负 log 后变成 cross-entropy / negative log-likelihood。
Loss mask 的关键点【★★★★★】
SFT 通常不对 prompt 部分算 loss,只对 assistant response 算 loss。
也就是:
其中:
| 符号 | 含义 |
|---|---|
| 拼接后的完整 token sequence 中第 个 token | |
| 前 个 token | |
| loss mask 权重 | |
| prompt token 不参与 loss | |
| response token 参与 loss | |
| prompt token 以小权重参与 loss |
如果 prompt loss weight = 0,模型完全专注于学习“如何回答”。如果 prompt loss weight = 0.1,则相当于给 prompt 也保留少量语言建模信号,可以缓解 catastrophic forgetting。
重点直觉:SFT 的目的不是让模型背 prompt,而是让模型在看到 prompt 后学会输出 assistant response。
7. SFT 的效果【★★★★☆】
课件中强调:SFT 对减少 hallucination 很有效,甚至在 InstructGPT 的分析里,SFT 阶段比 PPO 阶段更直接提升 honesty。
可以记成:
text
SFT = 最直接教模型“什么是好回答”的阶段
PPO/RLHF = 后续用 preference signal 进一步优化SFT 后模型会更会:
- obey explicit constraints;
- attempt correct instruction;
- reduce hallucinations;
- use appropriate language as assistant。
8. 工业 SFT:SWE-Lego case study【★★★★☆】
SWE-Lego 是面向 coding agent / software issue resolving 的 SFT 数据构造案例。
任务形式:
text
输入:repository + bug fixing task + system prompt
输出:bug-fixing trajectorytrajectory 包括:
text
read files → edit files → run tests → observe execution feedback → refine edits关键机制:
| 机制 | 作用 |
|---|---|
| repository collection | 收集真实代码仓库 |
| sandbox construction | 构造可执行环境 |
| task creation | 真实 PR 或 synthetic bug injection |
| trajectory rollout | 让 agent 生成修 bug 步骤 |
| validation | 用测试判断是否修复成功 |
| error masking | 错误轨迹不作为正样本训练 |
| curriculum learning | 先学简单任务,再学复杂 bug fixing |
Synthetic data curation 有两种方法:
| 方法 | 含义 |
|---|---|
| LLM Rewrite | 只根据 function header 和 docstring 重写代码,从而制造 bug |
| AST Reformulation | 修改抽象语法树,比如删除 conditional / loop,修改 operator 或 dependency |
课程学习的原因是:base model 一开始不能直接学复杂 bug fixing,需要先学会读代码、局部修改、运行测试,再逐渐学习长轨迹、多文件修复。
9. Multi-task SFT 与 Catastrophic Forgetting【★★★★★】
课件最后强调:multi-task SFT 不是越混越好。
有三类能力:
text
math / coding / general如果直接混太多多任务数据,可能导致某些已有能力下降。原因是不同任务语义和输出格式冲突,梯度方向可能互相干扰。
结论:
text
small amount of mixing can help when task-specific SFT data are scarce,
but too much mixing may reduce performance.Dual-stage mixed fine-tuning 的思想是:
text
Stage 1:学习或强化 specific ability
Stage 2:混入少量 general data,防止遗忘,同时保留泛化能力Lecture 14:PEFT, LoRA, QLoRA
1. 本章核心目标【★★★★★】
Lecture 14 的核心问题是:
text
Full-parameter fine-tuning 太贵,资源有限的组织如何训练 / 微调大模型?所以方法演进是:
text
Full FT
↓ 太贵
PEFT
↓ 参数更新应当在低维子空间
LoRA
↓ frozen backbone 仍然要存 16-bit
QLoRA
↓ 4-bit quantized backbone + LoRA adapters2. Full-parameter fine-tuning 为什么贵【★★★★★】
full-parameter fine-tuning 要更新所有参数。以 16-bit fine-tuning 为例,每个参数训练时不仅要存 weight,还要存 gradient 和 Adam optimizer states。
课件给出的 memory cost:
| 部分 | 位数 |
|---|---|
| weight | 16 bits |
| weight gradient | 16 bits |
| Adam first moment | 32 bits |
| Adam second moment | 32 bits |
| 总计 | 96 bits = 12 bytes |
Adam 更新公式:
符号解释:
| 符号 | 含义 |
|---|---|
| 当前 step 的梯度 | |
| 一阶动量,类似梯度滑动平均 | |
| 二阶动量,类似梯度平方的滑动平均 | |
| momentum decay 系数 | |
| bias-corrected moments | |
| learning rate | |
| 防止除零的小常数 |
65B 模型显存估算:
如果一张 A6000 是 48GB,则大约需要:
所以约等于 17 张 A6000。
这就是 PEFT 的动机。
3. PEFT 的基本思想【★★★★★】
PEFT:Parameter-efficient Fine-tuning,只更新一小部分参数。
直觉:
text
不是重写整个大脑,而是给模型戴一副任务专用眼镜。为什么少量参数足够?
3.1 Parameter Overload
大模型参数极多,但特定任务不需要改变所有参数。很多参数只是提供通用知识和表示能力。
3.2 Intrinsic Dimension
虽然完整参数空间维度很高,但特定任务需要的有效更新方向可能位于低维子空间。
也就是:
其中:
| 符号 | 含义 |
|---|---|
| 原始参数空间维度 | |
| intrinsic dimension | |
| 有效更新所在低维子空间 | |
| fine-tuning 需要的参数改变量 |
核心直觉:pretraining 已经把知识空间组织好了,fine-tuning 只需要在局部低维 manifold 上移动一点点。
4. Intrinsic Dimension 的数学形式【★★★★★】
课件给出的低维随机投影形式:
其中:
| 符号 | 含义 |
|---|---|
| 高维参数空间中的 fine-tuned 参数 | |
| 原始 pretrained 参数 | |
| 低维可训练参数 | |
| 固定随机投影矩阵 | |
| 低维子空间维度 | |
| 完整参数维度 |
含义:我们不直接在 -维空间更新参数,而是只训练 -维向量,再通过固定矩阵 投影到高维空间。
实验定义:
text
能达到 full fine-tuning 90% performance 所需的最小 d,
称为该模型在该任务上的 intrinsic dimension。课件结论:
- 同一个 RoBERTa 模型,不同任务需要不同 intrinsic dimension。
- pretraining steps 越多,intrinsic dimension 越低。
- 模型参数越多,intrinsic dimension 往往越低。
- intrinsic dimension 越高,多个任务上的表现越差。
考试重点:PEFT 的理论动机不是“随机省参数”,而是 fine-tuning updates 本身具有低维结构。
5. 从 Intrinsic Dimension 到 Low Rank【★★★★★】
如果参数更新 的有效变化位于低维空间,那么对于矩阵权重 ,可以假设:
虽然形状很大,但 rank 很低:
其中:
| 符号 | 含义 |
|---|---|
| 原始权重矩阵 | |
| fine-tuning 产生的权重更新 | |
| 低秩维度 | |
| 矩阵输入输出维度 |
这就是 LoRA 的核心动机。
6. LoRA:Low-Rank Adaptation【★★★★★】
LoRA 不直接训练 ,而是把它分解成两个小矩阵:
前向传播:
矩阵维度:
符号解释:
| 符号 | 含义 |
|---|---|
| frozen pretrained weight | |
| task-specific update | |
| 可训练 LoRA adapter matrices | |
| LoRA rank,远小于 | |
| 输入 hidden state | |
| 输出 hidden state |
参数量比较:
Full FT 训练:
LoRA 训练:
当 时:
所以 LoRA 大幅降低 trainable parameters。
LoRA 的两个工业优点【★★★★★】
| 优点 | 含义 |
|---|---|
| Modular & Switchable | 一个 frozen backbone 可以对应多个任务 adapter |
| No inference latency | 部署时可以把 merge 回 ,得到 |
和 adapter layer 不同,LoRA 不需要额外插入网络层,因此合并后没有额外推理延迟。
7. LoRA Initialization【★★★★★】
LoRA 初始化:
因此初始时:
前向传播:
含义:训练一开始模型行为完全等于原始 pretrained model,不会因为随机 adapter 破坏原始能力。
为什么 随机、 为零?
| 矩阵 | 初始化 | 原因 |
|---|---|---|
| Gaussian random | 打破对称性,让不同 rank directions 可以学到不同特征 | |
| zero | 保证初始 ,不扰动 base model |
注意:如果 和 都初始化为 0,会有对称性问题,学习会受阻。
8. LoRA 的成本问题【★★★★☆】
课件给出的 LoRA 训练成本:
| 部分 | 位数 |
|---|---|
| frozen weight | 16 bits |
| weight gradient | 0.4 bits |
| optimizer states | 0.8 bits |
| adapter weights | 0.4 bits |
| 总计 | 17.6 bits per parameter |
65B 模型:
大约需要:
实际约 4 张 A6000。
LoRA 已经只训练约 2.5% 参数,但 frozen backbone 仍然要以 16-bit 存储,所以显存仍然大。
这引出 QLoRA。
9. QLoRA:LoRA + Quantization【★★★★★】
QLoRA 的核心:
text
把 frozen transformer backbone 量化到 4-bit,
同时只训练 LoRA adapter。成本变成:
| 部分 | 位数 |
|---|---|
| weight | 4 bits |
| weight gradient | 0.4 bits |
| optimizer states | 0.8 bits |
| adapter weights | 0.4 bits |
| 总计 | 5.6 bits per parameter |
65B 模型:
所以一张 48GB A6000 理论上可以放下。
10. 为什么标准 INT4 不够好【★★★★★】
标准 INT4 有 16 个 level,但它们均匀分布。
问题是:LLM 权重通常近似 zero-mean Gaussian distribution,大部分值集中在 0 附近,极端值很少。
如果均匀量化:
| 区域 | 问题 |
|---|---|
| 中心高密度区域 | level 太稀疏,误差大 |
| 尾部低密度区域 | level 被浪费 |
量化误差的期望可以写成:
其中:
| 符号 | 含义 |
|---|---|
| 原始权重值 | |
| 权重值出现概率 | |
| 量化后的值 | |
| 量化误差 |
因为 在 0 附近最大,所以 0 附近的量化误差最重要。
11. NF4 为什么更优【★★★★★】
NF4,即 NormalFloat 4-bit,根据标准正态分布的 quantiles 设计 16 个量化 level。
核心思想:
text
不是让数值间隔均匀,
而是让每个 bucket 覆盖相同概率质量。也就是每个区间大约包含:
的权重概率质量。
因此:
| 区域 | NF4 设计 |
|---|---|
| 0 附近 | level 密集,减少高概率区域误差 |
| tails | level 稀疏,因为权重少 |
| 总体 | 更小 expected quantization error |
这就是课件说的 “NF4 is optimal” 的直觉。
12. Paged Optimizer【★★★★☆】
QLoRA 还使用 paged optimizer 处理 memory spikes。
问题来源:长序列训练时,activations、gradients、optimizer states 会导致显存峰值暴涨。
paged optimizer 的做法:
text
GPU memory insufficient
↓
temporarily page optimizer states to CPU RAM
↓
GPU 有空时再 page in为什么 page optimizer states?
因为 optimizer states 只有在梯度更新时才需要,但它们占据大量内存,例如 Adam 的 通常很重。
直觉:把不总是需要的数据暂时放到 CPU,避免 GPU OOM。
13. LoRA in Industry【★★★☆☆】
工业场景:
text
一个 SaaS 平台服务 1000 个客户,
每个客户都需要 customized LLM。方案:
text
GPU 常驻一个 base model
不同客户请求到来时,动态加载对应 LoRA adapter优点是每个 adapter 只有约 10–50M 参数,切换成本远小于加载完整模型。
代表系统:LoRAX。
两讲核心对比表
| 维度 | SFT | LoRA | QLoRA |
|---|---|---|---|
| 目标 | alignment / instruction following | 低成本任务适配 | 更低显存的低成本适配 |
| 更新参数 | 通常可 full FT,也可 PEFT | 只更新低秩矩阵 | 只更新 LoRA,base 4-bit |
| 理论动机 | 学 assistant behavior | 低秩 | 低秩 + 权重量化 |
| 主要问题 | 数据质量、遗忘、多任务冲突 | backbone 仍需 16-bit 存储 | 量化误差、工程复杂度 |
| 核心技巧 | loss mask, instruction data | NF4, paged optimizer | |
| 期末重要程度 | ★★★★★ | ★★★★★ | ★★★★★ |
期末最可能考的点
- SFT 和 pretraining 的 loss 形式相似,但数据分布和 loss mask 不同。
- SFT 为什么能 alignment:它直接用高质量 reference response 教模型 assistant behavior。
- loss mask 为什么 mask prompt:因为目标是学会回答,不是学会复述 prompt。
- prompt loss weight = 0 和 0.1 的区别:0 专注回答;0.1 保留少量语言建模正则,缓解遗忘。
- Single-task SFT 与 multi-task instruction tuning 的区别。
- Self-Instruct 如何从少量 seed tasks 生成大规模 instruction data。
- Full FT 的显存为什么大:weight + gradient + Adam two states。
- Intrinsic dimension 为什么支持 PEFT:任务更新位于低维子空间。
- LoRA 的核心公式:
- LoRA 初始化为什么 随机、。
- QLoRA 为什么进一步省显存:base weight 从 16-bit 降到 4-bit。
- NF4 为什么比 uniform INT4 更适合 LLM 权重:权重近似正态分布,NF4 按 quantile 分配 levels。
- paged optimizer 解决什么问题:训练时显存峰值。
- multi-task SFT 不是越多越好,可能 catastrophic forgetting。