调教层 · 第 20 / 25 课 · 从会补全到会听话

LoRA:给微调记本账

真权重 + 真计算 复用权重(首次见下载提示 28.1MB);无权重可用内置预计算谱 建议 15–30 分钟

学完这课你能

  1. 会算账:全量微调要更新全部参数,LoRA 只训低秩旁路 BA,可训参数常 <1%。
  2. 理解低秩赌注的前提:权重改动往往是低秩的——用 pythia 真实矩阵的低秩近似误差现场验证这层前提。
  3. 知道 LoRA 的工程红利:底模冻结可共享、旁路可插拔。

学霸的教科书干干净净,笔记全在页边:三色便签贴满空白处,原文一个字没动。借书的人不带走原书,只揭走自己的便签。LoRA 微调,就是给模型记这种账。

摊开的厚教科书内页贴满三色便签,便签比原文小得多,一枚回形针把几张归成一摞
类比 教科书原文=冻结的 W,页边便签=低秩旁路 BA,小纸条承载全部修正。

01全量微调有多贵

先算最贵的账。把 pythia-14m 每一颗可训练参数摆上秤:输入、输出两套词表嵌入各 50304×128,6 层每层 198,272 颗(注意力两块加 MLP 两块加两条 LayerNorm),最后一条 LayerNorm 256 颗——合计 14,067,712 颗。全量微调就是 1400 万颗全部要动:显存里除了参数,还要给每颗配梯度、配优化器状态,账单至少翻三倍。

14M 才这么点,7B 模型全量微调就是 70 亿颗的阵仗。有省法吗?

02便签怎么贴

LoRA(Low-Rank Adaptation,2021)的观察很妙:微调给权重带来的改动 ΔW,往往不需要「满秩」的自由度——它可以被压缩成两个小矩阵的乘积 B×A:A 把 128 维压到 r 维(r 叫秩,常取 4~64),B 再从 r 维撑回 128 维。r=8 时,一张 128×128 的大改动(16,384 颗参数)就拆成 128×8 + 8×128 两张小纸条(2,048 颗)。

原矩阵 W 冻结不动,前向变成 W·x + B·A·x:主路照旧,便签修正叠上去。只训 A 和 B,W 纹丝不动。

输入 x 冻结的 W 128×128 · 雪藏 输出 A:降到 r 128×8 B:撑回 128 8×128 两路相加 可训参数 = 2×d×r r=8 时 2,048 颗 · 约占总数 0.015% 冻结 便签修正
结构 主路 W 冻结照旧;旁路 A 降维、B 升维,小修正加回输出。

03低秩赌注验货

「改动不需要满秩」是个赌注——赌的是大矩阵近似低秩。验货办法很直接:拿 pythia 的真实权重矩阵(128×128,注意力输出投影),现场做截断 SVD——只保留最大的 r 个奇异成分,看剩下的误差还剩几成。拖动 r,误差曲线会告诉你这个赌几成真。

先把话说诚实:14M 的小模型练得不充分,谱相当平——r 很小时误差降得很慢,低秩性远不如大模型明显;LoRA 的低秩赌注在更大的模型上才愈发成立。曲线如实画,你的眼睛自己下结论。

04参数账本

验完前提,回到省钱的主线。秩 r 拖多大、挑哪几类矩阵贴便签,账单完全不同:全部贴(q/k/v、注意力输出、MLP 上下两块)还是只贴注意力的,可训参数差好几倍。账本交互把 pythia 的真实层形状代进去,你拖一下就有三行数:可训参数、占总参数比例、LoRA 文件体积——跟全量那 28.1MB 对一对照。

行李箱的比喻在这:全量微调是拖着整箱行李过安检,LoRA 只带一只巴掌大的附包——附包用带子挂在箱外,箱子原封不动。

行李对比:一整箱衣物旁边是一只巴掌大的附包,附包用带子挂在箱外
类比 整箱衣物=全量微调的全部参数,巴掌附包=LoRA 便签,箱外挂带=插拔。

05插拔自由

便签制还有一层红利:底模冻结意味着人人共享同一份原书。同一只底模,客服便签一套、诗人便签一套、法律助手便签一套——切换人设就是换贴便签,几十 MB 的底模只存一份。这思路本站你见过:ALBERT 用共享参数把一组层用四遍,省的是同一笔账。LoRA 把「省」从预训练一路贯彻到了微调。

一句预告:调教到这儿就齐了——SFT 教格式、RM 定偏好、RLHF/DPO 收平衡、LoRA 省账单。下一层(第 21–24 课)我们换引擎:把训好的模型跑起来、跑快、跑小。

交互实验:参数账本 + 低秩近似验货台

引擎加载中…

参数账本:pythia-14m 真实层形状代入(6 层、d=128、ffn 512、词表 50304,与 config.json 对拍),r 与目标矩阵现场算三行账。验货台:下载并加载 pythia 真权重后,取 128×128 注意力投影矩阵现场做截断 SVD(Jacobi 特征分解,毫秒级),误差曲线与残差热图即算即画(角标「真权重」);不想下权重可切「预计算谱」模式——谱为 2026-10-14 本地真跑录制(角标「回放」),无热图。

组件挂载点 · 参数账本与 SVD 验货台需要 JavaScript