【ACL 2022】NoisyTune:来点噪声帮你更好地微调预训练语言模型

1.前言

BERT自2018年横空出世以来,使得pretrain+finetune成为处理NLP任务的标配,如何有效的微调预训练语言模型(PLMs)对下游任务来说至关重要,然而,由于预训练机制,PLMs存在过拟合预训练数据和任务的风险,导致与下游任务之间存在Gap,在finetune的过程中,这种Gap可能无法消除并导致局部最优。鉴于此,今天介绍的这篇ACL 2022的论文则提出了一种简单且有效的解决方法NoisyTune,通过在微调PLMs参数之前添加一些噪声,帮助PLM减小过拟合预训练任务和数据的风险,以更好地微调下游任务。

论文:《NoisyTune:A Little Noise Can Help You Finetune Pretrained Language Models Better

2.模型

NoisyTune的目标是为了更好的微调PLMs已适配下游任务。由于PLMs来自于一些自监督任务的无标签数据,很容易在这些数据和任务上过拟合而与下游任务存在Gap,影响PLMs的效果,尤其是在有监督任务上。作者发现对 PLMs 添加少量噪声可以帮助模型“探索”更多潜在的特征空间,从而减轻对预训练任务和数据的过拟合问题。为了更好地保留语言模型的知识,NoisyTune的解决方法如下:在这里插入图片描述
具体来说,NoisyTune为一种矩阵式扰动方法,该方法根据不同参数矩阵的标准差向其添加不同的均匀噪声,这样就可以考虑PLMs中不同类型参数的不同特性。PLMs通常具有不同类型的参数矩阵,如查询、键、值和前馈网络矩阵,不同参数矩阵通常具有不同的特征和尺度。一些研究者发现,Transformer中自注意力参数和前馈神经网络参数有着截然不同的特性,比如排列、稠密度等。

因此,向PLMs中的所有参数矩阵添加统一的噪声不是保持其良好模型效用的最佳选择。而基于矩阵的扰动方法可以根据不同参数矩阵的方差向其添加不同强度的噪声。
将 P L M s 中 的 参 数 矩 阵 ( 标 量 / 向 量 ) 表 示 为   [ W 1 , W 2 , . . . , W N ] , 其 中 N 是 参 数 矩 阵 类 型 的 数 量 。 将 参 数 矩 阵   W i   的 扰 动 版 本 表 示 为 W ~ i , 其 计 算 如 下 : W ~ i = W i + U ( − λ 2 , λ 2 ) ∗ s t d ( W i ) , s t d : 标 准 偏 差 U ( a , b ) : a 到 b 的 均 匀 分 布 噪 声 λ : 控 制 相 对 噪 声 强 度 的 超 参 数 \small将PLMs中的参数矩阵(标量/向量)表示为\,[W_1,W_2,...,W_N],其中N是参数矩阵\\类型的数量。将参数矩阵\,W_i\,的扰动版本表示为\tilde{W}_i,其计算如下:\\ \tilde{W}_i=W_i+U(-\frac{\lambda}{2},\frac{\lambda}{2})\ast std(W_i),\\ \scriptsize std:标准偏差\quad U(a,b):a到b的均匀分布噪声\quad \lambda:控制相对噪声强度的超参数 PLMs/[W1,W2,...,WN]NWiW~iW~i=Wi+U(2λ,2λ)std(Wi)std:U(a,b):abλ:从式中可以看出,较高的方差将与较强的噪声相加。此外,在一些PLMs中存在一些常量矩阵,例如RoBERTatoken type embeddings,因为它们的标准偏差为0,所以这些常数矩阵不会被额外的噪声干扰。

NoisyTune是一种简单而通用的即插即用技术,只需在微调之前插入以下PyTorch样式代码,即可应用于任何任务的PLM微调:

from name,para in model.named_parameters():
    model.state_dict[name][:] += (torch.rand(para.size())-0.5) * noise_lambda * torch.std(para)
3.实验

作者在英文的 GLUE 数据集与多语言的 XTREME 数据集上开展了实验。结果显示,NoisyTune 可以有效为不同类型的语言模型带来提升,特别是对规模相对较小的数据集提升幅度更大。
在这里插入图片描述
在这里插入图片描述
此外,作者还进一步探究了添加不同噪声对于 NoisyTune 的影响,结果发现加入全局统一分布的噪声往往对模型性能有一定损害,而根据参数矩阵的偏离程度添加效果更佳。另外,可能由于高斯噪声缺乏硬性范围约束,添加均匀分布噪声的模型效果比高斯噪声更好。在这里插入图片描述
NoiseTune也可以增强许多现有PLMs微调方法以获得更好的性能:
在这里插入图片描述

最后是NoiseyTune中的超参数λ的影响:在这里插入图片描述
从图中可以看出,当λ太小或太大时,性能都不能达到最佳的。这是因为当λ太小时,PLMs很难进行参数空间探索和克服过拟合问题。当λ太大时,PLMs中有用的预训练知识可能会被随机噪声淹没。0.1到0.15之间的值更适合于GLUE数据集上的NoisyTune。
 

4.总结

通过添加少量噪声来提升下游微调效果,但不同数据、任务,需要加入噪音的程度是不同的,调参是个技术活😄。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值