LoRA: Low-Rank Adaptation of Large Language Models
Edward Hu · Yelong Shen · Phillip Wallis · Zeyuan Allen-Zhu · Yuanzhi Li · Shean Wang · Lu Wang · Weizhu Chen(Microsoft)· arXiv: 2106.09685 · 2021
自然语言处理的一个重要范式是:在通用领域数据上进行大规模预训练,再适配到特定任务或领域。随着我们预训练的模型越来越大,全量微调(重训所有模型参数)变得不再可行。以 GPT-3 175B 为例——为每个独立实例部署一份 175B 参数的微调模型,成本高得令人望而却步。
我们提出 LoRA(Low-Rank Adaptation,低秩自适应):冻结预训练模型权重,并在 Transformer 架构的每一层注入可训练的低秩分解矩阵,从而大幅减少下游任务的可训练参数。与使用 Adam 微调 GPT-3 175B 相比,LoRA 可将可训练参数减少 10000 倍、GPU 内存需求降低 3 倍。尽管参数更少、训练吞吐更高、且不像 adapter 那样引入额外推理延迟,LoRA 在 RoBERTa、DeBERTa、GPT-2 和 GPT-3 上的模型质量仍与微调持平甚至更好。我们还对语言模型适配中的秩缺陷进行了实证研究,揭示了 LoRA 的有效性。
许多 NLP 应用依赖将一个大型预训练语言模型适配到多个下游任务。这种适配通常通过微调完成——更新预训练模型的所有参数。微调的主要缺点是:新模型包含与原模型一样多的参数。随着模型快速增大,这在 GPT-2/RoBERTa 时只是"不便",到 GPT-3(1750 亿参数)时已变成关键部署挑战。
已有的缓解做法(只适配部分参数、学习外部模块等)虽然减少了存储,但常引入推理延迟(通过加深网络)或缩短可用序列长度(如 Prefix Tuning、Prompt Tuning),且往往无法匹配全量微调的效果,形成效率与质量之间的权衡。
受 Li et al. 2018a 和 Aghajanyan et al. 2020 启发(他们证明学习到的过参数化模型其实存在于低内在维度),我们假设模型适配过程中的权重变化也具有低"内在秩"。因此提出 LoRA:冻结预训练权重,只优化秩分解矩阵。
其中 W0 为冻结的预训练权重(Rd×k),B∈Rd×r 与 A∈Rr×k 为低秩矩阵,r ≪ min(d,k) 为秩。A 用高斯随机初始化,B 初始化为零(保证训练开始时 BA=0,使训练起点与预训练模型一致)。
以 GPT-3 175B 为例,即使全秩 d 高达 12288,极低的秩(r = 1 或 2)就足够,使 LoRA 既省存储又省算力。
给定预训练自回归语言模型 PΦ(y|x)(参数为 Φ),适配到下游任务。全量微调目标为最大化条件语言建模目标:
全量微调的缺点是每个下游任务学习不同的 ΔΦ,维度 |ΔΦ| 等于 |Φ0|。LoRA 采用参数高效方式,将增量编码为更小参数集 Θ(|Θ| ≪ |Φ0|),变为对 Θ 的优化:
当预训练模型是 GPT-3 175B 时,可训练参数 |Θ| 可低至 |Φ0| 的 0.01%。
Adapter 有多种变体,其共同思路是在 Transformer 中插入小型的可训练前馈层。这增加了网络深度,即使经过精心优化,在融合后仍有额外的计算开销——尤其在批量小、延迟敏感的生产场景中不可接受。
Prefix Tuning / Prompt Tuning 类方法在输入前拼接可训练嵌入,这占用了输入上下文长度,缩短了模型可处理的有效序列长度,且往往无法匹配全量微调基线。
LoRA 通过注入低秩矩阵(不加深网络、不占序列长度、可合并部署)克服了这些局限。
在 RoBERTa、DeBERTa、GPT-2、GPT-3 上,LoRA 以更少的可训练参数、更高的训练吞吐、无额外推理延迟,达到与全量微调持平甚至更好的模型质量。实证调查还发现模型适配存在秩缺陷——所需的内在秩远低于表面维度,这正是 LoRA 高效的原因。不同于探索时"极低秩(4,8,16)即可"的初步发现(受缩放因子 α/r 导致的梯度坍缩影响),后续 rsLoRA 工作证明采用 α/√r 后,更大秩能真正带来性能提升。
📚 本文由 ar5iv 原文翻译为中文,数学公式采用 HTML 上下标 + Unicode 渲染