那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

NLP中的對(duì)抗訓(xùn)練到底是什么

深度學(xué)習(xí)自然語(yǔ)言處理 ? 來(lái)源:深度學(xué)習(xí)自然語(yǔ)言處理 ? 作者:李rumor ? 2021-01-18 17:17 ? 次閱讀

簡(jiǎn)介

對(duì)抗訓(xùn)練是一種引入噪聲的訓(xùn)練方式,可以對(duì)參數(shù)進(jìn)行正則化,提升模型魯棒性和泛化能力。

對(duì)抗訓(xùn)練的假設(shè)是:給輸入加上擾動(dòng)之后,輸出分布和原Y的分布一致

有監(jiān)督的數(shù)據(jù)下使用交叉熵作為損失:

半監(jiān)督數(shù)據(jù)下可計(jì)算KL散度:

擾動(dòng)如何得來(lái)呢?這需要對(duì)抗的思想,即往增大損失的方向增加擾動(dòng)

有監(jiān)督下:

半監(jiān)督下:

theta上面一個(gè)尖兒代表的是常數(shù)。目的是說在計(jì)算對(duì)抗擾動(dòng)時(shí)雖然計(jì)算了梯度,但不對(duì)參數(shù)進(jìn)行更新,因?yàn)楫?dāng)前得到的對(duì)抗擾動(dòng)是對(duì)舊參數(shù)最優(yōu)的。不理解的同學(xué)可以自己看下偽代碼體會(huì)一下。

用一句話形容對(duì)抗訓(xùn)練的思路,就是在輸入上進(jìn)行梯度上升(增大loss),在參數(shù)上進(jìn)行梯度下降(減小loss)。由于輸入會(huì)進(jìn)行embedding lookup,所以實(shí)際的做法是在embedding table上進(jìn)行梯度上升。

接下來(lái)介紹不同的方法,后續(xù)方法優(yōu)化的主要方向有兩點(diǎn):得到更優(yōu)的擾動(dòng) & 提升訓(xùn)練速度

FGSM (Fast Gradient Sign Method): ICLR2015

FGSM是Goodfellow提出對(duì)抗訓(xùn)練時(shí)的方法,假設(shè)對(duì)于輸入的梯度為:

那擾動(dòng)肯定是沿著梯度的方向往損失函數(shù)的極大值走:

FGM (Fast Gradient Method): ICLR2017

FSGM是每個(gè)方向上都走相同的一步,Goodfellow后續(xù)提出的FGM則是根據(jù)具體的梯度進(jìn)行scale,得到更好的對(duì)抗樣本:

偽代碼:

對(duì)于每個(gè)x: 1.計(jì)算x的前向loss、反向傳播得到梯度 2.根據(jù)embedding矩陣的梯度計(jì)算出r,并加到當(dāng)前embedding上,相當(dāng)于x+r 3.計(jì)算x+r的前向loss,反向傳播得到對(duì)抗的梯度,累加到(1)的梯度上 4.將embedding恢復(fù)為(1)時(shí)的值 5.根據(jù)(3)的梯度對(duì)參數(shù)進(jìn)行更新

PGD (Projected Gradient Descent): ICLR2018

FGM直接通過epsilon參數(shù)一下子算出了對(duì)抗擾動(dòng),這樣得到的可能不是最優(yōu)的。因此PGD進(jìn)行了改進(jìn),多迭代幾次,慢慢找到最優(yōu)的擾動(dòng)。

引用[1]:

FGM簡(jiǎn)單粗暴的“一步到位”,可能走不到約束內(nèi)的最優(yōu)點(diǎn)。PGD則是“小步走,多走幾步”,如果走出了擾動(dòng)半徑為epsilon的空間,就映射回“球面”上,以保證擾動(dòng)不要過大

偽代碼:

對(duì)于每個(gè)x: 1.計(jì)算x的前向loss、反向傳播得到梯度并備份 對(duì)于每步t: 2.根據(jù)embedding矩陣的梯度計(jì)算出r,并加到當(dāng)前embedding上,相當(dāng)于x+r(超出范圍則投影回epsilon內(nèi)) 3.t不是最后一步:將梯度歸0,根據(jù)1的x+r計(jì)算前后向并得到梯度 4.t是最后一步:恢復(fù)(1)的梯度,計(jì)算最后的x+r并將梯度累加到(1)上 5.將embedding恢復(fù)為(1)時(shí)的值 6.根據(jù)(4)的梯度對(duì)參數(shù)進(jìn)行更新

可以看到,在循環(huán)中r是逐漸累加的,要注意的是最后更新參數(shù)只使用最后一個(gè)x+r算出來(lái)的梯度。

FreeAT (Free Adversarial Training): NIPS2019

從FGSM到PGD,主要是優(yōu)化對(duì)抗擾動(dòng)的計(jì)算,雖然取得了更好的效果,但計(jì)算量也一步步增加。對(duì)于每個(gè)樣本,F(xiàn)GSM和FGM都只用計(jì)算兩次,一次是計(jì)算x的前后向,一次是計(jì)算x+r的前后向。而PGD則計(jì)算了K+1次,消耗了更多的計(jì)算資源。因此FreeAT被提了出來(lái),在PGD的基礎(chǔ)上進(jìn)行訓(xùn)練速度的優(yōu)化。

FreeAT的思想是在對(duì)每個(gè)樣本x連續(xù)重復(fù)m次訓(xùn)練,計(jì)算r時(shí)復(fù)用上一步的梯度,為了保證速度,整體epoch會(huì)除以m。r的更新公式為:

偽代碼:

初始化r=0對(duì)于epoch=1...N/m: 對(duì)于每個(gè)x: 對(duì)于每步m: 1.利用上一步的r,計(jì)算x+r的前后向,得到梯度 2.根據(jù)梯度更新參數(shù) 3.根據(jù)梯度更新r

缺點(diǎn):FreeLB指出,F(xiàn)reeAT的問題在于每次的r對(duì)于當(dāng)前的參數(shù)都是次優(yōu)的(無(wú)法最大化loss),因?yàn)楫?dāng)前r是由r(t-1)和theta(t-1)計(jì)算出來(lái)的,是對(duì)于theta(t-1)的最優(yōu)。

注:

1.論文中提供偽代碼,但源碼中好像對(duì)1步輸入做了歸一化論文中并沒有提到

2.個(gè)人認(rèn)為可以把FreeAT當(dāng)成執(zhí)行m次的FGSM,最開始r=0,第一次更新的是x的梯度,之后開始迭代更新r,則根據(jù)x+r的梯度更新參數(shù)。但代碼中有個(gè)問題是r只在最開始初始化,如果迭代到新的樣本x2,也是根據(jù)上個(gè)樣本的r進(jìn)行更新的,這里我有些疑問,希望懂的大佬賜教下~

代碼:https://github.com/mahyarnajibi/FreeAdversarialTraining/blob/d70774030871fa3207e09ce8528c1b84cd690603/main_free.py#L160

YOPO (You Only Propagate Once): NIPS2019

代碼:https://github.com/a1600012888/YOPO-You-Only-Propagate-Once

YOPO的目標(biāo)也是提升PGD的效率,這篇文章需要的理論知識(shí)比較雄厚,這里只簡(jiǎn)要介紹一下。

感興趣又啃不下來(lái)原論文的同學(xué)(比如我)可以參考[9],如有解讀錯(cuò)誤歡迎指出~

極大值原理PMP(Pontryagin's maximum principle)是optimizer的一種,它將神經(jīng)網(wǎng)絡(luò)看作動(dòng)力學(xué)系統(tǒng)。這個(gè)方法的優(yōu)點(diǎn)是在優(yōu)化網(wǎng)絡(luò)參數(shù)時(shí),層之間是解藕的。通過這個(gè)思想,我們可以想到,既然擾動(dòng)是加在embedding層的,為什么每次還要計(jì)算完整的前后向傳播呢?

基于這個(gè)想法,作者想復(fù)用后幾層的梯度,假設(shè)p為定值:

則對(duì)r的更新就可以變?yōu)?/p>

我們可以先寫出YOPO的梯度下降版本:

對(duì)于每個(gè)樣本x初始化r(1,0)對(duì)于j=1,2,...,m: 1.根據(jù)r(j,0),計(jì)算p 對(duì)于s=0,1,...,n-1: 2.計(jì)算r(j,s+1) 3.另r(j+1,0)=r(j,n)

作者又提出了PMP版本的YOPO,并證明SGD的YOPO是PMP版的一種特殊形式。這樣每次迭代r就只用到embedding的梯度就可以了。

引用[9]:

雖然YOPO-m-n只完成了m次完整的正反向傳播,但是卻實(shí)現(xiàn)了m*n次梯度下降。而PGD-r算法完成r次完整的正反向傳播卻只能實(shí)現(xiàn)r次梯度下降。這樣看來(lái),YOPO-m-n算法的效率明顯更高,而實(shí)驗(yàn)也表明,只要使得m*n略大于r,YOPO-m-n的效果就能夠與PGD-r相媲美。

然而故事的反轉(zhuǎn)來(lái)的太快,F(xiàn)reeLB指出YOPO使用的假設(shè)對(duì)于ReLU-based網(wǎng)絡(luò)不成立:

Interestingly, the analysis backing the extra update steps assumes a twice continuously differentiable loss, which does not hold for ReLU-based neural networks they experimented with, and thus the reasons for the success of such an algorithm remains obscure.

別問了,問就是PMP,來(lái)跟我一起進(jìn)入下一部份的學(xué)習(xí)。

FreeLB (Free Large-Batch): ICLR2020

FreeLB認(rèn)為,F(xiàn)reeAT和YOPO對(duì)于獲得最優(yōu)r (inner max)的計(jì)算都存在問題,因此提出了一種類似PGD的方法。只不過PGD只使用了最后一步x+r輸出的梯度,而FreeLB取了每次迭代r輸出梯度的平均值,相當(dāng)于把輸入看作一個(gè)K倍大的虛擬batch,由[X+r1, X+r2, ..., X+rk]拼接而成。具體的公式為:

為了方便對(duì)比,再貼下論文中PGD的公式:

FreeLB和PGD主要有兩點(diǎn)區(qū)別:

1.PGD是迭代K次r后取最后一次擾動(dòng)的梯度更新參數(shù),F(xiàn)reeLB是取K次迭代中的平均梯度

2.PGD的擾動(dòng)范圍都在epsilon內(nèi),因?yàn)閭未a第3步將梯度歸0了,每次投影都會(huì)回到以第1步x為圓心,半徑是epsilon的圓內(nèi),而FreeLB每次的x都會(huì)迭代,所以r的范圍更加靈活,更可能接近局部最優(yōu):

FreeLB的偽代碼為:

對(duì)于每個(gè)x: 1.通過均勻分布初始化r,梯度g為0 對(duì)于每步t=1...K: 2.根據(jù)x+r計(jì)算前后向,累計(jì)梯度g 3.更新r 4.根據(jù)g/K更新梯度

論文中還指出了很重要的一點(diǎn),就是對(duì)抗訓(xùn)練和dropout不能同時(shí)使用,加上dropout相當(dāng)于改變了網(wǎng)絡(luò)結(jié)構(gòu),會(huì)影響r的計(jì)算。如果要用的話需要在K步中都使用同一個(gè)mask。

SMART (SMoothness-inducing Adversarial Regularization)

SMART論文中提出了兩個(gè)方法:

1.對(duì)抗正則 SMoothness-inducing Adversarial Regularization,提升模型魯棒性

2.優(yōu)化算法 Bregman proximal point optimization,避免災(zāi)難性遺忘

本文只介紹其中的對(duì)抗正則方法。

SMART提出了兩種對(duì)抗正則損失,加到損失函數(shù)中:

第一種參考了半監(jiān)督對(duì)抗訓(xùn)練,對(duì)抗的目標(biāo)是最大化擾動(dòng)前后的輸出,在分類任務(wù)時(shí)loss采用對(duì)稱的KL散度,回歸任務(wù)時(shí)使用平方損失損失:

第二種方法來(lái)自DeepMind的NIPS2019[8],核心思想是讓模型學(xué)習(xí)到的流行更光滑,即讓loss在訓(xùn)練數(shù)據(jù)呈線性變化,增強(qiáng)對(duì)擾動(dòng)的抵抗能力。作者認(rèn)為,如果loss流行足夠平滑,那l(x+r)可以用一階泰勒展開進(jìn)行近似,因此用來(lái)對(duì)抗的擾動(dòng)需要最大化l(x+r)和一階泰勒展開的距離:

SMART的算法和PGD相似,也是迭代K步找到最優(yōu)r,然后更新梯度。

總結(jié)

把最近的一些對(duì)抗訓(xùn)練方法總結(jié)出來(lái),可以看到趨勢(shì)從“優(yōu)化PGD的速度”又回到了“找尋最優(yōu)擾動(dòng)”,個(gè)人也比較認(rèn)同,訓(xùn)練速度慢一些對(duì)于普通模型還是可以接受的,主要還是看最終的效果有沒有提升。之前自己試過FGM和PGD,F(xiàn)GM有輕微提升,但PGD沒有,應(yīng)該需要在超參數(shù)上進(jìn)行調(diào)整。FreeLB和SMART在GLUE榜單上都有出現(xiàn)過,相信之后對(duì)抗訓(xùn)練也是標(biāo)配了,坐等微軟放出源碼。

參考文獻(xiàn):

[1]. 知乎:【煉丹技巧】功守道:NLP中的對(duì)抗訓(xùn)練 + PyTorch實(shí)現(xiàn)

[2]. FGSM: Explaining and Harnessing Adversarial Examples

[3]. FGM: Adversarial Training Methods for Semi-Supervised Text Classification

[4]. FreeAT: Adversarial Training for Free!

[5]. YOPO: You Only Propagate Once: Accelerating Adversarial Training via Maximal Principle

[6]. FreeLB: Enhanced Adversarial Training for Language Understanding

[7]. SMART: Robust and Efficient Fine-Tuning for Pre-trained Natural

[8]. Adversarial Robustness through Local Linearization

[9]. 知乎:加速對(duì)抗訓(xùn)練——YOPO算法淺析

責(zé)任編輯:xj

原文標(biāo)題:一文搞懂NLP中的對(duì)抗訓(xùn)練

文章出處:【微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 自然語(yǔ)言處理
    +關(guān)注

    關(guān)注

    1

    文章

    619

    瀏覽量

    13646
  • nlp
    nlp
    +關(guān)注

    關(guān)注

    1

    文章

    489

    瀏覽量

    22109

原文標(biāo)題:一文搞懂NLP中的對(duì)抗訓(xùn)練

文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ADS1278的參考電壓的要求到底是怎樣的?

    <27MHz為例,Vrefp輸入范圍為0.5到3.1V 而后文又提到,參考輸入電壓的范圍為AGND-0.4v to AVDD+0.4v 問題1. 這個(gè)參考電壓的要求到底是怎樣的? 問題2.
    發(fā)表于 01-23 08:02

    TLV320AIC3254內(nèi)部的ADC處理模塊和minidsp到底是什么關(guān)系?

    我想請(qǐng)問一下幾個(gè)問題: 1.3254內(nèi)部的ADC處理模塊和minidsp到底是什么關(guān)系,是并列的還是串行關(guān)系?還是ADC處理模塊就是minidsp特殊情況下的部分? 2.minidsp的抽取因子該怎么理解,到底怎么使用?
    發(fā)表于 10-31 06:02

    請(qǐng)問PCM2903C的溫度范圍到底是多少呢?

    如下圖,PCM2903C的溫度范圍到底是多少呢? 如果用在-25~85℃,是否會(huì)出問題?
    發(fā)表于 10-14 07:14

    放大器的共模輸入電壓到底是指什么?

    請(qǐng)問放大器的共模輸入電壓到底是指什么?
    發(fā)表于 09-19 07:17

    功放和運(yùn)放到底是什么區(qū)別?

    想請(qǐng)問一下功放和運(yùn)放到底是什么區(qū)別,感覺只要接一個(gè)小負(fù)載,運(yùn)放的輸出電流也可以很大?。?b class='flag-5'>到底有什么區(qū)別啊
    發(fā)表于 09-10 07:00

    請(qǐng)問LMV772到底是雙電源還是單電源???

    請(qǐng)問LMV772到底是雙電源還是單電源???手冊(cè)前面寫的太模糊了。求指教
    發(fā)表于 09-09 07:10

    運(yùn)放的輸入電容到底是什么?

    我想請(qǐng)問一下運(yùn)放的輸入電容到底是什么?
    發(fā)表于 09-04 06:52

    LMH6502的輸入電壓到底是多少?

    LMH6502的輸入電壓到底是多少,我稍微給如大一點(diǎn)點(diǎn)的信號(hào),放大不行還能接受,我衰減都失真,
    發(fā)表于 08-27 07:02

    大語(yǔ)言模型的預(yù)訓(xùn)練

    能力,逐漸成為NLP領(lǐng)域的研究熱點(diǎn)。大語(yǔ)言模型的預(yù)訓(xùn)練是這一技術(shù)發(fā)展的關(guān)鍵步驟,它通過在海量無(wú)標(biāo)簽數(shù)據(jù)上進(jìn)行訓(xùn)練,使模型學(xué)習(xí)到語(yǔ)言的通用知識(shí),為后續(xù)的任務(wù)微調(diào)奠定基礎(chǔ)。本文將深入探討大語(yǔ)言模型預(yù)
    的頭像 發(fā)表于 07-11 10:11 ?539次閱讀

    nlp自然語(yǔ)言處理模型怎么做

    的進(jìn)展。本文將詳細(xì)介紹NLP模型的構(gòu)建過程,包括數(shù)據(jù)預(yù)處理、模型選擇、訓(xùn)練與優(yōu)化等方面。 數(shù)據(jù)預(yù)處理 數(shù)據(jù)預(yù)處理是NLP模型構(gòu)建的第一步,其目的是將原始文本數(shù)據(jù)轉(zhuǎn)換為模型能夠處理的格式。數(shù)據(jù)預(yù)處理主要包括以下幾個(gè)步驟: 1.1
    的頭像 發(fā)表于 07-05 09:59 ?717次閱讀

    NLP模型RNN與CNN的選擇

    NLP的應(yīng)用場(chǎng)景、工作原理、優(yōu)缺點(diǎn),以及在選擇時(shí)應(yīng)考慮的關(guān)鍵因素,以期為讀者提供一個(gè)全面而深入的理解。
    的頭像 發(fā)表于 07-03 15:59 ?648次閱讀

    對(duì)于STM8的固件庫(kù),到底是怎么對(duì)文件進(jìn)行配置的?

    對(duì)于STM8的固件庫(kù),到底是怎么對(duì)文件進(jìn)行配置的?
    發(fā)表于 05-17 15:59

    共享單車到底是什么通信原理

    我們經(jīng)常騎的共享單車到底是什么通信原理,有人了解過嗎? 一、智能車鎖 共享單車最核心的硬件是智能車鎖,主要用于實(shí)現(xiàn)控制和定位功能。
    發(fā)表于 04-09 10:33 ?939次閱讀
    共享單車<b class='flag-5'>到底是</b>什么通信原理

    電子設(shè)備的“超級(jí)電容器”到底是什么?

    電子設(shè)備的“超級(jí)電容器”到底是什么?我們提到過電容器與普通電池的不同在于能量密度不同,與標(biāo)準(zhǔn)電容器相比,它還具有更高的電能存儲(chǔ)能力。超級(jí)電容器不能像電池一樣存儲(chǔ)盡可能多的功率,但它可以存儲(chǔ)比電容器
    的頭像 發(fā)表于 03-11 08:56 ?596次閱讀
    電子設(shè)備<b class='flag-5'>中</b>的“超級(jí)電容器”<b class='flag-5'>到底是</b>什么?

    共享單車到底是什么通信原理?

    我們經(jīng)常騎的共享單車到底是什么通信原理,有人了解過嗎?下面寶藍(lán)小編就帶大家了解下。
    的頭像 發(fā)表于 02-25 10:32 ?1512次閱讀
    共享單車<b class='flag-5'>到底是</b>什么通信原理?
    现金百家乐代理| 大发888手机版下载安| 百家乐变牌器批发| 澳门百家乐官网图形| 精英娱乐城开户| 百家乐推广| 长方形百家乐官网筹码| 线上百家乐游戏| 菲律宾百家乐开户| 百家乐官网这样赢保单分析 | 百家乐是怎样的| 百家乐官网游戏平台架设| 大发888娱乐登陆| 网上百家乐内幕| 百家乐官网庄闲路| 汉源县| 大发888娱乐厂场| 太阳城百家乐祖玛| 百家乐官网出老千视频| 久盛娱乐城| 合肥太阳城在哪| 太阳城百家乐外挂| 尊龙百家乐官网娱乐场开户注册| 景德镇市| 大发888casino| 百家乐看大路| 钻石娱乐| 威尼斯人娱乐城网址是什么| 百家乐澳门路规则算法| 木星百家乐官网的玩法技巧和规则 | 绥芬河市| 棋牌游戏大厅| 百家乐有破解的吗| 百家乐官网园百利宫娱乐城信誉好...| 名门国际娱乐| 大发888怎么玩才赢| 百家乐游戏客户端| 百家乐博彩桌出租| 百家乐官网永利娱乐场| 沙龙百家乐官网破解| 互联星空棋牌中心|