91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

NLP中的對抗訓練到底是什么

深度學習自然語言處理 ? 來源:深度學習自然語言處理 ? 作者:李rumor ? 2021-01-18 17:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

簡介

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

對抗訓練的假設(shè)是:給輸入加上擾動之后,輸出分布和原Y的分布一致

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

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

擾動如何得來呢?這需要對抗的思想,即往增大損失的方向增加擾動

有監(jiān)督下:

半監(jiān)督下:

theta上面一個尖兒代表的是常數(shù)。目的是說在計算對抗擾動時雖然計算了梯度,但不對參數(shù)進行更新,因為當前得到的對抗擾動是對舊參數(shù)最優(yōu)的。不理解的同學可以自己看下偽代碼體會一下。

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

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

FGSM (Fast Gradient Sign Method): ICLR2015

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

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

FGM (Fast Gradient Method): ICLR2017

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

偽代碼:

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

PGD (Projected Gradient Descent): ICLR2018

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

引用[1]:

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

偽代碼:

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

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

FreeAT (Free Adversarial Training): NIPS2019

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

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

偽代碼:

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

缺點:FreeLB指出,F(xiàn)reeAT的問題在于每次的r對于當前的參數(shù)都是次優(yōu)的(無法最大化loss),因為當前r是由r(t-1)和theta(t-1)計算出來的,是對于theta(t-1)的最優(yōu)。

注:

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

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

代碼: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的目標也是提升PGD的效率,這篇文章需要的理論知識比較雄厚,這里只簡要介紹一下。

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

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

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

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

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

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

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

引用[9]:

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

然而故事的反轉(zhuǎn)來的太快,F(xiàn)reeLB指出YOPO使用的假設(shè)對于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,來跟我一起進入下一部份的學習。

FreeLB (Free Large-Batch): ICLR2020

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

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

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

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

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

FreeLB的偽代碼為:

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

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

SMART (SMoothness-inducing Adversarial Regularization)

SMART論文中提出了兩個方法:

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

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

本文只介紹其中的對抗正則方法。

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

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

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

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

總結(jié)

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

參考文獻:

[1]. 知乎:【煉丹技巧】功守道:NLP中的對抗訓練 + PyTorch實現(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]. 知乎:加速對抗訓練——YOPO算法淺析

責任編輯:xj

原文標題:一文搞懂NLP中的對抗訓練

文章出處:【微信公眾號:深度學習自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

    關(guān)注

    1

    文章

    630

    瀏覽量

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

    關(guān)注

    1

    文章

    491

    瀏覽量

    23280

原文標題:一文搞懂NLP中的對抗訓練

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    如何訓練自己的AI模型——RT-Thread×富瀚微FH8626V300L模型訓練部署教程 | 技術(shù)集結(jié)

    面對消費電子紛繁的智能檢測需求,如何讓算法持續(xù)進化?富瀚微最新發(fā)布的FH86X6V300芯片AI訓練教程,以FH8626V300L為硬件核心,手把手帶您走通從模型訓練到端側(cè)部署的完整鏈路。掌握自定義AI開發(fā)能力,即可打造更精準
    的頭像 發(fā)表于 02-09 11:51 ?387次閱讀
    如何<b class='flag-5'>訓練</b>自己的AI模型——RT-Thread×富瀚微FH8626V300L模型<b class='flag-5'>訓練</b>部署教程 | 技術(shù)集結(jié)

    訓練到推理:大模型算力需求的新拐點已至

    在大模型產(chǎn)業(yè)發(fā)展的早期階段,行業(yè)焦點主要集中在大模型訓練所需的算力投入。一個萬億參數(shù)大模型的訓練可能需要數(shù)千張GPU芯片連續(xù)運行數(shù)月,成本高達數(shù)千萬甚至上億元。但隨著大模型技術(shù)的成熟和應(yīng)用落地,推理
    的頭像 發(fā)表于 02-05 16:07 ?813次閱讀
    從<b class='flag-5'>訓練到</b>推理:大模型算力需求的新拐點已至

    MOS管到底是什么?和三極管、繼電器有什么本質(zhì)區(qū)別?

    MOS管到底是什么?和三極管、繼電器有什么本質(zhì)區(qū)別?在電子設(shè)備的“心臟”部位,藏著許多默默工作的“開關(guān)選手”。它們操控著電流的通斷,決定著設(shè)備的效率與穩(wěn)定性。其中,MOS管作為近年來高頻
    的頭像 發(fā)表于 01-07 13:46 ?543次閱讀
    MOS管<b class='flag-5'>到底是</b>什么?和三極管、繼電器有什么本質(zhì)區(qū)別?

    IGBT到底是什么?-從名稱入手來帶您了解

    對于工作需要用到IGBT、但從未專業(yè)學習過IGBT的人來說, IGBT到底是什么、它為什么叫IGBT、它的核心關(guān)鍵詞是什么、要怎么理解它 等一系列問題并無法一次性在某個地方獲取到,都需要查閱大量的資料,學習大量的基礎(chǔ)才能有個初步的了解。 為了讓更多的人在更少的時間內(nèi)掌握IGBT,我將在
    的頭像 發(fā)表于 11-25 17:38 ?1536次閱讀
    IGBT<b class='flag-5'>到底是</b>什么?-從名稱入手來帶您了解

    請問Keil的map文件到底是什么意思?

    Keil的map文件到底是什么意思?里面是如何進行相關(guān)執(zhí)行操作的
    發(fā)表于 11-25 06:59

    單片機和嵌入式,到底是什么關(guān)系?

    的關(guān)系:什么是單片機?什么是嵌入式?它們到底是不是一回事?先說說大家最先聽說的那個詞——單片機(MCU)。單片機,全稱是MicrocontrollerUnit,顧名思
    的頭像 發(fā)表于 11-14 10:28 ?1513次閱讀
    單片機和嵌入式,<b class='flag-5'>到底是</b>什么關(guān)系?

    單片機的差分信號到底是什么?

    差分信號到底是什么?通俗來講,就是驅(qū)動端發(fā)送兩個等值、反相的信號,接收端通過比較這兩個電壓的差值來判斷邏輯狀態(tài)“0”還是“1”。 差分信號的產(chǎn)生是由輸入源發(fā)出信號后經(jīng)過緩沖器和倒相器后,所產(chǎn)生
    發(fā)表于 11-12 06:44

    在Ubuntu20.04系統(tǒng)訓練神經(jīng)網(wǎng)絡(luò)模型的一些經(jīng)驗

    本帖欲分享在Ubuntu20.04系統(tǒng)訓練神經(jīng)網(wǎng)絡(luò)模型的一些經(jīng)驗。我們采用jupyter notebook作為開發(fā)IDE,以TensorFlow2為訓練框架,目標是訓練一個手寫數(shù)字識
    發(fā)表于 10-22 07:03

    IEC 到底是什么?為什么它能影響全球?

    IEC 到底是什么?為什么它能影響全球?
    的頭像 發(fā)表于 09-04 17:07 ?3571次閱讀

    晶振的 “負載電容” 到底是什么

    負載電容,到底是什么? 負載電容,簡單來說,是指晶振的兩條引線連接IC塊內(nèi)部及外部所有有效電容之和,我們可以將其看作晶振片在電路串接的電容。從更專業(yè)的角度講,它是為了使晶振能夠在其標稱頻率下穩(wěn)定
    的頭像 發(fā)表于 07-25 16:26 ?1069次閱讀

    請問編譯純rtos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?

    編譯純rtos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?
    發(fā)表于 07-11 07:22

    智能盒子到底是什么東西?昇騰310深度測評:為何能成為行業(yè)新寵?

    讓人摸不著頭腦的“智能盒子”。各位搞技術(shù)、搞工程的朋友,咱們在工作是不是經(jīng)常聽到“智能盒子”這個說法?每次聽到這個詞,我猜很多人心里都在犯嘀咕:這東西到底是個啥玩意兒?難道就是個裝了點智能軟件的普通盒子?它到底有啥用?能給咱們
    的頭像 發(fā)表于 04-27 10:46 ?1887次閱讀
    智能盒子<b class='flag-5'>到底是</b>什么東西?昇騰310深度測評:為何能成為行業(yè)新寵?

    一文給你講透!DA板卡到底是什么?它和主板又有哪些不同?

    大家好,我是老王,在電子行業(yè)干了十幾年,今天我就用“大白話”給大家講講DA板卡到底是啥,它和咱們常說的“主板”有啥區(qū)別。文章里會穿插一些表格和實際案例,保證你讀完不僅能懂,還能跟朋友吹牛!
    的頭像 發(fā)表于 04-24 16:48 ?2406次閱讀
    一文給你講透!DA板卡<b class='flag-5'>到底是</b>什么?它和主板又有哪些不同?

    陣列云從訓練到推理

    在云場景下,陣列云(分布式計算集群)從模型訓練到推理的完整技術(shù)流程可結(jié)構(gòu)化分解如下: 一、訓練階段技術(shù)實現(xiàn) 1,資源動態(tài)編排? 基于Kubernetes集群或云廠商彈性計算服務(wù)(如AWS EC2
    的頭像 發(fā)表于 03-28 08:32 ?672次閱讀

    使用燒錄器STLINK V3 mini的時候,發(fā)現(xiàn)14PIN的接口上面有一個GNDDETECT PIN,Type是輸出結(jié)構(gòu),這個PIN到底是干啥用的?

    我在使用燒錄器STLINK V3 mini的時候,發(fā)現(xiàn)14PIN的接口上面有一個GNDDETECT PIN,Type 是輸出結(jié)構(gòu),我想知道這個PIN到底是干啥用的?要怎么接才合理?
    發(fā)表于 03-14 09:39