大规模语言模型高效参数微调--BitFit/Prefix/Prompt 微调系列

2018 年谷歌发布了 BERT,一经面世便一举击败 11 个 NLP 任务的 State-of-the-art (Sota) 结果,成为了 NLP 界新的里程碑; BERT 的结构如下图所示, 左边是 BERT 模型预训练过程, 右边是对于具体任务的微调过程 。其中, 微调 阶段是后续用于一些下游任务的时候进行微调 ,  例如: 文本分类, 词性标注 ,  问答系统等 ,  BERT 无需调整结构 就可以在不同的任务上进行微调 。通过”预训练语言模型 + 下游任务微调”的任务设计 ,  带来了强大的模型效 果 。从此 , “预训练语言模型 + 下游任务微调”便成为了 NLP 领域主流训练范式 。

大规模语言模型高效参数微调--BitFit/Prefix/Prompt 微调系列

文章插图
BERT 结构图,左边是预训练过程,右边是具体任务微调过程
但是 ,  以 GPT3 为代表的大规模语言模型(LLM) 参数规模变得越来越大, 这使得在消费级硬件上进行全量 微调变得不可行 。下表展示了在一张 A100 GPU  (80G 显存) 以及 CPU 内存 64GB 以上的硬件上进行模型全量 微调以及参数高效微调对于 CPU/GPU 内存的消耗情况 。
大规模语言模型高效参数微调--BitFit/Prefix/Prompt 微调系列

文章插图
全量参数微调与参数高效微调显存占用对比
除此之外, 模型全量微调还会损失多样性,存在灾难性遗忘的问题 。因此 ,  如何高效的进行模型微调就成了业界研究的重点,这也为参数高效微调技术的快速发展带来了研究空间 。
参数高效微调是指微调少量或额外的模型参数, 固定大部分预训练模型(LLM) 参数,从而大大降低了计 算和存储成本,同时, 也能实现与全量参数微调相当的性能 。参数高效微调方法甚至在某些情况下比全量微调 效果更好,可以更好地泛化到域外场景 。
高效微调技术可以粗略分为以下三大类,如下图所示:增加额外参数(A)、选取一部分参数更新(S)、引入重参数化(R) 。 而在增加额外参数这类方法中,又主要分为类适配器(Adapter-like)方法和软提示(Soft prompts)两个小类 。
常见的参数高效微调技术有 BitFit 、Prefix Tuning 、Prompt Tuning 、P-Tuning 、Adapter Tuning 、LoRA 等,后 面章节将对一些主流的参数高效微调方法进行讲解 。
大规模语言模型高效参数微调--BitFit/Prefix/Prompt 微调系列

文章插图
常见的参数高效微调技术和方法
BitFit/Prefix/Prompt 微调系列BitFit虽然对每个任务进行全量微调非常有效, 但它也会为每个预训练任务生成一个独特的大型模型,这使得很 难推断微调过程中发生了什么变化,也很难部署 , 特别是随着任务数量的增加,很难维护 。
理想状况下,我们希望有一种满足以下条件的高效微调方法:
上述的问题取决于微调过程能多大程度引导新能力的学习以及暴露在预训练 LM 中学到的能力 。虽然 ,  之 前的高效微调方法 Adapter-Tuning 、Diff-Pruning 也能够部分满足上述的需求 。一种参数量更小的稀疏的微调方 法 BitFit 可以满足上述所有需求 。
BitFit 是一种稀疏的微调方法,它训练时只更新 bias 的参数或者部分 bias 参数 。对于 Transformer 模型而言, 冻结大部分 transformer-encoder 参数,只更新 bias 参数跟特定任务的分类层参数 。涉及到的 bias 参数有 attention  模块中计算 query,key,value 跟合并多个 attention 结果时涉及到的bias,MLP 层中的bias,Layernormalization 层的 bias 参数,预训练模型中的bias参数如下图所示 。
大规模语言模型高效参数微调--BitFit/Prefix/Prompt 微调系列

文章插图
图片
PLM 模块代表了一个特定的 PLM 子层, 例如注意力或 FFN,图中橙色块表示可训练的提示向量 ,  蓝色 块表示冻结的预训练模型参数
在 Bert-Base/Bert-Large 这种模型里,bias 参数仅占模型全部参数量的 0.08%~0.09% 。但是通过在 Bert-Large  模型上基于 GLUE 数据集进行了 BitFit、Adapter 和 Diff-Pruning 的效果对比发现,BitFit 在参数量远小于Adapter、 Diff-Pruning 的情况下 , 效果与 Adapter 、Diff-Pruning 想当,甚至在某些任务上略优于 Adapter 、Diff-Pruning 。
通过实验结果还可以看出,BitFit 微调结果相对全量参数微调而言, 只更新极少量参数的情况下,在多个数 据集上都达到了不错的效果, 虽不及全量参数微调,但是远超固定全部模型参数的 Frozen 方式 。同时,通过对 比 BitFit 训练前后的参数,发现很多 bias 参数并没有太多变化(例如:跟计算 key 所涉及到的 bias 参数) 。发现 计算 query 和将特征维度从 N 放大到 4N 的 FFN 层(intermediate) 的 bias 参数变化最为明显,只更新这两类 bias 参数也能达到不错的效果 , 反之,固定其中任何一者,模型的效果都有较大损失 。


推荐阅读