LoRA: Low-Rank Adaptation of Large Language Models
http://arxiv.org/abs/2106.09685
低秩矩阵训练大模型,有效减小开销、即插即用、对内部参数的变化不大,不得不学。
lora框架冻结预训练模型的权重并插入可训练的秩分解矩阵到Transformer架构的每一层中,这样可以有效减小下游任务所需训练参数
lora的优势:
- 通过置换图一中的矩阵A和B,可以高效的切换下游任务类型,且任务切换所需开销更小
- lora使得训练更加高效且降低了硬件准入门槛约三倍,原因在于并不需要计算梯度或者维持优化器数据,只用优化插入的更小型的低秩矩阵
- 简单的线性设计允许在部署时将可训练矩阵与冻结权重合并,与完全微调的模型相比,通过构建不会引入推理延迟。
- LoRA 与许多以前的方法正交,可以与其中许多方法结合使用,例如前缀调整。
将 Transformer 层的输入和输出维度大小称为 。我们使用 Wq 、 Wk、Wv 和 Wo 来引用 自注意力模块中的 query/key/value/output (查询、键、值、输出)投影矩阵。 W 或者 W0 是指预先训练的权重矩阵及其 ΔW 是在适应过程中的累积梯度更新。用 r 表示 LoRA 模块的 秩。使用Adam 进行模型优化,并使用 Transformer MLP 前馈维度
。
问题陈述
全参微调的时候,模型参数是加载的预训练参数,然后通过任务积累的梯度来逐渐调整参数值,目标是最大化条件语言建模目标:
全参微调的缺点是对于每一个不同的下游任务,学到的参数是不同的,且其维度大小和初始参数的维度一致,不管是存储还是开发都会是极具挑战性的。
文章则针对全参微调在LLM条件下不现实且不高效的问题,采用了一种参数效率更高的方法,其中特定于任务的参数增量 ΔΦ=ΔΦ(Θ) 由更小的参数 Θ 集进一步编码。 |Θ|≪|Φ0| 因此,查找 ΔΦ 的任务变成了优化 : Θ
以GPT3 175B参数模型为例,使用LORA框架进行微调,需要训练的参数量是原始参数量的0.01%
现有解决方案存在一定的问题
以语言模型为例,在高效调整方面有两个主要的策略:添加适应层或者优化某些形式的输入层激活
适配层增添了推理延迟
适配器有很多变体。 我们专注于 Houlsby 等 人(2019 年)的原始设计,每个 Transformer 模块有两个适配器层,而 Lin 等 人(2020 年)最近的设计每个模块只有一个,但有一个额外的 LayerNorm(Ba 等 人,2016 年)。虽然