调教层 · 第 20 / 25 课 · 从会补全到会听话
LoRA:给微调记本账
学完这课你能
- 会算账:全量微调要更新全部参数,LoRA 只训低秩旁路 BA,可训参数常 <1%。
- 理解低秩赌注的前提:权重改动往往是低秩的——用 pythia 真实矩阵的低秩近似误差现场验证这层前提。
- 知道 LoRA 的工程红利:底模冻结可共享、旁路可插拔。
学霸的教科书干干净净,笔记全在页边:三色便签贴满空白处,原文一个字没动。借书的人不带走原书,只揭走自己的便签。LoRA 微调,就是给模型记这种账。
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 纹丝不动。
03低秩赌注验货
「改动不需要满秩」是个赌注——赌的是大矩阵近似低秩。验货办法很直接:拿 pythia 的真实权重矩阵(128×128,注意力输出投影),现场做截断 SVD——只保留最大的 r 个奇异成分,看剩下的误差还剩几成。拖动 r,误差曲线会告诉你这个赌几成真。
先把话说诚实:14M 的小模型练得不充分,谱相当平——r 很小时误差降得很慢,低秩性远不如大模型明显;LoRA 的低秩赌注在更大的模型上才愈发成立。曲线如实画,你的眼睛自己下结论。
04参数账本
验完前提,回到省钱的主线。秩 r 拖多大、挑哪几类矩阵贴便签,账单完全不同:全部贴(q/k/v、注意力输出、MLP 上下两块)还是只贴注意力的,可训参数差好几倍。账本交互把 pythia 的真实层形状代进去,你拖一下就有三行数:可训参数、占总参数比例、LoRA 文件体积——跟全量那 28.1MB 对一对照。
行李箱的比喻在这:全量微调是拖着整箱行李过安检,LoRA 只带一只巴掌大的附包——附包用带子挂在箱外,箱子原封不动。
05插拔自由
便签制还有一层红利:底模冻结意味着人人共享同一份原书。同一只底模,客服便签一套、诗人便签一套、法律助手便签一套——切换人设就是换贴便签,几十 MB 的底模只存一份。这思路本站你见过:ALBERT 用共享参数把一组层用四遍,省的是同一笔账。LoRA 把「省」从预训练一路贯彻到了微调。
交互实验:参数账本 + 低秩近似验货台
引擎加载中…
参数账本:pythia-14m 真实层形状代入(6 层、d=128、ffn 512、词表 50304,与 config.json 对拍),r 与目标矩阵现场算三行账。验货台:下载并加载 pythia 真权重后,取 128×128 注意力投影矩阵现场做截断 SVD(Jacobi 特征分解,毫秒级),误差曲线与残差热图即算即画(角标「真权重」);不想下权重可切「预计算谱」模式——谱为 2026-10-14 本地真跑录制(角标「回放」),无热图。
等待开始下载…
组件挂载点 · 参数账本与 SVD 验货台需要 JavaScript
组件加载失败。
处理方式:刷新页面重试。账本是纯算术永远可用;验货台在无权重时提供预计算谱降级路径。图文正文不受影响。