寫在前面
昨天看完NoisyTune論文,做好實(shí)驗(yàn)就來了。一篇ACL2022通過微調(diào)前給預(yù)訓(xùn)練模型參數(shù)增加噪音提高預(yù)訓(xùn)練語言模型在下游任務(wù)的效果方法-NoisyTune,論文全稱《NoisyTune: A Little Noise Can Help You Finetune Pretrained Language Models Better》。
paper地址:https://aclanthology.org/2022.acl-short.76.pdf
由于僅加兩行代碼就可以實(shí)現(xiàn),就在自己的數(shù)據(jù)上進(jìn)行了實(shí)驗(yàn),發(fā)現(xiàn)確實(shí)有所提高,為此分享給大家;不過值得注意的是,「不同數(shù)據(jù)需要加入噪音的程度是不同」,需要自行調(diào)參。
模型
自2018年BERT模型橫空出世,預(yù)訓(xùn)練語言模型基本上已經(jīng)成為了自然語言處理領(lǐng)域的標(biāo)配,「pretrain+finetune」成為了主流方法,下游任務(wù)的效果與模型預(yù)訓(xùn)練息息相關(guān);然而由于預(yù)訓(xùn)練機(jī)制以及數(shù)據(jù)影響,導(dǎo)致預(yù)訓(xùn)練語言模型與下游任務(wù)存在一定的Gap,導(dǎo)致在finetune過程中,模型可能陷入局部最優(yōu)。
為了減輕上述問題,提出了NoisyTune方法,即,在finetune前加入給預(yù)訓(xùn)練模型的參數(shù)增加少量噪音,給原始模型增加一些擾動(dòng),從而提高預(yù)訓(xùn)練語言模型在下游任務(wù)的效果,如下圖所示,
通過矩陣級擾動(dòng)(matrix-wise perturbing)方法來增加噪聲,定義預(yù)訓(xùn)練語言模型參數(shù)矩陣為,其中,表示模型中參數(shù)矩陣的個(gè)數(shù),擾動(dòng)如下:
其中,表示從到范圍內(nèi)均勻分布的噪聲;表示控制噪聲強(qiáng)度的超參數(shù);表示標(biāo)準(zhǔn)差。
代碼實(shí)現(xiàn)如下:
forname,parainmodel.namedparameters():
model.statedict()[name][:]+=(torch.rand(para.size())?0.5)*noise_lambda*torch.std(para)
這種增加噪聲的方法,可以應(yīng)用到各種預(yù)訓(xùn)練語言模型中,可插拔且操作簡單。
如下表所示,在BERT、XLNET、RoBERTa和ELECTRA上均取得不錯(cuò)的效果。
并且比較的四種不同增加噪聲的方法,發(fā)現(xiàn)在矩陣級均勻噪聲最優(yōu)。
在不同數(shù)據(jù)量下,NoisyTune方法相對于finetune均有所提高。
在不同噪聲強(qiáng)度下,效果提升不同,對于GLUE數(shù)據(jù)集,在0.1-0.15間為最佳。
總結(jié)
蠻有意思的一篇論文,加入少量噪音,提高下游微調(diào)效果,并且可插拔方便易用,可以納入到技術(shù)庫中。
本人在自己的中文數(shù)據(jù)上做了一些實(shí)驗(yàn),發(fā)現(xiàn)結(jié)果也是有一些提高的,一般在0.3%-0.9%之間,但是噪聲強(qiáng)度在0.2時(shí)最佳,并且在噪聲強(qiáng)度小于0.1或大于0.25后,會(huì)比原始效果差。個(gè)人實(shí)驗(yàn)結(jié)果,僅供參考。
審核編輯 :李倩
-
噪音
+關(guān)注
關(guān)注
1文章
170瀏覽量
23914 -
模型
+關(guān)注
關(guān)注
1文章
3254瀏覽量
48889 -
自然語言處理
+關(guān)注
關(guān)注
1文章
618瀏覽量
13573
原文標(biāo)題:ACL2022 | NoisyTune:微調(diào)前加入少量噪音可能會(huì)有意想不到的效果
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論