LoRA 是一种只训练一小部分新增参数、就能让大模型适配新任务的微调方法,全称 Low-Rank Adaptation,中文常译作低秩适应。它不动预训练模型的任何原有参数,只在若干层旁边加一对很小的可训练矩阵,训练时只更新这一对矩阵;练完之后,要么把它们合并回原模型直接使用,要么留作一个几十兆大小的适配器文件,随时换上、随时摘下。对入门读者来说,记住这个分工就够了:大模型负责通用能力,LoRA 负责最后一小段针对性调整。
先说清:那一对小矩阵到底是什么
理解 LoRA,先要知道普通微调改的是什么。全参数微调会把模型里某个权重矩阵整体重练一遍,矩阵有多大,就要更新多少参数。LoRA 的做法完全不同:原权重矩阵 W 被冻结,一点都不动;它在旁边新增两个瘦长的小矩阵 A 和 B,两者相乘得到一个与 W 同样大小、但结构简单得多的增量,训练真正调整的只有 A 和 B 里的参数。模型实际用到的权重,等于原来的 W 加上这个增量。
两个小矩阵有多小,取决于一个叫秩的数字,常记作 r。r 越小,A 和 B 越瘦,可训练参数越少。原矩阵动辄是几千乘几千的规模,而 r 经常只取 8、16 或 32,参数量一下子降到原来的千分之一甚至更低。2021 年微软研究者 Edward Hu 等人提出 LoRA 时给出的对照是:在 GPT-3 上,LoRA 把可训练参数减少到全参数微调的万分之一量级,训练所需显存约降到三分之一,效果却不输全参数微调。
为什么改这么少,效果却常常够用
这背后有一个关键判断:模型为适配一个具体任务所需要的改动,本身并不复杂。预训练已经把语言、知识和推理的底子打好了,适配客服话术、合同摘要或某种写作风格时,真正需要挪动的方向其实有限,不需要把每个参数都重练。用论文的说法,权重增量具有很低的内在秩——用一对瘦矩阵去逼近它,不是勉强凑合,而是刚好够用。
当然,够用有前提:任务离原模型的能力圈不能太远。如果目标是让模型换一种语气、掌握一套固定格式、熟悉一个领域的术语和问答套路,LoRA 往往游刃有余;如果想让模型凭空长出预训练时完全没接触过的新能力,再小的矩阵也变不出来,那已经超出微调能解决的范围。
和全参数微调、QLoRA 分别差在哪
全参数微调是所有参数都参与训练,上限最高,但每个任务都要存一份完整模型副本,训练显存和存储成本也最高,练过头还容易把原有通用能力练丢,也就是常说的灾难性遗忘。
LoRA 只练新增的小矩阵,原模型冻结。单个适配器文件通常只有几兆到几十兆,同一台机器可以存几十个任务的适配器来回切换;推理时把增量合并回原权重,不增加额外的计算延迟。它的代价是表达能力有上限,特别复杂的适配可能不如全参数微调。
QLoRA 是 2023 年 Tim Dettmers 等人提出的方法,它在 LoRA 的基础上再走一步:先把冻结的原模型压成 4 位量化,再训练适配器,显存进一步下降,原论文中 650 亿参数的模型也能在一张 48GB 显卡上微调。它和 LoRA 不是替代关系,而是 LoRA 的省显存版本;量化本身在改什么,可参看模型量化专题。
秩和目标层怎么选,才不会白练
新手最常纠结的两个旋钮,是秩 r 和把适配器加到哪些层上。经验上,风格、格式类任务 r 取 8 或 16 通常就够;任务更复杂、数据更多时再往 32、64 试,盲目调大只会让适配器变胖、更容易过拟合,收益很快见顶。目标层方面,原始 LoRA 主要加在注意力层的查询和值投影上;后来的实践发现,把前馈层等更多模块一起纳入,效果往往更稳,但参数也会随之变多。
还有一个容易被忽略的搭档参数 alpha,它决定增量被放大多少倍再叠回原权重。r 和 alpha 需要一起看:只改 r 不改 alpha,等于同时改了学习强度,这也是很多人照着别人的配置复现、效果却对不上的原因之一。
三个最常见的误解
误解一:LoRA 是把大模型压缩变小。它压的不是模型,而是训练的对象;原模型一个参数都没少,省下的是训练显存和适配器的存储空间。推理时模型该多大还多大,QLoRA 里模型变小靠的是量化,不是 LoRA 本身。
误解二:适配器文件小,效果一定打折。文件小只说明可训练参数少;在适配范围明确、数据质量过关的任务上,LoRA 与全参数微调的差距常常小到测不出来。真正拉开差距的通常是数据,而不是那对矩阵的大小。
误解三:什么任务都能靠 LoRA 补上。LoRA 擅长调整模型已有的能力——语气、格式、领域表达和任务套路;它不擅长灌入大量新事实。需要让模型回答自家最新文档里的问题,那是检索增强生成(RAG)的活,硬用 LoRA 把文档背进参数里,既贵又容易记错。微调与 RAG 的分工,在微调专题里有更完整的对照。
什么时候适合用,什么时候别指望它
适合的场景很清楚:你手上有一个开放权重的模型,想用有限的显卡把它调成某个领域、某种风格或某类固定任务的样子,而且以后可能还要为不同客户、不同任务各留一版。LoRA 的适配器小、切换快、互不干扰,正是为这种一对多的局面设计的;个人开发者在本地折腾开源模型时,它几乎是默认起点。
不适合的情况也要提前认清:任务需要模型掌握大量新知识、彻底改变能力结构,或者连像样的训练数据都凑不齐时,先别急着开练。前两种情况要考虑全参数微调甚至继续预训练;后一种情况里,提示词和 RAG 往往用更低的成本就能解决。LoRA 的价值从来不是无所不能,而是用很小的代价,把最后一公里的适配做完。