-
LoRA方法来自论文LoRA: Low-Rank Adaptation of Large Language Models。
如今各类通用LLM越来越多且越来越大,如果想将一个通用LLM适用于特定领域变得非常困难(因为你需要使用特定数据集重新微调整个网络),而LoRA提出了一种全新的低秩适配方式,通过冻结预训练网络参数,并在每一层Transformer中注入可训练的秩分解矩阵,大大降低了微调所需的训练参数量。
背景
-
LoRA并非第一个提出冻结+适配器这种微调方式的论文,方法的核心思想就是对于一个庞大的预训练网络微调任务,通过插入少量可训练模块(适配器)来代替原始参数进行训练,达到大幅度降低计算和存储的目的。
Houlsby Adapter 方法提出在Transformer的MHA和FFN之后添加一个Bottleneck网络(Down -> Activation -> Up)进行迁移学习。
后续一些工作开始探索组合多个模块化的适配器能否提高新任务性能,AdapterFusion/AdapterSoup 等方法提出组合多个任务适配器的知识来处理新任务以提高性能,其中Fusion引入一个融合层学习如何动态地组合多个适配器输出,Soup直接平均多个适配器参数。
再者,Compacter/IA3这类工作探索如何将适配器的参数缩减到极致。Compacter将适配器权重矩阵分解为共享的“低速”权重和任务特定的“高速”权重。IA3不引入新模块,而是直接将Transformer中的激活值替换为针对指定任务的可学习的缩放向量。
-
那么LoRA有何不同呢,首先上述其他工作的适配器大部分是串行插入的,即会破环原网络结构,而LoRA则是在原始模块旁边增加一个适配器并行处理输入再将输出求和。
LoRA的适配器核心和Houlsby类似,也是一个降维再升维的过程,其设计思想得益于Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning关于内在维度(intrinsic dimension)的发现,它指出大模型是过参数化的,在适配一个具体下游任务时,存在一个极低的内在维度。只需要对这个在极低维度的参数进行优化就能够达到全量参数微调的性能。
基于此,LoRA假设模型在任务适配过程中权重的该变量是低秩的,由此提出低秩自适应方法。
