LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
conference: 2021
authors:
link: https://arxiv.org/abs/2106.09685
code:
参考解读
有名的微调方式。预训练模型依赖于内在参数的低秩维度。作者假设模型在 adaptation 的过程中权重变化也具有较低的内在秩,微调它和微调全部参数起到相同的作用。
Contribution
- 预训练好的参数可以共享。在处理不同的下游任务时,可以通过替换 LoRA 模块来有效地切换任务。
- 减少 fine-tune 开销。
- 无延迟推理。
- 与先前众多 finetune 方法正交。
Related work
给出一个预训练模型 P,以语言建模为例,可以将 P 应用于摘要、阅读理解、自然语言 2SQL 等等,这需要将模型在特定领域上的数据进行 fine-tune 然后得到一组特定的参数,这些参数是特定于任务且大小等于预训练模型的。然而使用 LoRA,只需存储一个 P 的参数,然后针对任务存储对应矩阵的参数。
有许多工作致力于优化模型参数和计算效率。两大方法:添加 adaptive 和优化某些形式的输入激活。
虽然 adaptive layer 往往参数很小,但大型网络依赖于硬件并行计算,adaptive layer 需要顺序处理,仍然会带来一定延迟,在线推理时尤为明显。
Methodology
先前研究证明,预训练好的语言模型有较低的“intrisic dimention”,即使通过随机映射到较小的子空间,仍然能有效学习。Inspired by this,作者假设权重更新也存在较低的内在秩。权重更新修改为:
其中,W0 冻结,不进行梯度更新。
这里,将 A 用随机高斯初始化,B 初始化为 0。因此一开始外接矩阵为 0。
将 LoRA 应用于所有权重矩阵并训练所有 bias 时,通过将 LoRA 秩设为预训练矩阵的秩(如何做到?调吗),可以大致恢复了 full-fine tune 的表达性。
Inference 的时候,将 W0+BA 得到权重。这并不会引入额外的延迟。同时,当需要切换 task 的时候,只需要减去 BA 然后加上新的 BA 即可。