诸神缄默不语-个人CSDN博文目录
诸神缄默不语的论文阅读笔记和分类
论文全名:LoRA: Low-Rank Adaptation of Large Language Models
ArXiv网址:https://arxiv.org/abs/2106.09685
官方GitHub网站(包含在RoBERTa、DeBERTa、GPT-2上用Lora微调的权重):https://github.com/microsoft/LoRA
LoRA应该算是现在最流行的部分微调大模型的算法之一。也是我最常用的算法。
作者来自微软。
文章目录
- 1. 算法思路
- 2. 之前方法的不足之处
- 3. 实验
- 参考资料
1. 算法思路
如果对每个子任务都进行全量微调,代价太大了,所以本文提出了LoRA(Low-Rank Adaptation)算法来在子任务上优化大模型:冻结模型权重,在Transformer每一层加入新参数rank decomposition matrices来进行训练。测试的时候就把这个新参数直接加到原权重里。
LoRA跟全量微调相比减少了训练用时,效果没差多少,跟adapter相比没有增加推理用时。
以前解决模型微调代价高问题的方法有只微调部分权重和额外学习参数模块。这些方法要么会增加推理用时(因为模型加了个adapter,更深了)1 2,要么会减少模型可输入序列长度(prefix-tuning调的prefix挤了prompt本来该占的长度)3,而且微调效果也远逊于全量微调。
4和5指出大模型的参数是过参数化(over-parametrized6)的,实际上一个秩更低的矩阵就够用了,本文就假设模型微调过程中矩阵的变化差异( Δ Φ \Delta\Phi ΔΦ)也有这样一个低秩矩阵( Θ , ∣ Θ ∣ ≪ ∣ Δ Φ ∣ \Theta, |\Theta|\ll|\Delta\Phi| Θ,∣Θ∣≪∣ΔΦ∣),所以只优化这个rank decomposition matrices(秩分解矩阵)就相当于间接优化了整个稠密的大模型权重。
也就是将大模型权重更新矩阵拆成两个小矩阵的乘积:
最终表征向量也就变成了:
语言模型的目标函数:
LoRA就只优化AB。目标函数:
这样很省空间,省时间。
(有一些不知道是不是trick的细节我就没写了。Section 7部分分析了模型结构,我也没写)
2. 之前方法的不足之处
adapter系:推理慢,尤其在多卡运行时
2:每个block有两层adapter layers
prefix tuning:很难优化,更新参数时效果不稳定,而且留给下游任务的token不够长
3. 实验
与adapter相比,用时具有优势:
基模型选择了RoBERTa、DeBERTa、GPT-2,然后在GPT-3上进行了压力测。
对比实验结果:
超参数分析:
参考资料
- LORA:大模型轻量级微调:这篇有一些写得更详细的内容,还有更多参考资料,以后我可能会重读。当然我还是觉得如果真的想了解论文详情,应该去看论文
(2017) Learning multiple visual domains with residual adapters
(2020 EMNLP) AdapterDrop: On the Efficiency of Adapters in Transformers
AdapterFusion: Non-Destructive Task Composition for Transfer Learning ↩︎(2019) Parameter-Efficient Transfer Learning for NLP
(2020 EMNLP) Exploring Versatile Generative Language Model Via Parameter-Efficient Transfer Learning ↩︎ ↩︎(2021) Prefix-Tuning: Optimizing Continuous Prompts for Generation
(2021 EMNLP) The Power of Scale for Parameter-Efficient Prompt Tuning
(2021 ACL) WARP: Word-level Adversarial ReProgramming
(2021) GPT Understands, Too ↩︎(2018) Measuring the Intrinsic Dimension of Objective Landscapes ↩︎
(2020) Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning ↩︎
为了阐述这个问题我专门写了另一篇博文:Lora里面说大模型参数是over-parametrized(过参数的),什么是over-parametrized?(另附相关概念:double descent和bias-variance trade ↩︎