Skip to content

下面按“期末复习笔记”整理 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 optimizer

Lecture 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 形式,而在数据分布。

项目PretrainingSFT
数据大规模 raw textprompt-response pairs
学习目标学会语言统计规律和世界知识学会按指令输出高质量回答
数据规模极大相对较小
loss 是否覆盖全部文本通常覆盖训练文本通常 mask 掉 instruction,只对 response 算 loss
结果base modelaligned / 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 formatsingle-turninstruction / input / output
GPT formatmulti-turnconversations: role + value
ChatML formatrole-based chatsystem / 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 后模型会更会:

  1. obey explicit constraints;
  2. attempt correct instruction;
  3. reduce hallucinations;
  4. 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 trajectory

trajectory 包括:

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 adapters

2. Full-parameter fine-tuning 为什么贵【★★★★★】

full-parameter fine-tuning 要更新所有参数。以 16-bit fine-tuning 为例,每个参数训练时不仅要存 weight,还要存 gradient 和 Adam optimizer states。

课件给出的 memory cost:

部分位数
weight16 bits
weight gradient16 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。

课件结论:

  1. 同一个 RoBERTa 模型,不同任务需要不同 intrinsic dimension。
  2. pretraining steps 越多,intrinsic dimension 越低。
  3. 模型参数越多,intrinsic dimension 往往越低。
  4. 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 weight16 bits
weight gradient0.4 bits
optimizer states0.8 bits
adapter weights0.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。

成本变成:

部分位数
weight4 bits
weight gradient0.4 bits
optimizer states0.8 bits
adapter weights0.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 密集,减少高概率区域误差
tailslevel 稀疏,因为权重少
总体更小 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。

两讲核心对比表

维度SFTLoRAQLoRA
目标alignment / instruction following低成本任务适配更低显存的低成本适配
更新参数通常可 full FT,也可 PEFT只更新低秩矩阵 只更新 LoRA,base 4-bit
理论动机学 assistant behavior 低秩低秩 + 权重量化
主要问题数据质量、遗忘、多任务冲突backbone 仍需 16-bit 存储量化误差、工程复杂度
核心技巧loss mask, instruction dataNF4, paged optimizer
期末重要程度★★★★★★★★★★★★★★★

期末最可能考的点

  1. SFT 和 pretraining 的 loss 形式相似,但数据分布和 loss mask 不同。
  2. SFT 为什么能 alignment:它直接用高质量 reference response 教模型 assistant behavior。
  3. loss mask 为什么 mask prompt:因为目标是学会回答,不是学会复述 prompt。
  4. prompt loss weight = 0 和 0.1 的区别:0 专注回答;0.1 保留少量语言建模正则,缓解遗忘。
  5. Single-task SFT 与 multi-task instruction tuning 的区别。
  6. Self-Instruct 如何从少量 seed tasks 生成大规模 instruction data。
  7. Full FT 的显存为什么大:weight + gradient + Adam two states。
  8. Intrinsic dimension 为什么支持 PEFT:任务更新位于低维子空间。
  9. LoRA 的核心公式:
  1. LoRA 初始化为什么 随机、
  2. QLoRA 为什么进一步省显存:base weight 从 16-bit 降到 4-bit。
  3. NF4 为什么比 uniform INT4 更适合 LLM 权重:权重近似正态分布,NF4 按 quantile 分配 levels。
  4. paged optimizer 解决什么问题:训练时显存峰值。
  5. multi-task SFT 不是越多越好,可能 catastrophic forgetting。

Static academic notes built with VitePress and KaTeX.