背景

随着计算算力的不断增加,以 transformer 为主要架构的预训练模型进入了百花齐放的时代。看到了大规模预训练的潜力,尝试了不同的预训练任务、模型架构、训练策略等等,在做这些探索之外,一个更加直接也通常更加有效的方向就是继续增大数据量和模型容量来向上探测这一模式的上界。首先这些经过海量数据训练的模型相比于一般的深度模型而言,包含更多的参数,动辄数十亿。在针对不同下游任务做微调时,存储(每个任务对应一个完成的预训练模型)和训练这种大模型是十分昂贵且耗时的。

 

方法归类
2.1 Adapter
通过过在原始的预训练模型中的每个 transformer block 中加入一些参数可训练的模块实现的。假设原始的预训练模型的参数为 ω,加入的 adapter 参数为 υ,在针对不同下游任务进行调整时,只需要将预训练参数固定住,只针对 adapter 参数 υ 进行训练。常情况下,参数量 υ<<ω, 因此在对多个下游任务调整时,只需要调整极小数量的参数,大大的提高了预训练模型的扩展性和实用性。
代表论文:

论文标题:

Parameter-Efficient Transfer Learning for NLP

论文链接:

https://arxiv.org/abs/1902.00751

代码链接:

https://github.com/google-research/adapter-bert

 在 Multi-head attention 层后和 FFN 层后都加了一个 adapter,通过残差连接和 down-project & up-project(减少 adapter 的参数量)实现。

 

论文标题:

LoRA: Low-Rank Adaptation of Large Language Models

论文链接:

https://arxiv.org/abs/2106.09685

代码链接:https://github.com/microsoft/LoRA 将原有预训练参数进行矩阵分解(减少参数量),然后和原有参数相加。

 

2.2 Part Parameter Tuning
通过训练预训练模型中部分参数,减少模型训练参数,提升模型训练效率,其中包括 layernorm&head tune(只训练模型的 layernorm 和 head 层)等。 代表论文:

论文标题:

BitFit: Simple Parameter-efficient Fine-tuning for Transformer-based Masked Language-models

论文链接:

https://arxiv.org/abs/2106.10199

代码链接:

https://github.com/benzakenelad/BitFit

只训练模型中的 bias 参数。
模型 head 层增加一层线性映射,通过先验非有效输入样本预估平衡(各 50% 概率进行校准)。

 


论文标题:

Raise a Child in Large Language Model: Towards Effective and Generalizable Fine-tuning

论文链接:

https://arxiv.org/abs/2109.05687

代码链接:https://github.com/pkunlp-icler/childtuning Child-Tuning-F:在 fine-tune 的过程中,只需要在每一步更新的迭代中,从伯努利分布中采样得到一个梯度掩模即可,相当于在对网络参数更新的时候随机地将一部分梯度丢弃。 Child-Tuning-D:针对不同的下游任务自适应地进行调整,选择出与下游任务最相关最重要的参数来充当 Child Network。引入 Fisher Information Matrix(FIM)来估计每个参数对于下游任务的重要性程度,并与前人工作一致近似采用 FIM 的对角矩阵(即假设参数之间互相独立)来计算各个参数相对下游任务的重要性分数,之后选择分数最高的那部分参数作为 Child-Network。

 

2.3 Prompt Tuning
固定预训练模型,每个下游任务仅添加若干个 tunable 的 token 作为前缀拼在输入样本中。实验证明了这种方式在大规模预训练模型的助力下,能够媲美传统的 fine-tuning 表现。


论文标题:

Prefix-Tuning: Optimizing Continuous Prompts for Generation

论文链接:https://arxiv.org/abs/2101.00190

代码链接:https://github.com/XiangLi1999/PrefixTuning
将 soft tokens 作为前缀拼在输入样本中,并且拼在每一层中。

 


论文标题:

The Power of Scale for Parameter-Efficient Prompt Tuning

论文链接:

https://arxiv.org/abs/2104.08691

代码链接:https://github.com/google-research/prompt-tuning
在百亿参数和以上模型在 full-shot 上使得 Prompt Tuning 和 fine-tuning 效果相当。

 


论文标题:

PPT: Pre-trained Prompt Tuning for Few-shot Learning

论文链接:https://arxiv.org/abs/2109.04332
提出 prompt 预训练,在百亿参数和以上模型在 few-shot 上使得 Prompt Tuning 和 fine-tuning 效果相当。

 


论文标题:P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks

论文链接:

https://arxiv.org/abs/2110.07602

代码链接:https://github.com/THUDM/P-tuning-v2
在低于百亿参数模型在 full-shot 上使得 Prompt Tuning 和 fine-tuning 效果相当,引入了 prefix-tuning。

 

论文标题:

Cutting Down on Prompts and Parameters: Simple Few-Shot Learning with Language Models

论文链接:

https://arxiv.org/abs/2106.13353

代码链接:https://github.com/ucinlp/null-prompts
在低于百亿参数模型在 few-shot 上使得 Prompt Tuning 和 fine-tuning 效果相当,并且提出 null prompt 方法

 

2.4 Black-Box Tuning

论文标题:

Black-Box Tuning for Language-Model-as-a-Service

论文链接:

https://arxiv.org/abs/2201.03514

代码链接:https://github.com/txsun1997/black-box-tuning
通过将 prompt token 压缩到比较小的维度,然后通过无梯度优化方法进行参数调优,避免了在大模型梯度下降,只需要用户根据少量样本走预训练模型前向的结果来寻找最优的任务参数。这种方式非常有利于大模型落地,用户和大模型之间进行分离。

 

2.5 统一框架

论文标题:

Towards a Unified View of Parameter-Efficient Transfer Learning

论文链接:

https://arxiv.org/abs/2110.04366

代码链接:https://github.com/jxhe/unified-parameter-efficient-tuning
prefix tuning 通过一些变换可以看成是和 Adapter 类似的结构,可以把它们看作是学习一个向量 ,它被应用于各种隐藏表征。形式上,直接修改的隐藏表征表示为 ,把计算  的 PLM 子模块的直接输入表示为 。

  • Parallel Adapter 是通过将 prefix tuning 的 parallel 插入转移到 Adapter 的变体。
  • Multi-head Parallel Adapter 是使 Adapter 与 prefix tuning 更加相似的进一步措施,应用 Parallel Adapter 来修改头部注意力输出作为 prefix tuning 。Scaled Parallel Adapter 是通过将 LoRA 的组成和插入形式转移到适配器的变体。

尝试不同策略组合,发现一些结论:

  • Parallel Adapter 在所有情况下都能够击败 Sequential Adapter;
  • 适配修改放在 Transformer 的 attention 模块效果更佳。


总结

随着预训练大模型的发展,高效 Parameter Finetuning 是非常必要的,近期大火的 prompt 也发展着越来越像之前的 adapter 方法。希望随着方法越来越成熟,能研究在各项任务设置和模型规模上打平 finetune 的方法。