学习笔记
LoRA模型
00 min
2024-8-6
2024-9-9
icon
password
Blocked by
Date
type
status
date
slug
summary
tags
category
Blocking

LORA

  • LoRA (Low-Rank Adaptation) : 在机器学习领域,特别是自然语言处理中,LoRA是"Low-Rank Adaptation"的简称,是一种用于微调大型预训练模型的技术。
  • 基本思想:在不改变原始预训练权重的基础上,通过引入可训练的低秩分解矩阵来调整模型参数,以适应特定任务或领域。
  • 这种方法的优势:相较于全模型微调,它仅更新少数参数,因此可以显著减少计算资源消开耗和潜在的过拟合风险,同时保留了预训练模型的泛化能力。
但是lora只是参数高效,并不是训练高效。有优化lora训练速度的lora变种。
notion image
LoRA引入了两个矩阵A和B,如果参数W的原始矩阵的大小为d × d,则矩阵A和B的大小分别为d × r和r × d,其中r要小得多(通常小于100)。参数r称为秩。如果使用秩为r=16的LoRA,则这些矩阵的形状为16 x d,这样就大大减少了需要训练的参数数量。LoRA的最大的优点是,与微调相比,训练的参数更少,但是却能获得与微调基本相当的性能。 LoRA的一个技术细节是:在开始时,矩阵A被初始化为均值为零的随机值,但在均值周围有一些方差。矩阵B初始化为完全零矩阵。这确保了LoRA矩阵从一开始就不会以随机的方式改变原始W的输出。一旦A和B的参数被调整到期望的方向,那么W的输出中A和B的更新应该是对原始输出的补充。
 

📝 LORA实现原理

notion image
若原大模型的参数是W0,额外训练的模块的参数是△W,输入为x,那么此时的输出h就是
受instrisic dimension的启发,作者认为参数更新过程中也存在一个“内在秩”。对于预训练权重矩阵W0 (mxn),通过低秩分解来分解为两个矩阵A(mxr),B(rxn)。
(补充关于矩阵分解:对于一个mn的矩阵,若它的秩是r,则可以通过mr和r*n的矩阵近似表示)
也就是用新权重矩阵A和B来近似的表示了原权重矩阵W0,但是通过通过低秩分解大大降低了需要训练参数的数量。
假设原矩阵W0为100100,那么参数量为10000,若选取W0的秩为10。
那么,参数量减少了80%!
训练过程中冻结原权重矩阵W0,仅训练权重矩阵A和B中的参数,如上图中所示,蓝色部分会冻结,仅训练橘黄色部分。
引入lora之后的前向传播过程为:
  1. 原大模型的参数是W0,额外训练的模块的参数是△W,输入为x,矩阵A 为高斯随机初始化,矩阵B初始化为0,这样一开始△W=0,整个模型的输出与预训练模型一样,有利于模型的收敛。
  1. 这里只对attention层中的参数进行矩阵分解,包括Wq,Wk,Wv,Wo
  1. 当r=d的时候,就相当于对所有参数进行微调
  1. 没有额外的inference延迟,因为最后计算的时候可以先让W0和△W相加,然后再乘x,与之前直接和x相乘的计算量差不多。

👩‍💻 code example

上一篇
文章分享
下一篇
思考