LoRA
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已经能接近全参数微调效果,性价比高
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WereAsh!
评论
ValineDisqus




