资料摘要:personal chatgpt 02 — LoRA(Low Rank Adaption)基本原理与基本概念,fine-tune 大语言模型
本讲由真实视频转录与作者 notebook/代码交叉整理。原始层:🔒 带时间戳视频转录;课程总览:personal chatgpt — LLMs 实践系列。
LoRA(Low-Rank Adaptation)把完整微调中与任务相关的权重增量 ΔW,表示为两个低秩矩阵的乘积。基础模型权重保持冻结,只训练小规模 adapter 参数,从而降低每个下游任务需要保存和优化的参数量。
本讲依次解释 LoRA 的动机、full fine-tuning 与 LoRA 的差异、参数量计算、rank r 的容量/效率权衡,以及 A/B 矩阵的初始化与前向伪代码。
1. 为什么仍然需要微调
Section titled “1. 为什么仍然需要微调”- 课程先区分 In-Context Learning/prompt engineering 与 fine-tuning:前者不修改模型参数,后者会改变或新增可训练参数。
- 即使大模型有较强的上下文学习能力,若模型缺少某些领域概念、任务格式或专门行为,仅靠 prompt 未必足够。
- 随模型规模增大,为每个任务保存一套完整权重增量变得昂贵,因此需要参数高效微调。
2. 从完整增量到低秩编码
Section titled “2. 从完整增量到低秩编码”- 设预训练参数为
Φ,完整微调后为Φ + ΔΦ。 - 完整微调中,
ΔΦ与Φ的形状和参数规模相同。 - LoRA 用规模更小的参数
Θ编码任务增量:ΔΦ = ΔΦ(Θ),目标是|Θ| ≪ |ΔΦ|。 - 对某个大矩阵
W,课程 notebook 采用ΔW = W_A W_B的记号;不同论文/实现可能写成BA,关键是乘积形状最终与W一致。
3. 冻结基础权重、注入可训练分支
Section titled “3. 冻结基础权重、注入可训练分支”- 原始分支计算
xW,其中W来自预训练模型并被冻结。 - LoRA 分支计算
x(W_AW_B),只更新W_A、W_B。 - 两个分支相加形成新的输出,并可乘一个缩放系数
alpha。 - 课程强调注入位置通常是 Transformer 自注意力中的大投影矩阵,如
Wq/Wk/Wv/Wo;具体目标模块由模型架构和实现配置决定。
4. 参数效率
Section titled “4. 参数效率”若:
W ∈ R^(A×B);W_A ∈ R^(A×r);W_B ∈ R^(r×B);
则完整增量参数量是 A×B,LoRA 参数量是 r(A+B)。
课程示例:A=100、B=500、r=5:
- 完整增量:
100×500 = 50,000; - LoRA:
5×(100+500) = 3,000; - 比例:
3,000/50,000 = 6%。
这说明“参数高效”是相对于需要训练/保存的任务增量参数而言,不代表前向时基础模型本身消失。
5. rank r 的权衡
Section titled “5. rank r 的权衡”- 较小
r:参数少、训练更快、硬件需求更低,但任务适配容量可能不足。 - 较大
r:表达能力更强,但参数量、过拟合风险和计算成本上升。 - 课程把
r描述为模型复杂度、适配能力、欠拟合/过拟合之间的超参数。
6. 初始化使初始增量为零
Section titled “6. 初始化使初始增量为零”课程伪代码把 W_A 用 Kaiming uniform 初始化,把 W_B 初始化为零。因此初始时:
W_A W_B = 0LoRA 分支一开始不会改变基础模型输出,随后通过训练逐步学习任务增量。
公式 / 代码
Section titled “公式 / 代码”完整微调:
低秩分解:
参数量:
课程伪代码的核心形式:
W_A = nn.Parameter(torch.empty(input_dim, rank))W_B = nn.Parameter(torch.empty(rank, output_dim))nn.init.kaiming_uniform_(W_A, a=math.sqrt(5))nn.init.zeros_(W_B)
h = x @ Wh += x @ (W_A @ W_B) * alpha注意:该 cell 是说明性伪代码,缺少完整导入、数据和训练循环;标准 PEFT 实现中的缩放常由配置计算,本讲没有展开具体
alpha/r规则。
00:32:LoRA 与低秩矩阵思想,说明本讲是原理篇。01:04:LoRA 名称、adapter 和 parameter-efficient 定位。03:02:In-Context Learning 不改参数,LoRA 仍属于微调。05:01:冻结预训练权重,在 Transformer 层注入可训练低秩矩阵。06:30:完整微调的Φ + ΔΦ。08:30:用两个低秩矩阵近似ΔW。10:03:full fine-tuning 与 LoRA 双分支对比。12:02:r(A+B)参数量与 6% 示例。13:30:rankr的容量/成本权衡。14:31:A/B 初始化与前向伪代码。16:02:BLOOM 的query_key_value投影中 LoRA A/B 的形状。
运行边界与可复现性
Section titled “运行边界与可复现性”- 理论、公式和图片可在任何平台阅读,不要求 GPU。
- notebook 的伪代码不是可独立执行的程序,缺少
torch、nn、math导入和训练数据。 - 课程用 BLOOM 层结构图说明注入位置,但本讲没有实际执行微调。
- ASR 把 LoRA、fine-tune、adapter、rank、projection、PEFT 等识别成大量近音词;本稿按 notebook 与论文链接校正。
- notebook 写作
Adaption,LoRA 论文标题通常使用Adaptation;本稿概念名采用通行写法 Low-Rank Adaptation。
与前后讲关系
Section titled “与前后讲关系”- 承接第 1 讲:基础模型参数很大,完整任务微调和保存成本高。
- 第 3 讲:用 PEFT 在 BLOOM-7B1 上实际冻结基础权重、注入 LoRA 并训练。
- 第 4 讲:追踪 PEFT 如何找到目标模块并把普通层替换为 LoRA 层。
- 为什么 LoRA 仍然属于 fine-tuning,而不是 prompt engineering?
- 对
W∈R^(A×B),LoRA 为什么只需训练r(A+B)个参数? - 把
W_B初始化为零会对训练开始时的模型输出产生什么影响? - rank
r太小或太大分别可能带来什么问题? - LoRA 减少了哪些参数成本,又没有消除哪些基础模型成本?
- 视频:LoRA(Low Rank Adaption)基本原理与基本概念,fine-tune 大语言模型
- 转录:🔒 personal chatgpt 02 视频转录
- 课件 / 代码:🔒 02_lora_baics.ipynb
- 滴答清单抓取时学习状态:已完成。
- 视频正文采用自动语音识别;关键术语已用标题、notebook 与源码校正,无法确认的口语细节不扩写。
- notebook 未执行的 CUDA、权重下载、训练或外部 API 单元,不表述为已复现实验。