· 参数高效微调

LoRA 参数高效微调:低秩分解与关键配置

冻结原权重,只训练两个小矩阵 A(d×r) 与 B(r×k) 去逼近 ΔW,可训练参数从 dk 降到 r(d+k):挂在哪、秩 r 怎么选。

参数高效微调 · 图文笔记
12:38两段视频总时长
23解析出的稳定屏
7LoRA 可挂载线性层
2涉及的讲义小节
LoRA 只做一件事:不去训练那个 d×k 的权重更新量 ΔW,而是让模型自己学两个小矩阵 A(d×r) 与 B(r×k),用 A·B 去逼近 ΔW。原权重 W0 全程冻结,要训练的参数量从 dk 降到 r(d+k)

01 先看这两段视频落在哪

这不是从零讲 LoRA,而是一次面向面试的重点回顾 —— 开场就把范围划死了:面试问什么就重点记什么。按这个标准筛下来,LoRA 这块真正要抓住的只有两件事:挂在哪些权重矩阵上、以及 秩 r 怎么选

图 1 · 两段视频的主题分布:横条长度按真实秒数等比绘制
两段视频讲了什么、讲到哪儿(横条长度 = 实际占时)08 上时长 9:23开场定位:面试问什么就重点记什么0:00秩 → 低秩矩阵 → 低秩分解,三个概念连起来讲0:16用 6×5 矩阵逐项演示 W = A·B 的分解1:38原理主线:W=W0+ΔW → y=xW0+xΔW → ΔW≈AB3:18训练与推理:冻结 W0、只更新 A/B,训完再合并回去7:4009 下时长 3:15面试重点①:LoRA 能挂在哪些线性层(注意力 4 + FFN 3 = 7 个)0:00面试重点②:rank r 怎么选(AB 形状、4/8/16)2:05α 与 lora_dropout 一句带过,收尾2:56时间轴由音频转写对齐;同一页讲义被反复上下滚动对照,因此屏切换次数远多于小节数
  • 第一段(9:23)里用在“秩 → 低秩矩阵 → 低秩分解”上的时间接近 3 分 20 秒,占全片三分之一还多。理由很直接:不先把秩讲通,后面 ΔW ≈ AB 就只能死记。
  • 同一段的后半部分(约 3:18–7:40)才是原理主线,7:40 之后讲训练与推理怎么落地。
  • 第二段只有 3:15,但信息密度最高:前 2 分 05 秒全部用来数“大模型里到底有哪些线性层”,最后收敛成 7 个可用位置;随后约 50 秒讲 rank,剩下十几秒把 α 与 dropout 一句带过。

02 秩、低秩矩阵、低秩分解:三个概念一次串完

概念的推进顺序是“定义 → 判据 → 性质”,每一步都配一个能肉眼看出答案的矩阵。秩的定义是矩阵里线性无关的行 / 列向量的个数;判据可以用一句口语概括 ——矩阵的秩远小于它的形状时,就叫低秩矩阵,形式上写作 rank(W) ≪ min(d,k)

图 2 · 三个用于说明秩的矩阵:两种秩为 1,一种秩为 2
秩 = 矩阵里线性无关的行 / 列向量个数矩阵 Arank = 11224第二列 = 第一列 × 2两列不是线性独立秩 = 1矩阵 Brank = 21001谁也变不出谁两列线性独立秩 = 2矩阵 Crank = 1123246369第 2、3 列都是第 1 列的倍数秩 = 1秩远小于形状(rank ≪ min(d,k))时称 W 为低秩矩阵;口语说法就是“秩远小于它的形状”

接着是低秩矩阵的分解:低秩矩阵必然可以拆成两个小矩阵的乘积,这是 LoRA 后面唯一用到的那条性质。下面用一个 6×5 的矩阵,把“怎么拆”逐步演算一遍。

图 3 · 重绘:W(6×5) = A(6×2) × B(2×5),可逐项验算
低秩分解 W = A · B(用 6×5 矩阵逐步演算)1123223475336964581395510151067121913W (d×k)d = 6k = 5=112333455567A (d×r)r = 2×1022101011B (r×k)k = 5拆法:A 存两个独立的列,B 存“用这两个列算出其余列”的系数 —— 逐点相乘再相加即可复原 W
  • 先定秩:这个 6×5 矩阵的秩是 2 —— 前两列线性独立,后面几列都能由这两列算出来。
  • A 存的是独立方向(6×2),B 存的是系数(2×5)。B 的每一列回答的是:要凑出 W 的这一列,两个独立方向各取多少倍。
  • 验算就是普通矩阵乘法:A 的某一行与 B 的某一列逐点相乘再相加,正好得到 W 的对应元素。
  • 分解方式不止一种,记住“低秩矩阵可以分解成两个小矩阵的乘积”这个结论就够了。

03 原理主线:从 W = W₀ + ΔW 到 ΔW ≈ AB

全参微调会把线性层的权重矩阵更新成 W0 + ΔW,其中 ΔW 是一批批数据更新累积下来的变化量。把这个式子代进前向计算,就得到 LoRA 的出发点:

y = xW = x(W0 + ΔW) = xW0 + xΔW

它的意义是:更新后的模型在计算上等价于两条支路并行,再把结果相加 —— 一条走原始权重 W0,一条走增量 ΔW。落到模型结构图上,就是下面这三步变形。

图 4 · 从“一个完整矩阵”到“W₀ 加 A·B”:每一步都只是等价改写
LoRA 原理:结构被一步步换掉Wd × kxh① 一个完整矩阵h = xWW0冻结ΔW待学+xh② 拆成两条支路h = xW0 + xΔWW0冻结A · B待学+xh③ 增量支路换成 A、Bh = xW0 + x·AB蓝 = 冻结的 W0,绿 = 需要训练的 ΔW / A、B;LoRA 只更新绿色部分
  • ① 原来的线性层是一整个 W;② 展开成 W0 与 ΔW 两条支路求和;③ 右侧那条增量支路再被换掉。
  • 换的依据是:ΔW 往往是一个低秩矩阵,而低秩矩阵可以分解成两个小矩阵的乘积,于是 ΔW ≈ AB。
  • 关键一句:A、B 的值不需要人为指定,让模型自己去学,学完之后 AB 就相当于 ΔW。
  • 反过来问“为什么不直接学 ΔW”,答案很直白 —— 直接学 ΔW 要学的参数太多,拆成 A、B 之后要学的参数就很少。
可挂载线性层7 个
r 常用取值4/8/16
LLaMA-7B r=8 占比0.31%
α 的经验取法2r

差多少可以直接算:全参微调要更新 dk 个参数,LoRA 只训练 dr + rk = r(d+k) 个参数;因为 r 远小于 d、k,这个下降是数量级的,而不是几十个百分点。

图 5 · 把公式代进一个具体模型:差距是几十倍到几百倍量级
要训练的参数量:dk 与 r(d+k)以 LLaMA-7B 为例(d=4096、FFN=11008、32 层),r = 8全参微调 dkLoRA r(d+k)占比q_proj 单层 (4096×4096)16,777,21665,5360.39%注意力 q/k/v/o 全部,32 层2,147,483,6488,388,6080.39%7 个线性层全部,32 层6,476,005,37619,988,4800.31%该表由公式推算,用于给出量级;视频里只说了“不分解的话要学的参数就多得多”

04 训练时到底发生了什么

训练流程按顺序记下来就是标准答案:

  • 前向:输入 x 分别与 W0、AB 做前向计算,两边结果相加得到这一层的输出。
  • 继续层层往前传,最终得到 loss。
  • 反向:W0 被冻结,所以不算 W0 的梯度,只计算 A、B 的梯度。
  • 更新:用 A、B 的梯度更新 A、B —— 一轮训练里,动过的只有这两个小矩阵。
  • 训练过程中,A、B 会逐渐“模拟出” ΔW 的效果。
  • 收尾:把训好的 A、B 相乘得到 ΔW,再加回 W0,相当于恢复成最原本的线性层。
一句话总结:LoRA 的核心思想就是只用两个小矩阵实现全参微调的大致效果。但要注意措辞 —— 讲义强调的是“最先进的 PEFT 方法已能实现与全参微调相当的性能”,而工程上更稳妥的说法是“实际效果不如全参微调,胜在资源开销低得多”。面试时按保守口径回答更安全。

05 配置参数:真正会问的是前两项

四个参数的讲解时间极不均匀:target_modules 讲了 2 分多钟,rank 讲了约 50 秒,α 与 lora_dropout 只用了十几秒。这个时间分配本身就是重点提示 —— 前两项必须能答,后两项知道作用即可。

图 6 · 四个参数的作用与起步值;红色那项是重点
配置参数:前两项是重点,后两项一句带过target_modules注意力 4 个 + FFN 3 个Q/K/V/输出投影 与 gate/up/down;至少 7 个位置可用rank r先试 4 或 8 或 16A 是 d×r、B 是 r×d;r 越大参数越多、算得越慢缩放系数 α按 α = 2r 配增量写成 (α/r)·AB;1/r 归一化不同秩,α 再调整体强度lora_dropout先试 0.05作用在进低秩矩阵之前;数据少 → 0.1,数据多 → 0重点结论:关于 LoRA 主要知道“用在哪”就行,就是这七个位置;其余参数属于工程细节
α 与 lora_dropout 的完整口径
  • 缩放系数 α:权重增量实际写成 ΔW = (α/r)·AB。其中 1/r 负责对不同 rank 下的 LoRA 分支做归一化,α 则是人为设置的超参数,用来进一步调节 LoRA 分支的整体作用强度。 实际使用中 α 通常结合 r 一起设置,例如 r=8, α=16r=16, α=32
  • lora_dropout:表示 LoRA 分支中 Dropout 的丢弃概率,作用于“输入进入低秩矩阵之前”, 用来缓解训练过程中的过拟合。常用取值 0 / 0.05 / 0.1,一般从 0.05 起试; 训练数据较多或没有明显过拟合可设为 0,数据较少或明显过拟合可适当增大到 0.1。
  • rank r:决定低秩矩阵的大小。常用取值是 4 / 8 / 16 / 32 / 64, 一般从 8 或 16 开始尝试;任务较简单可用较小的 r,任务较复杂或希望模型适应能力更强时可适当增大。 r 没法精确估算,选大了 AB 参数量变多、计算量变大,理论上效果一般会更好。
  • target_modules 的命名坑:不同模型对线性层的命名可能不同, 实际配置时应根据具体模型的网络结构确定。

06 容易踩的坑

四条提醒:
  • 别把 LoRA 说成“和全参微调一样”:更可靠的表述是“效果不如全参微调,但资源开销低得多”。 “能实现相当的性能”指的是最先进的 PEFT 方法整体,不是随便配一组参数就能达到。
  • LoRA 减少的是可训练参数,不是激活值:它不会按相同比例减少激活值, 较大的单卡 batch 或序列长度仍然可能导致显存不足。
  • “7 个位置”的适用前提:这是对 LLaMA / Qwen 这类 Decoder-only Transformer 数出来的 (注意力 q/k/v/o 加 FFN 的 gate/up/down),换成别的模型命名就变。
  • 别背“r 越大越好”:r 越大参数量越多、计算量也变大;经验取值是“复杂任务大一点、 简单任务小一点”,或者直接从 8、16 起试。

07 补充:显存到底怎么算

“LoRA 省显存”是常识,但这两段视频都没有展开。为了让这句话有个能算的数,这里补上静态显存的估计公式 —— 只算模型权重、梯度、优化器状态这部分。

图 7 · 三种训练方式的静态显存近似式
静态显存逐项算:P = 基础模型参数量,T = 新增可训练参数量全参微调M ≈ 18P 字节FP16 参数 2 + FP32 副本 4+ 梯度 4 + AdamW 状态 8LoRAM ≈ 2P + 18T 字节基础模型只存 BF16 权重梯度与优化器只为 T 保存QLoRAM ≈ M(4bit 基础模型) + 18T线性层权重 4-bit 冻结LoRA 参数仍按高精度训练以上为讲义附录公式;两段视频都没有讲到显存,这部分属于补充
图 8 · 代入 LLaMA-7B 的数量级差异
与参数相关的静态显存(LLaMA-7B,BF16 + AdamW)0 GB38 GB75 GB112 GB150 GB121.3 GB全参微调 18P13.8 GBLoRA 2P + 18T按讲义附录公式代入 P=6.74e9、T≈2.0e7 得到;不含激活值与运行时开销

全参微调的式子里,每个参数要额外存 FP32 副本、梯度和 AdamW 的一阶二阶动量,合计 18 字节;而 LoRA 的基础模型只存 BF16 权重(2 字节/参数),梯度和优化器状态只为新增的 T 个参数保存。所以 T 远小于 P 时,LoRA 的静态显存几乎只剩“把基础模型加载进来”这一项。

08 面试问答卡

图 9 · 六个问题,答案都能在本次两段视频与配套讲义里找到依据
按视频里的讲解能直接答出来的问题QLoRA 要加在哪?注意力 4 个(Q、K、V、多头拼接后的输出投影)FFN 3 个(升维、降维、门控分支升维),共 7 个QΔW 凭什么能低秩?LoRA 的出发点:作者发现 ΔW 往往就是一个低秩矩阵低秩就能分解,于是用 A·B 去逼近它Q为什么不直接学 ΔW?直接学 ΔW 参数太多;拆成 A、B 后要学的参数很少A、B 不人工指定,让模型自己学,学完 AB ≈ ΔWQr 怎么定?算不出精确值,一般从 4 / 8 / 16 里选复杂任务给大一点,简单任务给小一点Q训练时谁在动?W0 冻结:不算梯度、不更新参数前向 x 分别过 W0 和 AB;反向只算 A、B 的梯度Q训完怎么用?AB 相乘得到 ΔW,加回 W0 → 恢复成普通线性层保守结论:效果不如全参微调,但胜在便宜、可选前四问答“是什么、放哪、怎么选”,后两问答“怎么训、怎么用”
取材与还原方式(可核对)
  • 素材:本机两个 mp4(EV 录屏 5.5.6 输出,1364×768、30fps),内容是配套 Word 讲义 (.docx)的滚动浏览,无内嵌字幕,无官方章节。
  • 结构还原:对每段视频做 1fps 采样并计算相邻帧差分,按差分阈值切出“静止屏”, 两段共得到 23 屏;讲义的页码与左侧导航(4.2 LoRA / 8.1 矩阵的秩)由此确认。 时间轴来自音频转写后的分段对齐。
  • 讲解原话:用 faster-whisper(small / int8 / CPU)在本地转写,共 132 段。 中文识别对同音词有明显错字 —— 例如“秩”识别成“质”、“矩阵”识别成“举证”、 “线性层”识别成“现象层”、“系数”识别成“细数”,本文引用时已按上下文校正, 校正依据是画面上的讲义原文。
  • 画面文字:23 屏画面均按原始分辨率读取,用于确认讲到哪里、停在哪个公式。 讲义截图只用于读取文字,正文所有配图都是按内容重绘的矢量 SVG, 未嵌入任何视频帧或截图。
  • 配套讲义:术语与公式的核对基准是随视频放在同一目录的 Word 讲义 (4.2 LoRA、4.2.3 配置参数、8.1 LoRA 相关数学基础),直接解析自本机文件。
  • 推算而非引用的数字:图 4 的参数量表与图 7、图 8 的显存数字,是按讲义公式 代入 LLaMA-7B(d=4096、FFN=11008、32 层、r=8)算出来的,视频里并没有给出这些数字, 各图注中已标注来源。

本笔记为个人学习用途的结构化整理与图解重绘,未使用原始视频画面与讲义图片;术语与公式以讲义原文为准。

分享:
返回文章列表

相关文章

全部文章 »

前向传播与反向传播概述

微调场景下的前向产物、反向传播机制,以及冻结参数与 LoRA 等不同策略对反向计算图的实际影响。