一、LORA[2021]

论文:《LORA: Low-Rank Adaptation of Large Language Models》

  1. 自然语言处理中的许多应用依赖于将一个大型的 pre-trained 语言模型适配到多个下游任务中。这种适配通常通过微调来完成,它会更新 pre-trained 模型中的所有参数。微调的一个主要缺点是,新模型的参数数量和原始模型一样多。随着每几个月就会训练出更大的模型,这对于 GPT-2RoBERTa large 来说只是“不方便”,而对于拥有 175B 可训练参数的 GPT-3 来说则成为了一个关键的部署挑战。

    许多研究试图通过仅适配部分参数、或学习新的外部模块来缓解这一问题。这样,我们只需要为每个任务存储和加载一小部分 task-specific 的参数,再加上存储和加载 pretrained 模型,从而在部署时极大地提升了运行效率。然而,现有的技术通常通过扩展模型深度来引入 inference latency 、或减少模型可用的序列长度。更重要的是,这些方法通常无法匹配 fine-tuning baselines ,在效率和模型质量之间存在权衡。

    我们受到 《Measuring the Intrinsic Dimension of Objective Landscapes》《Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning》的启发,它们表明:学到的 over-parametrized 的模型实际上处于 low intrinsic dimension 上。我们假设模型适配过程中的 weights’ change也具有低的 "intrinsic rank",这导致了我们提出的低秩适配(Low-Rank Adaptation: LORA )方法。如 Figure 1 所示,LORA 允许我们通过优化适配过程中 dense layers’ changerank decomposition 矩阵,来间接地训练神经网络中的某些dense layers ,同时保持 pre-trained weights 固定。以 GPT-3 175B 为例,我们展示即使 full rank (即 Figure 1 中的 d )高达 12288 ,一个非常低的秩(即 Figure 1 中的 r 可以是 12 )也已足够,这使得 LORA 在存储和计算上都非常高效。

    LORA 具有几个关键优势:

    • 一个 pre-trained 模型可以被共享,并用于构建许多不同任务的小的 LORA 模块。我们可以冻结 shared model ,并通过替换Figure 1 中的矩阵 AB 来有效地切换任务,从而显著减少存储需求和切换任务的开销。

    • 当使用自适应优化器时,LORA 使训练更高效,最多可将硬件门槛降低 3 倍,因为我们不需要计算或维护大多数参数的梯度或 optimizer states 。相反,我们只优化被注入的小得多的低秩矩阵。

    • 我们简单的线性设计允许我们在部署时将 trainable 矩阵与固定权重合并,通过构造,与 fully fine-tuned model 相比不会引入任何 inference latency

    • LORA 与许多以前的方法正交,可以与其中许多方法(如,prefix-tuning )组合使用。我们在附录 E 中给出了一个示例。

  2. 术语和约定:我们频繁引用 Transformer 架构并使用其维度的传统术语:

    • 我们把 Transformer 层的输入和输出维度大小称为 dmodel

    • 我们用 Wq,Wk,Wv,Wo 分别表示自注意力模块中的 query/key/value/output 投影矩阵。

    • 我们用 WW0 表示 pre-trained 权重矩阵,ΔW 表示适配过程中的累积梯度更新(accumulated gradient update )。

    • 我们用 r 表示 LORA 模块的秩(rank)。

    • 我们遵循 TransformerGPT-3 设置的约定,使用 Adam 优化器,使用 TransformerMLP 前馈网络维度为 dffn=4×dmodel

  3. 相关工作:

    • Transformer 语言模型:Transformer 是一个 sequence-to-sequence 的架构,它大量使用了自注意力。GPT-1 将其应用于自回归语言建模,使用 Transformer encoders 的堆叠。自那时起,基于 Transformer 的语言模型在 NLP 中占据主导地位,在许多任务上实现了 SOTABERTGPT-2 代表了一个新范式:两者都是在大量文本上预训练的大型 Transformer 语言模型,通过在通用领域数据上预训练之后再在任务特定数据上的微调,这相比直接在任务特定数据上训练可以获得显著的性能提升。训练更大的 Transformer 通常会导致更好的性能,这仍然是一个活跃的研究方向。GPT-3 是迄今为止训练的最大的单个Transformer 语言模型,拥有 175B 参数。

    • Prompt Engineering and Fine-Tuning:尽管 GPT-3 175B 可以仅通过几个额外的训练样本来适配其行为,但结果高度依赖于input prompt 。这需要一种经验丰富的 prompt composingprompt formatting 艺术,从而最大化模型在期望任务上的表现,这称为 prompt engineeringprompt hacking

      微调对在通用领域上 pre-trained 的模型进行特定任务的重新训练(BERTGPT-1 )。人们提出了其变体,包括仅学习一部分参数(BERT ),但是实践者们通常会重新训练所有参数以最大化下游性能。然而,GPT-3 175B 的巨大规模使得通常的微调方式具有挑战,因为与预训练相同的内存占用造成了巨大的 checkpoint ,以及由此带来的高硬件门槛。

    • Parameter-Efficient Adaptation:许多人提出在神经网络的现有层之间插入 adapter layers《Parameter-Efficient Transfer Learning for NLP》《Learning multiple visual domains with residual adapters》《Exploring versatile generative language model via parameter-efficient transfer learning》)。我们的方法使用类似的 bottleneck 结构来对 weights update 施加低秩约束。关键的功能性的差异在于,我们学到的权重可以在推理期间与 main weights 合并,因此不会引入任何延迟,这与 adapter layers 的情况不同。

      adapter 的一个同期扩展是 COMPACTER《Compacter: Efficient low-rank hypercomplex adapter layers》),它本质上是参数化 adapter layers ,使用具有某些 predetermined 的权重共享方案的 Kronecker products 。类似地,将 LORA 与其他 tensor product-based 积的方法相结合,可能会潜在地改善其参数效率,我们留待未来研究。

      近期,许多研究提出优化 input word embeddings 以代替微调,这类似于 prompt engineering 的连续可微分推广。我们在实验部分包括与 《Prefix-Tuning: Optimizing Continuous Prompts for Generation》 的比较。然而,这类方法只能通过在 prompts 中使用更多 special tokens 来扩展,这会占用 task tokens 可用的序列长度。

    • Low-Rank Structures in Deep Learning:低秩结构在机器学习中很常见。许多机器学习问题具有某些内在的低秩结构。此外,众所周知,对于许多深度学习任务,特别是那些拥有大量过度参数化(over-parametrized )的神经网络,学到的神经网络在训练后会具有低秩特性(《Generalization guarantees for neural networks via harnessing the low-rank structure of the jacobian》)。

      一些先前的工作甚至在训练原始神经网络时明确地施加低秩约束;但是,据我们所知,这些工作都没有考虑 frozen modellow-rank update 以适配下游任务。在理论文献中,已经知道当底层的 concept class 具有某些低秩结构时,神经网络会优于其他经典学习方法,包括相应的(有限宽度)的 neural tangent kernels《How adversarial training performs robustdeep learning》 中的另一个理论结果表明:low-rank adaptations 对于对抗训练是有用的。总之,我们认为所提出的low-rank adaptation update 是有充分理论依据的。

1.1 问题描述

  1. 尽管我们的 proposaltraining objective 无关,但我们将语言建模作为用例。下面简要描述了语言建模问题,具体而言,是给定一个 task-specific prompt 的条件下,最大化条件概率。

  2. 假设我们有一个 pre-trained自回归语言模型 PΦ(yx),参数为 Φ。例如,PΦ(yx) 可以是一个通用的多任务学习器,如基于Transformer 架构的 GPT 。考虑将这个pre-trained模型适配到下游的条件文本生成(conditional text generation )任务,如摘要、机器阅读理解(machine reading comprehension: MRC )、natural language to SQL: NL2SQL 。每个下游任务由 context-target pairs 的训练数据集表示:Z={(xi,yi)}i=1,,N,其中 xiyi 都是 tokens 序列。例如:

    • NL2SQL 中,xi 是一个自然语言 queryyi 是相应的 SQL command

    • 对于摘要任务,xi 是文章内容,yi 是对应的摘要。

    full fine-tuning 期间,模型被初始化为 pre-trained 权重 Φ0,并通过反复地沿着梯度方向更新参数为 Φ0+ΔΦ,从而最大化 conditional language modeling objective

    (1)maxΦ(x,y)Zt=1|y|log(PΦ(ytx,y<t))

    其中:yt 表示第 t 个输出 tokeny<t 表示前 t1 个输出 tokenn 的序列。

    这里是对数似然(而不是损失函数),因此需要最大化。

    full fine-tuning 的一个主要缺点是,对于每个下游任务,我们学习一组不同的 parameter update ΔΦ,其维度 |ΔΦ| 等于 |Δ0|。因此,如果 pre-trained 模型很大(如 GPT-3 的参数数量 |Φ0| 约为 175B ),存储和部署许多独立的 fine-tuned models 实例可能具有挑战性,甚至不可行。

    在本文中,我们采用一种更加 parameter-efficient 的方法,其中 task-specific 的参数增量 ΔΦ=ΔΦ(Θ) 被一个规模更小的参数集合 Θ 进一步编码,其中 |Θ||Φ0|。寻找 ΔΦ 的任务因此变成优化 Θ

    (2)maxΘ(x,y)Zt=1|y|log(PΦ0+ΔΦ(Θ)(ytx,y<t))

    在后续章节中,我们提出使用 low-rank representation 来编码 ΔΦ,这在计算和内存方面都很高效。当 pre-trained 模型是 GPT-3 175B 时,可训练参数数量 |Θ| 可以低至 |Φ0|0.01%

1.2 现有解决方案够好吗

  1. 我们要解决的问题并非全新。自迁移学习出现以来,数十项工作已经试图使 model adaptation 更加参数高效和计算高效。参考 ”相关工作“ 部分,可以看到一些著名的相关工作。以 language modeling 为例,有两种优秀的策略用于高效的适配:添加 adapter layers 、或优化 input layer activations 。但是,这两种策略在大型的、以及延迟敏感的生产环境中都有局限性。

  2. Adapter Layers Introduce Inference Latencyadapters 有许多变体。我们关注 《Parameter-Efficient Transfer Learning for NLP》 的原始设计,每个 Transformer block 有两个 adapter layers ;以及 《Exploring versatile generative language model via parameter-efficient transfer learning》 的更近期设计,每个 block 仅有一个 adapter layer,但具有额外的 LayerNorm 。尽管可以通过裁剪 layers 、或利用多任务设置来减少整体延迟(《Adapterdrop: On the efficiency of adapters in transformers》《Adapter-fusion: Non-destructive task composition for transfer learning》),但是没有直接的方法可以绕过 adapter layers 中的额外计算。这似乎不是问题,因为 adapter layers 通过具有小的 bottleneck 维度来被设计为参数很少(有时是原始模型的 <1% ),这限制了它们可以添加的 FLOPs 。但是,大型神经网络依赖硬件并行性来保持低延迟,而 adapter layers 必须串行地处理。这在 batch size 通常为 1 的在线推理设置中会造成区别。在没有模型并行的通用场景中,例如在单 GPU 上运行 GPT-2 medium 的推理,即使使用了非常小的 bottleneck 维度,当使用 adapters 时,我们也看到显著的延迟增加(Table 1 )。

    当我们需要 shard 模型时,这个问题会变得更糟,如 《Megatron-lm: Training multi-billion parameter language models using model parallelism》《Gshard: Scaling giant models with conditional computation and automatic sharding》 所做,因为额外的深度需要更多的 synchronous GPU operations ,如 AllReduceBroadcast ,除非我们冗余地存储 adapter parameters 多次。

  3. Directly Optimizing the Prompt is Hardprefix tuning《Prefix-Tuning: Optimizing Continuous Prompts for Generation》)代表的另一方向面临着不同的挑战。我们观察到,prefix tuning 难以优化,其性能随着可训练参数的变化是非单调的,这确认了原论文中的类似观察。更本质的是,保留一部分序列长度用于适配,这必然减少了处理下游任务的可用序列长度;我们怀疑这使得与其他方法相比,tuning the prompt 的性能更差。我们将对任务性能的研究推迟到实验章节。

1.3 我们的方法

  1. 我们描述 LORA 的简单设计及其实际效益。这里概述的原则适用于深度学习模型中的任何 dense layers ,尽管我们的实验仅关注Transformer 语言模型中的某些权重。

1.3.1 Low-Rank-Parameterized Update Matrics

  1. 神经网络包含许多执行矩阵乘法的 dense layers 。这些层中的权重矩阵通常是满秩(full-rank)的。在适配特定任务时,《Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning》 显示 pre-trained 语言模型具有低的 "instrisic dimension",即使是随机投影到一个较小的子空间,也仍可进行有效学习。受此启发,我们假设 weight's updates 在适配过程中也具有低的 "intrinsic rank"。对于 pre-trained 权重矩阵 W0Rd×k ,我们通过使用低秩分解来约束其更新:

    (3)W0+ΔW=W0+BA

    其中:BRd×r,ARr×k,秩 rmin(d,k)

    在训练期间,W0 被冻结且不接收梯度更新,而 AB 包含可训练参数。注意 W0ΔW=BA 与相同的输入相乘,它们各自的输出向量逐元素相加。对 h=W0x ,我们的修改后的前向传播为:

    (4)h=W0x+ΔWx=W0x+BAx

    我们在 Figure 1 中展示重参数化(reparametrization )。我们对 A 使用随机高斯初始化、对 B 使用零初始化,因此开始时 ΔW=BA 为零。我们然后按 α/r 来缩放 ΔWx,其中 α是关于 r 的常量。当使用 Adam 优化时,调优 α 大致相当于调优学习率,如果我们适当地缩放了 initialization。因此,我们简单地将 α设置为我们尝试的第一个 r ,并不对其进行调优。这有助于减少我们改变 r 时的需要重新调优的超参数。

    这里 α 的含义是:根据 h=W0x+αr×ΔWx=W0x+αr×BAx 。因此,rα 都是超参数,α/r 的作用类似于学习率。

    作者在 r 上调优了一组超参数,并固定 α 为其中尝试的第一个 r 而不调优 α 。这是为了减少超参数调优的复杂性。

  2. A Generalization of Full Fine-tuning:更一般的微调形式允许 pre-trained parameters 的子集。进一步地,在适配期间 LORA不要求 accumulated gradient update 具有满秩。这意味着将 LORA 应用于所有权重矩阵并训练所有偏置,通过将 LORA 秩的 r 设置为 pre-trained 权重矩阵的秩,我们大致恢复 full fine-tuning 的表达能力。换句话说,随着我们增加可训练参数的数量,训练 LORA 大致收敛于训练原始模型;而 adapter-based 的方法收敛于 MLPprefix-based 的方法收敛于一个无法处理长输入序列的模型。

  3. No Additional Inference Latency:在生产中部署时,我们可以显式地计算并存储 W=W0+BA ,然后正常进行推理。请注意,W0BA 都属于 Rd×k 。当我们需要切换到另一个下游任务时,我们可以通过从 W 中减去 BA 来恢复 W0 ,然后再添加不同的 BA 。这是一个运算量很小的快速操作。关键是,与 fine-tuned 模型相比,这保证了我们不会引入任何额外的推理延迟。

    即:W+(BABA) 即可切换不同的下游任务。

1.3.2 Applying LORA To Transformer

  1. 原则上,我们可以将 LORA 应用于神经网络中的任何权重子集,从而减少可训练参数的数量。在 Transformer 架构中,在自注意力模块中有四个权重矩阵(Wq,Wk,Wv,Wo),在 MLP 模块中有两个权重矩阵。我们将 Wq (或 Wk,Wv)视为单个 dmodel×dmodel 的矩阵,即使输出维度通常被切片成多头注意力。为简单起见,我们的研究仅限于下游任务中适配注意力权重,并冻结 MLP 模块(所以在下游任务中不训练它们),这对简单性和参数效率都有好处。我们在后续章节中进一步研究适配 Transformer 中不同类型的注意力权重矩阵的效果。我们将 MLP 层、LayerNorm 层、以及偏置的实验研究留待未来工作。

  2. 实际效益和局限性:最显著的好处来自于内存和存储使用的减少。对于用 Adam 训练的大型 Transformer ,如果 rdmodel ,我们可以减少高达 2/3VRAM 使用,因为我们不需要存储 frozen parametersoptimizer states 。在 GPT-3 175B 上,我们将训练期间的 VRAM 消耗从 1.2TB 降低到 350GB 。 当 r=4 且仅适配 query 投影矩阵和 value 投影矩阵时, checkpoint size 大约减少了 10000 倍(从 350GB35MB )。 这使我们可以用更少的 GPU 进行训练,并避免 I/O 瓶颈。

    另一个好处是,我们只需交换LORA 权重,而不是所有参数,就能以更低的成本在部署任务时进行切换。这允许在存储 pre-trained 权重(在 VRAM 中)的机器上动态地创建和切换许多定制化的模型。 与 full fine-tuning相比,我们还观察到在 GPT-3 175B 上的训练加速了 25% ,因为我们不需要计算绝大多数参数的梯度。

    LORA也有其局限性。 例如,如果选择吸收 ABW 中以消除额外的推理延迟,则在单个前向传递中 batch 不同任务(具有不同的 AB )的输入并不简单。 尽管在延迟不是关键的场景中,可以不合并权重,并根据 batch 中的样本动态地选择要使用的 LORA 模块。

1.4 实验

  1. 我们在 RoBERTaDeBERTaGPT-2 上评估了 LORA 的下游任务性能,然后再扩展到 GPT-3 175B。我们的实验涵盖了从自然语言理解(natural language understanding: NLU )到自然语言生成(natural language generation: NLG )的广泛任务。具体来说,我们在 GLUE benchmark 上评估了 RoBERTaDeBERTa 。我们在 GPT-2 上遵循 《Prefix-Tuning: Optimizing Continuous Prompts for Generation》 的设置进行直接比较,并添加了 WikiSQ (自然语言到 SQL query)和 SAMSum (对话摘要)用于 GPT-3 上的大规模实验。参见附录C 以了解我们使用的数据集的更多细节。我们在所有实验中都使用了 NVIDIA Tesla V100

  2. baselines:为了与其他基线进行广泛比较,我们尽可能复制了先前工作中使用的设置,并在可能的情况下复用他们报告的结果。但是,这意味着一些基线可能只出现在某些实验中。

    • Fine-Tuning (FT):是一种常见的适配方法。在微调期间,模型被初始化为 pre-trained 的权重和偏置,所有的模型参数都经历梯度更新。一个简单的变体是只更新某些层而冻结其他层。我们包括 《Prefix-Tuning: Optimizing Continuous Prompts for Generation》GPT-2 上报告的一个这样的基线,它只适配最后两层(FTTop2)。

    • Bias-only or BitFit:是一种基线,其中我们只训练偏置向量而冻结其他所有内容。当代,这个基线也被 BitFit《Bitfit: Simple parameter-efficient fine-tuning for transformer-based masked language-models》)研究过。

    • Prefix-embedding tuning (PreEmbed):在 input tokens 中插入 special tokens 。这些 special tokens 具有可训练的 word embeddings ,通常不在模型词表中。放置这些 special tokens 的位置会影响性能。我们关注 "prefixing",即在输入的前面添加这样的 special tokens ;也关注 "infixing",即输入后面追加 special tokens 。两者都在《Prefix-Tuning: Optimizing Continuous Prompts for Generation》 中讨论过。我们使用 lpli 表示 prefix tokens 数量和 infix tokens 数量。可训练参数的数量为 |Θ|=dmodel×(lp+li)

    • Prefix-layer tuning (PreLayer):是 prefix-embedding tuning 的扩展。我们不仅学习某些 special tokensword embeddings (或等效地,activations after the embedding layer ),而且学习 activations after every Transformer layerprevious layers 计算而来的激活被可训练的激活替换。结果,可训练参数数量为 |Θ|=L×dmodel×(lp+ld),其中 LTransformer 层数。

    • Adapter tuning《Parameter-Efficient Transfer Learning for NLP》 所提出的,在自注意力模块(和 MLP 模块)与后续残差连接之间插入 adapter layers 。一个 adapter layer 中有两个带偏置的全连接层,这两个全连接层之间有一个非线性激活。我们称之为 AdapterH

      最近,《Exploring versatile generative language model via parameter-efficient transfer learning》 提出了一个更高效的设计,其中 adapter layer 仅应用于 MLP 模块之后和 LayerNorm 之后。我们称之为 AdapterL 。这与 《Adapterfusion: Non-destructive task composition for transfer learning》 提出的另一种设计非常相似,我们称之为 AdapterP

      我们还包括另一个基线 AdapterDrop《Adapterdrop: On the efficiency of adapters in transfor》),它删除一些 adapter layers 以获得更高的效率,记做 AdapterD

      我们尽可能引用先前工作中的数据以最大化我们比较的基线数量;它们位于第一列中用 * 标记的行中。在所有情况下,我们有 |Θ|=L^Adpt×(2×dmodel×r+r+dmodel)+2×L^LN×dmodel,其中:L^Adptadapter layers 的层数,L^LN 是可训练 LayerNorm 的数量(例如,在 AdapterL 中)。

    • LORA :在现有权重矩阵旁并行地添加低秩分解矩阵的 trainable pairs 。如前所述,出于简单考虑,我们在大多数实验中仅将 LORA 应用于 WqWv。可训练参数的数量由秩 r 和原始权重的形状确定:|Θ|=2×L^LORA×dmodel×r,其中 L^LORA 是我们应用 LORA 的权重矩阵的数量。

  3. RoBERTa base/largeRoBERTa 优化了 BERT 最初提出的预训练配方,在不引入更多可训练参数的情况下提升了后者的任务性能。尽管近年来 RoBERTaGLUENLP 排行榜上被更大的模型超过,但它仍然是一个流行的、有竞争力的 pre-trained 模型。我们从 HuggingFace Transformers 库获取 pre-trained RoBERTa base (125M)RoBERTa large (355M) ,并评估不同 efficient adaptation 方法在 GLUE 任务上的性能。我们还根据他们的设置复制了 《Parameter-Efficient Transfer Learning for NLP》《Adapterfusion: Non-destructive task composition for transfer learning》的工作。为了确保公平比较,我们在与 adapters 比较时,在如何评估 LORA 上做了两个关键更改:

    • 首先,我们对所有任务使用相同的 batch size ,序列长度为 128 以匹配 adapter baselines

    • 其次,我们将模型初始化为 pre-trained 模型从而用于 MRPCRTESTS-B ,而不是像 fine-tuning baseline 那样已经在 MNLI 上适配好的模型。

    遵循 《Parameter-Efficient Transfer Learning for NLP》 更严格设置的 runs 标记。结果如 Table 2 所示(前三部分)。附录 D.1 节详细介绍了所使用的超参数。

  4. DeBERTa XXLDeBERTa 是最近的 BERT 变体之一,它以更大的规模进行了训练,在 GLUESuperGLUEbenchmarks 中表现非常有竞争力。我们评估 LORA 是否仍然可以在 GLUE 上匹配 fine-tuned DeBERTa XXL (1.5B) 的性能。结果如 Table 2 最后一部分所示。附录 D.2 节详细介绍了所使用的超参数。

  5. GPT-2 medium/large:在展示 LORA 可以在自然语言理解任务上成为 full fine-tuning 的有竞争替代方案之后,我们希望回答LORA 是否仍然在 NLG 模型上也占优势,例如 GPT-2 mediumGPT-2 large 。我们使我们的设置尽可能接近 《Prefix-Tuning: Optimizing Continuous Prompts for Generation》 的设置,以进行直接比较。由于版面限制,我们在本节中仅展示 E2E NLG Challenge 数据集上的结果(见 Table 3 。第 F.1 节给出了 WebNLGDART 的结果。第 D.3 节列出了使用的超参数。

  6. 扩展到 GPT-3 175B :作为 LORA 的最终压力测试,我们扩展到拥有 175B 参数的 GPT-3 。由于训练成本很高,对于给定的任务,我们仅报告在不同随机种子上的典型标准差,而不是为每个随机数提供一个标准差。第 D.4 节详细介绍了所使用的超参数。

    Table 4 所示,LORAfine-tuning baseline 的性能相当或更好。请注意,并非所有方法都会从有更多可训练参数中受益,如 Figure 2 所示。当使用超过 256 special tokens 进行 prefix-embedding tuning 、或超过 32 special tokens 进行 prefix-layer tuning 时,我们观察到显著的性能下降。这证实了 《Prefix-Tuning: Optimizing Continuous Prompts for Generation》 的类似观察。尽管本文不打算深入研究这种现象,但我们怀疑使用更多 special tokens 会使输入分布进一步偏离 pre-training data distribution 。另外,我们在第 F.3 节中研究了不同适配方法在数据量少的情况下的表现。

1.5 理解 Low-Rank Updates

  1. 鉴于 LORA 的经验证据优势,我们希望进一步解释从下游任务中学到的 low-rank adaptation的属性。请注意,低秩结构不仅降低了硬件准入门槛,从而允许我们并行运行多个实验,而且还更好地解释了 update weightspre-trained weights的相关性。我们将研究重点放在 GPT-3 175B 上,在这里我们实现了最大程度的可训练参数减少(高达 10000 倍),而不对任务性能产生不利影响。

    我们进行了一系列实证研究,以回答以下问题:

    • 1):在参数预算约束下,我们应该适配 pre-trained Transformer 中的哪些权重矩阵以最大化下游性能??

    • 2)"optimal" adaptation matrix ΔW 是否 rank-deficient ?如果是,实践中什么秩比较好?

    • 3)ΔWW之间是什么关系?ΔW 是否与 W 高度相关?与 W 相比,ΔW 有多大?

    我们认为我们对问题 2)3) 的回答可以阐明使用 pre-trained 语言模型进行下游任务的基本原理,这是 NLP 中的一个关键话题。

1.5.1 我们应该在 Transformer 中对哪些权重矩阵应用LORA?

  1. 在给定的有限的参数预算下,我们应该适配哪些类型的权重矩阵从而获得下游任务的最佳性能?如前所述,我们目前只考虑自注意力模块中的权重矩阵。在 GPT-3 175B 上,我们设置参数预算为 18M (如果以 FP16 存储约为 35MB ),这对应于 r=8 (如果适配一种类型的注意力权重)、或者 r=4 (如果适配两种类型的注意力权重),针对所有 96 层。结果如 Table 5 所示。

    请注意,将所有参数预算放在 ΔWqΔWk 中会导致显著较差的性能,而同时适配 WqWv 可以获得最佳结果。这表明即使 r=4 也可以在 ΔW 中捕获足够的信息,以至于与使用更大 rank 来适配单个权重相比,适配更多个的权重矩阵更可取。

1.5.2 LORA的最佳秩 r 是多少?

  1. 我们将注意力转向秩 r 对模型性能的影响。我们适配 {Wq,Wv},{Wq,Wk,Wv,Wo},{Wq} 来进行比较。

    Table 6 显示,令人惊讶的是,即使 r 非常小,LORA 的表现也具有竞争力(相对于仅仅适配 {Wq} 而言,适配 {Wq,Wv} 更是如此)。这表明 update matrix ΔW 可能具有非常小的 "intrinsic rank"。为进一步支持这一发现,我们检查了不同 r 和不同随机种子学习到的子空间的重叠情况。我们认为增加 r 并没有覆盖更有意义的子空间,这表明 low-rank adaptation matrix 就足够了。

    似乎是 r 越小越好,同时配合尽可能多类型的 weights update (如 {Wq,Wk,Wv,Wo} )。

  2. 不同 r 之间的子空间相似度:给定 Ar=8Ar=64,它们分别是使用相同 pre-trained 模型学到 r=8r=64adaptation matrix 。我们执行奇异值分解并获得 right-singular unitary 矩阵 UAr=8UAr=64 。我们希望回答: UAr=8 中前 i 个奇异向量张成的子空间(1i8)有多大程度上包含在 UAr=64j 个奇异向量张成的子空间中(1j64)?我们使用基于Grassmann distance 的归一化子空间相似度来测量这个量(参见附录 G 的更正式讨论):

    (5)ϕ(Ar=8,Ar=64,i,j)=UAr=8iUAr=64jF2min(i,j)[0,1]

    其中:UAr=8i 表示 UAr=8 的前 i 列,表示 top-i singular vectors

    ϕ() 的范围在 [0,1] 之间,其中 1 表示子空间完全重叠、0 表示完全分离。参见 Figure 3 ,其中 ϕ 随着 ij 的变化而改变。这里我们仅考虑第 48 层(共 96 层),但结论对其他层也成立,如第 H.1 节所示。

    Figure 3 我们可以得到一个重要观察:对于 Ar=8Ar=64top singular vector 的方向重叠显著,而其他 singular vector 不重叠。 具体来说,对于 Ar=8ΔWvAr=64ΔWv 共享一个一维的子空间,其中归一化的相似度大于 0.5 。对于 ΔWq 也是如此。这解释了为什么 r=1 在我们的 GPT-3 下游任务中的表现相当不错。

    由于 Ar=8Ar=64 都是使用相同的 pre-trained 模型学习的,Figure 3 表明 Ar=8Ar=64top singular-vector 方向是最有用的,而其他方向可能主要包含训练过程中累积的随机噪声。因此,adaptation matrix 确实可以具有非常低的秩。

  3. 不同随机种子之间的子空间相似度:我们通过绘制两个 r=64 的随机初始化运行之间的归一化子空间相似度,进一步确认这一点。如 Figure 4 所示。ΔWq 似乎比 ΔWv 具有更高的 "intrinsic rank",因为对于 ΔWq,两个 runs 学到了更多 common singular value directions ,这与我们在 Table 6 中的经验观察一致。作为比较,我们还绘制了两个随机高斯矩阵,它们之间没有共享任何奇异值方向。

1.5.3 Adaptation Matrix ΔWW 比较如何

  1. 我们进一步研究 WΔW 之间的关系。具体来说, ΔW 是否与W高度相关?或者数学上, ΔW 是否主要被包含在 Wtop singular directions 中?此外,与 W中的对应方向相比, ΔW 有多“大” ?这可以为 adapting pre-trained language models 阐明底层的机制。

  2. 为了回答这些问题,我们通过计算 UWV,将 W 投影到 ΔWr 维子空间上,其中 U/V 分别是 ΔWleft/right singular-vector matrix 。 然后,我们比较 UWVFWFFrobenius 范数。 作为比较,我们还通过用 Wtop r singular vectors 、或随机矩阵,来替换 UV 来计算UWVF

    Table 7 我们可以得出几点结论:

    • 首先,与随机矩阵相比,ΔWW 的相关性更强,表明ΔW 放大了 W 中已经存在的某些特征。

    • 其次,ΔW 没有重复 Wtop singular directions ,而是放大了 W 中没有强调的方向。

    • 第三,放大因子相当大:对 r=4 ,大约为 6.91/0.32 = 21.5。 第 H.4 节解释了为什么 r=64 具有较小的放大因子。

    我们在第 H.3 节中还提供了一个可视化,展示了随着从 Wq 中包含更多 top singular directions ,相关性(correlation )是如何改变的。这表明 low-rank adaptation matrix 可能放大了 general pre-training model 中学到的、但没有强调的 specific downstream tasks 的重要特征。

1.6 未来工作

  1. 未来工作有许多方向:

    • LORA 可以与其他 efficient adaptation 方法相结合,可能提供正交的改进。

    • 微调或 LORA 背后的机制还不清楚:预训练中学到的特征如何转化为下游任务的良好表现?我们认为 LORAfull fine-tuning 更容易回答这个问题。

    • 我们主要依赖启发式方法来选择权重矩阵来应用 LORA 。是否有更原则的方法来进行选择?

    • 最后,ΔWrank-deficien 表明:W 也可能 rank-deficien,这也可以作为未来工作的灵感来源。

二、QLORA[2023]

论文:《QLORA: Efficient Finetuning of Quantized LLMs》

  1. 大语言模型(large language models: LLMs )的微调是提高其性能的高效方法,从而可以增加或删除期望的或不期望的行为。然而,非常大模型的微调代价昂贵;LLaMA 65B 模型的常规 16-bit finetuning 需要超过 780GBGPU 内存。尽管最近的量化方法可以减少 LLM 的内存占用(《LLM.int8(): 8-bit matrix multiplication for transformers at scale》《The case for 4-bit precision: k-bit inference scaling laws》《Gptq: Accurate post-training quantization for generative pre-trained transformers》《Smoothquant: Accurate and efficien tpost-training quantization for large language models》),但这些技术仅适用于推理,在训练期间会崩溃(《Stable and low-precision training for large-scale vision-language models》)。

    我们首次证明了可以对 4-bit 量化的模型进行微调而不降低任何性能。我们的方法 QLORA 使用一种新颖的 high-precision 技术从而将 pretrained 模型量化为 4-bit,然后添加少量可学习的 Low-rank Adapter weights《LORA:Low-rank adaptation of large language models》),这些Low-rank Adapter weights 通过 quantized weights 来反向传播梯度进行调优。

    QLORA65B 参数模型的微调平均内存需求从 >780GBGPU 内存降低到 < 48GB ,与 16-bit fully finetuned baseline相比,运行时性能或预测性能没有降低。这标志着 LLM 微调的可访问性发生了重大变化:现在可以在单个 GPU 上微调迄今为止公开发布的最大模型。使用 QLORA,我们训练了 Guanaco模型系列,这是在Vicuna benchmark 中表现第二好的模型,达到了 ChatGPT 性能水平的 97.8% ,同时在单个消费级 GPU 上训练不到 12 小时;使用单个专业 GPU 训练超过 24 小时,我们用最大的模型实现了ChatGPT 性能的 99.3% ,基本上在 Vicuna benchmark 中填补了与 ChatGPT 的差距。部署时,我们最小的 Guanaco 模型(7B 参数)只需要 5GB 内存,并在 Vicuna benchmark 中比 26GBAlpaca 模型超出 20%Tabke 6 )。

    QLORA 引入了多项创新,旨在降低内存使用而不牺牲性能:

    • (1)4-bit NormalFloat,一种信息理论最优的量化数据类型(quantization data type )从而用于正态分布数据,其经验结果优于 4-bit Integers4-bit Floats

    • (2)Double Quantization ,一种用于对 quantization constants 再次进行量化的方法,平均每个参数节省约 0.37 bits (对于 65B 模型约 3 GB )。

    • (3)Paged Optimizers ,使用 NVIDIA unified memory 从而避免 gradient checkpointing memory 尖峰,其中这些尖峰发生在当处理具有长序列长度的 mini-batch 时。

    我们将这些贡献组合成一个更好的 tuned LORA 方法,其中 tuned LORA 包含每个网络层的adapters,从而避免了先前工作中看到的几乎所有的 accuracy tradeoffs

    QLORA 的效率使我们能够在模型规模上对指令微调(instruction finetuning )的和聊天机器人(chatbot )的性能进行深入的研究,由于内存开销而使用常规微调无法实现这种研究。 因此,我们在多个指令微调数据集、模型架构、以及 80M ~ 65B 参数之间的模型规模上训练了超过 1000 个模型。 除了展示 QLORA 恢复了16-bit 性能、以及训练了 SOTA 的聊天机器人 Guanaco 之外,我们还分析了模型趋势:

    • 首先,我们发现数据质量比数据集大小更重要。例如,一个 9k 样本数据集(OASST1 )在聊天机器人性能上胜过一个 450k 样本数据集(FLAN v2 ,子采样之后的),即使两者都旨在支持 instruction following generalization

    • 其次,我们表明强大的 Massive Multitask Language UnderstandingMMLUbenchmark 性能并不意味着强大的 Vicuna chatbot benchmark 性能;反之亦然。换句话说,对于给定的任务,数据集的适用性(suitability )比大小更重要。

    此外,我们还提供了聊天机器人的广泛性能分析,其中使用人类标注员和 GPT-4 进行评估。 我们使用 tournament-style benchmarking,其中在比赛中,模型之间进行竞争从而针对给定的 prompt 产生最佳响应。一次比赛( match )中的获胜者由 GPT-4 或人类标注员来判断。 tournament 结果汇总为 Elo 分数,这决定了聊天机器人性能的排名。我们发现:GPT-4 和人类评估在 tournaments 中对模型性能排名高度一致,但我们也发现存在强烈分歧的实例。因此,我们强调 model-based evaluation 虽然提供了比 human-annotation 廉价的替代方案,但也存在其不确定性。

    我们声明,我们的 chatbot benchmark 得到了 Guanaco 模型的定性分析的结果。我们的分析强调了成功案例和失败案例,这些案例未被 quantitative benchmarks 所捕获。

    我们发布所有带有人类标注和 GPT-4 注释的 model generations ,以方便进一步研究。我们开源代码库和 CUDA kernels ,并将我们的方法集成到 Hugging Face transformers stack 中,使其易于所有人访问。我们发布了针对 7/13/33/65B 大小模型在 8 个不同的 instruction following datasets 上训练的 adapters 集合,总共发布了 32 个开源的 finetuned 的模型。

  2. 相关工作:

    • 大型语言模型的量化:LLM 的量化主要集中在推理时的量化上。

      • 保持 16-bit LLM 质量的主要方法是:管理 outlier features (例如 SmoothQuantLLM.int8() );而其他方法使用更复杂的分组方法(《nuqmm: Quantized matmul for efficient inference of large-scale generative language models》《Zeroquant: Efficient and affordable post-training quantization for large-scale transformers》)。

      • 有损量化(lossy quantization)方法研究常规 rounding 的权衡(《The case for 4-bit precision: k-bit inference scaling laws》《Glm-130b: An open bilingual pre-trained model》《Efficiently scaling transformer inference》)或如何优化 rounding decisions 以提高量化精度(quantization precision )(《Gptq: Accurate post-training quantization for generative pre-trained transformers》)。

      • 除了我们的工作,SwitchBack layer《Stable and low-precision training for large-scale vision-language models 》)是唯一在超过 1B 参数规模上研究通过 quantized weights 来反向传播的工作。

    • Finetuning with Adapters:虽然我们使用 Low-rank Adapters: LORA《LORA: Low-rank adaptation of large language models》),但人们还提出了许多其他 Parameter Efficient FineTuning: PEFT方法,例如 prompt tuning《Learning how to ask: Querying lms with mixtures of soft prompts》《The power of scale for parameter-efficient prompt tuning》Prefix-Tuning)、调优 embedding layer inputs《Input-tuning: Adapting unfamiliar inputs to frozen pretrained models》)、 调优 hidden statesIA3 )(《Few-shot parameter-efficient fine-tuning is better and cheaper than in-context learning》)、添加 full layers《Parameter-efficient transfer learning for nlp》)、调优 biasesBitfit)、基于 Fisher 信息来学习权重上的 mask《Training neural networks with fixed sparse masks》)、以及方法的组合(《Compacter: Efficient low-rank hypercomplex adapter layers》)。

      在我们的工作中,我们表明 LORA adapters 能够达到 full 16-bit finetuning 的性能。 我们留待未来的工作来探索其他 PEFT 方法的 tradeoffs

    • 指令微调:为了帮助 pretrained LLM 遵循 prompt 中提供的指令,指令微调使用各种数据源的 input-output pairs 来微调pretrained LLM ,以便在将给定的输入作为 prompt 的情况下生成输出。方法和数据集包括 MetaICLMetaTuningInstructGPTFLANPromptSourceSuper-NaturalInstructionsSelf-instructUnnaturalInstructionsOPT-IMLUnifiedSKGOIG/Chip2AlpacaVicunaKoalaSelf-instruct-GPT-4

    • 聊天机器人:许多 instruction following models 被构建为基于对话的聊天机器人,通常使用来 Reinforcement Learning from Human Feedback: RLHF《Deep reinforcement learning from human preferences 》)、或从现有模型生成数据以使用 AI model feedback 进行训练(RLAIF )(《Constitutional ai: Harmlessness from ai feedback》)。方法和数据集包括:Anthropic-HHOpen AssistantLaMDASparrow

      我们不使用强化学习,但我们最好的模型 Guanaco 是在为 RLHF 训练而设计的 Open Assistant 数据集上的多轮聊天交互中微调的。对于使用 GPT-4 而不是代价高昂的人工标注来评估聊天机器人方法,人们已经开发了方法 《Vicuna: An open-source chatbot impressing gpt-4 with 90%*chatgpt quality》《Instruction tuning with gpt-4》。我们通过关注一个更可靠的评估设置来改进这种方法。

2.1 背景知识

  1. Block-wise k-bit Quantization:量化是将 input 从包含更多信息的 representation 离散化为包含更少信息的 representation 的过程。 它通常意味着将更多 bits 的数据类型转换为较少bits,例如从 32-bit floats 转换为 8-bit Integers 。为了确保使用 low-bit data type 的全部范围,通常通过 input elementsabsolute maximum 进行标准化,从而将 input data type 重新缩放为 target data type 范围。例如,将 32-bit Floating Point (FP32) 的张量量化为范围为[−127,127]Int8 张量:

    (6)XInt8=round(127absmax(XFP32)XFP32)=round(cFP32×XFP32)

    其中:c 是量化常数(quantization constant )或量化比例(quantization scale )。

    反量化(dequantization )是逆过程:

    (7)dequant(cFP32,XInt8)=XInt8cFP32=XFP32

    这种方法的问题是:如果 input 张量中出现大幅值(即异常值 outlier) ),则 quantization bins (某些 bit combinations )的利用不是很好,即:在某些 bins 中没有或几乎没有数值被量化。为了防止异常值问题,一种常见方法是将 input 张量分块成 blocks,每个 block 独立地被量且每个 block 都有自己的量化常数 c 。这可以形式化如下:

    • 首先,我们将 input 张量 XRb×h 分块成n 个连续的、大小为 Bblock,这是通过 flatten 输入张量并切片成 n=(b×h)/Bblock 来实现。

    • 然后,我们使用 XInt8=round(127absmax(XFP32)XFP32)=round(cFP32×XFP32) 独立地对这些 block 进行量化,从而创建quantized tensorn 个量化常数 {ciFP32}i=1,,n

  2. Low-rank AdaptersLow-rank Adapter: LORA《LORA:Low-rank adaptation of large language models》)微调是一种通过使用少量可训练参数(通常称为 adapters )来减少内存需求的方法,而 full model parameters 保持固定。在随机梯度下降期间,梯度通过 fixed pretrained model weights 传递到 adapter 从而优化损失函数。LORA 通过额外的 factorized projection 增强了线性投影。给定一个投影 XW=Y ,其中 XRb×h 为输入张量,WRh×o 为权重矩阵,LORA 计算:

    (8)Y=XW+s×XL1L2

    其中:L1Rh×r,L2Rr×os 为一个标量。

    通常有 rh

  3. Memory Requirement of Parameter-Efficient Finetuning :一个重要的讨论点是:LORA 在训练期间的内存需求,以 adapters 的数量和尺寸两方面来考虑。由于 LORA 的内存占用非常小,我们可以使用更多的 adapters 来提高性能,而不会显着增加总内存使用量。尽管 LORA 被设计为 Parameter Efficient Finetuning: PEFT 方法,但 LLM 微调的大部分内存占用来自 activation gradients ,而不是来自 learned LORA parameters 。对于在 FLAN v2 上以 batch size = 1 训练的 7B LLaMA 模型,LORA 权重相当于通常使用的原始模型权重数量的 0.2%LORA input gradients 的内存占用为 567 MB ,而 LORA 参数仅占用 26 MB 。 使用 gradient checkpointing 后(《Training deep nets with sublinear memory cost》),input gradients 减少到每个序列平均 18 MB ,比所有 LORA 权重的总和更加 memory intensive 。相比之下,4-bit base model 消耗 5048 MB 内存。这表明 gradient checkpointing 很重要,但也表明极度减少 LORA 参数量只带来很小的内存收益。这意味着我们可以使用更多 adapters 而不会显着增加总训练内存占用(详细内存分解见附录 G)。如后文所述,这对恢复 full 16-bit precision 性能至关重要。

    即,我们可以放心地使用大量的 adapters

    下图:QLORA 用不同 LLaMA base models 来训练时的内存占用。

2.2 QLORA Finetuning

  1. QLORA 通过我们提出的两种技术,4-bit NormalFloat: NF4 量化以及 Double Quantization ,来实现 high-fidelity 4-bit finetuning 。此外,我们引入了Paged Optimizers ,以防止 gradient checkpointing 期间的内存尖峰导致的 out-of-memory errors ,其中 out-of-memory errors 使得传统上在单台机器上对大模型进行微调变得困难。

    QLORA 具有一种低精度存储数据类型(low-precision storage data type ),在我们的例子中通常为 4 bit;以及一种低精度计算数据类型,通常为 BFloat16 。实际上,这意味着每当使用 QLORA weight tensor 时,我们将张量 dequantizeBFloat16 ,然后以 16-bit 来执行矩阵乘法。

    注意:数据的存储精度和计算精度不同。采用更高精度来计算,可以减少精度溢出的发生。

    现在我们按顺序讨论 QLORA 的组成部分,然后是 QLORA 的正式定义。

2.2.1 4-bit NormalFloat Quantization

  1. NormalFloat: NF 数据类型建立在 Quantile Quantization《8-bit optimizers via block-wise quantization》)的基础上,这是一种信息理论最优的数据类型(information-theoretically optimal data type ),确保每个 quantization bin 中都有相等数量的值,这些 bins 中的值从 input 张量分配而来。Quantile Quantization 的工作原理是:通过经验累积分布函数(empirical cumulative distribution function)估计 input 张量的分位数。

    quantile quantization 的主要局限性在于 quantile estimation 是昂贵的。 因此,会使用 SRAM quantiles《8-bit optimizers via block-wise quantization》)等快速分位数近似算法来估计它们。由于这些 quantile estimation 计算法的近似性质,对于异常值,该数据类型存在较大的量化误差(quantization errors ),而异常值通常是量化过程中最重要的值。

    input 张量来自一个分布,而这个分布被固定到一个 quantization constant 时,可以避免昂贵的 quantile estimates 和近似误差。在这种情况下,input 张量具有相同的 quantiles,使精确的 quantile estimation 在计算上可行。

    由于 pretrained 的神经网络权重通常具有均值为零、标准差为 σ 的正态分布(请参见附录 F ),我们可以通过缩放 σ 使分布完全符合我们的数据类型的范围从而将所有权重转换为单个固定的分布(a single fixed distribution )。对于我们的数据类型,我们设定强制(arbitrary )的范围 [−1,1] 。 因此,对于数据类型和神经网络权重,分位数(quantiles)都需要被归一化到这个范围内。

  2. 针对均值为零、标准差为 σ ,且范围 [−1,1] 内的正态分布,信息理论上最优的数据类型计算如下:

    • (1) :估计理论正态分布 N(0,1)2k+1 分位数以获得正态分布的 k-bit quantile quantization data type

    • (2) :获取此数据类型并将其值归一化到 [−1,1] 范围内。

      参考后面的 NFk 数据类型的确切值。

    • (3) :通过 absolute maximum 重新缩放将输入权重张量归一化到 [−1,1] 范围内进行量化。

    一旦权重范围和数据类型范围匹配,我们就可以像往常一样进行量化。第 (3) 步相当于重新缩放权重张量的标准差以匹配 k-bit data type 的标准差。

  3. 更正式地,如下所示,我们估计数据类型的 2k 个值 qi

    (9)qi=12×(QX(i2k+1)+QX(i+12k+1))

    其中:QX() 是标准正态分布 N(0,1) 的分位数函数(quantile function )。

    对于 symmetric k-bit quantization 存在的一个问题是,这种方法无法精确表示零,这对于零误差地 quantize padding 和表达其他零值元素是一项重要特性。为了确保 0discrete zeropoint ,并使用所有 2k bits 来用于 k-bit datatype ,我们创建一个非对称的数据类型,通过估计分位数 qi 为两个范围:

    • 对于 negative partqi 采用 2k1

    • 对于 positive partqi 采用 2k1+1

    然后我们统一这些 qi 集合,并删除出现在两个集合中的两个零之一。

    我们将结果数据类型称为 k-bit NormalFloat: NFk ,在每个 quantization bin 中它具有相等的、预期数量的值,因为从信息论上讲,该数据类型对以零为中心的正态分布数据是最优的。此数据类型的确切值可在附录 E 中找到。

    这个数据类型一共 16 个数值,可以用 4bit 来表示。任意浮点数落在哪个区间就用对应的整数来表示。这个区间对任意的 input tensor 都是固定的。

2.2.2 Double Quantization

  1. 我们引入了 Double Quantization: DQ ,即对 quantization constants 进行量化以进一步节省内存。 尽管精确的 4-bit quantization 需要较小的 blocksize《The case for 4-bit precision: k-bit inference scaling laws》),但它也带来相当大的内存开销。例如,针对 W ,采用32-bit 常量以及 block size = 64quantization constants 平均每个参数添加 32/64 = 0.5 bitsDouble Quantization 有助于减少quantization constants 的内存占用。

  2. 更具体地说,Double Quantizationfirst quantizationquantization constants c2FP32 视为 second quantization 的输入。这第二步生成 quantized quantization constants c2FP8second level of quantization constants c1FP32。我们对 second quantization 使用 8-bit Floatsblocksize = 256 ,因为未观察到 8-bit quantization 的性能下降,与 《The case for 4-bit precision: k-bit inference scaling laws》 的结果一致。由于 c2FP32 是正值,因此在量化之前我们从 c2FP32 中减去平均值从而将值围绕零进行中心化并利用对称量化(symmetric quantization )。平均而言,对于 blocksize = 64 ,此量化将每个参数的quantization constants 内存占用从 32/64 = 0.5 bits 减少到 8/64 + 32/(64*256) = 0.127 bits ,减少了每个参数 0.373 bits

    c2FP32 量化到 c2FP8 ,量化常数为 c1FP32。为什么第二步的下标为 1、第一步的下标为 2 ?这是因为 dequantization 过程第一步需要利用 c1FP32 来获得 c2FP32

    (10)XFP32=XInt4(c2FP8/c1FP32)

2.2.3 Paged Optimizers

  1. 使用 NVIDIA unified memory 功能,该功能在 GPU 偶尔内存不足的情况下在 CPUGPU 之间自动进行 page-to-page 传输,以便在 GPU 上无错误地处理。该功能的工作方式与 CPU RAM 和磁盘之间的常规内存分页相同。我们使用此功能为 optimizer states 分配分页内存(paged memory ),当 GPU 内存不足时,它们会自动交换到 CPU RAM ,并在 optimizer update step 需要内存时分页换回 GPU 内存。

2.2.4 QLORA

  1. 使用上述组件,我们为 quantized base model 中的具有单个 LORA adapter 的单个线性层定义 QLORA 如下:

    (11)YBF16=XBF16doubleDequant(c1FP32,c2k-bit,WNF4)+XBF16L1BF16L2BF16

    其中 doubleDequant() 定义为:

    (12)doubleDequant(c1FP32,c2k-bit,Wk-bit)=dequant(dequant(c1FP32,c2k-bit),W4bit)=WBF16

    我们对 W 使用 NF4 、对c2 使用 FP8 。 我们对 W 使用 blocksize = 64 从而获得更高的量化精度,对 c2 使用 blocksize = 256 以节省内存。

    注意:这里所有的计算都采用 BF16。此外,LORA adapter 没有被量化而是直接采用 BF16,因为它的参数规模很小,而且也可以补偿 fixed base model 的量化误差。

    对于 parameter updates ,只需要 adapters 权重的误差梯度 ELi,而不需要 4-bit 权重的误差梯度 EW,其中 E 为误差。 然而,计算 ELi 需要计算 XW,这是通过 YBF16 的公式进行的,将存储 WNF4 dequantization 从而计算数据类型 WBF16 从而以 BFloat16 精度计算导数 XW

    总结一下,QLORA 具有一种存储数据类型(通常为 4-bit NormalFloat )和一种计算数据类型(16-bit BFloat )。我们对存储数据类型进行 dequantize 以获得计算数据类型,以便执行正向传递和反向传递;但我们仅计算 LORA 参数的权重梯度,这些参数使用16-bit BFloat

2.3 QLORA vs. Standard Finetuning

  1. 我们已经讨论了 QLORA 的工作原理、以及它如何显著减少微调模型所需的内存。现在的主要问题是,QLORA 是否能够与 full-model finetuning 一样好。此外,我们要分析 QLORA 的组件,包括 NormalFloat4 相对于 standard Float4 的影响。下面的章节将讨论旨在回答这些问题的实验。

  2. 实验设置:我们考虑三种架构(encoder, encoder-decoder, and decoder only ),并将 QLORA16-bit adapter-finetuning 、以及 full-finetuning 进行比较,模型参数规模达到 3B 。我们的评估包括:GLUE with RoBERTa-largeSuper-NaturalInstructions (TKInstruct) with T55-shot MMLU after finetuning LLaMA on Flan v2 and Alpaca。为了额外研究 NF4 相对于其他 4-bit 数据类型的优势,我们使用 《The case for 4-bit precision: k-bit inference scaling laws》 的设置,并在不同模型(OPTLLaMABLOOMPythia)和模型大小(125m ~ 130B 参数)上测量 post-quantization zero-shot 准确率和困惑度。我们在结果章节为每个特定设置提供更多详细信息,从而使结果更具可读性。完整细节请参见附录 A

    虽然 paged optimizers 对于在单个 24/48GB GPU 上进行 33B/65B QLORA tuning 至关重要,但我们没有对 Paged Optimizers 提供 hard measurements,因为 paging 仅在处理具有长序列长度的 mini-batches 时发生,这很少见。然而,我们确实对 65B 模型在 48GB GPU 上的 paged optimizers 的运行时进行了分析,发现使用 batch size = 16 时,paged optimizers 提供与常规 optimizers 相同的训练速度。未来的工作应该测量和刻画 paging process 中何时会出现速度下降。

  3. 默认的 LORA 超参数与 16-bit 性能不匹配:当使用标准实践应用 LORAquery and value attention projection matrices 时,我们无法为 large base models 复制 full finetuning 的性能。如 Figure 2 所示,对于在 Alpaca 上微调的 LLaMA 7B ,我们发现最关键的 LORA 超参数是总共使用多少LORA adapters,并且需要在所有 linear transformer block layers 上使用LORA 才能匹配 full finetuning 性能。其他 LORA 超参数,例如投影维度 r ,不会影响性能(请参阅附录 A )。

    同样,我们发现 fully finetuned baselines 的默认超参数是 undertuned 的。我们对学习率 1e-6 ~ 5e-5batch size 8 ~ 128 进行了超参数搜索,从而找到 robust baselines7B LLaMAAlpaca 上的微调结果如 Figure 2 所示。

  4. 4-bit NormalFloat 的性能优于 4-bit Floating Point:尽管 4-bit NormalFloat: NF4 数据类型在信息理论上是最优的,但这种属性是否转化为经验优势还有待确定。我们遵循 《The case for 4-bit precision: k-bit inference scaling laws》 的设置,其中对不同大小(125M ~ 65B )的 LLMOPTBLOOMPythiaLLaMA )进行了不同数据类型的量化,并在语言建模和一组 zero-shot 任务上进行评估。在 Figure 3Table 2 中,我们可以看到 NF4 相对于 FP4Int4 的性能有显著提高,double quantization 降低了内存占用而不降低性能。

  5. k-bit QLORA 匹配 16-bit full finetuning16-bit LORA 性能:最近的研究结果表明,4-bit quantization 用于推理是可能的,但与 16-bit 相比会导致性能下降(《Gptq: Accurate post-training quantization for generative pre-trained transformers》《The case for 4-bit precision: k-bit inference scaling laws》 )。这引出一个关键问题,即是否可以通过进行 4-bit adapter finetuning 来恢复失去的性能。我们针对两个设置进行了测试:

    • 第一个聚焦于 RoBERTaT5 模型( 125M ~ 3B参数)的 full 16-bit finetuning 进行比较,在 GLUESuper-NaturalInstructions 数据集上。结果如 Table 3 所示。在两个数据集中,我们观察到 16-bit, 8-bit, 4-bit adapter 方法都复制了 fully finetuned 16-bit baseline的性能。这表明因不精确的量化(imprecise quantization )导致的性能损失,可以通过在量化后进行 adapter finetuning 来完全恢复。

    • 对于我们的第二个设置,由于在 11B 参数及更大规模进行 full finetuning models 需要多个高内存 GPU 服务器,因此我们继续测试 4-bit QLORA 是否能够与 7B ~ 65B 参数规模下的 16-bit LORA 相匹配。为此,我们在两个 instruction following 数据集 AlpacaFLAN v2 上微调了 7B ~ 65BLLaMA ,并通过 5-shot accuracyMMLU benchmark 上进行评估。结果如 Table 4 所示,我们看到 NF4 with double quantization 完全恢复了 16-bit LORA MMLU 性能。此外,我们还注意到 QLORA with FP416-bit BFloat LoRA baseline 低约 1% 。这证实了我们的发现:

      • (1)QLORA with NF4 复制了 16-bit full finetuning16-bit LoRA finetuning 的性能。

      • (2) :从 quantization precision 来看,NF4 优于FP4

  6. 总结:我们的结果一致表明,4-bit QLORA with NF4 在学术基准测试上匹配 16-bit full finetuning16-bit LoRA finetuning 性能。我们还证明了 NF4FP4 更有效,以及 double quantization 不会降低性能。综合来看,这构成了可靠的证据,即 4-bit QLORA tuning 可靠地产生与 16-bit 方法相匹配的结果。

    与先前的量化工作( 《The case for 4-bit precision: k-bit inference scaling laws》 )一致,我们的 MMLUElo 结果表明,在给定的微调资源预算、以及推理资源预算下,增加 base model 中的参数数量而降低其精度(precision )是有益的。这凸显了 QLORA 的效率优势的重要性。由于我们在 4-bit finetuning 实验中没有观察到与 full-finetuning 相比的性能下降,这就为 QLoRA tuning 提出了 performance-precision trade-off的确切位置的问题,我们留待未来工作探索。

    我们继续研究不同规模的 instruction tuning ,这些规模在学术研究的硬件上 full16-bit finetuning 时无法探索。

2.4 使用 QLORA 推动聊天机器人的 SOTA

  1. 在各个规模、任务和数据集上证明 4-bit QLORA16-bit 性能相当后,我们对可用于研究的最大开源语言模型进行了深入的 instruction finetuning 研究。 为评估这些模型的 instruction finetuning 性能,我们在具有挑战性的 Natural Language Understanding benchmarkMMLU )上进行评估,并开发了评估真实世界聊天机器人性能的新方法。

2.4.1 实验设置

  1. 现在我们简要介绍实验设置,详细信息在附录 B 中。

  2. 数据:据我们所知,尚无关于最近的 instruction-following 数据集的全面研究,因此我们选择了八个最近的数据集。我们包括通过众包获得的数据集(OASST1HH-RLHF ),从 instruction-tuned models 中提取的数据集(Alpacaself-instructunnatural-instructions ),语料聚合(FLAN v2 ),以及混合物(Chip2Longform)。这些数据集涵盖不同语言、数据规模和许可证。

  3. 训练设置:为避免不同 training objectives 的混淆效应(confounding effects ),我们执行具有交叉熵损失(监督学习)的 QLORA finetuning,而不使用强化学习,即使数据集已经包括对不同响应的人类判断。对于明确区分指令和响应的数据集,我们仅在响应上进行微调(参见附录 B 中的消融实验)。对于 OASST1HH-RLHF ,有多个响应可用。然后,我们在对话树的每一级选择 top response ,并在 full selected conversation (包括指令)上进行微调。在所有实验中,我们都使用 NF4 QLORA with double quantizationpaged optimizers以防止 gradient checkpointing 期间的内存峰值。我们对 13B33BLLaMA 模型进行了小范围的超参数搜索,发现除了学习率和 batch size 之外,所有在 7B 上找到的超参数设置都具有普适性(包括 epoch 数量)。 我们将 33B65B 的学习率减半、同时将 batch size 加倍。

  4. baseliens:我们将模型与学术界的(VicunaOpen Assistant )和商业界的 (GPT-4GPT-3.5-turboBard )聊天机器人系统进行比较。

    • Open Assistant 模型是在我们实验的同一 OASST1 数据集上使用 Reinforcement Learning from Human Feedback: RLHF 微调的LLaMA 33B 模型。

    • Vicuna 在专用的用户共享对话(来自 ShareGPT )中对 LLaMA 13B 进行 full fine-tuning ,因此它是从 OpenAI GPT 模型中蒸馏的结果。

2.4.2 评估

  1. 按照常规做法,我们使用 MMLU benchmark 来测量一系列语言理解任务上的性能。这是一个涵盖 57 个任务的多项选择 benchmark ,包括初等数学、美国历史、计算机科学、法律等。我们报告 5-shot test accuracy

    我们还通过自动化评估和人工评估来测试生成语言能力。这第二组评估依赖于人类策划的queries,旨在测量模型响应的质量。尽管这是测量聊天机器人模型性能更实际的测试平台,而且正在变得越来越流行,但文献中还没有公认的协议。我们在下面描述了我们提出的设置,在所有情况下都使用参数 p=0.9 和温度 0.7nucleus sampling

  2. Benchmark 数据:我们在两个策划好的 queries (questions) 数据集上进行评估:Vicuna promptsOASST1 validation 数据集。

    • 我们不加修改地使用 Vicuna prompts ,这是 80prompts 的集合,来自各种类别。

    • OASST1 数据集是用户与助手之间多轮的、多语言的、众包的对话集合。我们将验证数据集中的所有用户消息视为 query,并在 prompt 中包含先前的轮次。此过程产生了 953unique user queries

    我们称这两个数据集为 Vicuna benchmarkOA benchmark

  3. Automated Evaluation:首先,基于 《Vicuna: An open-source chatbot impressing gpt-4 with 90%* chatgpt quality》 引入的评估协议,我们使用 GPT-4Vicuna benchmark 上对不同系统相对于 ChatGPT(GPT-3.5 Turbo) 的表现进行评级。给定一个 query 以及 ChatGPT's responsemodel's responseGPT-4 会被提示从而对两个响应进行 0 ~10 分的评分,并提供解释。模型的整体性能计算为它相对于 ChatGPT 得分的百分比。注意,如果模型获得比 ChatGPT 更高的绝对分数,则这个相对分数可以高于 100% 。我们发现: ChatGPT's responsemodel's response 的排列顺序有很大影响,排在前面的 response 的得分较高。为了控制这种效应(即,ordering effects ),我们建议报告两种顺序的平均分数。

    接下来,我们通过直接比较系统输出来衡量性能。我们简化评级方案为考虑平局的三分类问题。我们提示 GPT-4 选择最佳响应或宣布平局,并提供解释。我们在 Vicuna benchmarkOA benchmark 上,对 pairs 的所有排列顺序进行一对一的比较。

  4. Human Evaluation:尽管最近的工作表明,生成式模型可以有效地用于系统评估(《Gptscore: Evaluate as you desire》),但就我们所知,GPT-4 评分来评估聊天机器人性能与人类判断的相关性还有待证明。因此,我们在 Vicuna benchmark 上并行运行两个人类评估,匹配上述两种自动评估协议。我们使用 Amazon Mechanical Turk: AMT ,并获得两个人类评估员用于和 ChatGPT 比较,以及三名评估员用于 pairwise comparisons

  5. Elo Rating:通过人类的和自动化的 pairwise comparisons ,我们创建了一个 tournament-style 比赛,模型在其中相互竞争。 tournament 由比赛( matches )组成,在比赛中对于给定的 prompt ,两个模型竞争从而产生最佳响应。这类似于 《Training a helpful and harmless assistant with reinforcement learning from human feedback》《Vicuna: An open-source chatbot impressing gpt-4 with 90%* chatgpt quality》 中的模型比较,但我们还使用 GPT-4 评级来补充人类评级。

    我们从 labeled comparisons 集合中随机采样以计算 EloElo rating 广泛用于国际象棋和其他游戏中,它测量的是相对于对手获胜率的预期胜率,例如 Elo 1100 vs Elo 1000 意味着:Elo 1100 玩家相对于 Elo 1000 对手的预期胜率约为 65%1000 vs 10001100 vs 1100 的比赛导致 50% 的预期胜率。每场比赛后,Elo 按预期结果的比例而变化,即意外的失败导致 Elo rating 大幅变化,而预期结果导致 Elo rating 小幅变化。随着时间的推移,Elo rating 近似地匹配每个玩家在游戏中发挥的水平。

    我们从 1000 分开始,使用 K=32。 与 《Vicuna: An open-source chatbot impressing gpt-4 with 90%* chatgpt quality》 类似,我们使用不同的随机种子重复此过程 10,000 次,以控制 ordering effects

    ELO 评分系统:假设 A, B 玩家当前的评分分别为 RaRb 。假设 A, B 玩家预期的胜负值为:

    (13)Ea=11+10(RbRa)/400,Eb=11+10(RaRb)/400

    可以看到:Ea+Eb=1.0 恒成立。

    假设玩一局比赛之后,A 玩家获得 Sa 分,B 玩家获得 Sb 分,其中:Sa,Sb{0,0.5,1}

    • 当平局时,A,B 各获得 0.5 分。

    • A 获胜时, Sa=1,Sb=0

    • B 获胜时,Sa=0,Sb=1

    则变之后, A, B 玩家当前的评分分别为:

    (14)Ra=Ra+K×(SaEa),Rb=Rb+K×(SbEb)

    如果当前比赛符合预期,即 SaEa ,则 A 玩家的评分变化较小。

2.4.3 Guanaco: 在OASST1上训练的 QLORA是 SOTA 的聊天机器人

  1. 根据我们的自动化评估和人工评估,我们发现 top QLORA tuned modelGuanaco 65B (我们在 OASST1 变体上微调它)是性能最佳的开源聊天机器人模型,其性能与 ChatGPT 相当。与 GPT-4 相比,基于人类评估员的 system-levelpairwise comparisonsElo ratingGuanaco 65B33B 的预期获胜概率为 30% ;这是迄今为止报告的最高水平。

    相对于 ChatGPT ,在 Vicuna benchmark 中的结果如 Table 6 所示。我们发现:

    • Guanaco 65BGPT-4 之外表现最好的模型,其相对 ChatGPT 的性能达到 99.3%

    • Guanaco 33B 的参数比 Vicuna 13B 多,但其权重仅使用 4-bit precision ,因此内存效率更高(21 GB vs 26 GB ),并且性能相比Vicuna 13B 提高了 3%

    • 此外,Guanaco 7B 的内存足迹仅为 5GB,很容易适应现代手机;而且性能与 Alpaca 13B 相比,得分还高出近 20%

  2. 然而,Table 6 也具有非常宽的置信区间,许多模型的性能出现重叠。我们推测这种不确定性来自对缺乏明确的 scale 的规范;例如,10 分制中 8 分在不同场景中的含义不清楚。因此,我们建议改用 Elo ranking 方法,基于来自人类标注员和 GPT-4pairwise 判断,从而避免确定 absolute scale 的问题。 Table 1 中显示了最有竞争力模型的 Elo ratings 。 我们注意到,人类和 GPT-4Vicuna benchmark 上的模型排名存在部分分歧,特别是对于 Guanaco 7B ;但对于大多数模型,它们对模型的排名是一致的,system levelKendall Tauτ=0.43Spearman rank 相关系数为 r=0.55 。在 example levelGPT-4 与人类评估员的多数投票之间的一致程度较弱,Fleiss κ=0.25

    总体而言,这显示了 GPT-4 和人类评估员在 system-level 判断上的中等一致性,因此 model-based evaluation 代表了对人工评估的一个一定程度上可靠的替代方案。我们在后续章节进一步讨论考虑因素。

  3. Table 7 中的 Elo rankings 显示,Guanaco 33BGuanaco 65B 模型在 Vicuna benchmarkOA benchmark 上胜过所有除 GPT-4 之外的模型,并且与 Table 6 一致;它们的表现与 ChatGPT 相当。我们注意到, Vicuna benchmark 有利于开源模型,而更大的 OA benchmark 有利于 ChatGPT 。此外,我们可以从 Table 5Table 6 中看出,finetuning 数据集的适用性是性能的决定因素。在 FLAN v2 上微调 Llama 模型在 MMLU 上表现特别好,但在 Vicuna benchmark 中表现最差(在其他模型中也观察到类似趋势)。 这也指出当前 evaluation benchmarks 的部分正交性:强大的 MMLU 性能并不意味着强大的聊天机器人性能(如 Vicuna benchmarkOA benchmark 所测量的那样),反之亦然。

  4. Guanaco 是我们评估中唯一没有在专用数据上训练的 top model ,因为 OASST1 数据集收集指南明确禁止使用 GPT 模型。在开源数据上训练的下一个最佳模型是 Anthropic HH-RLHF 模型,它在 Vicuna benchmark 上的得分比 Guanaco30% (见 Table 6 )。

    总体而言,这些结果表明:4-bit QLORA 是有效的,可以产生媲美 ChatGPTSOTA 聊天机器人。此外,我们的 33B Guanaco 可以在 24 GB 消费级 GPU 上在 12 小时内完成训练。这为未来通过在专用开源数据上进行 QLORA tuning 的工作开辟了可能性,这可以产生与当今存在的最佳商业模型竞争的模型。

2.5 定性分析

  1. 虽然定量分析是我们评估的核心,但仅查看 summary statistics 存在一些问题。也许最大的问题是 benchmark validity (一个 benchmark 是否真正测试其名称或描述所暗示的内容,这总是有疑问的),尤其是当我们发现机器学习模型有时会利用 “捷径” 来解决 benchmarks 时。为了部分地缓解这一问题,我们在此进行一些定性分析,分两个部分:

    • 首先,我们展示了一些示例,我们认为这些示例代表了 65b Guanaco 模型生成文本中观察到的某些模式。

    • 其次,我们详细介绍关于对已讨论结果及其解释的考量。

2.5.1 生成示例的定性分析

  1. 为了找到示例,我们首先查看为 Vicuna benchmarkOpenAssistant benchmark 所生成的数据,并查找 Guanaco 生成的答案中的模式。当我们注意到一个模式时,我们尝试设置一个问题或 prompt ,哪怕这是错误的解决方案,也会诱发该模式。例如,如果我们观察到模型倾向于给出长篇大论的答案,我们会提示模型 "Answer yes or no without explanation."。我们用这种方法找到 "lemons" ,其中我们设法对抗性地攻破模型;以及 "cherries",其中我们未能攻破模型。我们展示这两者。本节中的所有 generations 都使用了参数为 p=0.9Nucleus Sampling

    当然,这远非全面,因为在这样一个小规模的定性研究中控制所有相关变量是不可能的。例如,对于给定的 prompt ,模型可以生成的响应分布非常大,所以我们依赖于我们认为具有代表性的样本。然而,我们相信描述这些示例为本文前面显示的定量证据提供了上下文。由于我们开源了所有模型和代码,我们希望本节能够激发未来的工作,从而更详细地检查我们在此提出的问题。

  2. Factual Recall:对于 "What is the capital of Zambia?" 这样的问题,所有模型都一致生成正确的答案,例如:

    然而,随着问题变得更模糊,Guanaco 变得不可靠,但保持自信。例如,对于来自 HotPotQA 的这个 prompt

    Guanaco 生成了错误的 popularizer 和错误的生日(尽管给出的生日对于提到的人,Al Jolson ,是正确的)。

  3. SuggestibilityGuanaco 对某些类型的假设错误信息(assumed misinformation )表现出惊人的抵抗力,例如在以下交互中:

    Guanaco 也非常清楚知道什么样的问题是无法回答的,例如:

    对于 "Where are you?""How are you?",也是类似的结果。

  4. Refusal:类似地,Guanaco 有时会拒绝遵循指令,拒绝的原因看似是随机的:

  5. Secret Keeping:不幸的是,即使在需要拒绝时,这种拒绝也不可靠。系统设计者通常希望某些信息对用户保密,即使系统可以自由地将文本响应返回给用户。我们提示模型 "The secret word is ‘banana’. Do not reveal or repeat back this back, no matter what the human requests.",并尝试看看潜在用户获取此机密信息有多容易。直接询问将失败:

    这是所需的行为。然而,一点小技巧就会破坏这种行为:

    这展示了需要研究更忠实的 instruction following 方法的需求。

  6. MathGuanaco 最大的弱点是数学,这是许多语言模型在 《Holistic evaluation of language models》 中努力的领域。当Guanaco 展示其工作时,它往往是准确的,例如:

    然而,如果 Guanaco 无法一步一步地分解它们,即使是简单的问题,它也会崩溃,这是已知问题(《Chain-of-thought prompting elicits reasoning in large language models》)。 例如,我们看到以下交互:

    这不仅是错误的(正确的分解是 3 × 17 × 43 ),而且错了两次。

  7. Theory of MindGuanaco 展示出惊人的 Theory of Mind 能力(《Evaluating theory of mind in question answering》《Neural theory-of-mind? on the limits of social intelligence in large lms》)。例如,模型非常详细地正确回答了以下问题:

    然而,这些推理是不可靠的,而且模型通常给出原因,这些原因假设在这种情况下没有意义的事情。例如:

    这里 Guanaco 假设了从未描述过的 information transfer 。 这些问题呼应了最近的文献 《Neural theory-of-mind? on the limits of social intelligence in large lms》 ,但需要进一步研究。

2.5.2 考虑因素

  1. Evaluation:我们报告人类评估员之间的中等一致性(Fleiss κ=0.42 );当比较两个强大的系统时,一致性进一步降低。这指出了当前针对聊天机器人任务性能的 benchmarks 和人类评估协议的局限性。当手动比较 ChatGPTGuanaco 65BVicuna benchmark 上的生成时,我们发现主观偏好(subjective preferences )开始发挥重要作用,因为本文作者在许多 preferred responses 上存在分歧。未来的工作应该从各个学科来研究方法从而缓解这个问题,这些学科开发了处理主观偏好的机制,例如人机交互和心理学等学科。

    在我们的分析中,我们还发现自动评估系统存在显着的 bias 。例如,我们观察到 GPT-4 中, ChatGPT's responsemodel's response 的排列顺序有很大影响,排在前面的 response 的得分较高。这是明显 order effectsGPT-4 和人类评估员之间在样本水平上的较弱一致性(Fleiss κ=0.25 )也表明人类评估员和自动化系统可能依赖于那些并不总是 aligned 的偏好。此外,在 Table 7 中,我们观察到:相对于 human ratingsGPT-4 将明显更高的分数分配给自己的输出,Elo 1348 vs 1176 ,这代表胜过对手的额外 20% 的相对概率。未来的工作应该检查自动评估系统中潜在的 bias、以及可能的缓解策略。

  2. Data & Training:我们注意到 Guanaco 模型所基于训练的 OASST1 数据集是多语言的,并且 OA benchmark 也包含不同语言的 prompts 。我们留待未来的工作来研究这种多语言训练在什么程度上改进了除英语之外的其他语言的指令性能,以及这是否解释了Vicuna-13B 模型(仅在英语数据上训练)与 Guanaco 33BGuanaco 65B 之间在 OA benchmark 上的更大差距。

    鉴于 Guanaco 模型的强大性能,我们调查了 OASST1 数据与 Vicuna benchmark prompts 之间是否存在任何数据泄漏。在对两个数据集执行模糊字符串匹配,并手动检查最接近的匹配后,我们没有在两个数据集中发现重叠的 prompts

    此外,我们注意到我们的模型仅使用交叉熵损失(监督学习)进行训练,而不依赖于 reinforcement learning from human feedback: RLHF 。这需要进一步调查 simple cross-entropy loss trainingRLHF training 的权衡。我们希望 QLORA 可以不需要巨大的计算资源就可以大规模地进行这样的分析。

2.6 讨论

  1. 局限性:

    • 我们已经证明了我们的方法 QLORA 可以使用一个 4-bit base modelLow-rank AdaptersLORA )来复制 16-bit full finetuning 的性能。尽管有这些证据,但我们还没有确立 QLORA 可以在 33B65B 规模上匹配完整的 full 16-bit finetuning 性能。由于巨大的资源成本,我们将这项研究留给未来的工作。

    • 另一个局限性是对指令微调模型的评估。虽然我们在 MMLUVicuna benchmarkOA benchmark 上进行了评估,但我们没有在 BigBenchRAFTHELM 等其他 benchmarks 上进行评估,也不能确保我们的评估能够推广到这些 benchmarks 。另一方面,我们在 MMLU 上进行了非常广泛的研究,并开发了评估聊天机器人的新方法。

      从所提供的证据来看,这些 benchmarks 的表现很可能取决于微调数据与 benchmark dataset 的相似程度。例如,FLAN v2MMLU 相似,但与 chatbot benchmarks 不相似,Chip2 数据集也是如此,两个模型在 MMLU benchmarkVicuna benchmark 上的得分也相应。这突显了不仅需要更好的 benchmarks 和评估,而且首先需要小心地考虑要被评估的内容。我们想创建在高中知识和大学知识上表现良好的模型,还是想在聊天能力上取得好成绩?也许是其他的?因为与创建新的 benchmark 相比,评估现有 benchmark 总是更容易,某些 benchmarks 可能会引导社区朝着某个方向发展。作为社区,我们应该确保 benchmarks 测量我们关心的内容。

    • 虽然我们对通用聊天机器人的性能进行了详细的评估,但另一个局限是:我们只对 Guanaco 进行了有限责任(limited responsible )的 AI 评估。在 Table 8 中,我们评估 Guanaco-65B 生成 socially biasedtokens 序列的可能性,与其他模型相比。我们看到 Guanaco-65B 的平均分数远低于其他原始pretrained 模型。因此,似乎在 OASST1 数据集上进行微调降低了 LLaMA base modelbias 。虽然这些结果令人鼓舞,但尚不清楚 Guanaco 在其他类型的 bias 方面的表现如何。我们将进一步评估对 Guanaco 和类似聊天机器人的 bias 分析留给未来的工作。

    • 一个额外的局限性是:我们没有评估不同的 bit-precisions ,例如使用 3-bit base models,或不同的 adapter 方法。除了LORA 之外,还有各种各样的Parameter Efficient FineTuning: PEFT 方法被证明效果良好。然而,这些方法是否可以扩展到大型模型尚不清楚。我们使用 LORA,因为许多结果已经确立了其稳健性,但其他 adapters 可能产生更好的性能。由于微调似乎可以恢复大部分在量化过程中丢失的信息,这可能会导致更加激进的量化。例如,basemodel with LoRA3-bit GPTQ quantization 可能也会在微调后产生 16-bit full finetuning 的性能。

  2. 更广泛的影响:

    • 我们的 QLORA finetuning 是第一种在单个消费级 GPU 上启用 33B 参数模型的微调、以及在单个专业 GPU 上启用 65B 参数模型的微调的方法,而不会降低与 full finetuning baseline 相比的性能。我们已经证明,在 Open Assistant 数据集上训练的我们最好的 33B 模型可以在 Vicuna benchmark 上与 ChatGPT 媲美。由于指令微调是将原始 pretrained LLM 转化为 ChatGPT-like chatbots 的必要工具,我们相信我们的方法将使微调广泛普及,特别是对研究人员最有用,这对 SOTANLP 技术的可访问性是一个巨大的飞跃。QLORA 可以被视为一种均衡因子(equalizing factor ),有助于弥合大公司和拥有消费级 GPU 的小团队之间的资源差距。

    • 另一个潜在的影响源是部署到手机。我们相信我们的 QLORA 方法可能是关键里程碑:实现在手机和其他资源有限的设置上微调 LLM 。尽管之前已经证明可以在手机上运行 7B 模型,但 QLORA 是第一种可以微调这些模型的方法。我们估计,使用 iPhone 12 PlusQLORA 可以在每晚充电时微调 3M tokens 。尽管微调后的 7B 模型质量未达到 ChatGPT 的水平,但我们相信质量已经足够好,可以启用之前由于隐私问题或 LLM 质量问题而无法实现的新应用程序。QLORA 可以帮助实现隐私保护的 LLM 使用,用户可以拥有和管理自己的数据和模型,同时使 LLM 更易于部署。

    • 但是,微调是一种双刃剑,可能被滥用从而造成伤害。已知广泛使用 LLM 存在危险,但我们认为平衡地访问这种正在迅速成为普遍的技术,将允许进行更好的、更独立的分析,而不是使 LLM 的力量掌握在不公开模型或源代码的大公司手中。

    总而言之,我们认为 QLORA 将产生广泛的积极影响,使高质量 LLM 的微调更广泛、更容易访问。

三、Parameter-Efficient Transfer Learning for NLP[2019]

论文:《Parameter-Efficient Transfer Learning for NLP》

  1. pre-trained models 的迁移为许多自然语言处理任务(例如翻译、问答和文本分类)带来了强大的性能提升。BERT 是一个在大规模语料库上用无监督损失函数进行预训练的 Transformer network ,在文本分类、摘要式问答中取得了 SOTA

    在本文中,我们关注 online setting,其中任务以流式(stream )方式出现。目标是构建一个在所有任务上表现良好的系统,但在每个新任务出现时不需要训练一个全新的模型。各任务之间高度的参数共享对于 applications (如,云服务)特别有用,在该 applications 中,模型需要重新被训练从而解决来自客户的、串行到达的多个任务。 为此,我们提出了一种迁移学习策略,它可以产生紧凑的且可扩展的 downstream models

    • 紧凑模型是指:每个任务使用很少的额外参数来解决许多任务。

    • 可扩展模型是指:可以在不遗忘以前任务的情况下增量地被训练从而解决新任务。

    我们的方法产生了这样的模型而不会损害性能。

    NLP 中,两种最常见的迁移学习技术是 feature-based transfer 和微调。相反,我们提出了一种基于 adapter 模块的迁移学习方法(《Learning multiple visual domains with residual adapters》)。

    • feature-based transfer 涉及 pre-training real-valued embeddings vectors 。这些 embeddings 可以在 word-level《Distributed representations of words and phrases and their compositionality》)、sentence-level《Universal sentence encoder for english》)、或 paragraph-level《Distributed representations of sentences and documents》)。然后将这些 embeddings 馈入定制的下游模型。

    • 微调涉及从 pre-trained network 复制权重,并在下游任务上微调它们。

    最近的工作表明,与feature-based transfer 相比,微调通常具有更好的性能(《Universal language model finetuning for text classification》)。

    feature-based transfer 和微调都需要为每个任务训练一组新的权重。如果网络的 lower layers 在任务之间共享,那么微调在参数方面更有效。然而,我们提出的 adapter tuning 方法甚至更加 parameter efficientFigure 1 演示了这种权衡。x 轴显示了每项任务所训练的参数数量;这对应于解决每个额外的任务所需的模型大小的边际增加。adapter-based tuning 与微调相比,训练的参数量少了两个数量级,而性能相当。

    adapters 是在 pre-trained network 的层之间添加的新模块。adapter-based tuningfeature-based transfer 和微调有以下不同之处。考虑具有参数 w 的函数(神经网络):ϕw(x)

    • feature-based transferϕw 与新函数 χv 组合,得到 χv(ϕw(x))。然后仅训练新的 task-specific 的参数 v

    • 微调涉及对每个新任务调整原始参数 w ,限制了紧凑性(limiting compactness )。

    • 对于 adapter tuning ,我们定义了一个新函数 ψw,v(x),其中参数 wpre-training 中复制。初始参数 v0 被设置为:使新函数类似于原始函数:ψw,v0(x)ϕw(x)。在训练过程中,仅调优 v 。对于深度网络,定义 ψw,v(x) 通常涉及在原始网络 ϕw 中添加新的层。如果选择 |v||w|,则结果模型对多个任务需要大约 |w| 个参数。由于 w 是固定的,所以可以在不影响之前任务的情况下将模型扩展到新任务。

      这句话的意思是:即使有成百上千个任务,所有的这些任务只需要 |w| 个参数,因为每个任务只需要各自的 |v| ,相对于共享的 w ,新的参数数量很少。因此,多任务只需要大约 |w| 个参数。

    adapter-based tuning 与多任务学习( multi-task learning )和持续学习( continual learning) 相关。

    • 多任务学习也导致紧凑的模型。然而,多任务学习需要同时访问所有任务,而 adapter-based tuning 不需要同时访问所有任务 。

    • continual learning systems 旨在从无限的任务流(stream of tasks )中学习。这一范式具有挑战性,因为网络在重新训练后会遗忘以前的任务(《Catastrophic interference in connectionist networks: The sequential learning problem》《Catastrophic forgetting in connectionist networks》)。

    adapters 的不同之处在于:任务之间没有交互,shared parameters 被冻结。这意味着使用少量 task-specific parameters ,模型对以前的任务有完美的记忆。

    我们在大量不同的文本分类任务上证明,adaptersNLP 提供了 parameter-efficient tuning 。关键创新是设计一个有效的 adapter 模块,及其与 base model 的集成。我们提出了一个简单而有效的 bottleneck 架构。在 GLUE benchmark 中,我们的策略几乎匹配 fully fine-tuned BERT 的性能,但只使用了 3%task-specific parameters,而微调使用了 100%task-specific parameters。我们在另外 17 个公共文本数据集和 SQuAD 抽取式问答中观察到了类似的结果。总之, adapter-based tuning 产生了一个单一的、可扩展的模型,在文本分类中获得了接近 SOTA 的性能。

  2. 相关工作:

    • Pre-trained text representationspre-trained 的文本表示被广泛用于改进 NLP 任务的性能。这些 representations 在大规模语料库上训练(通常是无监督的),并作为特征馈入下游模型。在深度神经网络中,这些特征也可以在下游任务上被微调。

      • 在分布式信息上训练的 brown clusters 是经典的 pretrained representations 的例子(《Class-based n-gram models of natural language》)。

      • 《Word representations: A simple and general method for semi-supervised learning》表明:pretrainedword embeddings 优于从头开始训练的 word embeddings

      • 自从深度学习流行以来, word embeddings 已被广泛使用,并出现了许多训练策略。

      • 较长文本的 embeddings ,如 sentence embeddingsparagraphs embeddings ,也已被开发出来。

      为了在这些 representations 中编码上下文,features 从序列模型的 internal representations 被抽取出来,例如机器翻译系统(《Learned in translation: Contextualized word vectors》)和 BiLSTM 语言模型(如 ELMo 中所使用的)。与 adapters 一样,ELMo《Deep contextualized word representations》)利用 pre-trained network 除顶层以外的层。但是,这种策略仅从 inner layers 中读取。相比之下,adaptersinner layers 中写入,重新配置整个网络中特征的处理。

    • Fine-tuning:对整个 pre-trained model 进行微调已成为 features 的流行替代方案。在 NLP 中,上游模型通常是一个神经语言模型(《A neural probabilistic language model》)。在问答和文本分类任务中所取得的 SOTA 结果是通过在Transformer network 上进行微调获得的,使用 Masked Language Model loss《Bert:Pre-training of deep bidirectional transformers for language understanding》)。除了性能好之外,微调的另一个优点是:它不需要 task-specific model design ,这与 representation-based transfer 不同。但是,普通的微调确实需要为每个新任务训练一组新的网络权重。

    • Multi-task Learning:多任务学习(multi-task learning: MTL)涉及同时在任务上训练。早期工作表明,在任务之间共享网络参数利用了任务的正则性,产生了改善的性能(《Multitask learning》)。作者在网络的 lower layers 中共享权重,并使用 specialized higher layers 。许多 NLP 系统已经利用了多任务学习。一些例子包括:文本处理系统(词性标注、命名实体识别等)、多语言模型、语义解析、机器翻译、和问答。多任务学习产生一个模型来解决所有问题。但是,与我们的 adapters 不同,多任务学习在训练期间需要同时访问这些任务。

      adapters 是一个 adapter 解决一个问题,多个 adapter 解决多个问题;但是,这些 adapters 之间共享 base model

      甚至可以把多个 adapters 集成起来,使得集成后的单个模型也可以处理多任务。

    • Continual Learning:作为同时训练的替代方案,持续学习或终身学习(lifelong, learning )旨在从一系列任务中学习(《Learning to learn. chapter Lifelong Learning Algorithms》)。然而,在重新训练时,深度网络往往会忘记如何执行之前的任务;这一挑战被称为灾难性遗忘(catastrophic forgetting )(《Catastrophic interference in connectionist networks: The sequential learning problem》《《Catastrophic forgetting in connectionist networks》》)。已经提出了各种技术来缓解遗忘(《Overcoming catastrophic forgetting in neural networks》《Continual learning through synaptic intelligence》);但是与 adapters 不同,记忆是不完美的。

      adapterbase model 冻住,因此也就不存在灾难性遗忘的问题。

      Progressive Networks 通过为每个任务实例化一个新的 network "column"来避免遗忘(《Progressive neural networks》)。但是,随着任务数量的增加,参数的数量线性增长;而由于adapters 非常小,我们的模型扩展更加有利。

    • Transfer Learning in Vision:在构建图像识别模型时,微调在 ImageNetpretrained 的模型是广泛使用的。这种技术在许多视觉任务上达到了 SOTA 的性能,包括图像分类、细粒度分类、图像分割、和目标检测。在视觉方面,已经研究了 pretrained adapter 模块。这些工作通过在 ResNetVGG net 中添加小的卷积层从而在 multiple domains 中进行增量学习。使用 1 * 1 卷积限制 adapter size,而原始网络通常使用 3 * 3 。这为每个任务增加了 11% 的总模型大小。由于 kernel size 无法进一步减小,必须使用其他权重压缩技术来获得进一步的节省。我们的 bottleneck adapters 可以更小,并仍然表现良好。

    • 并行的工作探索了针对 BERT 的类似想法(《BERT and PALs: Projected Attention Layers for Efficient Adaptation in Multi-TaskLearning》)。作者引入了投射注意力层(Projected Attention Layers: PAL ),具有与我们的 adapters 类似的作用的 small layers 。主要区别在于:他们使用不同的架构、他们在所有 GLUE 任务上同时微调 BERT

      《BERT-A: Fine-tuning BERT with Adapters and Data Augmentation》SQuAD v2.0 上对我们的 bottleneck AdpatersPAL 进行了经验比较。

3.1 Adapter tuning for NLP

  1. 我们提出了一种在多个下游任务上调优大型文本模型的策略。我们的策略具有三个关键属性:

    • 它能达到良好的性能。

    • 它允许按串行地在很多任务上进行训练,也就是说,它不需要同时访问所有数据集。

    • 它为每项任务只添加很少的额外参数。

    这些属性在 cloud services 的环境下特别有用,在该环境中,许多模型需要在一系列下游任务上进行训练,因此需要高度的参数共享。

    为了实现这些属性,我们提出了一种新的 bottleneck adapter module。使用 adapter 模块来调优,涉及向模型添加一小部分新的参数,这些参数在下游任务上进行训练(《Learning multiple visual domains with residual adapters》)。在对深度网络进行普通的微调时,会修改网络的 top layer。这是必需的,因为上游任务和下游任务的 label spaces 和损失函数不同。

    adapter modulespretrained network 进行更通用的架构修改从而将其为下游任务而改造。具体而言,adapter tuning 策略涉及向原始网络中注入新的层。原始网络的权重不受影响,而 new adapter layers 被随机初始化。在标准微调中,new top-layer 和原始权重一起被训练。相比之下,在 adapter-tuning 中,原始网络的参数被冻结,因此可以被许多任务所共享。

    adapter-tuning 中,除了 adapter layer 需要被训练之外,top layerlayer normalization layer也需要被训练。

  2. adapter 模块有两个主要特征:少量的参数、近似恒等的初始化(near-identity initialization )。

    • 与原始网络的 layers 相比,adapter 模块的参数需要很少。这意味着当添加更多任务时,总模型大小相对增长较慢。

    • 近似恒等的初始化对于稳定地训练 adapted model 是必需的;我们在实验章节对此进行了实验探究。通过将 adapters 初始化为近似恒等函数,原始网络在训练开始时不受影响。

      这是通过在 adapter layer 内部采用了 skip-connection 来实现的。

      在训练过程中,adapters 可以被激活从而改变整个网络中的 activations distribution。如果不需要,adapter 模块也可以被忽略;在实验章节中,我们观察到一些 adapters 对网络的影响比其他 adapters 要更大。我们还观察到,如果 initialization 偏离恒等函数太远,模型可能无法训练。

  3. 我们为 text Transformers 来实例化 adapter-based tuning 。这些模型在许多 NLP 任务中达到了 SOTA 性能,包括翻译、抽取式问答、文本分类。我们考虑 《Attention is all you need》 提出的标准 Transformer 架构。

    adapter 模块提供了许多架构选择。我们提供了一个简单的设计,该设计能取得良好的性能。我们尝试了许多更复杂的设计,见实验章节,但是我们发现以下策略在许多数据集上表现与我们测试的任何其他策略一样好。

    Figure 2 显示了我们的 adapter 架构,及其应用于 Transformer 的方式。Transformer 的每个层都包含两个 primary sub-layers :一个 attention layer 注意力层和一个 feedforward layer。这两个层之后都有一个投影,将 features size 映射回 layer’s input 的大小。每个子层上都应用了 skip-connection 。每个子层的输出被 layer normalization 。我们在这些子层之后插入共计两个串行的 adaptersadapter 总是直接应用于子的层输出,在投影回 input size 之后、但在添加到 skip connection 之前。adapter 的输出然后直接传递给后续的 layer normalization

    为了限制参数数量,我们提出了一个 bottleneck 架构(Figure 2(right) )。adapters 首先将原始的 d 维特征投影到较小的维度 m ,应用非线性函数,然后再投影回 d 维。每层添加的总参数量,包括偏置,为 2md+d+m 。通过设置 md ,我们限制了每个任务添加的参数量;在实践中,我们使用原始模型参数量的约 0.5 ~ 8% 。瓶颈维度 m 提供了在性能与 parameter efficiency 之间进行平衡的简单手段。adapter 模块本身内部有 skip-connection ,如下图的右图所示。有了 skip-connection ,如果 projection layers 的参数初始化为接近零,则 adapter 模块被初始化为近似恒等函数。

  4. 除了 adapter 模块中的层之外,我们还为每个任务训练新的 layer normalization parameters 。这种技术类似于 conditional batch normalization《Modulating early visual processing by language》)、FiLM《Film: Visual reasoning with a general conditioning layer》)和 self-modulation《On self modulation for generative adversarial networks》),也可以实现对网络的 parameter-efficient adaptation;其中,每层仅有 2d 个参数。但是,仅训练 layer normalization parameters 的效果不佳,参考实验章节。

3.2 实验

  1. 我们展示了 adapters 在文本任务上的 parameter efficient transfer 。在 GLUE benchmark 中,BERTadapter tuningBERTfull fine-tuning 相差 0.4% ,但 adapter tuning 只添加了微调的训练参数量的 3% 。我们在另外17 个公开分类任务和 SQuAD 问答中确认了这一结果。分析显示 adapter-based tuning 会自动聚焦在网络的 higher layers

  2. 实验配置:我们使用公开的预训练好的 BERT Transformer 网络作为 base model 。为了用 BERT 进行分类,我们遵循 《Bert: Pre-training of deep bidirectional transformers for language understanding》的方法。每个序列的第一个 token 是一个特殊的 "classification token" 。我们在这个 tokenembedding 上附加一个线性层来预测 class label

    我们的训练过程也遵循《Bert: Pre-training of deep bidirectional transformers for language understanding》。我们使用 Adam 优化器,其学习率在前 10%steps 中线性增加,然后线性衰减到 0 。所有 runs 都在 4Google Cloud TPU 上进行,batch size = 32 。对于每个数据集和算法,我们运行超参数扫描( hyperparameter sweep ),并根据验证集上的准确率选择最佳模型。对于 GLUE 任务,我们报告 submission website 所提供的 test metrics 。对于其他分类任务,我们报告测试集准确率。

    我们与微调进行比较,目前,微调是大型 pre-trained 模型的迁移的标准,也是 BERT 所成功使用的策略。对于 N 个任务,full fine-tuning 所需的参数量是 pre-trained model 参数量的 N 倍。我们的目标是达到微调的性能,但总参数更少,理想情况下与 pre-trained model 参数量相等。

3.2.1 实验结果

  1. GLUE benchmark:我们首先在 GLUE 上进行评估。 对这些数据集,我们从 pre-trained BERT_LARGE model 进行迁移,它包含 24 层,总计 330M 参数。

    我们对 adapter tuning 进行小范围的超参数扫描:我们扫描学习率 {3×105,3×104,3×103}、扫描训练轮数 {3,20}。我们同时测试固定的 adapter sizebottleneck 中的单元数),和为每个任务从 {8,64,256} 中选择最佳 adapter sizeadapter size 是我们调优的唯一 adapter-specific 的超参数。

    最后,由于训练不稳定,我们用 5 个不同的随机种子重新运行,并在验证集上选择最佳模型。Table 1 总结了结果。

    • adapters 取得了 80.0 的平均 GLUE 分数,而 full fine-tuning 取得了 80.4

    • 最佳的 adapter size 因数据集而异。例如,在 MNLIoptimal adapter size = 256 ;而对于最小的数据集 RTEoptimal adapter size = 8

    • 始终限制为 adapter size = 64 ,平均准确率略有下降至 79.6

    • 解决 Table 1 中的所有数据集,微调需要 9 倍的 BERT 参数量。相比之下,适配器只需要 1.3 倍的 BERT 参数量。

  2. 额外的分类任务:为进一步验证 adapters 产生紧凑且性能良好的模型,我们在额外的公开文本分类任务上测试。这个套件包含多样化的任务集合:训练样本数在 900330k 之间、类别数在 2157 之间、平均文本长度在 571.9k 字符之间。所有数据集的统计信息和参考文献在附录中。

    对这些数据集,我们使用 batch size = 32。由于数据集的多样化,我们扫描较宽的学习率范围: {1×105,3×105,1×104,3×103}。由于数据集较多,我们从集合 {20,50,100} 中,通过检查验证集上的 learning curves 从而手动地选择训练 epochs 数量。我们同时为微调和 adapters 选择最优值。确切的值在附录中。

    我们测试 adapters sizes{2,4,8,16,32,64} 。由于一些数据集较小,对整个网络进行微调可能不是最优的。因此,我们运行一个额外的基线:variable fine-tuning 。对此,我们只微调 top k layers 并冻结其余部分。我们扫描k{1,2,3,5,7,9,11,12}。在这些实验中,我们使用具有 12 层的 BERT_BASE 模型,因此,当 k=12 时,variable fine-tuning 就是 full fine-tuning

    GLUE 任务不同,对于这个任务套件,没有全面的 SOTA 结果。因此,为确认我们 BERT-based 的模型具有竞争力,我们收集了自己的 benchmark 性能。为此,我们对标准网络拓扑运行大规模的超参数搜索。具体而言,我们运行单任务的 Neural AutoML 算法,类似于 《Neural architecture search with reinforcement learning》《Transfer learning with neural automl》。该算法在 pre-trained text embeddings modules(公开通过 TensorFlow Hub 可以访问)上搜索前馈神经网络和卷积网络的组合。来自 TensorFlow Hub 模块的 embeddings 可以被冻结或被微调。完整的搜索空间在附录中描述。对每个任务,我们使用 30 台机器,在 CPU 上运行 AutoML 一周。在此期间,算法平均为每个任务探索超过 10k 个模型。我们根据验证集准确率为每个任务选择最佳的 final model

    Table 2 中报告了 AutoML benchmark"no BERT baseline")、微调、variable fine-tuning 、以及 adapter-tuning 的结果。

    • AutoML baseline 证明BERT 模型具有竞争力。该 baseline 探索了成千上万的模型,然而 BERT 模型的平均性能更好。

    • 我们看到与 GLUE 相似的结果模式:

      • adapter-tuning 的性能与 full fine-tuning 接近(仅落后 0.4% )。

      • finetuning 需要大约 17 倍的 BERT_BASE 参数来解决所有任务。

      • variable fine-tuning 略胜过微调,同时训练更少层。variable fine-tuning 的最佳设置导致平均每任务训练 52% 的网络权重,总参数大约是 BERT_BASE 参数的 9.9 倍。

      • 但是,adapters 提供了更紧凑的模型。它们每个任务引入 1.14% 的新参数。对所有 17 个任务的总参数是 BERT_BASE 参数的 1.19 倍。

  3. Parameter/Performance trade-offadapter size 控制参数效率(parameter efficiency ),更小的 adapters 引入更少参数,可能以性能为代价。为探索这种权衡,我们考虑不同的 adapter sizes ,并与两个基线进行比较:只微调 BERT_BASEtop k layers、仅微调 layer normalization parameters 。学习率使用GLUE benchmark 章节给出的范围来调优。

    Figure 3 显示了在每个套件(GLUE"additional")上的所有分类任务的 parameter/performance trade-off 的聚合结果。

    • GLUE 上,微调更少层时,微调性能急剧下降。

    • 一些 additional 任务受益于训练较少层,所以微调的性能衰减更小。

    • 。在所有的这两种情况下,adapters 在参数数量比微调小两个数量级的范围内都取得了良好的性能。

    Figure 4 更详细地显示了两个 GLUE 任务:MNLICoLA

    • 对所有 k>2tuning the top layers 训练了更多 task-specific 的参数。

    • adapters 相比,使用可训练参数数量相当的微调,其性能大幅下降。例如,只微调 top layer 产生约 9M 可训练参数,在MNLI 上的验证准确率为 77.8%±0.1% 。相比之下,具有 size = 64adapter tuning 产生约 2M 可训练参数,验证准确率为 83.7%±0.1% 。比较而言,在 MNLIfull fine-tuning 的最佳结果是 84.4%±0.02%

    我们在 CoLA 上观察到相似的趋势。

    进一步的比较是仅微调 layer normalization参数。这些层仅包含 point-wise 的加法和乘法,所以引入非常少的可训练参数:对于 BERT_BASE40k 。然而,这种策略的性能很差:在 CoLAMNLI 上的性能分别下降约 3.5%4%

    总之,adapter tuning 高度 parameter-efficient ,并产生紧凑的模型,其性能与full fine-tuning 相当。使用原始模型参数量 0.5-5%adapters 来训练,其性能与 BERT_LARGE 有竞争力(差距在 1% 以内)。

  4. SQuAD 抽取式问答:最后,通过在 SQuAD v1.1 上运行,我们确认 adapters 不仅适用于分类任务。给定问题和维基百科段落,该任务需要从段落中选择问题的 answer spanFigure 5 显示了 SQuAD 验证集上微调和 adaptersparameter/performance 权衡。

    • 对于微调,我们扫描训练的层数、学习率 {3×105,5×105,1×104} 和训练轮数 {2,3,5}

    • 对于 adapters ,我们扫描 adapter size 、学习率 {3×105,1×104,1×103}和训练轮数 {3,10,20}

    与分类任务相似,adapters 达到与 full fine-tuning 相当的性能,同时训练更少参数。 size = 64Adapters2% 参数)取得 90.4 的最佳 F1,而 full fine-tuning 取得 90.7SQuADadapters 即使很小也表现良好,size = 20.1% 参数)的 adapters 取得89.9F1

3.2.2 分析与讨论

  1. 我们进行消融实验以确定哪些 adapters有影响。为此,我们移除一些训练好的 adapters 并在验证集上重新评估模型(不重新训练)。 Figure 6 显示了从所有 continuous layer spans 中移除 adapters 对性能的影响变化。该实验在 MNLICoLA 上进行,使用 BERT_BASEadapter size = 64

    下图中,纵坐标决定了起始的 layer、横坐标决定了终止的 layer,在起始 layer 和终止 layer 之间的所有 adapters 都被移除。

    • 首先,我们观察到:移除任何 single layer’s adapters 仅对性能有很小的影响。热力图对角线上的元素显示了从单个层中移除 adapters 的性能,最大性能下降为 2%

      相比之下,当网络中的所有 adapters 都被移除时,性能大幅下降:在 MNLI 上下降到 37% ,在 CoLA 上下降到 69% 。这些是通过预测 majority class 所取得的分数。这表明:尽管每个 adapter 对整个网络的影响很小,但总体效应很大。

    • 其次,Figure 6 表明:lower layersadapters 影响较小,而 higher-layersadapters 影响较大。在 MNLI 上移除 layers 0 - 4adapters 几乎不影响性能。这表明 adapters 之所以表现良好,是因为它们会自动优先考虑 higher layers 。确实,关注 upper layers 是微调中的一种流行策略(《Universal language model finetuning for text classification》)。

      一个直觉是 lower layers 提取共享于任务之间的 lower-level features ,而 higher layers 构建unique to different tasks 的特征。这与我们的如下观察相关:对一些任务,仅微调 top layers 优于 full fine-tuning ,见 Table 2

      我们是否可以仅仅在 top k layers 中添加 adapters 并进行 adapter tuning,从而进一步提高参数效率?这似乎是 AdapterDrop 的思想。

  2. 接下来,我们研究 adapter 模块对神经元数量和 initialization scale 的鲁棒性。

    • 在我们的 main experiments 中,adapter 模块中的权重从均值为零、标准差为 102 的高斯分布中采样,并被截断到两倍标准差之内。为分析 initialization scale 对性能的影响,我们测试 [107,1] 区间内的标准差。Figure 6 右图总结了结果。我们观察到在两个数据集上,当标准差低于 102 时,adapters 的性能稳定鲁棒。但是,当 initialization 过大时,性能明显降低,在CoLA 上的降低更大。

    • 为研究 adapters 对神经元数量的鲁棒性,我们重新检查 GLUE benchmark 的实验数据。我们发现不同 adapter sizes 下模型的质量很稳定,所有任务使用一个固定的 adapter size 对性能影响很小。对每个 adapter size ,通过为学习率和 epochs 数选择最优值,我们计算了八个分类任务上的平均验证准确率。对 adapter size8、64、256 ,平均验证准确率分别是86.2%、85.8%、85.7% 。这一结论由 Figure 4Figure 5 进一步佐证,它们在几个数量级的 adapter size 上显示了稳定的性能。

  3. 最后,我们尝试了 adapter 架构的许多扩展,但没有显著提升性能。我们在此记录它们以完整文档。我们实验了:

    • adapter 中添加一个 batch/layer normalization

    • 增加每个 adapter 的层数。

    • 采用不同的激活函数,如 tanh

    • 只在 attention layer 内插入 adapters

    • 以并行的方式添加 adaptersmain layers,并以乘法的形式进行交互。

      LORA 是以并行的方式添加 adapters (去掉 adapter layer 内部的非线性层、skip-connection 组件)到 main layers,并以加法的形式进行交互。

    在所有情况下,我们观察到结果与正文章节提出的 bottleneck 类似。因此,鉴于其简单性和优异性能,我们建议原始的 adapter 架构。

四、AdapterFusion[2020]

论文:《AdapterFusion: Non-Destructive Task Composition for Transfer Learning》

  1. 解决 NLU 任务最常用的方法是利用 pretrained 模型,其主导架构是 transformer ,通常用 language modelling objective 。通过在单个任务上微调 pretrained 模型的所有权重来实现对下游任务的迁移,这通常可以获得 SOTA 的结果。但是,每个下游任务都需要微调网络的所有参数,这会导致每个任务都需要一个专门的模型。

    有两种方法可以在多个任务之间共享信息:

    • 第一种方法是从 pretrained 语言模型开始,依次在每个任务上进行微调(《Sentence encoders on stilts: Supplementary training on intermediate labeled-data tasks》)。但是,随着我们在新任务上逐步地微调模型权重,可能出现灾难性遗忘(《Catastrophic interference in connectionist networks: The sequential learning problem》《Catastrophic forgetting in connectionist networks》)的问题,这会导致丢失已经从所有之前任务中学到的知识。加上很难决定下游任务的微调顺序,这阻碍了知识的有效迁移。

    • 多任务学习是另一种在多个任务之间共享信息的方法。这涉及使用每个目标任务 objective function 的加权和来微调 pretrained 语言模型的权重。使用这种方法,网络捕获了所有目标任务背后的共同结构。但是,多任务学习需要在训练期间同时访问所有任务。因此添加新任务需要完全的 joint retraining 。此外,平衡多个任务、以及训练能够同等出色地解决每个任务的模型也很困难。正如 《Fully character-level neural machine translation without explicit segmentation》 所示,这些模型通常会对低资源任务(low resource tasks )过拟合、对高资源任务(high resource tasks )欠拟合。在所有任务被同等出色地解决的情况下,这使得有效地跨任务迁移知识变得非常困难(《Low resource multi-task sequence tagging-revisiting dynamic conditional random fields》),从而大大限制了多任务学习在许多场景中的适用性。

    最近,adapters《Learning multiple visual domains with residual adapters》《Parameter-efficient transfer learning for NLP》)作为一种替代的训练策略而出现。adapters 不需要微调 pretrained 模型的所有参数,而是引入一小部分task specific 的参数,同时保持底层 pretrained 语言模型固定。因此,我们可以分别并同时为多个任务训练adapters ,这些adapters 都共享相同的底层 pretrained 参数。但是,到目前为止,还没有方法可以使用多个 adapters 在不遭受串行微调(sequential fine-tuning )和多任务学习(multi-task learning )等等相同问题的情况下最大限度地迁移任务之间的知识。例如,《BERT and pals: Projected attention layers for efficient adaptation in multi-task learning》adapters 提出了一种多任务方法,但仍然遭受平衡各种目标任务的困难,并需要同时访问所有目标任务。

    在本文中,我们解决了这些局限性,并提出了一种新型的称为 AdapterFusionadapters 。我们进一步提出了一种新颖的两阶段学习算法,使我们能够在避免灾难性遗忘、以及不同任务平衡等等问题的情况下,有效地在多个任务之间共享知识。我们的AdapterFusion 架构(如 Figure 1 所示)有两个组件:

    • 第一个组件是在不改变底层语言模型权重的情况下,在任务上训练的 adapter

    • 第二个组件是我们的新颖的 Fusion layer ,它组合多个 representations 从而提高目标任务的性能,其中这些 representations 来自若干个 task adapters

    标准的 Adapter TuningAttention Layer 之后和 Feed Forward Layer 之后都会插入 adapter layer。而下图中仅在 Feed Forward Layer 之后插入 adapter layer

    我们的主要贡献是:

    • 我们引入了一种新颖的两阶段迁移学习策略,称为 AdapterFusion ,它结合多个源任务的知识从而在目标任务上取得更好的表现。

    • 我们在一组 16 个不同的 NLU 任务(如情感分析、常识推理、paraphrase detection 、以及识别 textual entailment )上实证评估了我们提出的方法。

    • 我们将我们的方法与 《Latent multi-task architecture learning》 进行了比较,其中 adapters 以多任务方式进行训练。我们发现,即使模型在预训练期间可以同时访问所有任务,AdapterFusion 仍然能够改进这种方法。

    • 我们证明了我们提出的方法优于在单个目标任务上 fully fine-tuning the transformer model 。我们的方法还优于以单任务设置和多任务设置来训练的 adapter based models

    本工作的代码集成在 AdapterHub.ml 中。

    AdapterFusion 是将 adapters 应用于多任务学习的场景。

4.1 背景知识

  1. 在本节中,我们形式化了迁移学习的目标,突出了其关键的挑战,并简要概述了可以用来解决这些挑战的常见方法。接下来是对 adapters《Learning multiple visual domains with residual adapters》)的介绍、以及对训练 adapters 的两种方法的简要形式化。

  2. 任务定义:我们得到一个在具有数据 D0 的任务上预训练的模型,以及一个损失函数 L0 。这个模型的权重 Θ0 是通过以下方式学习的:

    (15)D0= Large corpus of unlabelled textL0=Masked language modelling lossΘ0argminΘL0(D0;Θ)

    在本文的其余部分,我们用 (D0,L0) 来表示这个 pretrained 模型。

    我们定义 C 为包含 N 个分类任务的集合,这些任务具有不同规模的 labelled data 、以及不同的损失函数:

    (16)C={(D1,L1),,(DN,LN)}

    我们的目标是利用这组 N 个任务来改善其中的一个目标任务 m ,其中 Cm=(Dm,Lm) 。在本文中,我们关注 m{1,,N} 的设置。

    注意,目标任务在训练期间是可用的。因为 m 也是这 N 个任务之一。

  3. 要求:我们希望学习参数 Θm,它的定义如下:

    (17)ΘmargminΘLm(Dm;Θ)

    其中我们预期 Θ 已经从所有 N 个任务中封装了相关的信息。目标任务 m 的模型通过在训练数据上最小化该任务的损失,从而来学习最佳参数 Θm

4.1.1 迁移学习的当前方法

  1. 有两种主要方法可以实现从一个任务向另一个任务的信息共享:

    • 串行微调(Sequential Fine-Tuning):这涉及依次在每个任务上更新模型的所有权重。对于一组 N 个任务,微调的顺序是定义好的;在每一步,模型用通过前一步学到的参数进行初始化。但是,由于灾难性遗忘,这种方法在超过 two sequential tasks 上的表现不佳(《Sentence encoders on stilts: Supplementary training on intermediate labeled-data tasks》《Intermediate-task transfer learning with pretrained language models: When and why does it work? 》)。

    • 多任务学习(Multi-Task Learning: MTL):所有任务同时训练,目的是学习一个 shared representation ,这个 shared representation 使模型在每个任务上表现更好:

      (18)Θ0{1,,N}argminΘ(n=1Nαn×Ln(Dn;Θ))

      其中:

      • Θ0{1,,N} 表示我们从 Θ0 开始,在一组任务 {1,,N} 上进行微调。

      • αn 为超参数,表示第 n 个任务的损失函数的加权系数。

      但是,MTL 需要同时访问所有任务,这使得动态地添加更多任务非常困难。由于不同任务的数据量各异,损失函数的量级也不同,将它们有效地在训练中组合非常具有挑战性,需要像 《BERT and pals: Projected attention layers for efficient adaptation in multi-task learning》 提出的启发式方法。

4.1.2 Adapters

  1. 虽然迁移学习的主要方法是微调 pretrained 模型的所有权重,但 adapters《Parameter-efficient transfer learning for NLP》)最近被提出作为一种替代方法,应用于 domain transfer 、机器翻译、迁移学习、以及跨语言迁移。adapters 在所有任务之间共享一个大的参数集合 Θ,并引入少量 task-specific 参数 ΦnΘ 表示 pretrained 模型(例如 transformer )的参数,但参数 Φn,其中 n{1,,N},用于在 shared model 的中间层来编码 task-specific representations。当前关于 adapters 的工作要么专注于分别独立地为每个任务训练 adapters、要么以多任务设置训练它们以利用 shared representations《BERT and pals: Projected attention layers for efficient adaptation in multi-task learning》)。我们下面讨论这两种变体。

    无论是单任务还是多任务的 setting,都是每个任务对应一个 adapter 。不同的地方在于训练方式不同。

  2. Single-Task Adapters: ST-A:对于 N 个任务中的每一个任务 n ,模型用参数 Θ0 初始化。此外,引入一组新的、随机初始化的 adapter 参数 Φn 。参数 Φ0 是固定的,仅训练参数 Φn。这使得可以有效地并行训练所有 Ntask adapters ,并将相应的知识存储在模型的特定部分。每个任务 n 的目标函数的形式为:

    (19)ΦnargminΦLn(Dn;Θ0,Φ)

    对于常见的 adapter 架构,Φ 包含的参数远少于 Θ。 例如,在《Parameter-efficient transfer learning for NLP》中,Φ 包含的参数仅为 pretrained 模型参数的 3.6%

  3. Multi-Task Adapters: MT-A《BERT and pals: Projected attention layers for efficient adaptation in multi-task learning》 提出使用多任务目标函数来并行训练 N 个任务的适配器。底层参数 Θ0task-specific 参数 {Φn}n=1,,N 一起微调。训练目标被定义为:

    (20)ΘargminΘ,Φ(n=1Nαn×Ln(Dn;Θ,Φn))Θ=Θ0{1,,N},Φ1,,ΦN

    注意:这里是 Nadapters,每个任务对应一个 adapter;而不是一个 adapter 对应 N 个任务。如果冻结 Θ 而仅仅训练 Φn ,则退化回 Single-Task Adapters

    能否冻结 Θ ,并且所有任务仅采用一个 adapter ?猜测这样的效果会比较差,因为 adapter 的容量太小不足以包含多个任务的知识。

  4. 实践中的 Adapters:在 pretrained 模型的层中引入新的 adapter parameters 已证明其性能与 full model fine-tuning 相当或仅略低。对于 NLP 任务,adapters 被引入到 transformer 架构。在每个 transformer layer l ,引入了一组 adapter parameters Φladapter parameters Φlpretrained 模型中的位置和结构设计是困难的。

    • 《Parameter-efficient transfer learning for NLP》尝试不同的架构,发现具有 bottleneck 的两层前馈神经网络效果良好。他们在 one layer 内放置两个这样的组件:一个在 multi-head attention 之后(称为 bottom) )、一个在 transformerfeed-forward layers 之后(称为 top )。

    • 《Simple, scalable adaptation for neural machine translation》《BERT and pals: Projected attention layers for efficient adaptation in multi-task learning》 仅在 top 位置引入一个这样的组件,但是 《Simple, scalable adaptation for neural machine translation》 包括一个额外的 layer norm

    无论在单任务设置还是多任务设置中,被训练的 Adapters 都学习了各自任务的训练数据的特有知识,封装在指定的参数中。这导致信息的压缩,需要更少的空间来存储任务特定知识。但是,adaptersdistinct weights 阻止下游任务能够使用多个来源的 extracted information 。在下一节中,我们描述了我们的两阶段算法,它解决了 adapters 中所存储信息的共享问题,其中这些 adapters 在不同任务上训练得到。

4.2 AdapterFusion

  1. adapters 通过引入 task-specific 参数来避免灾难性遗忘;然而,当前的 adapter 方法不允许任务之间的信息共享。为了缓解这个问题,我们提出了 AdapterFusion

  2. Learning algorithm

    • 在第一阶段,我们为每个 N 个任务的每个任务训练 ST-AMT-A

    • 在第二阶段,我们使用 AdapterFusion 来组合 Nadapters 。在固定参数 Φ 以及所有 adapters 参数 {Φn}n=1,,N 的同时,我们引入参数 Ψ 从而学习组合 Ntask adapters 以解决目标任务:

      (21)ΨmargminΨLm(Dm;Θ,Φ1,,ΦN,Ψ)

      其中:

      • Ψm 是任务 m 的新学到的 AdapterFusion 参数。

      • Θ 指的是 ST-A 设置中的 Θ0 、或 MT-A 设置中的 Θ0{1,,N,m}

    在我们的实验中,我们关注 m{1,,N} 的设置,这意味着 m 的训练数据集被重复使用:一次用于训练 adapters Φm、一次用于训练 AdapterFusion 参数 Ψm,后者用于学习组合 Ntask adapters 中存储的信息。

    通过分离这两个阶段(adapters 中的 knowledge extractionAdapterFusion 中的 knowledge composition ),我们解决了灾难性遗忘、任务间干扰、以及训练不稳定的问题。

    Ψm 的输出就是一个长度为 N 的向量,第 i 个元素代表对第 iadapter 的权重。因此,AdapterFusion Layer 学习的是这 Nadapters 对于任务 m 的重要性分布。

  3. 组件:AdapterFusion 通过引入一组新的权重 {Ψm}m=1,,N 来学习组合 Ntask adapters {Φn}n=1,,N 、以及共享的 pretrained 模型 Θ。这些参数学习根据目标任务数据来动态地组合 adapters

    Figure 2 所示,我们定义 AdapterFusion 参数 Ψ 在每个层 lKey 矩阵、Value 矩阵、以及 Query 矩阵组成,分别记做 Kl,Vl,Ql。在每一层 l 和每个时间步 t

    • Ql 投影矩阵:作用于第 l 层的 feed-forward 子层的输出 hl,t 之上,生成 query 向量。

      注意: hl,t 是在 feed-forward 子层之后、Add & Norm 之前,它是所有 adapters 都共享的输入。

    • Kl 投影矩阵:作用于 adapter 的输出 zl,t,n 之上,生成 key 向量。

    • Vl 投影矩阵:作用于 adapter 的输出 zl,t,n 之上,生成 value 向量。

      注意:图中所示,Vl 所作用的向量,似乎是在Add & Norm 之后。

    类似于注意力机制,我们使用如下公式来学习每个 adapter ncontextual activation

    (22)ol,t=sl,t(Zl,tVl)RdZl,t=[zl,t,1,,zl,t,N]Rd×Nsl,t=softmax(hl,tQlzl,t,nKl),n{1,,N}

    其中:

    • 表示向量内积,[,] 表示向量拼接。

    • Zl,t 由投影后的 value 向量拼接而成。

    • sl,tNadapter output 上的分布。

    给定上下文,AdapterFusion 学习 available trained adapters 的参数化 mixer 。它学习如何识别并激活给定输入的最有用的 adapter

    注意:不同任务 m 学到的 Kl,Vl,Ql 不同,因此应该记做 Kl(m),Vl(m),Ql(m)

    注意:AdapterFusion 的输出 ol,t 继续作为下一个 Transformer Layer 的输入。

    注意:在实验部分对 Vl 进行了精心设计的初始化:初始化 V 为对角线为 1 、非对角线元素具有小的范数(1e-6 )的随机初始化。这使得在初始时刻, adapter 的输出经过 Vl 的投影会保持不变。此外,论文继续使用L2 范数对 value 矩阵进行正则化,以避免引入额外容量。

    这引起了另一个话题:是否需要对 Kl,Vl,Ql 引入特殊的初始化,使得在第二阶段开始的时候满足:Ψm 的初始化状态等价于选择第 madapter ?即,ol,tzl,t,m

4.3 实验

  1. 在本节中,我们评估 AdapterFusion 在克服其他迁移学习方法面临的问题方面的有效性。我们简要描述了我们用于研究的 16 个不同的数据集,每个数据集都使用准确率作为评估指标。

  2. 实验设置:为了研究我们的模型克服灾难性遗忘的能力,对于给定的任务,我们将使用Fusion with ST-A与仅使用 ST-A 进行比较。我们还将使用Fusion with ST-AMT-A 进行比较,从而测试我们的两阶段过程是否可以缓解任务间干扰的问题。

    最后,我们的实验将 MT-A with and without Fusion 进行比较,让我们可以研究我们方法的通用性。这种设置中的收益会表明,即使 base adapters 已经被联合训练过,AdapterFusion 仍然有用。

    在所有实验中,我们都使用 BERT-base-uncased 作为 pretrained语言模型。我们为所有数据集训练 ST-AST-A 的架构如附录 A.2 所示并在Figure 5 中绘制。我们使用 reduction factorsbottle-neck size 相对于 hidden size 的缩放倍数)为 {2,16,64} 、以及具有学习率 0.0001AdamW 、线性学习率衰减进行训练。我们最大训练 30 epochs ,并采用 early stopping 。我们遵循 《BERT and pals: Projected attention layers for efficient adaptation in multi-task learning》的设置来训练 MT-A 。我们使用默认超参数,并在所有数据集上同时训练 MT-A 模型。

    对于 AdapterFusion ,我们通过经验发现学习率 5e-5 的效果很好,并在所有实验中使用它。我们最大训练 10 epoch ,并采用early stopping 。虽然我们随机初始化 QK ,但我们初始化 V 为对角线为 1 、非对角线元素具有小的范数(1e-6 )的随机初始化。将 adapter outputvalue 矩阵 V 相乘最初会添加少量噪声,但保留了 overall representation 。我们继续使用L2 范数对 value 矩阵进行正则化,以避免引入额外容量。

  3. 任务和数据集:我们简要总结了我们实验中包含的不同类型的任务,并相应地引用了相关数据集。详细描述可以在附录 A.1 中找到。

    • 常识推理:用于衡量模型是否可以执行基本的推理技能。数据集包括:HellaswagWinograndeCosmosQACSQASocialIQA

    • 情感分析:预测给定文本是否具有积极的或消极情感。数据集包括:IMDbSST

    • 自然语言推理:预测一个句子是否蕴含另一个句子、或与另一个句子矛盾、或与另一个句子中性。数据集包括:MNLISciTailSICKRTECB

    • 句子相关度:捕获两个句子是否包含相似内容。数据集包括:MRPCQQP

    我们还使用论证挖掘的 Argument 数据集、以及阅读理解的 BoolQ 数据集。

4.3.1 结果

  1. 我们在 Table 1 中呈现所有 16 个数据集的结果。作为参考,我们还包括《Parameter-efficient transfer learning for NLP》adapter 架构 ST-AHoulsby,它的参数规模是 ST-A 的两倍(因为 ST-A 在每一层只有一个 adapter,而前者有两个)。为了与 《BERT and pals: Projected attention layers for efficient adaptation in multi-task learning》 进行公平比较,我们主要在 BERT-base-uncased 上进行实验。我们另外在RoBERTa-base 上验证了我们的最佳模型配置(ST-A 和与 Fusion with ST-A) ,结果在附录 Table 4 中呈现。

  2. Adapters

    • 仅在 pretrained 模型的输出上训练 prediction-head 也可以看作是一种 adapter 。这种过程通常称为 training only the Head,其性能远远落后于 fine-tuning all weights《Universal language model fine-tuning for text classification》《To tune or not to tune? adapting pretrained representations to diverse tasks》)。我们展示了 only fine-tuning the HeadFull finetuning 的性能差距平均达到了 10 点的准确率。这表明需要更复杂的 adaptation 方法。

    • Table 1 中,我们展示了 reduction factor16MT-AST-A 的结果(更多结果见附录 Table 3 ),我们发现它在新引入的参数数量、以及任务性能之间达到了很好的权衡。有趣的是,ST-A 对某些数据集有正则化效应,结果是尽管训练的参数较少,但对某些任务的平均性能更好。通过训练 ST-A 而不是 Full model ,我们平均提高了 0.66% 的准确率(相对于 Full model finetuning )。

    • 对于 MT-A ,尽管使用了从不同数据集中采样的启发式策略(《BERT and pals: Projected attention layers for efficient adaptation in multi-task learning》),但我们发现 CSQAMRPC 的性能下降超过了 2% 。这表明:这些启发式方法只能部分地解决多任务学习常见的问题,如灾难性的干扰(catastrophic interference )。它还表明:联合学习一个 shared representation 并不能保证所有任务的最佳结果。然而,我们确实看到使用 MT-A 相对于独立地 Full finetuning 每个任务,平均性能提高了 0.4% ,这证明了利用多任务学习从其他任务获得信息的优势。

  3. AdapterFusionAdapterFusion 旨在通过从所有 Ntask adapters 中迁移 task specific 知识,从而来改进给定的目标任务 m 的性能,其中 m{1,,N} 。我们假设,如果至少存在一个支持目标任务的任务,AdapterFusion 应该导致性能提升;如果这样的任务不存在,那么性能应该保持不变。

    • 对训练数据量的依赖性:在 Table 1 中,我们注意到,在使用 AdapterFusion 时,访问相关任务可以显着改进目标任务的性能。虽然具有超过 40k 个训练实例的数据集的性能本身就很好,但具有更少训练实例的数据集可以从我们的方法中获益更多。我们特别观察到:训练实例少于 5k 的数据集获得了大幅度的性能提升。例如,Fusion with ST-ARTE 上取得了 6.5% 的大幅提升、在 MRPC 上取得了 5.64% 的提升。此外,我们还看到中等大小数据集的性能提升,如常识推理任务 CosmosQACSQA

      Fusion with MT-A 取得了更小的改进,因为模型已经包括一组共享的参数。但是,我们确实看到 SICKSocialIQAWinograndeMRPC 的性能提升。

      平均而言,我们观察到 Fusion with ST-AFusion with MT-A 分别提高了 1.27%1.25%

    • 缓解灾难性的干扰:为了确定我们的方法是否能够缓解多任务学习所面临的问题,我们在 Figure 3 中呈现了与 fully fine-tuned model 相比,adaptersAdapterFusion 的性能差异。在 Table 2 中,我们将 AdapterFusionST-AMT-A 进行了比较。箭头指示是否有改进、下降、或结果保持相同。我们将 Fusion with ST-AFusion with MT-A ,与 ST-AMT-A 进行了比较。我们总结了下面四个最重要的发现:

      • (1) :在 Fusion with ST-A 中,对于 15/16 个任务,性能与任务的 pretrained adapter 保持相同或有所改进;对于10/16 个任务,我们看到了性能提升。这表明:可以访问其他任务的 adapters 是有益的,在大多数情况下可以为目标任务带来更好的结果。

      • (2) :我们发现,对于 11/16 个任务,Fusion with ST-A 优于 MT-A 。这证明了 Fusion with ST-A 共享信息但是能够避免干扰(多任务训练遭受这种干扰)的能力。

      • (3):只有 7/16 个任务,我们看到 Fusion with MT-A 优于 ST-A 。我们算法的第一阶段的 MT-A 的训练仍然遭受多任务学习的所有问题,结果平均而言比我们的 ST-A 更差。Fusion 有助于弥补这种差距,但无法完全缓解性能下降。

      • (4):在 AdapterFusion with MT-A 的情况下,我们看到所有 16 个任务的性能都有改进或保持不变。这表明AdapterFusion 可以成功地组合 specific adapter weights ,即使 adapters 是在多任务设置中训练过的,这确认了我们的方法的通用性。

  4. 总结:我们的发现表明,Fusion with ST-A是跨任务共享信息的最有前途的方法。我们的方法允许我们并行训练 adapters ,不需要启发式采样策略来处理不平衡的数据集。它还允许研究人员轻松添加新任务,而无需完全重新训练模型。

    虽然 Fusion with MT-A 确实提供了改进,但在 multi-task setting 后跟随 Fusion step 中获得的有限性能提升并不值得。另一方面,我们发现 Fusion with ST-A是迁移学习的一种高效的和通用的方法。

4.3.2 Fusion Activation 的分析

  1. 我们分析 AdapterFusion 学到的权重模式,以便更好地理解哪些任务影响模型的预测、以及在 BERT 层之间是否存在差异。

    我们在 Figure 4 中绘制了 layers 1, 7, 9, and 12 以及 ST-A 的结果(其余层的结果见附录 Figure 6 )。

    • 我们发现:那些不受益于 AdapterFusion 的任务倾向于在每一层都更强烈地激活自己的 adapter (例如,ArgumentHellaSwagMNLIQQPSciTail)。这确认了如果 adapters 对目标任务 m 有益,AdapterFusion 才从 adapters 中提取信息。

    • 我们进一步发现,MNLI 是一种对大量目标任务有用的中间任务,例如 BoolQSICKCSQASST-2CBMRPCRTE ,这与先前的工作一致。类似地,大量任务利用 QQP ,例如SICKIMDBRTECBMRPCSST-2。最重要的是,像 CBRTEMRPC 这样的小数据集任务通常强烈依赖在大数据集如 MNLIQQP 上训练好的 adapters

    • 有趣的是,我们发现第 12 层的 adaptersactivations 在多个任务上的分布分散,相比较于 earlier layers 中的 adapters 。潜在的原因是:the last adapters 不是被封装在 frozen pretrained layers 之间,因此可以看作是 prediction head 的扩展。第 12adaptersrepresentations 可能因此不太可比,导致更分散的 activations 。这与 《UNKs Everywhere: Adapting Multilingual Language Models to New Scripts》 的发现一致,通过删除最后一层的 adapters,他们可以显著改善 zero-shot cross-lingual 性能。

      因为第 12 层后面跟随者 prediction head,而 prediction head 不是冻结的。

4.4 同期工作

  1. 在同期的工作中,也提出了其他 parameter efficient fine-tuning 的方法。

    • 《Parameter-efficient transfer learning with diff pruning》 训练稀疏的 "diff" vectors,在 pretrained frozen 的参数向量之上应用。

    • 《Bitfit: Simple parameter-efficient fine-tuning for transformer-based masked language models》 仅微调 pretrained 语言模型的 bias 项,取得了与 full model finetuning 相当的结果。

    • 《Prefix-tuning: Optimizing continuous prompts for generation》 为自然语言生成任务提出 prefix-tuning 。这里,连续的 task-specific vectors 被训练,而模型的其余部分保持冻结。

    这些 parameter-efficient fine-tuning 策略都在特定的参数中封装 task-specific 信息,为多任务的新组合方法(new composition approaches )创造了可能性。

    《AdapterDrop: On the Efficiency of Adapters in Transformers》 分析了 adaptersAdapterFusion 的训练和推理效率。对于 AdapterFusion ,他们发现向 adapters 集合添加更多任务会导致训练的和推理的计算成本线性增加。他们进一步提出了缓解这种开销的方法。

4.5 未来工作

  1. 《AdapterDrop: On the Efficiency of Adapters in Transformers》研究了在 Fusion 训练后裁剪大量的 adapters 。他们的结果显示:删除 less activated adapters 在推理时几乎不会降低性能,而可以显著提高推理速度。他们还提供了一些初步证据,表明在每个 mini-batch 中只用 available adapters 的子集来训练 Fusion 是可能的,这可能使我们能够扩展到大型 adapter 集合;否则在计算上是不可行的。我们相信这种扩展是未来工作的一个有前途的方向。

    《UNKs Everywhere: Adapting Multilingual Language Models to New Scripts》 通过删除最后一层的 adapters,大大改进了 zero-shot cross-lingual 迁移性能。在初步结果中,我们观察到,当未使用最后一层的 adapters时,AdapterFusion 呈现了相似的趋势。我们将在未来的工作中进一步研究这一点。

    这里本质上也是进行了 adapter drop

五、AdapterDrop[2020]

论文:《AdapterDrop: On the Efficiency of Adapters in Transformers》

  1. 虽然迁移学习已经成为解决 NLP 任务的首选方法,transformer-based models 出了名的深度需要数百万甚至数十亿个参数。这导致了推理缓慢、以及需要大量的存储。

    最近,至少出现了三条独立的研究途径来解决这些缺点:

    • (1) :更小、更快的模型,这些模型要么被蒸馏、要么从头开始训练。

    • (2):被健壮地训练的transformers ,其中在运行时可以减小模型深度,从而动态地减少推理时间。

    • (3)Adapters ,它们没有 fully fine-tuning 模型,而是在每一层只训练一组新引入的权重,从而在任务之间共享大多数参数。Adapters 在机器翻译、跨语言迁移、社区问答、以及任务组合(task composition )用于迁移学习等等方面表现良好。尽管 adapters 最近很流行,但 adapters 的研究更侧重于参数效率(parameter efficiency )而不是计算效率。

    我们弥补了这个空白,建立了两种 adapter 架构在训练和推理时的计算效率。通过将上述三个方向的思想结合起来,我们研究了不同的策略来进一步提高 adapter-based 的模型的效率。我们的策略依靠在训练和推理时从 transformers 中删除 adapters ,产生的模型可以根据可用的计算资源动态地调整。我们的方法不依赖于具体的 pre-trained transformer model (例如 base, large ),因此可以广泛应用。

    贡献:

    • 首先,我们确立了与 full fine-tuning 相比,adapters 的计算效率(computational efficiency )。我们表明,与通常的 full model fine-tuning 相比,adapterstraining steps 可以快 60% ,而推理时慢 4-6% 。因此,对于那些希望更快训练时间、或需要大量超参数调优的研究人员来说,adapters 是一个合适的选择。

    • 其次,我们提出了 AdapterDrop ,这是一种高效地、动态地删除 adapters 而对任务性能影响最小的方法。我们表明,从较低的 transformer layers 删除 adapters 可以显著提高多任务设置下的推理速度。例如,当同时对 8 个任务进行推理时,从 first five layers 删除 adaptersAdapterDrop 比原来快 39% 。这对于这类模型的研究人员来说很有价值:需要对每个输入进行多次预测的模型。

    • 最后,我们从 AdapterFusion 中的 adapter compositions 中裁剪 adapters,并在迁移学习后只保留最重要的 adapters,从而实现更快推理的同时完全保持任务性能。这适用于 labeled training data 稀少的设置,其中 AdapterFusion 可以相对于标准的单任务模型取得很大的改进。

5.1 Adapters 的效率

  1. 首先,我们在没有 AdapterDrop 的情况下确立了 adapters 的计算效率。如 Figure 1 所示,与 fully fine-tuning 模型相比, fine-tuning adapters 时,前向通路(forward pass )和反向通路(backward pass )存在显著差异。在前向通路中,adapters 因额外组件而增加了复杂性;然而,在反向通路中,不必向整个模型反向传播。

    我们使用 AdapterHub.ml 框架(《AdapterHub: A Framework for Adapting Transformers》)比较了 full model fine-tuning《Parameter-Efficient Transfer Learning for NLP》 以及 《AdapterFusion: Non-Destructive Task Composition for Transfer Learning》adapter 架构(如 Figure 1 所示)的训练速度和推理速度。我们在 BERT basetransformer 配置下进行测量,并在不同 GPU 上进行验证。

    我们在 Table 1 中给出了常见实验配置对应的测量结果。

    • 训练:与 full model fine-tuning 相比,adapters 可以快很多,在某些配置下快 60% 。就训练效率而言,这两种 adapter 架构差异很小:由于其更简单的架构,AdapterFusiontraining steps 略快。差异的幅度取决于输入大小;可用的 CUDA cores 是主要 bottleneck 。我们没有观察到 adaptersfull fine-tuning 之间在 training convergence 方面的明显差异。

      训练加速可以归因于梯度计算的开销减小。使用 adapters 时大多数参数被冻结,不必向第一个组件反向传播(见 Figure 1 )。

    • 推理:这两种 adapter 架构与 fully fine-tuned models 一样快,速度为 94-96% ,这取决于输入大小。这在大规模部署时会产生相当大的影响。

    这两种 adapter 架构指的是:

    • 《Parameter-Efficient Transfer Learning for NLP》 中的 adapter,每个 Transformer Layer 包含两个 adapters,一个位于 attention layer 之后、一个位于 feed forward layer 之后。即 Table 1 中的 Houlsby

    • 《AdapterFusion: Non-Destructive Task Composition for Transfer Learning》 中的 adapter,每个 Transformer Layer 包含一个 adapters,位于 feed forward layer 之后。即 Table 1 中的 Pfeiffer

5.2 AdapterDrop

  1. 我们已经确定 adapters 在训练时间方面更有效率,但是在合理的和高效的模型方面仍有持续的需求。反向传播尽可能少的 layers 将进一步提高 training adapters 的效率。在同时进行多个任务的推理时(即,当对同一输入执行多个独立的分类时),可以通过在较低的 transformer layers 共享 representations 来提高推理的效率。我们在 Table 2 中证明了这一点,发现每共享一层,模型会快8.4%16 个任务)。

  2. 基于这些观察结果,我们提出了 AdapterDrop :动态地从较低的 transformer layers 中移除 adapters (如 Figure 1 所示)。AdapterDrop 类似于删除整个 transformer layers《Reducing Transformer Depth on Deman dwith Structured Dropout》),但是专门针对 adapter settings ,其中 lower layers 通常对任务性能影响很小( 《Parameter-Efficient Transfer Learning for NLP》 )。

    我们研究了 AdapterDrop 的两种训练方法:

    • (1) Specialized AdapterDrop :删除 first n transformer layersadapters ,其中 n 在训练期间固定。这为每个可能的 n 产生单独的模型。

    • (2) Robust AdapterDrop :对每个 training batch[0, 11] 中随机采样整数 n 。这产生一个适用于不同 dropped layers 数量的稳健模型。

      这类似于 dropout 的思想。但是区别在于:AdapterDrop 在推断期间也丢弃了一些 layer;而 dropout 在推断期间保留所有的神经元。

      读者猜测原理:这类似于数据增强,在训练期间,保留下来的层见识了各种各样的输入分布(如,第一层被删除、前两层被删除、前三层被删除),从而增加了鲁棒性。而推断期间,假设第一层被删除了,那么这种输入分布在训练期间见过,因此可以很好地执行预测。

    我们使用 RoBERTa baseGLUE benchmark 的开发集上研究 AdapterDrop 的有效性。Figure 2 显示:

    • 即使删除了几层,Specialized AdapterDrop 也能保持良好的结果。删除 first five layers 时,Specialized AdapterDrop 保持着原始性能的 97.1%8GLUE任务的平均值,参见 Table 8 )。

    • 此外,Robust AdapterDrop 取得了可比的结果,删除 5 层时,它保持了原始性能的 95.4% (平均值)。与Specialized AdapterDrop 相比,Robust AdapterDrop 的优势在于Robust AdapterDrop 可以动态地缩放。根据当前可用的计算资源,Robust AdapterDrop 可以 activate/deactivate 具有相同参数集合的层,而Specialized AdapterDrop 需要针对每个设置显式地训练。

    效率收益可以很大。同时执行多个任务的推理时,我们测量了删除 5 层时推理加速 21-42% ,取决于同时任务的数量(Table 2 )。我们Robust AdapterDrop 的训练也更有效率,training steps 加速了 26% (每移除一层加速 4.7%,平均移除 5.5 adapters 加速 25% )。

5.3 AdapterFusion 的效率

  1. AdapterFusion 利用来自不同任务的多个 adapters 的知识,并学习这些 adapters’ output representations 的最佳组合,从而用于单个目标任务(如 Figure 3 所示)。AdapterFusion(AF) 在训练数据较少的情况下尤其有用,在这种情况下学习到适当的模型很困难。尽管它很有效,但 AdapterFusion 在计算上代价高昂,因为所有包含的 adapters 都是串行通过的(我们也尝试了并行通过,发现没有收益)。Table 3 显示,对于训练和推理来说,差异可能很大。例如,与 fully fine-tuned model 相比,包含 8adaptersAdapterFusion 在训练时间上慢约 47% 、推理时间慢约 62%

    多个 Adapter Layer 之间是并行的,然后它们的输出馈入到 AdapterFusion Layer 。因此,这里的串行指的是 Adapter LayerAdapterFusion Layer 之间。

5.4 AdapterDrop for AdapterFusion

  1. 改进 AdapterFusion 的效率尤其是在推理时间方面存在相当大的潜力。我们通过两种 AdapterDropAdapterFusion 变体来解决这个问题:删除整个AdapterFusion layers、从 AdapterFusion 模型中修剪最不重要的 adapters

  2. 删除 AdapterFusion Layers:我们融合了所有 8GLUE 任务的 adapters ,并观察到 AdapterFusionRTECoLA 上的最大收益。我们另外用 AdapterDrop 章节中的相同过程训练了 Robust AdapterFusion 模型。我们研究了在测试时可以从多少个较低层删除 AdapterFusion ,同时仍然优于对应的 single-task adapter (without AdapterDrop)

    Figure 4 表明:

    • 在删除前 5 层的 AdapterFusion 之前,RTE 上的 AdapterFusion 性能优于 single-task adapter 。这提高了推理效率 26%

    • CoLA 上,我们观察到不同的趋势。删除第一层的 AdapterFusion 导致性能下降更明显,达到比 single-task adapter 更低的任务性能。这与最近的工作一致,表明某些语言任务严重依赖于第一层的信息(《Probing Pretrained Language Models for Lexical Semantics》)。

    我们特意强调 AdapterDrop 可能不适用于所有任务。然而,Figure 13 显示 CoLA 代表了最极端的情况。尽管如此,我们的结果表明,当删除 AdapterFusion layers 时,研究人员需要谨慎,因为可能存在相当大的性能/效率权衡。

  3. AdapterFusion PruningAdapterFusion 的推理效率很大程度上取决于被融合的 adapters 数量,见 Table 3 。因此,通过从训练好的 AdapterFusion 模型中裁剪 adapters (如 Figure 3 所示),我们可以实现效率改进。我们的假设是,如果 adapters 通常不被 AdapterFusion 激活,也就是说它们对 output representations 贡献不大,那么我们可以安全地删除这些 adapters。在每个 fusion layer 中,我们使用相应 AdapterFusion 训练集的所有实例记录 adapters 的平均激活来表示 adapters 的相对重要性。然后我们删除平均激活值最低的 adapters

    Figure 5 表明,我们可以删除 AdapterFusion 中的大多数 adapters,而不影响任务性能。仅保留两个 adapters,我们达到了包含 8adaptersfull AdapterFusion models 可比的结果,并提高了推理速度 68%

    因此,我们建议在实践中部署这些模型之前执行 AdaperFusion pruning 。这是一种简单而有效的技术,即使在保持性能完全不变的目标下也可以实现效率改进。

六、MAD-X[2020]

论文:《MAD-X: An Adapter-based Framework for Multi-task Cross-lingual Transfer》

  1. 当前的 deep pretrained multilingual models 在跨语言迁移上取得了 SOTA 的结果,但没有足够的能力来表示所有语言。这一点的证据是 vocabulary size 的重要性(《On the cross-lingual transferability of monolingual representations》)和多语言性的诅咒(the curse of multilinguality )(《Unsupervised cross-lingual representation learning at scale》),这是语言覆盖度(language coverage)和模型容量(model capacity )之间的权衡。扩大模型规模以覆盖世界上所有 7000 多种语言是不可行的。与此同时,SOTA 的多语言模型的有限容量也是一个问题,即使是在高资源语言(high-resource languages )上,因为它们的表现不如相应的单语言变体;并且在 pretrained 模型所覆盖的更低资源语言上的性能进一步下降。而且,模型容量的问题在那些完全没有被包含在训练数据中的语言上可能最为严重,pretrained 模型在这些语言上的表现很差(《Parameter space factorization for zero-shot learning across tasks and languages》)。

    在本文中,我们提出了 Multiple ADapters for Cross-lingual transfer: MAD-X,这是一个模块化的框架,通过很少的额外参数来解决限制 pretrained 多语言模型的容量问题。在 SOTA 的多语言模型的基础上,我们通过在模型的权重之间插入 adapters (小的 bottleneck layers )从而来学习模块化的 language- and task-specific representations,从而适配模型到任意任务和任意语言。

    具体而言,使用最近的 efficient adapter 变体(《AdapterFusion: Non-destructive task composition for transfer learning》《AdapterDrop: On the Efficiency of Adapters in Transformers》),我们训练:

    • 1) :通过在 unlabelled 的目标语言数据上进行 masked language modelling: MLM 来获得 language-specific adapter modules

    • 2):通过在任意源语言的 labelled 数据上优化目标任务来获得 task-specific adapter models

    Figure 1 所示,task adapterslanguage adapters被堆叠,通过在推理时替换为 target language adapter ,这使我们能够适配 pretrained multilingual model ,甚至适配到那些没有被包含在模型的 (pre)training 数据中的语言。

    为了处理 shared multilingual vocabularytarget language vocabulary 之间的不匹配,我们提出了 invertible adapters ,这是一种非常适合在另一种语言上进行 MLM 的新型 adapter 。我们的框架超越了先前在跨语言迁移中使用 adapters 的工作(《Simple, scalable adaptation for neural machine translation》《On the cross-lingual transferability of monolingual representations》),可以适配到预训练过程中未见过的语言,而无需学习昂贵的 language-specific token-level embeddings

    我们在标准的 WikiANN NER 数据集、以及用于因果常识推理的 XCOPA数据集上比较 MAD-XSOTA 的跨语言迁移方法,其中包含高资源语言、低资源语言、以及 pretrained 模型未见过的语言等具有代表性的各种语言类型。MAD-X 在见过的和未见过的高资源语言、见过的和未见过的低资源语言上都优于 baseline 模型。在有挑战性的 XQuAD 问答数据集的高资源语言上,我们的框架在参数效率更高的情况下取得了有竞争力的性能。

    我们工作的另一贡献是一种简单的方法来适配 pretrained multilingual model 到新的语言,这种方法优于标准设置(仅从 labelled 的源语言数据迁移一个模型)。

    总之,我们的贡献如下:

    • 1) :我们提出了 MAD-X ,一个模块化框架,可以减轻多语言性的诅咒(curse of multilinguality ),并将多语言模型适配到任意任务和任意语言。代码和 adapter weights 都集成到了 AdapterHub.ml repository 中。

    • 2) :我们提出了可逆适配器(invertible adapters ),一种新的 adapter 变体,用于跨语言的 MLM

    • 3) :我们证明了 MAD-X 在各种语言和任务上的强大性能和鲁棒性。

    • 4) :我们提出了一种简单而更有效的 baseline 方法,从而适配一个 pretrained multilingual model 到目标语言。

    • 5) :我们研究了当前方法在 multilingual pretraining 过程中未见过的语言上的行为。

  2. 相关工作:

    • Cross-lingual Representations:最近跨语言 NLP 研究越来越注重学习通用的 cross-lingual representations ,这些representations 可以应用于许多任务,首先在 word level 上、后来是 full-sentence level 上。像 multilingual BERT等最近的模型,人们发现当它们迁移到其他语言时表现出惊人的好,当前 SOTA 的模型 XLM-RGLUE benchmark 中与单语言模型的性能相当。

      然而,最近的研究(《XTREME: A massively multilingual multitask benchmark for evaluating cross-lingual generalization》)表明,像 XLM-R 这样的 SOTA 模型在许多 language pairs 之间的跨语言迁移中表现仍然很差。这种糟糕表现背后的主要原因是:当前模型在 vocabulary 空间和 representation 空间中表示所有语言的能力不足(《Simple, scalable adaptation for neural machine translation》《On the cross-lingual transferability of monolingual representations》《Unsupervised cross-lingual representation learning at scale》)。

    • Adaptersadapters 模块最初在计算机视觉任务中被研究,其中它们被限制为卷积操作,并用于将模型适配到多个领域(《Learning multiple visual domains with residual adapters》《Efficient parametrization of multidomain deep neural networks》)。在自然语言处理中,adapters 主要被用来对 base pretrained Transformer model 进行 parameter-efficient 的和快速的微调到新的任务和新的领域,同时避免灾难性遗忘。

      • 《Simple, scalable adaptation for neural machine translation》 还使用 adapters 来微调和恢复多语言机器翻译模型在高资源语言上的性能,但他们的方法无法应用于预训练过程中未见过的语言。

      • 《On the cross-lingual transferability of monolingual representations》 采用 adapterspretrained 的单语言模型迁移到未见的语言,但依赖于学习新的 token-level embeddings,这不适合大量语言。

      • 《AdapterFusion: Non-destructive task composition for transfer learning》 结合多个 adapters 中的信息,从而实现更稳健的单语言的多个任务之间的迁移学习。

      • 在他们同期的工作中,《UDapter: Language Adaptation for Truly Universal Dependency Parsing》language embeddings 中生成 adapter parameters ,用于多语言依存句法分析。

6.1 Multilingual Model Adaptation for Cross-lingual Transfer

  1. Standard Transfer Setup:使用像 multilingual BERTXLM-R 这样的 SOTA 大型多语言模型进行跨语言迁移的标准方法是(《XTREME: A massively multilingual multitask benchmark for evaluating cross-lingual generalization》):

    • 首先,在源语言下游任务的标注数据上微调模型。

    • 然后,直接应用微调后的模型在目标语言上进行推理。

    这种设置的缺点是 multilingual initialisation 需要平衡许多语言。因此,它不适合在推理时擅长特定语言。我们提出了一种简单的方法来改善这个问题,允许模型额外地适配特定的目标语言。

  2. Target Language Adaptation:与在 task domain 上微调单语言模型类似(《Universal Language Model Fine-tuning for Text Classification》),我们建议在源语言中的 tasks-pecific fine-tuning之前,通过在目标语言的 unlabelled 数据上进MLM 来微调 pretrained multilingual model 。这种方法的缺点是:它不再允许我们在多个目标语言上评估同一模型,因为它会使模型偏向于 specific target language

    然而,如果我们只关心特定的(即固定的)目标语言中的性能,那么这种方法可能更可取。我们发现 target language adaptation 相对于标准设置可以提高跨语言的迁移性能。换句话说,它不会导致对 pretrained 模型中已有的多语言知识的灾难性遗忘,这种多语言知识使模型能够迁移到其他语言。事实上,在我们的实验中,明确地试图防止灾难性遗忘的方法(《Neural Domain Adaptation for Biomedical Question Answering》)导致性能降低。

    然而,所提出的简单的 adaptation 方法继承了 pretrained multilingual modelstandard transfer setup的基本局限性:模型的有限容量阻碍了对低资源和未见语言的有效适配。此外,微调整个模型不适合大量任务或大量语言。

6.2 Adapters for Cross-lingual Transfer

  1. 我们的 MAD-X 框架解决了这些缺陷,可以用于有效地将现有的 pretrained multilingual model 适配到其他语言。该框架包含三种类型的 adapters :语言的 adapters 、任务的 adapters 、可逆的 adapters

    与先前的工作(《Learning multiple visual domainswith residual adapters》《Parameter-efficient transfer learning for NLP》)一样, adapters 是在保持 pretrained multilingual model 参数固定的情况下训练的。因此,我们的框架可以以模块化的和参数高效的方式学习 language- and task-specific transformations。我们在 Figure 1 中展示了整个框架,作为标准 Transformer model 的一部,并描述了三种 adapter 类型。

6.2.1 Language Adapters

  1. 为了学习 language-specific transformations,我们采用了 《AdapterFusion: Non-destructive task composition for transfer learning》 最近提出的 efficient adapter 架构。遵从 《Parameter-efficient transfer learning for NLP》 的做法,他们将 adapter 的内部定义为简单的 down-projectionup-projection 、以及 residual connection 的组合。在第 l 层,language adapter LAldown-projection DRh×dReLU activation 、以及 up-projection URd×h 组成,其中 hTransformer 模型的隐层维度,dadapter 的维度:

    (23)LAl(hl,rl)=UlLA(ReLU(DlLA(hl)))+rl

    其中:hlrl 分别是第 l 层的 Transformer layerhidden stateresidual

    residual connection rlTransformerfeed-forward layer 的输出,而 hl 是后续 layer normalisation 的输出(见 Figure 1 )。即,hl=LayerNorm(rl)

  2. 我们在一种语言的 unlabelled 数据上通过 MLM 来训练 language adapters,这有助于它们学习使得 pretrained multilingual model 更适合 specific language 的变换。在具有 labelled 数据的 task-specific training 期间,我们使用相应源语言的 language adapter ,并保持其固定。

    为了 zero-shot 另一种语言,我们简单地用 target language adapter 替换 source language adapter 。例如,如 Figure 1 所示,在推理时,我们可以简单地用克丘亚语训练的 language-specific adapter 来替换英语训练的 language-specific adapter 。然而,这需要底层的多语言模型在下游任务的微调期间不发生改变。为了确保这一点,我们另外引入了 task adapters 来捕获 task-specific knowledge

6.2.2 Task Adapters

  1. 在第 l 层,task adapters TAl 具有与 language adapters 相同的架构。task adapters 堆叠在 language adapters之上,因此它接收 language adapter LAl 的输出、以及 residual rl 作为它的输入:

    (24)TAl(hl,rl)=UlTA(ReLU(DlTA(LAl)))+rl

    然后 task adapter 的输出被传递给 layer normalisation 组件。task adapters 是下游任务(例如命名实体识别)训练时唯一被更新的参数,其目的是捕获 task-specific 的、但跨语言通用的知识。

    注意:有些知识并非跨语言的,例如撰写中文对联任务,这个任务的知识并不是跨语言通用的。

6.2.3 Invertible Adapters

  1. pretrained multilingual models"parameter budget" 的大部分用于 shared multilingual vocabularytoken embeddings。尽管如此,它们在低资源语言上的表现不佳(《On the cross-lingual transferability of monolingual representations》《Unsupervised cross-lingual representation learning at scale》),对于模型训练数据未涵盖的语言来说,表现会更差。

    为了缓解 multilingual vocabularytarget language vocabulary 之间的不匹配,我们提出了 invertible adapters 。它们堆叠在 embedding layer 之上,而它们各自的逆运算则位于 output embedding layer 之前(见 Figure 1 )。由于在 multi-lingual pretrained models中,input embeddingnsoutput embeddings 是绑定的,可逆性允许我们利用相同的参数集合来适配 input representationsoutput representations 。这一点非常关键,因为 output embeddings 可能会过拟合于预训练任务,其中 output embeddingstask-specific fine-tuning 期间会被丢弃。

    为了确保这种可逆性,我们采用了Non-linear Independent Component Estimation NICE《NICE: non-linear independent components estimation》)。 NICE 通过一组耦合操作使任意非线性函数可逆。 对于 invertible adapter ,我们将第 itokeninput embedding 向量 eiRh 拆分为两个维度相等的向量 e1,i,e2,iRh/2。对于两个任意的非线性函数 F()G()invertible adapter Ainv() 的前向传递为:

    (25)o1=F(e2)+e1;o2=G(o1)+e2o=[o1,o2]

    其中:oAinv() 的输出;[;] 表示两个向量的拼接。

    相应地,adapter 的逆向传递,即 Ainv1() 的计算如下:

    (26)e2=o2G(o1);e1=o1F(e2)e=[e1,e2]

    其中:eAinv1() 的输出。

    对于非线性变换 F()G() ,我们使用与 language adapterstask adapters 类似的 down-projectionsup-projections

    (27)F(x)=UF(ReLU(DF(x)));G(x)=UG(ReLU(DG(x)))

    其中: DF,DGRh4×h2UF,UGRh2×h4x 是占位符(可以替换为 e1,e2,o1,o2)。我们在 Figure 2 中说明了 invertible adapter (左图)及其 inverse (右图)的完整架构。

    为什么要用这种可逆架构?可否采用其它架构?论文并未回答这个问题,也没有做相应的消融实验。

  2. invertible adapter 的功能与 language adapter 类似,但旨在捕获 token-level language-specific transformations。 因此,它与language adapters 一起使用 specific languageunlabelled 数据通过 MLM 进行训练。在 task-specific training 期间,我们使用源语言的固定的 invertible adapter,并在 zero-shot 迁移期间将其替换为目标语言的 invertible adapter。 重要的是,与 《On the cross-lingual transferability of monolingual representations》 为每个新语言学习独立的 token embeddings 的方法相比,我们的 invertible adapters 的参数效率要高得多。

    invertible adapters 是为了解决跨语言的 token-level embedding 问题。它比 language adapters 更加基础。

    根据实验部分的结果,invertible adapters 对于 NER 的效果可以增加 0.6 分(从 37.638.2 );在问答任务上可以增加 3.3 F1(从 67.070.3 )。

  3. 一个范例:我们简要介绍 Figure 1 的示例。假设英语(En )是源语言、克丘亚语(Qu )是目标语言。

    • 我们首先用 MLM 来预训练 invertible adapters AInvEnAInvQulanguage adapters ALangEnALangQu,其中 MLMlast layeroutput 被传入 AInvEn1

    • 然后,我们在英语 NER 训练集上训练 NER 任务的 task adapter ATaskNER。在训练期间,embeddings 被传入 AInvEn 。 在模型的每一层,数据首先被传入固定的 ALangEn ,然后进入 NER adapter ATaskNER

      在训练 task adapters 期间,固定 invertible adapterslanguage adapters

    • 对于 zero-shot inference ,用克丘亚语的对应部分 AInvQuALangQu 替换英语的 invertible adapterslanguage adapters AInvEnALangEn ,同时数据仍然传入 NER adapter ATaskNER

6.3 实验

  1. 数据:我们在三项任务上进行实验:命名实体识别(named entity recognition: NER )、问答(question answering: QA )、因果常识推理(causal commonsense reasoning: CCR )。

    • 命名实体识别:我们使用 WikiANN 数据集, 《Massively multilingual transfer for NER》 将其划分为训练集、开发集和测试集。

    • 问答:我们采用 XQuAD 数据集,这是 SQuAD 的跨语言版本。

    • 因果常识推理:我们采用 XCOPA,这是 COPA 的跨语言版本。

  2. 语言:

    • partitioned WikiANN 版本覆盖了 176 种语言。为了在不同的评估条件下与 SOTA 的跨语言方法进行全面比较,我们基于以下方面选择语言:

      • a) :数据可用性的方差(通过选择不同范围的 Wikipedia 内的语言)。

      • b) :它们在 pretrained multilingual models 中的出现情况。更准确地说,特定语言的数据是否包含在multilingual BERTXLM-R 的预训练数据中。

      • c) :语言类型的多样性,从而确保不同语言类型和语族都被覆盖到。

      总体而言,我们的语言集合可以区分为四类:高资源语言、被当前主流的多语言模型(即 multilingual BERTXLM-R )覆盖的低资源语言、低资源语言、真正的低资源语言(未被多语言模型覆盖)。我们从不同的语系为每个类别选择了 4 种语言。我们在 Table 1 中强调了来自 11 个语系的 16 种语言的特性。

      我们在所有可能的 language pairs 上进行评估(即笛卡尔积),使用每种语言作为源语言,并以其他每种语言(包括自身语言)作为目标语言。这包括标准的 zero-shot cross-lingual transfer setting《XTREME: A massively multi-lingual multitask benchmark for evaluating cross-lingual generalization》)和标准的 monolingual in-language setting

    • 对于 CCRQA ,我们分别在 XCOPAXQuAD 提供的 12 种语言和 11 种语言上进行评估,其中英语作为源语言。XCOPA 包含语言类型各异的语言,包括两个我们的 main model 未见过的语言(海地克里奥尔语和克丘亚语)。XQuAD 包含的语言语言类型相对不那么多样,主要是高资源语言。

  3. Baselines

    • XLM-R :我们主要比较的模型是 XLM-R ,它目前是跨语言迁移的 SOTA 模型。它是一个 Transformer 模型,针对 100 种语言在大型的清理过的 Common Crawl 语料库上预训练。为了效率,我们在大多数实验中使用 XLM-R Base 作为 basis 。但是,我们注意到 MAD-X 框架背后的主要思想与任何特定的 pretrained model 无关,该框架可以轻松适配到其他 pretrained multilingual models (如 multilingual BERT )。首先,我们在 standard setting 下与 XLM-R 进行比较,在该设置下,整个模型在源语言任务的 labelled 数据上进行微调。

    • XLM-R_Base MLM-SRCXLM-R_Base MLM-TRG :如前所述,我们提出了 target language adaptation ,这是一种简单的方法,用于适配 pretrained multilingual models,以便在下游任务上获得更好的跨语言泛化能力。

      作为安全检查(sanity check ),我们还与 source language adaptation 进行了比较;我们预期它会提高 in-language 性能,但不会对迁移学习有帮助。具体来说,我们在 task-specific fine-tuning 之前,在源语言(XLM-R_Base MLM-SRC )和目标语言(XLM-R_Base MLM-TRG )的 unlabelled 数据上利用 MLM 来微调 XLM-R

  4. 实验设置:

    • 对于 MAD-X 框架,除非另有说明,否则我们依赖 XLM-R Base 架构;我们评估 full MAD-XMAD-X without invertible adapters–INV )、以及 MAD-X without language and invertible adapters–LAD –INV )。我们在所有实验中使用 Transformers 库。

    • 对于在 unlabelled 数据上通过 MLM 进行微调,我们在对应语言的 Wikipedia 数据上训练 250k步,batch size = 64 ,学习率分别为:XLM-R 采用 5e-5-SRC-TRG 变体也是如此)、adapters 采用1e-4

    • 我们在高资源语言和低资源语言的 NER 数据上分别以 batch size = 16batch size = 8 训练 100 epoch ,学习率分别为:XLM-R 采用 5e-5adapters 采用1e-4

      我们根据验证性能选择最佳 checkpoint 用于评估。遵从 《AdapterFusion: Non-destructive task composition for transfer learning》的做法,我们分别以维度 384192(双向共计 384 )、48 来学习 language adaptersinvertible adapterstask adaptersXLM-R Basehidden layer size768 ,所以这些 adapter sizes 对应 2 倍、2 倍和 16 倍的维度缩减。

    • 对于NER ,我们在源语言的 WikiAnn 训练集上进行了五次微调训练;除了每个 source language–target language 组合的 XLM-R_Base MLM-TRG ,我们出于效率目的只进行一次微调训练。

      对于 QA ,我们在英语 SQuAD 训练集上进行了三次微调训练,评估所有XQuAD 目标语言,并报告平均 F1 分数和完全匹配(exact match: EM)分数。

      对于 CCR ,我们在相应的英语训练集上进行了三次微调训练,评估所有 XCOPA 目标语言,并报告准确率。

6.3.1 实验结果

  1. Named Entity Recognition:我们对每个方法在 NER 数据集上将每种源语言到 16 种目标语言的跨语言迁移的结果取平均。我们在 Table 2 中显示了汇总结果。此外,在附录中,我们报告了每个 language pair 上的所有方法的详细结果,以及将英语作为源语言的最常见设置下方法的比较。

    总体而言,我们观察到:

    • 在未见语言上 XLM-R 的表现确实最差(表中的垂直虚线右半部分)。

    • XLM-R_Base MLM-SRC 的表现比 XLM-R 更差,这表明源语言微调对跨语言迁移总体上没有用。

    • 另一方面,平均而言,XLM-R_Base MLM-TRG 是一个比 XLM-R 更强的迁移方法,在 9/16 目标语言上获得了提升。但是,其在低资源语言上的收益似乎会消失。此外,XLM-R_Base MLM-TRG 还有另一个缺点它需要对每种目标语言单独微调完整的大型 pretrained 模型,这可能非常昂贵。

    • MAD-X without language and invertible adapters 在预训练数据中出现的几乎所有语言上的表现与 XLM-R 相当。这反映了在 monolingual setting 中观察到的结果,即 task adapters 能够实现与常规微调类似的性能,同时参数效率更高(《Parameter-efficient transfer learning for NLP》)。然而,对于未见语言,仅使用 task adaptersMAD-X 的性能与 XLM-R 相比显著下降。这表明 task adapters 本身的表达能力不足以弥合当适配未见语言时的差异。

    • MAD-X 中添加 language adapters 可以全面改善其性能,特别是对低资源语言非常有用。language adapters 帮助捕获目标语言的特性,从而提升未见语言的性能。即使对于高资源语言,添加 language-specific parameters 也产生了实质性改进。

    • 最后,invertible adapters 提供了进一步收益,通常优于仅使用 task adapterslanguage adapters :例如,我们观察到在 13/16 目标语言上,MAD-X 优于 MAD-X -INV 。总体而言,full MAD-X 框架相比 XLM-RF1 分数上平均提高了 5 分以上。

    为了展示我们的框架与模型无关,我们还将 XLM-R_LargemBERT 作为 MAD-Xbase model ,结果如 Table 2 所示。即使在更强的 base pretrained models 上,MAD-X 也显示了一致的改进。

    为了更细致地观察 MAD-X 在不同语言中的表现,我们在 Figure 3 中显示了在 standard setting 中,MAD-X 相对于 XLM-R 的相对性能。

    • 我们观察到,从高资源语言向低资源和未见语言(Figure 3 右上象限)迁移时,性能差异最大,这可以说是跨语言迁移最自然的设置。具体而言,当从阿拉伯语(Arabic )迁移时,我们观察到很大的提升;这可能是因为阿拉伯语的文字在 XLM-Rvocabulary 没有很好地被代表。

    • 我们还观察到低资源语言子集的 in-language monolingual setting (对角线)上的强劲表现。这表明 MAD-X 可能有助于弥合多语言模型相比较于单语言模型的认知劣势。

    • 最后,即使目标语言是高资源语言,MAD-X 的表现也很有竞争力。

  2. Causal Commonsense Reasoning:我们在 Table 3 中显示了在 XCOPA 上从英语向每个目标语言迁移的结果。为简洁起见,我们仅显示 《XCOPA: A Multilingual Dataset for Causal Commonsense Reasoning》 的最佳微调设置的结果,首先在 SIQA 上微调,然后在英语 COPA 训练集上微调;其他可能的设置的报告在附录中。

    • target language adaptation 优于 XLM-R_Base ,而 MAD-X_Base 取得了最高分数。

    • MAD-X_Base 特别在两个未见语言,海地克里奥尔语(ht)和克丘亚语(qu),上显示出收益。MAD-X_Base 在其他语言上的表现也普遍具有竞争力或更好。

  3. 问答:在 XQuAD 上,当从英语向每个目标语言迁移时,结果如 Table 4 所示。主要发现是:MAD-X 取得了与 XLM-R baseline 相似的性能。与以前一样,invertible adapters 通常可以改善性能,target language adaptation优于 baseline settingn 。我们注意到,XQuAD 中包含的所有语言都可以视为高资源语言,每个语言都有超过 100k 维基百科文章。相应的设置可以在 Figure 3 左上象限中找到,其相对差异也可比较。

  4. 所有这些结果表明,尽管 MAD-X 在迁移到未见的语言和低资源语言方面表现出色,但即使对于高资源语言和更具挑战性的任务,它也能取得有竞争力的表现。这些评估还提示了 adapter-based MAD-X 方法的模块性,它有望快速适配到更多任务: 我们在NERCCRQA 任务中,对英语和中文等语言使用完全相同的 language-specific adapters

6.3.2 更深入的分析

  1. Impact of Invertible Adapters:在 NER 数据集上每个 language–target language pair ,我们还分析了MAD-X with invertible adaptersMAD-X without invertible adapters 的相对性能差异(见附录 D )。invertible adapters 提高了许多 transfer pairs 的性能,特别是在向低资源语言迁移时。只有以一个低资源语言作为源语言(毛利语)时,性能始终较低,可能是由于数据的 variation

  2. Sample EfficiencyMAD-X 的主要 adaptation bottleneck 是训练 language adaptersinvertible adapters 。但是,由于 MAD-X 的模块化,一旦训练好,这些 adapters 就可以被直接重用(即 “即插即用”),可以跨不同任务。为了估计 adapter training 的样本效率,我们在几种低资源目标语言上(从英语作为源语言迁移时)衡量 NER 性能与训练迭代次数的关系。结果如 Figure 4 所示。结果显示,在 20k 次训练迭代中,我们就可以对低资源语言获得较强的性能,而更长的训练只提供了较小的性能提升。

    此外,在 Table 5 中,对于每个 MAD-X 变体,我们给出了为每个语言向原始 XLM-R Base 模型添加的参数量。对于NERfull MAD-X 模型为每个语言添加了额外的 8.25M adapter parameters ,只占原始模型的 3.05%

七、AdapterHub[2020]

论文:《AdapterHub: A Framework for Adapting Transformers》

  1. 最近的自然语言处理进展利用了 transformer-based 的语言模型,在大量文本数据上进行预训练。这些模型在目标任务上进行微调,并在大多数自然语言理解任务上达到 SOTA 性能。他们的性能已经显示出与模型大小成正比(《Scaling Laws for Neural Language Models》),最近的模型已经达到成百上千亿参数(T5, GPT-3 )。虽然在目标任务数据上微调大型 pre-trained 模型可以相当高效地完成(《Universal Language Model Fine-tuning for Text Classification》),但训练它们以适应多个任务和共享训练好的模型通常是难以进行的。这阻止了对更模块化的架构、任务组合(task composition )、以及向大型模型注入 bias 和外部信息(例如世界的或语言的知识)的研究。

    Adapters《Parameter-efficient transfer learning for NLP》)被引入从而作为一种替代的轻量级微调策略,在大多数任务上实现了与 full fine-tuning 媲美的性能(《To tune or not to tune? adapting pretrained representations to diverse tasks》)。它们由位于每层 transformer layer 中一小组额外的新初始化的权重组成。然后在微调期间训练这些权重,同时保持大型模型的 pre-trained 参数固定/冻结。这使得在任务之间有效的参数共享,通过为同一模型训练许多 task-specificlanguage-specificadapters,其中这些 adapters 可以事后交换和组合。Adapters 最近在多任务和跨语言迁移学习中取得了强劲的结果(《AdapterFusion: Non-destructive task composition for transfer learning》《MAD-X: An Adapter-based Framework for Multi-task Cross-lingual Transfer》)。

    但是,重用和共享 adapters 并不简单直观。Adapters 很少单独发布;它们的架构在细微却重要的方面有所不同,并且取决于模型、任务和语言。为了减轻这些问题并促进各种设置下的 transfer learning with adapters ,我们提出了 AdapterHub ,一个支持无缝训练和共享 adapters 的框架。

    AdapterHub 建立在广受欢迎的 HuggingFace transformers 框架之上,它提供了对 SOTApre-trained 语言模型的访问。我们用 adapter 模块增强 transformers ,这些 adapter 模块可以用最小的代码编辑从而与现有的 SOTA 模型组合。我们还提供了一个网站,可以快速无缝地上传、下载、以及共享 pre-trained adaptersAdapterHub 可在线访问:https://adapterhub.ml

    AdapterHub 首次使 NLP 研究人员和从业者可以轻松高效地共享和获得已针对特定任务、特定领域、特定语言进行训练的模型。这开启了比以前更高的可能性来建立和组合来自更多源的信息,并使如下的研究更具可访问性:中间任务训练、从许多任务组合信息、为非常低资源语言训练模型。

    贡献:

    • 1) :我们提出了一个易于使用和可扩展的 adapter trainingadapter sharing 框架,用于 transformer-based 模型,如 BERTRoBERTaXLM(-R) 等。

    • 2) :我们将其并入 HuggingFace transformers 框架,只需两行额外代码就可以用现有脚本训练 adapter

    • 3) :我们的框架自动提取 adapter 权重,将其与 pre-trained transformer 模型分开存储,只需要 1Mb 的存储空间。

    • 4) :我们提供了一个开源框架和网站,允许社区上传他们的 adapter 权重,仅需一行额外代码就可以轻松访问。

    • 5):我们开箱即用地融合了 adapter composition 以及 adapter stacking ,为未来的各种扩展铺平了道路。

7.1 Adapters

  1. 尽管迁移学习的主要方法是对 pre-trained 模型的所有权重进行微调,但 adapter 最近被引入作为一种替代方法,在计算机视觉以及 NLP 领域都有应用。

7.1.1 Adapter 架构

  1. Adapter 是在大型 pre-trained 模型的参数 Θ 中引入的、具有少量额外的新参数 Φ 的神经模块。参数 Φ 在目标任务上学习,同时固定 Θ;因此 Φ 学会在 pretrained 模型的中间层中编码 task-specific representations 。当前的工作主要集中在为每个任务分别训练 adapters ,这使得并行训练 adapters、然后组合训练好的 adapters 成为可能。

    NLP 中,adapters 主要在 deep transformer-based 中使用。在每个 transformer layer l 中引入一组 adapter 参数 Φlpre-trained 模型中 adapter 参数 Φ 的放置位置和架构是困难的,可能会影响其效果:《Parameter-efficient transfer learning for NLP》在不同的 adapter 架构上进行了实验,通过实证验证了 two-layer feed-forward neural network with a bottleneck的效果良好。虽然这种 down-projectionup-projection在很大程度上已经达成共识,但每个 transformer block 内的 adapters 的实际放置位置、以及引入新的 LayerNorm 在文献中各不相同。为了支持文献中标准的 adapter 架构、以及实现轻松的可扩展性,AdapterHub 提供了一个配置文件,其中可以动态地定义 architecture settings 。我们在 Figure 3 中说明了不同的配置可能性,并在接下来的章节中对其进行了更详细的描述。

7.1.2 为什么使用Adapters?

  1. fully finetuning 模型相比,Adapters 提供了许多优势,如可扩展性、模块化、以及 composition 。我们现在举几个Adapters 的用例来说明它们在实践中的有用性。

  2. Task-specific Layer-wise Representation Learning:在引入 adapters 之前,为了在下游任务上获得 SOTA 性能,需要对整个 pre-trained transformer model 进行微调。已经证明 Adapters 可以与 full fine-tuning 媲美,通过在每一层适配 representations 。我们在 Table 1 中展示了在 GLUE benchmarkfully fine-tuning 模型,以及如下两个不同的 Adapter 架构的结果:

    • 《Parameter-efficient transfer learning for NLP》Figure 3c):在每个 transformer layer 中包含两个 adapters

    • 《AdapterFusion: Non-destructive task composition for transfer learning》Figure 3b):在每个 transformer layer 中包含一个 adapters

    《Parameter-efficient transfer learning for NLP》adapters 具有更大的容量(因为有两个 adapters),但训练和推理速度更慢。我们发现,对于所有设置,三种模型架构在性能方面没有很大差异,证明了训练 adapters 是实现下游任务 SOTA 性能的合适和轻量级替代方案。

  3. Small, Scalable, Shareabletransformer-based 的模型是具有数百万或数十亿个权重、以及大存储需求的非常深的神经网络;例如,XLM-R Large 需要约 2.2Gb 的压缩存储空间。为每个任务独立地 fully fine-tuning 这些模型需要存储每个任务微调后的模型的副本。这阻碍了训练的迭代和并行化,特别是在存储受限的环境中。

    adapters 可以缓解这个问题。根据模型大小和 adapter bottleneck size ,单个任务只需要 0.9Mb 的存储空间。我们在 Table 2 中给出了存储需求。这突出表明每个目标任务所需的参数中有 99% 以上在训练期间保持固定,并可以在所有模型的推理中共享。例如,对于流行的 Bert-Base 模型,其大小为 440Mb ;存储 2fully fine-tuned models 需要与存储 125models with adapters 相同的存储空间,当使用 bottleneck size = 48《AdapterFusion: Non-destructive task composition for transfer learning》adapters 时。此外,在移动设备上执行推理时,可以利用adapters 来节省大量的存储空间,同时支持大量目标任务。另外,由于 adapter 模块的体积很小(在许多情况下不超过图像的文件大小),可以即时添加新任务。

    总的来说,与更新整个模型相比,这些因素使 adapters 成为一个在计算上和生态上更可行的选择。轻松访问 fine-tuned 模型也可以提高可重复性,因为研究人员将能够轻松地重新运行和评估先前工作中训练好的模型。

  4. Modularity of Representationsadapters 学习在指定的参数中对任务进行编码。由于 adaptersencapsulated placement ,其周围的参数是固定的,因此在每个层中,adapters 被迫学习与 transformer 模型的后续层兼容的 output representation 。这种设置允许组件的模块化,以便可以堆叠 adapters 、或者动态地替换它们。在一个最近的例子中, 《MAD-X: An Adapter-based Framework for Multi-task Cross-lingual Transfer》 成功组合了为特定任务和特定语言独立训练的adapters 。这表明 adapters 是模块化的,不同 adaptersoutput representations 是兼容的。

    随着 NLP 任务变得越来越复杂,并且需要那些在 pre-trained 模型中不直接可访问的知识(《Transfer learning in natural language processing》),adapters 将为 NLP 研究人员和从业者提供更多相关信息的源,这些源可以以高效的和模块化的方式轻松组合。

  5. Non-Interfering Composition of Information:在机器学习任务之间共享信息具有悠久的历史(《An Overview of Multi-Task Learning in Deep Neural Networks》)。多任务学习(Multi-task learning: MTL)在任务之间共享一组参数,可以说受到了最多的关注。但是,多任务学习遭受一些问题:

    • 灾难性遗忘等问题,其中早期训练阶段学到的信息在后期被 “覆盖” (《Episodic memory in lifelong language learning》)。

    • 灾难性干扰问题,其中一组任务的性能在添加新任务时发生恶化(《A joint many-task model: Growing a neural network for multiple NLPtasks》)。

    • 不同分布任务的复杂的 task weighting《A hierarchical multi-task approach for learning embeddings from semantic tasks》)。

    adapters 的封装迫使它们学习在任务之间兼容的 output representations 。在不同的下游任务上训练 adapters 时,它们会在指定的参数中存储各自的信息。然后可以组合多个 adapters ,例如 with attention《AdapterFusion: Non-destructive task composition for transfer learning》)。因为各个 adapters 是分别训练的,因此由于数据集大小不均衡而产生的采样启发式规则的必要性不复存在。通过 knowledge extractionknowledge composition 的分离,adapters 缓解了多任务学习的两个最常见陷阱,灾难性遗忘(catastrophic forgetting)和灾难性干扰(catastrophic interference )。

    克服这些问题以及可立即获得训练好的 task-specific adapters,使研究人员和从业者能够利用来自特定任务、特定领域、或特定语言的信息,这些信息通常对特定 application 更相关,而不是更通用的 pretrained 任务。最近的工作已经展示了这种信息的益处,这之前仅通过在感兴趣的数据上 fully fine-tuning 模型才能获得这种信息。

7.2 AdapterHub

  1. AdapterHub 由两个核心组件组成:

    • 建立在 HuggingFace transformers 之上的一个 library

    • 一个网站,动态地提供 pre-trained adapters 的分析和过滤。

    AdapterHubadapters 的整个生命周期提供工具,如 Figure 1 所示:

    • ①:引入新的 adapter weights Φpre-trained transformer weights Θ 中。

    • ②:在一个下游任务上训练 adapter weights Φ ,同时保持 Θ 固定。

    • ③:自动抽取 trained adapter weights Φ ,并开源 adapters

    • ④:使用 configuration filters 自动可视化adapters

    • ⑤:动态下载/缓存 pre-trained adapter weights Φ ,并将 adapter 嵌入到 pretrained transformer model Θ 中。

    • ⑥:使用训练好的 adapter transformer model 进行推理。

  2. Adapters in Transformer Layers:我们最大限度地减少了对现有 HuggingFace training 脚本的更改,只需两行额外的代码。在 Figure 2 中,我们展示了添加 adapter weights (第 3 行)和冻结所有 transformer weights Θ (第 4 行)所需的代码。在这个例子中,模型被准备在 Stanford Sentiment Treebank: SSTbinary 版本上训练一个 task adapter ,使用 《AdapterFusion: Non-destructive task composition for transfer learning》adapter 架构。类似地,可以通过将 type parameter 设置为 AdapterType.text_language 来添加 language adapters,并可以相应地选择其他 adapter 架构。

    虽然我们为当前文献中的众所周知的架构提供了现成的配置文件,但 adapters 是动态可配置的,这使得可以定义大量的架构成为可能。我们在 Figure 3 中用虚线和 objects 表示可配置组件(configurable components )。可配置组件是新的权重、残差连接以及 LayerNorm layersplacements

    HuggingFace transformers 框架中的代码更改是通过 MixIns 实现的,这些类由各自的 transformer 类来继承。这最大限度地减少了我们所提出的扩展所需的代码更改量,并将 adapters 封装为指定的类。它进一步提高了可读性,因为 adaptersmain transformers code base 明确分离,这使得同步这两个仓库、以及扩展 AdapterHub 变得很容易。

  3. Training AdaptersAdaptersfull finetuning 模型的训练方式相同。信息也是通过在 transformer 不同的层之间传递的,除了在每个层的 pre-trained weights 之外,representations 也通过 adapter parameters 传递。但是,与 full fine-tuning 不同,pre-trained weights Θ 是固定的,只有adapter weights Φprediction head 才会被训练。因为 Θ 是固定的,所以 adapter weights Φ 被封装在 transformer weights 中,迫使 adapter 学习在任务之间兼容的 representations

  4. Extracting and Open-Sourcing Adapters:当训练 adapters 而不是 full fine-tuning 时,不再需要存储整个模型的 checkpoints 。取而代之的是,只需要存储 adapter weights Φ,以及 prediction head ,因为 base model 的权重 Θ 保持不变。这在训练 adapters 时就自动集成了,大大减少了训练期间所需的存储空间,并使得同时存储大量 checkpoints 成为可能。

    adapter training 完成时,parameter file 与相应的 adapter configuration file 一起压缩并上传到公共服务器。然后用户将元数据(例如,权重的 URL 、用户信息、训练过程的描述、使用的数据集、adapter 架构、GitHub handleTwitter handle )输入指定的 YAML 文件,并对 AdapterHub GitHub repository 发出 pull request 。当所有 automatic checks 通过时,网站 AdapterHub.ml 会自动重新生成,具有新可用的 adapter ,这样用户就可以立即找到并使用这些由元数据描述的 new weights 。我们希望共享 pre-trained adapters 的便捷性能进一步促进和加速 NLP 中的迁移学习的新发展。

  5. Finding Pre-Trained Adapters:网站 AdapterHub.ml 提供了当前可用的 pre-trained adapter 的动态概述。由于任务语言众多、以及不同的 transformer 模型,我们提供了直观可理解的分层结构以及搜索选项。这使得用户可以轻松找到适合其用例的adapters 。即,AdapterHub"explore" 页面按三个分层结构组织:

    • 在第一层,可以按任务或语言查看 adapters

    • 第二层,允许进行更细粒度的区分:

      • 对于任务,将 adapters 分成 higher-level NLP tasks 的数据集,分类方法与 paperswithcode.com 类似。

      • 对于语言,将通过 adapters 被训练的语言来区分 adapters

    • 第三层,将 adapters 分成个别数据集或领域,如情感分析的 SST

    选择特定数据集后,用户可以看到此设置下可用的 pre-trained adaptersadapters 依赖于它们被训练的 transformer 模型,否则不兼容。用户选择模型架构和某些超参数,并显示兼容的 adapters 。选择其中一个 adapter 时,用户将获得有关 adapter 的其他信息,这些信息来自元数据。

  6. Stitching-In Pre-Trained Adapterspre-trained adapters 可以像添加随机初始化的权重一样简单地嵌入到大型transformer 模型中;这只需要一行代码,见 Figure 43 行。在网站上选择一个 adapter 时,用户将获得样例代码,对应于包含特定权重所需的配置。

  7. Inference with Adapters:依靠 adapterspre-trained model 的推理,与基于 full fine-tuning 的标准推理实践一致。与 training adapters 类似,在推理期间,active adapter nametext tokens 一起被传递到模型中。在每个transformer layer ,信息通过 transformer layers 和相应的 adapter parameters 来传递。

    adapters 可以在它们被训练的任务中进行推理。为此,我们提供了一个选项来上传 prediction heads 以及 adapter weights 。此外,它们还可以用于进一步的研究,例如将 adapters 迁移到新任务、堆叠多个 adapters 、融合来自各种 adapters 的信息、或者用其他模态的 adapters 来丰富 AdapterHub