返回 ppt-master
total.md
1 # 01_cover
2
3 今天我们一起读一篇对大模型微调影响深远的论文,LoRA,低秩适配。它来自微软,二零二一年发表。一句话概括它的贡献:冻结预训练权重,只往每一层注入一对很小的低秩矩阵,就能用万分之一的可训练参数,达到甚至超过全量微调的效果,而且推理时不增加任何延迟。接下来我会从问题、方法、实验到背后的原理,带大家完整走一遍。
4
5 ---
6
7 # 02_agenda
8
9 我们按六个部分展开。先看问题:为什么模型越大,微调越来越贵;再看已有方法为什么不够好;然后是这篇论文的核心洞察,低秩假设;接着重点讲 LoRA 的方法与实现细节;之后用实验结果验证它;最后讨论该适配哪些权重、秩要取多大,以及它对整个行业的意义。重点会落在第四和第五部分。
10
11 ---
12
13 # 03_problem
14
15 先说清楚痛点:模型越大,全量微调就越不可行。全量 fine-tuning 会更新模型的全部参数,得到的新模型和原模型一样大。以 GPT-3 一千七百五十亿参数为例,每适配一个下游任务,就要存一份完整的满参数副本。如果你有很多任务,存储和切换的成本就是任务数乘以一千七百五十亿,这已经从早年的"不太方便"升级成了真正的部署难题。
16
17 ---
18
19 # 04_limitations
20
21 那已有的高效适配方法为什么不够好?主要有三类局限。第一,Adapter 在网络里插入额外的层,加深了模型,会带来推理延迟,在线上、短序列、小批量的场景下尤其明显。第二,prefix 或 prompt tuning 用可训练的前缀 token 来适配,会挤占本就宝贵的输入序列长度。第三,也是最关键的,这些方法往往达不到全量微调的质量基线,逼着大家在效率和质量之间二选一。LoRA 想打破的,正是这个权衡。
22
23 ---
24
25 # 05_insight
26
27 LoRA 的出发点是一个很漂亮的洞察:权重的更新其实是低秩的。已有研究发现,过参数化的大模型实际上存在于一个很低的内在维度上。作者顺着这个思路假设,模型在适配下游任务时,权重的变化量 Delta W 也具有很低的内在秩。这个推论很激进:即使权重的满秩高达一万两千多,实际需要的秩可能只有一或二就够了。
28
29 ---
30
31 # 06_method
32
33 基于这个假设,方法就非常简洁:冻结原始权重 W 零,在它旁边并联一条低秩旁路。具体说,把权重的更新约束成两个小矩阵的乘积 B 乘 A,前向传播时输入 x 同时经过冻结的 W 和这条旁路,两路输出相加得到 h。训练时 W 零完全不动,只更新 A 和 B 这两个小矩阵。初始化上,A 用高斯随机,B 置零,所以训练一开始旁路的贡献是零,不会扰动原模型。
34
35 ---
36
37 # 07_implementation
38
39 实现上有两个细节值得一提。第一是缩放:旁路的输出会乘上一个 alpha 除以 r 的系数,而 alpha 直接设成你尝试的第一个 r,之后就不再单独调它,这样变更秩的时候不用反复重调超参。第二是部署:上线时可以显式把 B 乘 A 合并进权重,得到一个和原模型完全同构的 W,所以不引入任何额外的推理延迟。要换任务也很简单,减掉当前的 BA,再加上另一个任务的 B 撇 A 撇就行,开销极小,非常适合多任务在线热插拔。
40
41 ---
42
43 # 08_transformer
44
45 在 Transformer 上,作者做了一个克制的选择。自注意力里有四个投影矩阵,查询、键、值、输出,论文在大多数实验里只给查询和值这两个矩阵加 LoRA,MLP 模块整个冻结,这是出于简洁和参数效率的考虑。可训练参数量只随秩 r 线性增长。效果非常惊人:在 GPT-3 上,训练显存从一点二个 TB 降到三百五十个 GB,大约只剩三分之一;而检查点的大小从三百五十个 GB 直接降到三十五个 MB,缩小了约一万倍。
46
47 ---
48
49 # 09_advantages
50
51 把这些好处归纳一下,LoRA 有四个关键优势。第一,可共享:一个预训练底座可以挂很多个小 LoRA 模块,换任务只换 A 和 B,存储成本极低。第二,训练高效:不用为冻结的参数保存梯度和优化器状态,硬件门槛最高能降到三分之一。第三,零推理延迟:合并权重后和全量微调模型完全同构。第四,正交可叠加:它和很多已有方法互不冲突,比如可以和 prefix-tuning 组合使用。
52
53 ---
54
55 # 10_latency
56
57 我们用数据来验证"零延迟"这个说法。这张图是 GPT-2 medium 上单次前向的延迟增幅,在 RTX8000 上测了一百次取平均。可以看到,Adapter 的两个变体都会带来延迟:在长序列配置下还比较小,只有百分之二到三;但到了短序列、小批量这种典型的在线场景,Adapter L 增加了百分之二十点七,Adapter H 更是高达百分之三十点三。而 LoRA 因为可以合并权重,和全量微调一样,额外延迟是实打实的零。
58
59 ---
60
61 # 11_setup
62
63 实验覆盖了从理解到生成的四类模型。自然语言理解这边,用 RoBERTa 的 base 和 large,还有十五亿参数的 DeBERTa XXL,都在 GLUE 上评测;生成这边,用 GPT-2 medium 跑 E2E 数据集;最后放大到 GPT-3 一千七百五十亿参数,在 WikiSQL、MNLI 和 SAMSum 上做压力测试。对比的基线也很全,包括全量微调、BitFit、前缀类方法,以及 Adapter 的四个变体,而且尽量复用了前人论文里报告的数值,保证公平。
64
65 ---
66
67 # 12_glue
68
69 先看 GLUE 的结果,结论是:用更少的参数,持平甚至更优。RoBERTa base 全量微调要训一亿两千五百万参数,平均分八十六点四;LoRA 只训三十万参数,平均分反而是八十七点二。RoBERTa large 上,三亿五千五百万对零点八百万,得分八十八点九对八十九点零。最大的 DeBERTa XXL 上,十五亿对四百七十万,九十一点一对九十一点三。也就是说,LoRA 用大约三四百分之一的可训练参数,在三类模型上都做到了持平或略优。
70
71 ---
72
73 # 13_gpt3
74
75 真正的压力测试是 GPT-3 一千七百五十亿参数,结论依然成立。这里有四个关键数字:可训练参数缩减了约一万倍,检查点从三百五十个 GB 降到三十五个 MB;训练显存从一点二个 TB 降到三百五十个 GB,大约三分之一;训练吞吐还提升了约百分之二十五,因为绝大多数参数不需要算梯度;而在 WikiSQL、MNLI、SAMSum 三个任务上,准确率都达到或超过了全量微调。效率和质量,这次真的可以兼得。
76
77 ---
78
79 # 14_understanding
80
81 论文还往前追问了两个问题。第一,该给哪些权重加 LoRA?在同样的参数预算下,同时适配查询和值这两类权重效果最好,比只堆在单一类型上更划算。第二,秩到底要取多大?这是最反直觉的发现:对查询加值的组合,秩等于一时准确率就有七十三点四,一路加到六十四几乎没有提升。右边的子空间相似度热力图也印证了这一点,不同秩学到的主奇异方向高度重叠,说明权重更新的内在秩确实极低。
82
83 ---
84
85 # 15_conclusion
86
87 最后做个总结。从方法本身看,低秩适配等于参数高效、零额外推理延迟,再加上质量持平甚至更优。从工程意义看,它让一个预训练底座就能托管很多任务,按需热插拔 LoRA 模块,部署成本大幅下降。从行业影响看,LoRA 已经开源,成为今天大模型高效微调,也就是 PEFT 生态的基石之一。它最大的价值,是让我们不必再在效率和质量之间二选一。谢谢大家。
88
88 lines MARKDOWN