论文学习:ATTEMPT:通过注意力混合软提示进行参数高效的多任务调整
资料
论文:ATTEMPT: Parameter-Efficient Multi-task Tuning via Attentional Mixtures of Soft Prompts
前置知识
由于本文研究的核心问题是如何以参数高效的方式调整预训练模型,使其能够跨任务传递知识,同时保持或提高任务性能。ATTEMPT方法即通过使用注意力机制混合软提示来实现参数高效的多任务调整。
我们需要首先了解其他的参数高效微调方法,用以对比学习,并且文章也给出了ATTEMPT方法与其他微调方法的效果对比,所以我们先了解各个经典微调算法的原理用以区分学习。
高效参数微调
参数高效微调是指微调少量或额外的模型参数,固定大部分预训练模型参数,较于全量参数微调从而大大降低了计算和存储成本,同时,也能实现与全量参数微调相当的性能。
高效微调技术可以粗略分为以下三大类:增加额外参数(A)、选取一部分参数更新(S)、引入重参数化(R)。而在增加额外参数这类方法中,又主要分为类适配器(Adapter-like)方法和软提示(Soft prompts)两个小类。分类如下:
接下来我们简单介绍下BitFit、Prefix Tuning、Prompt Tuning、P-Tuning、P-tuning -v2、SPoT。
在此之前我们需要理解什么是hard prompt与soft prompt:
- hard prompt (离散):即人类写的自然语言式的prompt。
- soft prompt (连续):可训练的权重,可以理解为伪prompt。(毕竟LM是连续的模型,在连续空间中优化离散的prompt, 难以优化到最佳效果。额也就是说所谓的hard prompt对于人类来说好理解,但模型不一定好理解,所以不妨丢给模型去学习处更好理解的prompt)
BitFit
原理:对微调机制的一种积极探索,也很简单,通过仅调整bias效果就能有不错的效果,但没有具体阐述原理,就是通过猜测加实验得到的结果。同时,作者提出一个观点:微调的过程不是让模型适应另外的数据分布,而是让模型更好的应用出本身的表征能力。
特点:
- 训练参数量极小(约0.1%)。
- 在大部分任务上效果会差于LoRA、Adapter等方法。
Prefix Tuning
原理:在每一个Transformer层都带上一些virtual token作为前缀,以适应不同的任务。
特点:
- 前缀Token会占用序列长度,有一定的额外计算开销。
- Prefix Tuning的线性插值是比较复杂的。
Prompt Tuning
原理:该方法可以看着是Prefix Tuning的简化版本,针对不同的任务,仅在输入层引入virtual token形式的软提示(soft prompt)。
特点:
- 相对于Prefix Tuning,参与训练的参数量和改变的参数量更小,更节省显存。
- 对一些简单的NLU 任务还不错,但对硬序列标记任务(即序列标注)表现欠佳。
P-Tuning
原理:将Prompt转换为可以学习的Embedding层,并用MLP+LSTM的方式来对Prompt Embedding进行一层处理。相比Prefix Tuning,仅在输入层加入的可微的virtual token;另外,virtual token的位置也不一定是前缀,插入的位置是可选的。
特点:
- 引入一个prompt encoder(由一个双向的LSTM+两层MLP组成)来建模virtual token的相互依赖会收敛更快,效果更好。
P-Tuning v2
原理:该方法在每一个Transformer层都加入了prompt token作为输入,引入多任务学习,针对不同任务采用不同的提示长度。并且回归传统的分类标签范式,而不是映射器。
特点:
- 解决了Prompt Tuning无法在小模型上有效提升的问题。
- 移除了对模型效果改进较小的重参数化的编码器(如:Prefix Tuning中的MLP、P-Tuning中的LSTM)。
- 对于一些复杂的硬序列标记任务(即序列标注)取得了不错的效果。
SPoT
原理:在之前P-tuning方法的基础上,提出的一种基于提示的迁移学习方法。它通过在一个或多个源任务上学习提示,然后将这些提示用于初始化目标任务的提示。具体来说,就是先为每个源任务生成提示,得到它们的任务表示,再计算这些表示与目标任务的相似度,选择最相似的k个源任务提示,将它们加权组合来初始化目标任务的提示,最后在目标任务上进行微调,以获得更适合的提示。
特点:
- 核心思想是在一个或多个源任务上学习提示,然后将学到的提示用于初始化目标任务的提示。
- 进行了大规模和系统的任务迁移能力研究,展示了任务通过提示转移相互受益的条件。
论文大体介绍
本文提出了一种名为ATTEMPT的新参数高效微调的方法,旨在通过注意力机制产生soft prompt、结合多任务学习,实现参数高效的语言模型微调。
具体来说,ATTEMPT通过注意力模块来混合源任务的软提示和目标任务的新初始化提示,以生成适用于每个目标任务实例的提示,使在不同任务间传递知识,在训练过程中,只有目标任务的提示和注意力权重会被更新,而原始的语言模型和源提示保持不变。
该方法不仅提高了训练效率,还能在资源有限的情况下实现高性能。且ATTEMPT通过模块化的方式,可以灵活地增加或移除源任务提示,从而有效地实现知识转移。实验表明,该方法在多项NLP任务中表现优异,尤其是在小样本学习场景下。
论文背景
Fine-tuning:例如全参微调,在目标任务训练数据上微调大型语言模型的所有参数,然而,这种方法计算成本高,并且可能无法充分利用其他NLP任务的大量数据。
参数高效的微调方法:近期的研究提出了一些参数高效的调整方法,这些方法只更新一小部分LM参数以适应目标任务。这里提到了prefix tuning、prompt tuning、in-context learning、SPoT。随着LMs的参数提升,更高的微调方法要求迫切。
多任务学习与知识传递:多任务学习方法试图通过更新LM参数来学习新的目标任务,这些方法在NLP中被证明是有效的。但是,这些方法缺乏添加或移除源任务的灵活性。
Soft Prompts:软提示是一种参数高效的方法,它通过在输入前添加可训练的提示来调整模型。这种方法保持了原始LM的冻结状态,并且可以灵活地添加或移除源提示,以实现有效的知识传递。
方法原理
ATTEMPT通过注意力模块来混合源任务的软提示和目标任务的新初始化提示,以生成适用于每个目标任务实例的提示,使在不同任务间传递知识。
源提示预训练:ATTEMPT首先在大规模的源任务上预训练可转移的soft promp,这些提示作为小的嵌入向量,编码了源任务的知识,可能对其他任务有益,能够捕捉任务相关的知识。
目标提示训练:通过将注意力加权的源提示和目标提示相结合,生成适用于每个输入实例的特定提示 。在训练过程中,新的任务提示和注意力模块G通过进行更新,而源提示和原LM的参数则不进行更新,以保存从先前任务或预训练中学习到的知识。其分为以下模块:
注意力权重计算:
为目标任务初始化一个新的 ,之后使用注意力模块 G 计算输入 X 与提示(包括源提示和目标提示)之间的注意力权重,这个注意力模块G是一个轻量级的网络,可以在多任务训练中共享和同时训练。输入时的 X 和每个提示prompt进行最大池化操作,以获得固定长度的表示。进而利用轻量级的网络 G 对输入进行投影,生成注意力分布,提供之后使用到的注意力权重。
提示插值:
利用注意力权重对源提示和目标提示进行加权平均,生成最终的实例级提示:
其中,是从注意力模块获得的权重,确保即使源任务不是很相关,也能保留目标提示的影响。
多任务训练与推理:训练中,ATTEMPT可以在多个目标任务上联合训练共享的注意力模块 G 和多个目标任务提示,将训练数据集合并,同时保留每个实例的任务ID信息。在训练中,根据实例的任务ID,生成对应实例级提示。每个目标任务提示的损失仅在提示被使用时进行反向传播,而注意力模块的权重在每次迭代中更新;
推理中,推理时仅需加载一次源提示、所有目标任务提示和共享的注意力模块 G。对于每个实例,检索对应的目标任务提示,将 拼接到输入嵌入中,后续过程与prompt tuning相同。支持同时执行多个目标任务,显著减少推理时的模型加载开销。
ATTEMPT参数效率:ATTEMPT和提示调优的一个独特特性是参数数量独立于语言模型层数。随着LMs规模增大,Adapter和 fine-tuning的参数数量会迅速增加,而ATTEMPT只更新软提示,不修改模型高层,从而在参数增长上保持适中。
方法合理性评估:ATTEMPT方法合理地利用了注意力机制和软提示来实现参数高效的多任务学习,这与当前大型语言模型的发展趋势相符合。随着语言模型变得越来越大,全参数微调变得越来越不切实际。参数高效的微调方法如ATTEMPT,允许我们在资源有限的情况下,尽可能地利用大型模型。并且其方法在SPoT方法的基础上增加注意力机制,比相似度计算效果更好,更加灵活。
假设与局限性评估:
假设源任务与目标任务的相关性:源任务中的软提示能够捕捉到对目标任务有益的知识。那么这意味着源任务与目标任务之间存在一定的相关性,使得源任务中的知识和模式可以迁移到目标任务中。
局限性:如果源任务与目标任务之间的相关性很低,那么源任务的软提示可能不会为目标任务提供有用的信息,这可能会限制模型的性能。
假设注意力机制的有效性:注意力机制能够有效地从多个源提示中选择相关信息,那么其应该能够准确地识别出哪些源任务提示对当前目标任务最有帮助。
局限性:如果注意力机制不能正确地评估源提示的重要性,模型可能会忽略重要的信息,从而无法构建好的。
实验设置
源任务和目标任务:
源任务:
选择了6个大规模数据集作为源任务,包括MNLI、QNLI、QQP、SST-2、SQuAD和ReCoRD。这些数据集提供丰富的知识用于预训练软提示。
目标任务:
在21个不同的目标任务上进行评估,包括GLUE和SuperGLUE中的任务(如BoolQ、CB、RTE等,来测试模型的自然语言处理能力)、问答任务(如Natural Questions、HotpotQA等),以及其他任务(如SciTail、Yelp-2等)。
基线测试和实现细节:
基线方法:
比较了ATTEMPT与多种方法的性能,包括Fine tuning、prompt tuning、SPoT、Adapter、BitFit、以及多任务方法(如FT-multi-task (FT-m), Adapter-m, HyperFormerr等)。
实现细节:
方法 ATTEMPT 和 ATTEMPT-m 使用相同的六个源任务提示, ATTEMPT-m 通过进行多任务训 练在多个目标任务上训练一个共享注意力层,而 ATTEMPT 则分别训练特定任务的注意力层,并且使用T5-base作为基础语言模型、使用公共数据集的开发集或拆分出的测试集进行评估。
Prompt初始化:
每个源提示都是通过从顶级词汇中随机采样标记来初始化的。对于目标任务提示初始化,使用非问答任务的MNLI源提示和问答任务的SQuAD源提示,而不是用随机采样的词汇进行初始化,以保证训练的稳定性。
实验结论
整体性能:
GLUE和SuperGLUE任务:
ATTEMPT - m显著优于PT、SPoT和BitFit,并与Adapter或Fine - Tuning匹配,尽管每个任务更新的参数要少得多
对prompt tuing进行了改进:
prompt tuing对超参数或初始化很敏感,并且在 诸如 CoLA、BoolQ或 WiC 等几个数据集上的表现显著降低。ATTEMPT在较小的数据集(例如, CB , RTE等)和大规模的MRQA数据集上的性能明显优于这些方法。
少样本域适应:通过共享注意力模块,ATTEMPT能够灵活组合不同任务的知识,提高了少样本学习的效率。在少样本任务上的表现优于其他方法,尤其是在资源受限的情况下,充分利用了源任务的知识进行有效的知识转移。在较小的数据集上具有特别强的竞争力。
消融实验:通过消融实验,验证了注意力机制在实例级提示生成中的重要性,证明了其在提升模型性能上的关键作用;另外通过多任务共享注意力模块,显著提高了小样本任务的性能,展示了其在知识转移中的有效性。
总结
提出了一种新的参数高效微调方法 ATTEMPT,它通过在源任务上训练的多个可重用的软提示和一个新的特定任务提示之间进行插值来学习生成实例级提示,同时保持原始的语言模型冻结。大规模实验表明, ATTEMPT 在任务性能和效率之间实现了很好的平衡,引入了一种可解释且模块化的任务迁移。
以下是ATTEMPT方法与各微调方法之间的对比:
特征 | ATTEMPT | BitFit | Prefix Tuning | Prompt Tuning | P-Tuning | P-tuning-v2 |
---|---|---|---|---|---|---|
参数更新 | 仅更新目标任务的prompt和注意力权重 | 仅更新模型的偏置参数 | 更新prompt,但保持模型参数不变 | 更新soft prompt,保持模型参数不变 | 更新prompt,保持模型参数不变 | 更新prompt,保持模型参数不变 |
多任务学习能力 | 支持模块化多任务学习 | 不支持多任务学习 | 支持多任务学习 | 支持多任务学习 | 支持多任务学习 | 支持多任务学习 |
知识迁移 | 通过注意力机制有效整合多个任务的知识 | 无法进行知识迁移 | 可以实现知识迁移 | 可以实现知识迁移 | 通过任务间的迁移能力实现 | 通过任务间的迁移能力实现 |
参数效率 | 更新少量参数(约0.4%) | 更新约280k参数 | 更新少量参数(约77k) | 更新少量参数(约77k,0.01% ) | 更新参数较少,具体依赖于使用的模型(0.01% ) | 更新参数较少,具体依赖于使用的模型(0. 1%-3%) |
适用场景 | 适合少量样本的任务及需要灵活组合知识的场景 | 适用于只需微调偏置的小规模任务 | 适用于快速任务适应 | 适用于任务的快速适应 | 适用于需要跨任务迁移学习的场景 | 适用于需要跨任务迁移学习的场景 |
任务间相似性分析能力 | 可生成注意力分布以理解任务间的相似性 | 无法分析任务间相似性 | 无法分析任务间相似性 | 无法分析任务间相似性 | 可通过分析prompt权重了解任务间相似性 | 可通过分析prompt权重了解任务间相似性 |
特性 | SPoT | ATTEMPT |
---|---|---|
知识迁移 | 是 | 是 |
方法原理 | 通过相似度与加权结合源任务提示初始化目标任务提示 | 引入注意力模块,动态结合源提示和目标提示 |
多任务学习 | 支持 | 支持,且使用共享的注意力模块 |
参数更新 | 更新目标任务提示 | 更新目标任务提示和注意力权重,保留原始模型和源提示 |
模块化和灵活性 | 一般 | 高,可通过预训练的软提示灵活添加或移除源提示 |
优点
参数效率与高性能:ATTEMPT通过仅更新目标任务的提示和注意力权重,显著减少了需要更新的参数数量,相比全参数微调,极大地降低了计算和存储成本。同时其在在多项NLP任务中表现优异,尤其是在小样本学习场景下,能够与全参数微调相媲美或超越。
多任务学习与模块化:通过共享注意力模块,ATTEMPT能够同时处理多个目标任务,提高了小样本任务的性能,尤其是在资源受限的情况下。同时其允许灵活地添加或移除源任务提示,使得知识转移更加灵活和模块化,有助于构建强大的多任务模型。
缺点
内存占用与计算成本:但由于ATTEMPT方法通过在输入前添加soft prompt来调整模型,这个提示调整增加了输入标记的长度,从而增加了内存占用,可能会带来额外的计算成本。
任务类型的限制:ATTEMPT方法主要针对分类和问答任务进行了评估,并没有涉及到需要长序列生成的任务。这意味着ATTEMPT在这些类型的任务上的有效性尚未得到验证。此外ATTEMPT在非英语任务上的有效性尚未得到测试。
源任务组合的限制:虽然ATTEMPT展示了通过软提示传递知识的能力,但论文中的实验主要基于有限数量的源任务。对于更广泛的源任务组合,ATTEMPT的效果如何,还需要进一步的研究和实验来探索。
改进
不同的注意力机制:对于注意力模块中注意力权重的计算,原公式如下:
可以改为:
即这里,不是计算的摘要表示与提示 之间的相似度,而是计算与第个提示令牌之间的相似度,对于提示token级别的注意力,在右边的第二项中,将摘要表示中的每一个第个提示令牌计算为第个提示令牌的加权摘要。即其原计算使用最大池化来统一计算注意力分数,之后可以利用token级别的注意力计算,另外可以考虑引入更复杂的注意力机制用以捕捉不通任务的prompt之间的关系。
深度提示优化:从文章中可以看出,生成的实例化软提示只是被插入到transformer第一层的输入embedding序列的前端,那么在接下来的transformer层中,插入连续提示的位置的embedding是由之前的transformer层计算出来的,会导致序列长度限制可调参数的数量,另外的输入embedding对模型预测只有相对间接的影响,所以可以在每一层都加入了实例化软提示作为输入。·
重参数化的编码器:利用重参数化功能来提高训练速度和鲁棒性,如加入MLP与LSTM,查看效果的变化。
扩展任务类型和源任务组合:由于其实验主要基于有限数量的源任务,那么我们可以通过增加更多的源任务类型和组合来提高模型的泛化能力,另外在其他语言任务上也可以做尝试。