conference: 2021
authors:
link: https://arxiv.org/abs/2106.09685
code:

参考解读

有名的微调方式。预训练模型依赖于内在参数的低秩维度。作者假设模型在 adaptation 的过程中权重变化也具有较低的内在秩,微调它和微调全部参数起到相同的作用。

Contribution

  1. 预训练好的参数可以共享。在处理不同的下游任务时,可以通过替换 LoRA 模块来有效地切换任务。
  2. 减少 fine-tune 开销。
  3. 无延迟推理。
  4. 与先前众多 finetune 方法正交。

给出一个预训练模型 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 即可。

Experiments

参考解读

Ques

1. 为什么 A 用高斯初始化,B 用 0?

2. 实验部分发现低秩能取得更好的效果。如果众多参数是线性相关的,大模型到底需要多少参数呢?(作者提的)