PEFT:大型语言模型参数高效微调方法

目录
引言
本文探讨了参数高效微调(PEFT)技术的广阔领域——这是一组在内存和计算性能方面更高效地适应大型语言模型(LLM)的方法。本文借鉴了论文“[2303.15647] Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning”和集成Hugging Face Transformers的PEFT库,深入研究了在不需要训练其数十亿参数的情况下,促进语言模型微调的关键概念和方法。
本文介绍了主要的PEFT技术,描述了它们的工作原理,并强调了它们在语言模型微调中的特点和潜在应用,重点在于最大限度地提高内存效率和训练时间性能。
还有一个使用Full Fine-Tune、LoRA、QLoRA和IA3对模型进行微调以总结客户服务对话的笔记本。
PEFT方法分类
参数高效微调(PEFT)方法可以根据两个主要方面进行分类:它们的概念结构(例如,引入新参数或调整现有参数)和它们的主要目标(最小化内存占用、提高存储效率或降低计算成本)。
这些方法分为三大类:
附加方法
附加方法向基础模型引入新参数,通常通过小型适配器层或调整部分输入嵌入(称为软提示)。这些方法被广泛使用,包括:
- 适配器:插入在特定Transformer子层之后的小型密集(全连接)网络,允许适应新任务而无需训练模型的所有参数。
- 软提示:直接应用于模型输入嵌入的微调,实现任务特定适应,而不修改模型的内部参数。
这些方法通常内存效率高,因为它们减少了梯度和优化器状态的大小。
选择性方法
选择性方法只调整现有模型参数的一小部分。这可以通过几种方式完成,例如:
- 顶层微调:专注于只微调网络的顶层,而保持底层不变。
- 特定参数微调:选择性地训练某些类型的参数,例如偏差,同时冻结其他参数。
- 稀疏更新:选择参数的一个特定子集进行训练。尽管有前景,但这种方法可能由于需要识别最相关参数而产生高计算成本。
尽管减少了训练参数的数量,但选择性方法可能会产生高计算成本,尤其是在稀疏配置中。
基于重参数化的方法
基于重参数化的方法通过利用低秩表示来减少可训练参数的数量,从而利用神经网络中存在的冗余。关键方法包括:
- LoRA(低秩适应):采用低秩矩阵分解来表示权重更新,提供了一种高效微调模型的方式。
- 固有SAID:利用Fastfood变换,一种高效表示低秩更新的技术。
这些方法显著减少了需要训练的参数数量,使其成为存储效率和训练时间至关重要的场景的理想选择。
其他要点
- 附加方法:虽然它们引入了新参数,但通过减少需要存储的梯度和优化器状态量,它们总体上可以更内存高效。
- 选择性方法:尽管在减少训练参数数量方面很有前景,但它们可能计算密集,特别是在稀疏更新的情况下。
- 混合方法:通常探索不同类别的想法组合,以最大限度地提高性能,利用每种方法的优势。
方法 | 类型 | 存储 | 内存 | 反向传播 | 推理开销 |
---|---|---|---|---|---|
适配器(Houlsby 等,2019) | A | 是的 | 是的 | 否 | 额外FFN |
AdaMix(Wang 等,2022) | A | 是的 | 是的 | 否 | 额外FFN |
SparseAdapter(He 等,2022b) | AS | 是的 | 是的 | 否 | 额外FFN |
交叉注意力微调(Gheini 等,2021) | S | 是的 | 是的 | 否 | 无开销 |
BitFit(Ben-Zaken 等,2021) | S | 是的 | 是的 | 否 | 无开销 |
DiffPruning(Guo 等,2020) | S | 是的 | 否 | 否 | 无开销 |
Fish-Mask(Sung 等,2021) | S | 是的 | 可能 | 否 | 无开销 |
LT-SFT(Ansell 等,2022) | S | 是的 | 可能 | 否 | 无开销 |
Prompt Tuning(Lester 等,2021) | A | 是的 | 是的 | 否 | 额外输入 |
Prefix-Tuning(Li 和 Liang,2021) | A | 是的 | 是的 | 否 | 额外输入 |
Spot(Vu 等,2021) | A | 是的 | 是的 | 否 | 额外输入 |
IPT(Qin 等,2021) | A | 是的 | 是的 | 否 | 额外FFN和输入 |
MAM Adapter(He 等,2022a) | A | 是的 | 是的 | 否 | 额外FFN和输入 |
Parallel Adapter(He 等,2022a) | A | 是的 | 是的 | 否 | 额外FFN |
Intrinsic SAID(Aghajanyan 等,2020) | R | 否 | 否 | 否 | 无开销 |
LoRa(Hu 等,2021) | R | 是的 | 是的 | 否 | 无开销 |
UniPELT(Mao 等,2021) | AR | 是的 | 是的 | 否 | 额外FFN和输入 |
Compacter(Karimi Mahabadi 等,2021) | AR | 是的 | 是的 | 否 | 额外FFN |
PHM Adapter(Karimi Mahabadi 等,2021) | AR | 是的 | 是的 | 否 | 额外FFN |
KronA(Edalati 等,2022) | R | 是的 | 是的 | 否 | 无开销 |
KronA_Bres(Edalati 等,2022) | AR | 是的 | 是的 | 否 | 额外线性层 |
(IA)³(Liu 等,2022) | A | 是的 | 是的 | 否 | 额外门控 |
注意力融合(Cao 等,2022) | A | 是的 | 是的 | 是的 | 额外解码器 |
LeTS(Fu 等,2021) | A | 是的 | 是的 | 是的 | 额外FFN |
Ladder Side-Tuning(Sung 等,2022) | A | 是的 | 是的 | 是的 | 额外解码器 |
FAR(Vucetic 等,2022) | S | 是的 | 可能 | 否 | 无开销 |
S4-model(Chen 等,2023) | ARS | 是的 | 是的 | 否 | 额外FFN和输入 |
上表详细比较了PEFT方法在存储效率、内存效率和计算效率方面的表现。它考察了训练期间反向传播成本的降低以及每种方法相关的推理开销。不同技术分类如下:
- A(附加):向模型引入新参数的方法。
- S(选择性):仅微调现有参数子集的方法。
- R(重参数化):利用低秩表示来减少可训练参数数量的方法。
方法 | 可训练参数百分比 | 更改参数百分比 | 评估于 | ||
---|---|---|---|---|---|
<1B | <20B | >20B | |||
适配器(Houlsby 等,2019) | 0.1 - 6 | 0.1 - 6 | 是的 | 是的 | 是的 |
AdaMix(Wang 等,2022) | 0.1 - 0.2 | 0.1 - 0.2 | 是的 | 否 | 否 |
SparseAdapter(He 等,2022b) | 2.0 | 2.0 | 是的 | 否 | 否 |
BitFit(Ben-Zaken 等,2021) | 0.05 - 0.1 | 0.05 - 0.1 | 是的 | 是的 | 是的 |
DiffPruning(Guo 等,2020) | 200 | 0.5 | 是的 | 否 | 否 |
Fish-Mask(Sung 等,2021) | 0.01 - 0.5 | 0.01 - 0.5 | 是的 | 是的 | 否 |
Prompt Tuning(Lester 等,2021) | 0.1 | 0.1 | 是的 | 是的 | 是的 |
Prefix-Tuning(Li 和 Liang,2021) | 0.1 - 4.0 | 0.1 - 4.0 | 是的 | 是的 | 是的 |
IPT(Qin 等,2021) | 56.0 | 56.0 | 是的 | 否 | 否 |
MAM Adapter(He 等,2022a) | 0.5 | 0.5 | 是的 | 否 | 否 |
Parallel Adapter(He 等,2022a) | 0.5 | 0.5 | 是的 | 否 | 否 |
Intrinsic SAID(Aghajanyan 等,2020) | 0.001 - 0.1 | ~0.1 或 100 | 是的 | 是的 | 否 |
LoRa(Hu 等,2021) | 0.01 - 0.5 | ~0.5 或 ~30 | 是的 | 是的 | 是的 |
UniPELT(Mao 等,2021) | 1.0 | 1.0 | 是的 | 否 | 否 |
Compacter(Karimi Mahabadi 等,2021) | 0.05-0.07 | ~0.07 或 ~0.1 | 是的 | 是的 | 否 |
PHM Adapter(Karimi Mahabadi 等,2021) | 0.2 | ~0.2 或 ~1.0 | 是的 | 否 | 否 |
KronA(Edalati 等,2022) | 0.07 | ~0.07 或 ~30.0 | 是的 | 否 | 否 |
KronA_Bres(Edalati 等,2022) | 0.07 | ~0.07 或 ~1.0 | 是的 | 否 | 否 |
(IA)³(Liu 等,2022) | 0.02 | 0.02 | 否 | 是的 | 否 |
Ladder Side-Tuning(Sung 等,2022) | 7.5 | 7.5 | 是的 | 是的 | 否 |
FAR(Vucetic 等,2022) | 6.6-26.4 | 6.6-26.4 | 是的 | 否 | 否 |
S4-model(Chen 等,2023) | 0.5 | 大于 0.5 | 是的 | 是的 | 否 |
表2分析了PEFT方法已评估的模型规模,突出显示了每种方法使用的典型可训练参数数量。“可训练参数”计数特指通过梯度优化算法调整的参数,将其与“修改参数”区分开来,后者表示相对于原始模型的更改。对于基于重参数化的方法,该表报告了重参数化之前和之后的参数。
附加方法
适配器
基于适配器的方法在冻结的预训练模型的注意力层和全连接层之后添加额外的可训练参数,以减少内存使用并加速训练。适配器的具体实现可能有所不同;它可以是一个简单的额外层,也可以涉及将权重更新∆W表示为权重矩阵的低秩分解。无论哪种情况,适配器通常都很小,但表现出与完全微调模型相当的性能,从而能够用更少的资源训练更大的模型。
适配器的概念最初是为多领域图像分类开发的(Rebuffi et al., 2017, 2018),并涉及在神经网络模块之间添加领域特定层。Houlsby et al. (2019)将这一思想应用于NLP。他们提出在Transformer架构的注意力层和FFN层之后添加全连接网络。
软提示
提示方法已成为将预训练语言模型适应特定任务的有效方法,而无需进行全面微调(Brown et al., 2020)。这个概念涉及向模型提供指令或示例,以指导其针对所需任务的行为。
提示方法主要分为两类:
硬提示:由手动创建的自然文本组成,用于向模型提供任务指令。例如:“将以下文本翻译成法语:”或“将情感分类为积极或消极:”。尽管直观,但它们需要大量的专业知识才能创建有效的提示。
软提示:使用连续且可训练的向量,这些向量被连接到输入嵌入中。与硬提示不同,这些“虚拟标记”会针对任务自动优化,但由于它们不对应真实词语,因此不具有人类可解释性。(Li 和 Liang,2021;Lester 等人,2021;Liu 等人,2021)
提示调优
概念:
提示调优提出在模型的输入嵌入中添加一个可训练张量,称为“软提示”。该张量通过梯度下降直接优化,使模型能够调整其行为而无需更改底层模型参数。
实现
- 提示标记随机初始化或从现有词嵌入初始化。
- 训练期间,只有提示标记被更新,基础模型保持冻结。
- 提示大小(标记数量)是一个可调整的超参数。
- 提示可以重复用于同一任务的不同实例。
效率:
- 研究表明,随着模型规模的增加,提示调优的参数效率更高。例如,T5-11B在SuperGLUE基准上使用短(5个标记)和长(150个标记)软提示实现了相似的性能。
- 模型规模:提示调优仅在参数超过10亿的模型中与完全微调相当,主要证明其在大型模型中的效率。
- 推理开销:虽然软提示参数效率高,但由于额外的标记,可能会增加计算量,特别是在二次复杂度的Transformer模型中。
应用和局限性
- 适用于分类和文本生成任务
- 允许为多个任务维护基础模型的单个副本
- 在小型模型中性能可能低于传统微调
- 提示标记的可解释性受其连续性的限制
前缀调优
概念:
前缀调优是一种微调方法,它在所有模型层中引入可训练参数(“前缀”),同时保持原始参数不变。与其他仅修改输入嵌入的方法不同,该方法在架构的多个级别上优化前缀,从而实现更精细高效的调整。
上图表明,只有前缀(红色前缀块)被优化,因此每个任务只需要存储前缀,使得该方法高效且模块化。
实现:
- 一系列任务特定向量(前缀)插入到每个模型层的隐藏状态中。
- 为了解决训练不稳定性,前缀通过前馈网络(FFN)生成,该网络在训练期间进行优化。训练后,只保留前缀,FFN被丢弃。
性能:
- 显示性能接近完全微调,所需参数显著减少——仅占模型总参数的0.1%左右。
- 它在自然语言生成(NLG)任务中表现尤其出色,在少量数据设置中特别有效。
与提示调优的比较:
- 两种方法都向模型添加了额外的参数,但前缀调优在每个层中插入这些参数,而提示调优仅修改输入嵌入。
- 前缀调优通过跨层集成,实现了与完全微调相当的性能,但效率更高,主要在大型模型中。
P-tuning
概念:
P-Tuning是一种旨在优化语言模型在自然语言理解(NLU)任务中性能的方法,旨在克服传统离散提示的局限性。该方法基于软提示概念,使用通过专用提示编码器(通常是双向LSTM网络)优化的可训练嵌入张量。这种方法允许模型更精细地适应特定任务,同时保持计算效率。
实现:
- 该方法首先在输入序列中插入锚点标记,这些标记作为参考点,指导模型识别重要的输入组件。
- 提示标记可以灵活地放置在输入序列的任何位置,不限于开头。
- 模型修改只发生在输入层,与影响多层的前缀调优等方法不同,从而实现了更高效的实现。
效率/性能:
P-Tuning比手动创建提示更有效,使得类GPT模型在NLU任务中达到或超越类BERT模型的性能。
在LAMA和SuperGlue等基准测试中,P-Tuning使GPT模型能够恢复大量世界知识,并实现与类似规模BERT模型相当或更好的性能。
它还提高了BERT模型的性能,特别是在有监督和少样本设置中,减少了对大量提示工程的依赖。
应用:
- P-Tuning主要应用于NLU任务,使得GPT等模型能够有效地在传统上由BERT模型主导的领域中竞争。
- 它对于需要知识探测和少样本学习的任务特别有益,在这些任务中,它优于最先进的方法。
比较和附加要点:
- 与其他调优方法(如前缀调优)相比,P-Tuning在提示定位方面更灵活,并且不需要修改所有模型层。它使用提示编码器,特别是LSTM,提供了更稳健的提示优化,从而在特定基准测试中获得卓越性能。
(IA)³
概念:
(IA)³(Infused Adapter by Inhibiting and Amplifying Inner Activations)是一种用于微调Transformer模型的参数高效方法。与调整模型大部分参数的传统微调不同,(IA)³仅修改与Transformer块中的键、值和前馈层相关的特定学习向量。
该方法引入了三个向量lv、lk和lf,它们重新缩放注意力层和前馈层中的激活。这种方法使大多数模型权重保持冻结,从而大幅减少可训练参数的数量。
实现:
- (IA)³将这些学习到的向量注入到每个Transformer块中的注意力(键和值层)和第二个前馈层中。这些向量是微调期间唯一可训练的参数,使得该过程参数高效。
- 该方法保持了原始模型架构,并且仅产生最小的计算开销,具体而言是lf执行的重新缩放操作。
效率/性能:
- (IA)³参数效率极高,仅更新模型总参数的0.01-0.02%。例如,在T0-3B模型中,它仅更新0.02%的参数,远少于LoRA等方法,后者需要多16倍的可训练参数。
- 尽管其参数更新极少,但它实现了与完全微调模型相当的性能,通常优于其他参数高效方法,例如Compacter。
应用:
- 适用于神经网络中任何权重矩阵子集,使其适用于各种下游任务。通过只调整模型的一小部分,它可以创建多个轻量级且可移植的模型以适应特定任务。
- 它在计算资源有限或需要快速适应新任务而无需完全重新训练模型的场景中特别有利。
比较:
与其他微调方法(如LoRA和Compacter)相比,(IA)³因其极高的参数效率和最小的开销而脱颖而出。尽管LoRA也旨在减少可训练参数的数量,但它通过专注于使用学习到的向量重新缩放激活而不是更新权重矩阵来获得更高的效率。
与基于适配器的方法不同,(IA)³不会增加推理延迟,因为学习到的向量可以与基础模型合并,使其成为实时应用的理想选择。
基于重参数化方法
基于重参数化的参数高效微调方法利用低秩表示来最小化可训练参数的数量。神经网络具有低维表示的概念已在实证和理论深度学习分析中得到广泛探索。
固有SAID
由Aghajanyan 等人于2020年提出,固有SAID是一种微调方法,其基础是发现大型语言模型可以使用远少于其总大小的参数有效适应。该方法探索了“固有维度”的概念——即存在一个低维子空间,微调可以在其中与在完整参数空间中一样有效。
概念:
- 固有维度表示有效调整模型以完成特定任务所需的最少参数数量。
- SAID使用Fastfood变换将更新从低维空间投影到完整模型空间,从而实现高效微调。
- 一个关键发现是,较大的模型通常具有相对于其总大小较低的固有维度,这使得该方法对LLM特别相关。
实现:
该过程主要分为三个步骤:
- 子空间定义:通过对模型和数据的经验分析,确定特定任务的固有维度(d)。
- 重参数化:使用Fastfood变换(F)将参数从低维空间(d)映射到原始空间(D)。这种变换是传统密集矩阵的有效替代方法。
- 更新:θ = θ₀ + F(θd),其中θ₀是原始预训练参数,θd是在低维空间中优化的参数。
Fastfood变换提供了计算效率:
- 时间复杂度:O(D log d)
- 空间复杂度:O(D)
- 无需存储大型密集矩阵。
实验结果
- 对MRPC(Microsoft Research Paraphrase Corpus)数据集的测试表明:
- 大型模型需要成比例的更低的固有维度。
- 仅用200个参数投影到数百万或数十亿维度的空间中,就可以实现90%的完全微调性能。
- 这一发现表明,高效微调不仅可能,而且在大型模型中更有效。
在原始论文中,他们使用MRPC数据集,并使用SAID方法计算了每个预训练模型的固有维度。
局限性
- 尽管它减少了可训练参数的数量,但仍需要更新所有模型权重。
- 计算固有维度可能计算成本高昂。
- Fastfood变换的效率可能会在特定深度学习硬件上受到影响。
- 实际实现可能比LoRA等方法更复杂。
固有SAID,尽管对于非常大的模型存在实际限制,但它建立了重要的理论基础,直接影响了更实用的方法(如LoRA)的开发。其主要贡献在于数学上证明了在低维子空间中进行高效微调不仅可能,而且是大型模型固有的属性。这一发现为新一代高效微调技术铺平了道路,显著影响了语言模型适应研究的方向。
低秩适应 (LoRA)
LoRA由Hu 等人于2021年提出,通过将权重更新分解为较低秩矩阵,显著降低了计算成本,最大限度地减少了可训练参数的数量和内存消耗。
概念
深度学习模型,如大型语言模型(LLM),依赖于存储在预训练期间学习到的参数的权重矩阵。在传统的微调中,这些权重矩阵(W)直接更新。另一方面,LoRA将这些更新(ΔW)表示为两个低秩矩阵(Wa和Wb)的乘积:ΔW = WA x Wb
这种分解大大减少了可训练参数的数量,同时保持原始权重矩阵冻结。这种方法之所以可能,是因为内在维度的概念,它表明大型模型在较小的维度中具有高效学习的空间。2020年,Facebook的一个小组发表了一篇论文(内在维度论文)证明了这一点。
实现
LoRA的实现遵循以下步骤:
分解:将权重更新矩阵ΔWm×n分解为两个较小的矩阵:(Am×r) 和 (Br×n),其中 (r)(秩)是一个可调超参数。
线性代数中有一个定理叫做秩分解定理,它指出:
一个大小为
(m,n)
的矩阵可以写成两个大小分别为(m, r)
和(r,n)
的矩阵的乘积,其中r
是矩阵的秩,前提是r >= 1
。这可以通过以下示例可视化:
一个秩为1的(3,3)矩阵,如B,可以分解为大小为(3,1)和(1,3)的两个矩阵。
考虑到LLM层等大型矩阵,这种降维具有显著效果。假设一个具有2.56亿参数的LLM,只有一个矩阵:
W shape = (16000, 16000)
假设矩阵秩为300,且W分解为两个秩为300的矩阵P和Q。P和Q的形状将为:
P shape = (16000, 300) Q shape = (300, 16000)
分解后的参数总数将为:
16000 * 300 + 300 * 16000 = 9600000 = 9.6 million
训练:仅训练矩阵(A)和(B),而(W)保持冻结。
合并:微调后,(ΔW)可以合并回矩阵(W),保持模型性能。
在实践中,LoRA通常应用于Transformer注意力块,例如多头注意力模块中的Wk和Wv投影矩阵。
效率/性能
- 参数缩减:一个拥有1750亿参数的GPT-3模型,如果使用LoRA,只需调整大约3770万参数,计算成本降低近5000倍。
- 多功能性:LoRA可以选择性地应用于模型的各个部分,例如特定层,以进一步优化性能。
- 性能:研究表明,使用LoRA微调的模型性能与完全微调相当,但计算和内存成本更低。
应用
- 语言模型:LoRA最初设计用于LLM,可高效调整GPT、PaLM和LLaMA等模型。
- 扩散模型:由于其效率,LoRA已成为DALL-E和Stable Diffusion等图像生成模型的流行选择。
- 变体创建:该方法有助于创建基础模型的多个轻量级变体,以适应不同任务。
比较与附加优势
- 超越其他PEFT方法:LoRA在非常大的模型中经常优于BitFit和Adapters等技术。
- 可组合性:该方法与其他高效调整(如量化)正交,允许QLoRA等组合。
- 消除延迟:将调整后的权重合并到基础模型中的可能性消除了额外的推理延迟,使LoRA成为实时应用的理想选择。
凭借这些优势,LoRA代表了大规模模型高效训练的一个里程碑,在成本和性能之间取得了令人印象深刻的平衡。
量化低秩适应 (QLoRA)
QLoRA由Dettmers 等人于2023年提出,它将量化的效率与LoRA的低秩适应方法相结合,进一步优化了大规模语言模型的微调。该技术允许在有限的GPU(例如单个48GB GPU)上微调高达650亿参数的模型,同时保持传统16位微调方法的性能。
概念
QLoRA采用量化技术来降低模型权重的数值精度,从而最大限度地减少内存使用,同时保持计算效率。同时,LoRA被应用于执行低秩矩阵的权重更新。这种强大的组合显著降低了计算和内存成本,而不会影响性能。
主要创新包括:
- 4位普通浮点数 (NF4):一种新的数据类型,专门设计用于高效表示遵循正态分布(在LLM中常见)的权重,每个元素仅使用4位。NF4在后期量化精度方面已证明优于FP4和Int4,如在OPT、BLOOM、LLaMA和Pythia等模型测试中,平均困惑度更低(27.41 vs. 31.07)所证明。
- 双重量化:通过Hugging Face的
bitsandbytes
实现,通过量化量化常数来降低平均内存使用。 - 分页优化器:管理训练期间的内存峰值。
实现
- 量化:使用NF4技术将模型权重量化为4位,减少内存需求而不丢失相关信息。
- 微调:训练低秩矩阵(类似于LoRA),同时原始权重保持量化和冻结。
- 保留性能:该方法保持了模型的精度和有效性,即使资源显著减少。
实验结果
QLoRA的实验表明,即使使用4位量化,它也能复制传统16位微调方法的性能。这在GLUE、Super-NaturalInstructions和MMLU等学术基准测试中得到了体现。
数据类型 | 平均困惑度 |
---|---|
Int4 | 34.34 |
Float4 (E2M1) | 31.07 |
Float4 (E3M0) | 29.48 |
NFloat4 + DQ | 27.41 |
数据集 | GLUE(准确率) | Super-NaturalInstructions (RougeL) | ||||
---|---|---|---|---|---|---|
模型 | BF16 | BF16复现 | LoRA BF16 | QLORA Int8 | QLORA FP4 | QLORA NF4 + DQ |
RoBERTa-large | 88.6 | 88.6 | 88.8 | 88.8 | 88.6 | - |
T5-80M | 40.1 | 40.0 | 40.5 | 40.4 | 40.3 | 40.4 |
T5-250M | 42.1 | 42.2 | 42.6 | 42.9 | 42.4 | 42.7 |
T5-780M | 48.0 | 47.3 | 47.1 | 45.4 | 47.5 | 47.7 |
T5-3B | 54.3 | 54.9 | 55.4 | 56.5 | 55.6 | 55.3 |
T5-11B | 62.0 | - | 60.7 | 60.7 | 60.9 | 60.9 |
如表2所示,具有双重量化(NFloat4 + DQ)的NF4格式在所有测试的4位格式中实现了最低的平均困惑度(27.41),凸显了其在信息保存方面的功效。表3显示,QLoRA在不同模型规模和任务中保持了与16位训练(BF16)接近或相同的性能。
效率
- 内存减少:4位量化将内存使用量比FP16权重减少了高达75%。
- 计算成本:LoRA与量化的结合使得使用更易于访问的硬件进行超大型模型微调成为可能。
- 优化性能:即使资源有限,QLoRA也能达到与传统方法相当的结果,展示了实际适用性。
通过结合量化和低秩适应,QLoRA使LLM的微调大众化,使计算资源有限的研究人员和开发人员能够在不牺牲质量的情况下处理大规模模型。
初始化
PEFT库中LoRA权重的初始化默认使用Kaiming-uniform初始化权重A,B初始化为零,这会产生一个恒等变换,与参考实现一致。
PiSSA
PiSSA利用模型原始权重矩阵(W)的主奇异值和奇异向量来初始化LoRA适配器。这种直接修改使得PiSSA比标准初始化收敛更快,并通过在微调过程中关注模型最相关的组件,同时冻结其余组件,从而获得卓越性能。此外,PiSSA与QLoRA相比减少了量化误差,带来了额外的改进。
方法 | 参数量 | MNLI | SST-2 | MRPC | CoLA | QNLI | QQP | RTE | STS-B |
---|---|---|---|---|---|---|---|---|---|
RoBERTa-large (355M) | |||||||||
完整微调 | 3.55亿 | 90.2 | 96.4 | 90.9 | 68.0 | 94.7 | 92.2 | 86.6 | 91.5 |
LoRA | 1.84M | 90.6 | 96.2 | 90.9 | 68.2 | 94.9 | 91.6 | 87.4 | 92.6 |
PiSSA | 1.84M | 90.7 | 96.7 | 91.9 | 69.0 | 95.1 | 91.6 | 91.0 | 92.9 |
DeBERTa-v3-base (184M) | |||||||||
完整微调 | 184M | 89.90 | 95.63 | 89.46 | 69.19 | 94.03 | 92.40 | 83.75 | 91.60 |
LoRA | 1.33M | 90.65 | 94.95 | 89.95 | 69.82 | 93.87 | 91.99 | 85.20 | 91.60 |
PiSSA | 1.33M | 90.43 | 95.87 | 91.67 | 72.64 | 94.29 | 92.26 | 87.00 | 91.88 |
上图展示了PiSSA在改进和加速收敛以及减少量化误差方面的优势,这在已发表的论文中的实验中得到了证实。
实验表明,PiSSA在各种模型和任务中持续优于LoRA,包括自然语言生成和理解基准测试。例如,在GSM8K基准测试中,使用PiSSA微调的Mistral-7B模型达到了72.86%的准确率,超过了LoRA实现的67.7%,显著提升了5.16%。此外,与QLoRA相比,PiSSA在减少量化误差方面表现出色。量化版本QPiSSA在同一基准测试中达到了86.05%的准确率,优于QLoRA的81.73%。
由于与量化技术的兼容性以及使用快速SVD进行初始化,PiSSA在不牺牲训练速度的情况下提供了内存高效和性能增强的解决方案。对GLUE基准测试使用RoBERTa-large和DeBERTa-v3-base进行的额外评估证实,PiSSA在16个测试任务中有14个优于LoRA,显示出卓越的微调能力和更低的训练损失。
OLoRA
OLoRA(Orthonormal Low-Rank Adaptation)是一种高效的参数适应技术,它使用QR分解来初始化LoRA适配器。OLoRA在进行任何调整之前,会向预训练的权重矩阵引入正交变换,而不是直接对模型权重进行适应。它将权重矩阵W分解为正交矩阵Q和上三角矩阵R。这种方法提供了更高的训练稳定性,加速了收敛,并带来了卓越的性能。
OLoRA独立应用于每个模型层,在前向传播期间使用适应后的权重矩阵,而在反向传播期间仅计算与适应矩阵相关的梯度。这保留了原始模型的知识,从而以低计算成本实现高效调整。
尽管QR分解在初始化时有O(mnr)的初始计算成本,但它仅在每层初始化时执行一次,与训练大规模模型的总成本相比,开销可以忽略不计。
这些图展示了微调期间模型的损失行为,包括Tiny-Llama-1.1B(不同秩)、Gemma-2B和OPT-1.3B,其中OLoRA收敛速度更快。这些实验在原始论文中详细阐述。
秩稳定LoRA (rsLoRA)
LoRA架构在每次前向传播期间都将每个适配器按一个在初始化期间设置的固定标量进行缩放,该标量取决于秩(r)。在原始实现中,该标量定义为 ( \text{lora_alpha} / r ),但秩稳定LoRA (rsLoRA)使用 ( \text{lora_alpha} / \sqrt{r} ),从而稳定适配器并增强使用更高秩时的性能潜力。
在实验中,rsLoRA在高秩配置下表现出优于LoRA的性能。在OpenOrca指令数据集的20,000个示例上训练LLaMA 2模型时,即使在高秩下,它也保持了梯度稳定性,而标准LoRA则遭受梯度崩溃和学习效率降低的问题。
权重分解低秩适应 (DoRA)
DoRA将权重更新分解为两个分量:幅度和方向。方向由标准LoRA处理,而幅度由单独的可学习参数管理。这种方法增强了LoRA的性能,尤其是在较低秩的情况下。
实验表明,DoRA在LLaMA、LLaVA和VL-BART等模型中,在各种下游任务(包括常识推理、视觉指令微调和文本-图像/视频理解)上始终优于LoRA和其他微调方法。例如,在LLaMA-7B模型上,DoRA在常识推理数据集上的平均准确率比LoRA提高了3.7%,甚至超过了ChatGPT的准确率水平。对于LLaMA-13B等更大的模型,DoRA实现了与并行适配器相似的性能,同时仅使用四分之一的可训练参数,且不增加推理成本。
合并LoRA适配器
虽然LoRA在训练上显著更小更快,但在推理过程中可能会出现延迟问题,因为需要分别加载基础模型和LoRA适配器。为了消除这种延迟,您可以使用**merge_and_unload()
**函数将适配器权重与基础模型合并。这使您可以使用新合并的模型作为独立模型。merge_and_unload()
函数不会将适配器权重保留在内存中。
下面是说明合并LoRA适配器直观概念的图表:
要保留权重的单独副本并允许适配器解耦,您可以使用**merge_adapter()
**和unmerge_adapter()
。
变体
低秩哈达玛积 (LoHa)
概念
低秩哈达玛积(LoHa)利用通过哈达玛积(元素级乘法)而非传统矩阵乘法组合的低秩矩阵。
- ∆W表示:在LoHa中,权重更新矩阵∆W被分解为四个更小的矩阵,并且这些低秩矩阵的每一对都使用哈达玛积进行组合。这允许模型保留高秩和表达能力,同时保持可训练参数数量的一致性。
实现
- 哈达玛积:LoHa依赖于哈达玛积而不是矩阵乘法来组合低秩矩阵,这会影响模型的结构和训练。
- LoRA的扩展:LoHa可以看作是低秩适应(LoRA)的扩展,在不增加更多参数的情况下增强模型容量。
- 嵌入层:尽管LoHa适用于各种模型,但尚未完全在参数高效微调(PEFT)框架中实现嵌入层。
效率与性能
- 性能权衡:LoHa在模型表达能力和参数数量之间取得平衡。它允许更高的秩和容量而不增加计算负荷。
- 联邦学习(FL):在FL中,LoHa已显示出通信成本显著降低(3-10倍),同时保持可比的模型性能。这通过FedPara方法实现,该方法使用低秩权重,然后进行哈达玛积,使其比传统的低秩方法更高效。
应用
LoHa最初是为计算机视觉任务开发的,特别是在扩散模型中,其中生成多样化图像至关重要。
低秩克罗内克积 (LoKr)
LoKr是LoRA的一个变体,与LoRA和LoHa密切相关,主要应用于扩散模型,但也可适应其他模型类型。LoKr与LoRA的主要区别在于,LoKr用克罗内克积取代了传统的矩阵乘法。这种分解创建了一个块矩阵,它保留了原始权重矩阵的结构和秩,确保模型在微调期间保留其泛化能力。
主要优势
- 向量化能力:克罗内克积可以向量化,这意味着矩阵列可以堆叠成一个向量。这减少了完全重建调整矩阵(∆W)的需求,从而加速了微调并提高了效率。
- 附加矩阵灵活性:LoKr允许使用可选的第三个低秩矩阵,在微调期间提供更精细的控制。
尽管LoKr最初是为扩散模型设计的,但其灵活性使其可以集成到广泛的模型中,使其成为一种高效的低秩适应技术,同时不损害基础模型的性能。
LoRA专家混合 (X-LoRA)
概念
X-LoRA是一种先进的低秩适应(LoRA)方法,利用了“专家混合”(MoE)的概念。它使用可以稠密或稀疏的控制机制(门控)动态激活不同的LoRA专家。与传统的MoE方法不同,X-LoRA在训练期间保持LoRA专家和基础模型冻结,仅训练控制层(门控),从而降低了复杂性和训练成本。
实现
- 双通道:在推理过程中,X-LoRA执行两个步骤。首先,模型在不应用LoRA适配器的情况下生成隐藏状态。然后,这些状态用于计算LoRA适配器中的调整,动态重组并选择最适合任务的专家。
- 控制层:控制层决定哪些LoRA专家被激活,并在层级和标记级别精确调整其比例。这些是X-LoRA中唯一训练的部分。
- 自定义适应:X-LoRA允许细粒度适应,为特定层和标记激活特定的LoRA专家,从而实现高度个性化的微调。
效率与性能
- 参数效率:由于仅训练控制层,而基础模型和LoRA专家保持冻结,X-LoRA显著减少了调整的参数数量,实现了轻量级训练而不影响性能。
- 动态知识恢复:双通道机制允许模型“反思”其输出,动态调整其预测,以提高准确性和上下文敏感性。
应用
X-LoRA在科学和技术领域表现出色,例如材料分析、蛋白质力学和分子设计。其动态组合来自不同专家知识的能力使其在复杂、跨学科问题(如预测纳米力学特性或分子行为)方面非常有效。
比较与亮点
- 传统LoRA与X-LoRA:与应用固定适应的标准LoRA不同,X-LoRA引入了动态灵活性,实现了更智能和专业的调整。
- 生物学启发:X-LoRA的设计受到生物学原理的启发,例如跨层次的组件重用,增强了其在不同领域的通用性和适用性。
这些实验结果显示了知识回忆评估。
- (a) 生物启发回忆考试的结果,其中X-LoRA优于其他模型,尽管其规模更小(7B参数 vs. 13B)。
- (b) 力学/材料知识回忆的基准测试结果。
- (c) 生物学、材料、蛋白质特性、逻辑和推理领域的结果,重点关注具有挑战性的问题。
KronA
概念
KronA 是一种参数高效的微调方法,它通过利用克罗内克积(Kronecker product)扩展了 LoRA 中使用的矩阵分解思想。克罗内克积能够提高阶效率,即它保留或增强了被分解的原始权重矩阵的秩 (Edalati 等人,2022)。
KronA 中使用的克罗内克积表示为 δW = WA ⊗ WB,其中 WA 和 WB 是分解中涉及的矩阵。这种方法使得 KronA 与传统矩阵分解方法相比,能够实现更好的秩参数比。
上图展示了所提出的基于克罗内克模块及其低秩对应模块的结构。在图 d) 中,展示了 KronA^Bres,其中残差连接由虚线表示。
实现
KronA 实现了克罗内克积向量运算 x(A⊗B),避免了更新矩阵 δW 的显式表示。这在训练和推理过程中显著提高了计算速度。
KronA 还引入了 KronA^Bres,这是一个包含残差连接和并行适配器结构的变体,通过克罗内克积进一步优化了权重参数化。
效率/性能
KronA 具有高度的参数效率,仅更新模型总参数的约 0.07%,与 LoRA 和 Compacter 等方法相似。然而,它实现了更好的性能,尤其是在 GLUE 基准测试中的任务上。
该方法不仅参数高效,而且在推理过程中比基于适配器的方法(如 Compacter)更快。这主要归因于克罗内克积的高效计算,它避免了与显式矩阵表示相关的开销。
应用
KronA 对于参数量较小的模型(小于 10 亿)特别有用。它非常适合参数效率和推理速度至关重要的任务,例如实时应用或资源受限的环境。
该方法在自然语言处理任务中表现出强大的性能,特别是在 GLUE 基准测试中,它与或优于其他微调方法,同时保持相似或更小的参数占用。
选择性微调
选择性方法调整模型现有参数的子集。这可以涉及层深度选择、基于类型选择,甚至单个参数选择。
BitFit
概念
BitFit 是一种由 (Ben-Zaken 等人,2021) 提出的高效微调技术,其重点是仅调整预训练模型的偏置项,而不是更新所有层权重。在线性或卷积层中,权重矩阵 𝑊 保持不变,而只优化偏置向量 𝑏。
实现
BitFit 的实现非常简单。从模型参数中选择偏置项,优化器只对这些参数进行优化。
这种方法只修改模型总参数的约 0.05%,使得 BitFit 在存储和计算方面高度高效。
效率/性能
BitFit 展现出卓越的内存和训练时间效率。通过更新极少量的参数,它大幅减少了资源需求,例如内存和计算能力,尤其是与完全微调相比。它在小型模型中表现出有效性,特别是在小到中型数据集场景中,其性能可与甚至超越完全微调。
然而,当应用于更大的模型,例如 T0-3B 或 GPT-3 时,BitFit 的竞争力可能会降低,落后于完全微调或其他高效微调方法,如 LoRA 或 Prefix Tuning。这是因为仅修改偏置项可能不足以捕获大型模型中训练数据的复杂性。
应用
BitFit 特别适用于计算资源有限或需要在没有完全微调能力的情况下快速在新数据上训练模型的场景。它在训练数据集较小或中等的领域特别有效,例如将预训练语言模型适应特定任务(例如,文本分类或问答)。
与其他技术的比较
与其他高效微调技术(如 LoRA 和适配器)相比,BitFit 是最简单的方法,因为它只修改偏置。然而,它的简单性可能导致在涉及大型数据集或大型模型的场景中性能较差,在这种情况下,LoRA 等技术往往更有效。
% 参数 | QNLI | SST-2 | MNLIm | MNLIm mm | CoLA | MRPC | STS-B | RTE | QQP | 平均 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
训练大小 | 105k | 67k | 393k | 393k | 8.5k | 3.7k | 7k | 2.5k | 364k | |||
(V) | 完全微调 | 100% | 93.5 | 94.1 | 86.5 | 87.1 | 62.8 | 91.9 | 89.8 | 71.8 | 87.6 | 84.8 |
(V) | 完全微调 | 100% | 91.7±0.1 | 93.4±0.2 | 85.5±0.4 | 85.7±0.4 | 62.2±1.2 | 90.7±0.3 | 90.0±0.4 | 71.9±1.3 | 87.5±0.4 | 84.1 |
(V) | Diff-Prune | 0.5% | 93.4 | 94.2 | 86.4 | 86.9 | 63.5 | 91.3 | 89.5 | 71.5 | 86.6 | 84.6 |
(V) | BitFit | 0.08% | 91.4±2.4 | 93.2±0.4 | 84.4±0.2 | 84.8±0.1 | 63.6±0.7 | 91.7±0.5 | 90.3±0.1 | 73.2±3.7 | 85.4±0.1 | 84.2 |
(T) | 完全微调 i | 100% | 91.1 | 94.9 | 86.7 | 85.9 | 60.5 | 89.3 | 87.6 | 70.1 | 72.1 | 81.8 |
(T) | 完全微调 t | 100% | 93.4 | 94.1 | 86.7 | 86.0 | 59.6 | 88.9 | 86.6 | 71.2 | 71.7 | 81.5 |
(T) | 适配器 i | 3.6% | 90.7 | 94.0 | 84.9 | 85.1 | 59.5 | 89.5 | 86.9 | 71.5 | 71.8 | 81.1 |
(T) | Diff-Prune | 0.5% | 93.3 | 94.1 | 86.4 | 86.0 | 61.1 | 89.7 | 86.0 | 70.6 | 71.1 | 81.5 |
(T) | BitFit | 0.08% | 92.0 | 94.2 | 84.5 | 84.8 | 59.7 | 88.9 | 85.5 | 72.0 | 70.5 | 80.9 |
DiffPruning
概念
DiffPruning,由 Guo 等人(2020)提出的一种技术,是一种旨在稀疏更新神经网络权重的高效微调技术。该方法引入了一个可学习的二元掩码,表示为 δ = z ◦ ∆W,其中 “◦” 是哈达玛积(元素级乘法)。该掩码在微调期间与模型一起训练,作为正则化目标的一部分。
实现
在微调期间,模型权重和决定哪些参数实际更新的可学习二元掩码都被调整。这导致了高效且稀疏的更新,减少了修改的参数数量,而不会影响模型的性能。
效率与性能
DiffPruning 通过在较小规模配置(<1B 参数)中仅修改约 0.5% 的模型参数,实现了卓越的参数效率。因此,它最适合存储受限的多任务边缘应用(例如移动设备)。然而,通过最小化修改参数的数量,该技术在训练期间需要更多内存,因为所有参数都与二元掩码一起优化。
应用
它在需要高效管理多个任务且存储受限的场景(例如移动设备)中特别有用。它也适用于新任务持续流入或来自不同提供者的情况,因为只需要存储一个小的任务特定差异向量。该技术在 GLUE 等基准测试中表现出与完全微调相当的性能,同时仅修改模型参数的一小部分。
比较和附加要点
随着任务数量的增加,它提供了有利的可扩展性,每个任务只需要存储一个小的差异向量。尽管在修改参数方面效率更高,但由于需要与可学习的二元掩码一起优化所有参数,训练期间的内存成本可能高于传统微调方法。
- 稀疏性控制:L0 范数的可微分方法允许 DiffPruning 以受控方式促进稀疏更新,这使其适用于节省空间和计算资源至关重要的场景。
- 多任务适应:通过在训练期间不需要同时访问所有任务,DiffPruning 是需要持续适应新任务而无需重新校准整个模型的设备的可行解决方案。
此图显示了左侧不同目标稀疏率下方法的 GLUE 验证集平均性能。右侧显示了 BERTlarge 在 SQuAD v1.1 验证集上的结果。
冻结与重构 (FAR)
概念
冻结与重构 (FAR) 技术是一种高效的微调方法,旨在减少内存消耗并加速大型语言模型(如 BERT)的训练。FAR 通过冻结模型的一部分参数,并只关注调整最重要的参数。目标是减少训练期间的资源使用,尤其是在存储和计算能力有限的边缘场景中。该方法还重新配置模型架构,将冻结参数和可训练参数分开分组,优化内存操作。
实现
它分两步操作:
- 参数识别:使用基于 L1 范数的学习度量,评估模型哪些部分对于调整很重要。然后,选择需要调整的矩阵列。
- 动态重构:模型的参数和线性层被分为冻结组件和可训练组件。在训练期间,矩阵乘法对这些组件分别执行,然后将结果连接起来生成输出。
效率与性能
在 DistilBERT 在 GLUE 和 SQuAD 任务上的实验中,它成功冻结了多达 60% 的模型参数,将训练时间减少了 30%,内存访问时间减少了 47%,同时性能指标没有显著损失。这种方法在使用 PyTorch 等现代硬件和框架时提供了极大的灵活性,并且在训练之后,参数可以重新配置,消除对推理的任何负面影响。
应用
FAR 在边缘场景(例如移动设备)中特别有效,因为资源有限。它的主要应用是在 DistilBERT 等模型中,用于 GLUE 基准测试和 SQuAD 2.0 等自然语言处理任务,在那里它显示出与完全微调相当的性能,但只有一小部分参数被更新(大约 6%)。
比较和附加要点
与冻结所有密集层权重的 BitFit 相比,FAR 表现出卓越的性能,特别是在 SQuAD 2.0 等更复杂的任务中。BitFit 性能急剧下降,尤其是在更具挑战性的任务中,其 EM 和 F1 指标差了近 20%。这表明 FAR 在处理 DistilBERT 等压缩模型中这些任务的复杂性方面更有效,提供了资源效率和性能之间的平衡。
以下是翻译成英文的内容,保留所有细节和信息
FishMask
概念
FishMask(Fisher-Induced Sparse uncHanging)掩码是一种基于稀疏参数更新的高效微调技术,其中要调整的参数是根据费舍尔信息选择的。通过使用费舍尔信息计算每个参数的重要性,FishMask 创建了一个稀疏掩码,只允许在训练期间更新固定子集的参数,而其余参数保持冻结。主要目标是在减少内存和通信成本的同时优化性能,尤其是在分布式学习和迁移学习场景中。
实现
费舍尔信息计算:每个参数的重要性通过费舍尔信息的对角近似来估计,公式为
在计算批次中所有参数的梯度后执行计算。
选择:在费舍尔计算之后,选择具有最高费舍尔值的参数并进行调整。选择基于百分比阈值。
掩码:创建一个掩码来指示参数选择。
效率
FishMask 技术旨在降低分布式环境中的内存和通信成本,而不会显著损害模型性能。通过仅更新一小部分参数(通常为 1% 到 10%),FishMask 可以保持与适配器等方法相当的性能,同时内存效率更高。
在性能方面,FishMask 的结果与适配器等技术相似,但不如 LoRA 和 (IA)³ 等更先进的方法。
应用
FishMask 在更新所有模型参数不可行的场景中特别有用。
比较和附加要点
与其他稀疏微调方法(如 BitFit 和 DiffPruning)相比,FishMask 的突出之处在于预先计算固定掩码的重要参数,避免了训练期间动态调整的需要。这显著降低了计算开销,尤其是在对动态稀疏操作支持有限的现代硬件上。
在实验中,FishMask 表现出与适配器相当的性能,但内存成本更低。然而,它并未达到 LoRA 和 (IA)³ 等技术的性能水平,这些技术可以在各种任务中更精确、更高效地调整参数。
参考文献
- PEFT - Hugging Face. 访问时间:2024年8月22日。
- Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning - Vladislav Lialin, Vijeta Deshpande, Anna Rumshisky, 2023。
- LoRA: Low-Rank Adaptation of Large Language Models - Edward J. Hu, Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, Weizhu Chen, 2021。
- Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning - Armen Aghajanyan, Luke Zettlemoyer, Sonal Gupta
- PiSSA: Principal Singular Values and Singular Vectors Adaptation of Large Language Models - Fanxu Meng, Zhaohui Wang, Muhan Zhang, 2024。
- OLoRA: Orthonormal Low-Rank Adaptation of Large Language Models - Kerim Büyükakyüz, 2024。
- A Rank Stabilization Scaling Factor for Fine-Tuning with LoRA - Damjan Kalajdzievski, 2023。
- DoRA: Weight-Decomposed Low-Rank Adaptation - Shih-Yang Liu, Chien-Yi Wang, Hongxu Yin, Pavlo Molchanov, Yu-Chiang Frank Wang, Kwang-Ting Cheng, Min-Hung Chen, 2024。
- X-LoRA: Mixture of Low-Rank Adapter Experts, a Flexible Framework for Large Language Models with Applications in Protein Mechanics and Molecular Design - Eric L. Buehler, Markus J. Buehler, 2024。
- KronA: Parameter Efficient Tuning with Kronecker Adapter - Ali Edalati, Marzieh Tahaei, Ivan Kobyzev, Vahid Partovi Nia, James J. Clark, Mehdi Rezagholizadeh, 2022。
- Language Models are Few-Shot Learners - Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, Sandhini Agarwal, Ariel Herbert-Voss, Gretchen Krueger, Tom Henighan, Rewon Child, Aditya Ramesh, Daniel M. Ziegler, Jeffrey Wu, Clemens Winter, Christopher Hesse, Mark Chen, Eric Sigler, Mateusz Litwin, Scott Gray, Benjamin Chess, Jack Clark, Christopher Berner, Sam McCandlish, Alec Radford, Ilya Sutskever, Dario Amodei, 2020。
- It’s Not Just Size That Matters: Small Language Models Are Also Few-Shot Learners - Schick & Schütze, NAACL 2021。
- The Power of Scale for Parameter-Efficient Prompt Tuning - Brian Lester, Rami Al-Rfou, Noah Constant, 2021。
- GPT Understands, Too - Xiao Liu, Yanan Zheng, Zhengxiao Du, Ming Ding, Yujie Qian, Zhilin Yang, Jie Tang, 2021
- Efficient Fine-Tuning of BERT Models on the Edge - Danilo Vucetic, Mohammadreza Tayaranian, Maryam Ziaeefard, James J. Clark, Brett H. Meyer, Warren J. Gross, 2022
- Training Neural Networks with Fixed Sparse Masks - Yi-Lin Sung, Varun Nair, and Colin A Raffel, 2021。
- Few-Shot Parameter-Efficient Fine-Tuning is Better and Cheaper than In-Context Learning - Haokun Liu, Derek Tam, Mohammed Muqeeth, Jay Mohta, Tenghao Huang, Mohit Bansal, Colin Raffel, 2022。
- Generative AI with Large Language Models - Deeplearning.AI, AWS Course - Chris Fregly, Antje Barth, Shelbee Eigenbrode, Mike Chambers。
- 微调 Transformer 模型 - Codeacademy 课程
- HuggingFace PEFT GitHub - Sourab Mangrulkar, Sylvain Gugger, Lysandre Debut, Younes Belkada, Sayak Paul 和 Benjamin Bossan。访问时间:2024年8月22日。
- meta-llama/llama-recipes: 使用可组合的 FSDP 和 PEFT 方法微调 Meta Llama3 的脚本,涵盖单/多节点 GPU。支持默认和自定义数据集,用于摘要和问答等应用。支持多种坦率推理解决方案,如 HF TGI、VLLM 用于本地或云部署。演示应用程序展示 Meta Llama3 用于 WhatsApp 和 Messenger。 GitHub. 访问时间:2024年8月22日。
microsoft/LoRA: loralib 的代码,实现了 “LoRA: Low-Rank Adaptation of Large Language Models.”。 GitHub - Edward J Hu, Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang and Weizhu Chen*.* 访问时间:2024年8月22日。