LoRA

思路:与其每次复制整个模型,不如只调整一小部分参数,把成本降下来

亮点:

  • 参数少:它只微调原始参数的1%甚至更少
  • 速度快:训练和部署都比全参数微调省时省力
  • 模块化:训练好的LoRA“插件”可以随时加载或卸载,不影响原始模型,特别适合多任务场景

原理

奇异值分解SVD可以把任意矩阵分解成三个矩阵的乘积。

r是矩阵的秩,决定了分解后保留的信息量。如果只保留最大的奇异值,就可以用更少的参数近似w

矩阵信息量主要集中在奇异值较大的方向中

矩阵本身非常大,但信息集中在少数几个方向的矩阵,称为低秩矩阵,任何一个低秩矩阵都可以通过奇异值分解,去降低他的参数两

研究发现,通过微调后的权重变化ΔW的奇异值分解,大部分信息集中在少数几个奇异值上。比如,LoRA论文在GPT-3上测试时,ΔW的前10-20个奇异值就占据了90%以上的信息

微调是为了强化模型某个特定领域的能力,不要对所有方向的参数进行调整。

如何更新参数

W’=W+ΔW=W+A·B

其中:

  • W’是调整后的有效权重,用去前向传播
  • W是预训练模型的原始矩阵,形状为(d,k)
  • ΔW是LoRA引入的调整量(增量),也是形状为(d,k)
  • A是形状为(d,r)的矩阵,r是秩,通常远小于d和k
  • B是形状为(r,k)的矩阵

本质上,还是方向传播算法

  • 在前向过程,带入A、B的参数计算损失
  • 在反向过程,根据损失求出A、B参数的梯度,然后更新参数

LoRA通常作用在Transformer的注意力层,应用在Wq和Wv上,Wq决定要关注哪些信息,Wv决定输出什么内容。调整它们直接影响模型对任务的理解和生成能力,LoRA论文中,微调Wq和Wv已经能接近全参数微调效果,性价比高