虛擬對(duì)抗訓(xùn)練是一種有效的正則化技術(shù),在監(jiān)督學(xué)習(xí)、半監(jiān)督學(xué)習(xí)和無監(jiān)督聚類方面取得了良好的效果。
虛擬對(duì)抗訓(xùn)練已用于:
有幾種正則化技術(shù)可以防止過擬合,并有助于模型更好地推斷出看不見的例子。正則化有助于模型參數(shù)更少地依賴于訓(xùn)練數(shù)據(jù)。兩種最常用的正則化技術(shù)是Dropout和L1/L2正則化。
在L1 / L2正則化中,我們添加一個(gè)損失項(xiàng),試圖減小權(quán)重矩陣的L1范數(shù)或L2范數(shù)。較小的權(quán)重值將導(dǎo)致更簡單的模型,這些模型不易過擬合。
在Dropout中,我們?cè)谟?xùn)練時(shí)隨機(jī)忽略一些神經(jīng)元。這使得網(wǎng)絡(luò)對(duì)噪聲和輸入變化更加魯棒。
在所提到的兩種技術(shù)中,都沒有考慮輸入數(shù)據(jù)分布。
局部分布平滑度(LDS)可以定義為模型輸出分布相對(duì)于輸入的平滑度。我們不希望模型對(duì)輸入中的小擾動(dòng)敏感。我們可以說,對(duì)于模型輸入的微小變化,模型輸出不應(yīng)該有大的變化。
在LDS正則化中,模型分布的平滑性得到獎(jiǎng)勵(lì)。它也是網(wǎng)絡(luò)上參數(shù)的不變量,僅取決于模型輸出。具有平滑的模型分布應(yīng)該有助于模型更好地推廣,因?yàn)槟P蛯榭床灰姷臄?shù)據(jù)點(diǎn)提供類似的輸出,這些數(shù)據(jù)點(diǎn)接近訓(xùn)練集中的數(shù)據(jù)點(diǎn)。一些研究表明,使模型對(duì)小的隨機(jī)擾動(dòng)具有魯棒性對(duì)于正則化是有效的。
LDS正則化的一種簡單方法是通過在實(shí)際數(shù)據(jù)點(diǎn)上應(yīng)用小的隨機(jī)擾動(dòng)來生成人工數(shù)據(jù)點(diǎn)。之后,鼓勵(lì)模型為真實(shí)和擾動(dòng)的數(shù)據(jù)點(diǎn)提供類似的輸出。
領(lǐng)域知識(shí)也可用于產(chǎn)生更好的擾動(dòng)。例如,如果輸入是圖像,則可以使用各種圖像增強(qiáng)技術(shù),例如翻轉(zhuǎn)、旋轉(zhuǎn)、變換顏色。
輸入數(shù)據(jù)轉(zhuǎn)換的示例
虛擬對(duì)抗訓(xùn)練是一種有效的局部分配平滑性技術(shù)。采用成對(duì)的數(shù)據(jù)點(diǎn),這些數(shù)據(jù)點(diǎn)在輸入空間中非常接近,但在模型輸出空間中非常接近。然后訓(xùn)練模型以使它們的輸出彼此接近。為此,采用給定的輸入并且發(fā)現(xiàn)擾動(dòng),模型給出非常不同的輸出。然后,模型因擾動(dòng)而對(duì)靈敏度進(jìn)行處罰。
第1步:生成對(duì)抗圖像
第2步:盡量減少KL散度
虛擬對(duì)抗訓(xùn)練的關(guān)鍵步驟是:
在找到對(duì)抗擾動(dòng)和變換輸入之后,更新模型的權(quán)重,使得KL散度最小化。這將使模型對(duì)不同的擾動(dòng)具有魯棒性。通過梯度下降最小化以下?lián)p失:
在虛擬對(duì)抗訓(xùn)練期間,模型對(duì)于不同的輸入擾動(dòng)變得更加魯棒。隨著模型變得更加穩(wěn)健,產(chǎn)生擾動(dòng)變得更加困難并且觀察到損失的下降。
可以將此方法視為與生成性對(duì)抗網(wǎng)絡(luò)類似。但是有幾個(gè)不同之處:
虛擬對(duì)抗訓(xùn)練可以被認(rèn)為是一種有效的數(shù)據(jù)增強(qiáng)技術(shù),我們不需要先前的領(lǐng)域知識(shí)。這可以應(yīng)用于所有類型的輸入分布,因此對(duì)于真正的'無監(jiān)督學(xué)習(xí)'是有用的。
虛擬對(duì)抗訓(xùn)練與對(duì)抗訓(xùn)練有何不同?
在對(duì)抗訓(xùn)練中,標(biāo)簽也用于產(chǎn)生對(duì)抗性擾動(dòng)。產(chǎn)生擾動(dòng)使得分類器的預(yù)測(cè)標(biāo)簽y'變得與實(shí)際標(biāo)簽y不同。
在虛擬對(duì)抗訓(xùn)練中,不使用標(biāo)簽信息,僅使用模型輸出生成擾動(dòng)。產(chǎn)生擾動(dòng)使得擾動(dòng)輸入的輸出不同于原始輸入的模型輸出(與地面實(shí)況標(biāo)簽相反)。
實(shí)現(xiàn)虛擬對(duì)抗訓(xùn)練
現(xiàn)在我們將使用Tensorflow和Keras實(shí)現(xiàn)基本的虛擬對(duì)抗訓(xùn)練。
首先,在Keras中定義神經(jīng)網(wǎng)絡(luò)
network = Sequential()network.add( Dense(100 ,activation='relu' , input_shape=(2,)))network.add( Dense( 2 ))
定義model_input 中,logits p_logit通過將輸入到網(wǎng)絡(luò)和概率得分p通過在logits施加SOFTMAX活化。
model_input = Input((2,))p_logit = network( model_input )p = Activation('softmax')( p_logit )
為了產(chǎn)生對(duì)抗性擾動(dòng),從隨機(jī)擾動(dòng)開始r并使其成為單位范數(shù)。
r = tf.random_normal(shape=tf.shape( model_input ))r = make_unit_norm( r )
擾動(dòng)輸入的輸出logits將是 p_logit_r
p_logit_r = network( model_input + 10*r )
現(xiàn)在計(jì)算來自輸入和擾動(dòng)輸入的log的KL偏差。
kl = tf.reduce_mean(compute_kld( p_logit , p_logit_r ))
為了獲得對(duì)抗性擾動(dòng),我們需要r使KL-發(fā)散最大化。因此,采取kl相對(duì)于的梯度r。對(duì)抗性擾動(dòng)將是梯度。我們使用該stop_gradient函數(shù)是因?yàn)槲覀兿M鹯_vadv在反向傳播時(shí)保持固定。
grad_kl = tf.gradients( kl , [r ])[0]
最后,規(guī)范化范數(shù)對(duì)抗性擾動(dòng)。我們將范數(shù)設(shè)定r_vadv為一個(gè)較小的值,即我們想要沿著對(duì)抗方向前進(jìn)的距離。
r_vadv = make_unit_norm( r_vadv )/3.0
現(xiàn)在我們有對(duì)抗擾動(dòng)r_vadv ,模型給出了非常大的輸出差異。我們需要在模型中添加一個(gè)損失,這會(huì)損害模型,使其具有與原始輸入和擾動(dòng)輸入的輸出相比具有較大KL偏差的模型。
p_logit_r_adv = network( model_input + r_vadv )vat_loss = tf.reduce_mean(compute_kld( tf.stop_gradient(p_logit), p_logit_r_adv ))
最后,構(gòu)建模型并附加vat_loss。
model_vat = Model(model_input , p )model_vat.add_loss( vat_loss )model_vat.compile( 'sgd' , 'categorical_crossentropy' , metrics=['accuracy'])
現(xiàn)在讓我們使用一些合成數(shù)據(jù)來訓(xùn)練和測(cè)試模型。該數(shù)據(jù)集是二維的,有兩個(gè)類。1類數(shù)據(jù)點(diǎn)位于外環(huán)中,2類數(shù)據(jù)點(diǎn)位于內(nèi)環(huán)中。我們每班僅使用8個(gè)數(shù)據(jù)點(diǎn)進(jìn)行培訓(xùn),并使用1000個(gè)數(shù)據(jù)點(diǎn)進(jìn)行測(cè)試。
合成數(shù)據(jù)集在2D平面上的圖
讓我們通過調(diào)用fit函數(shù)來訓(xùn)練模型。
model.fit( X_train , Y_train_cat )
現(xiàn)在,讓我們可視化模型的輸出空間以及訓(xùn)練和測(cè)試數(shù)據(jù)。
模擬決策邊界與虛擬對(duì)抗訓(xùn)練
對(duì)于這個(gè)示例數(shù)據(jù)集,非常明顯的是,具有虛擬對(duì)抗訓(xùn)練的模型已經(jīng)更好地推廣并且其決策邊界也在于測(cè)試數(shù)據(jù)的邊界。
沒有虛擬對(duì)抗訓(xùn)練的模型決策邊界
對(duì)于沒有虛擬對(duì)抗訓(xùn)練的模型,我們看到訓(xùn)練數(shù)據(jù)點(diǎn)有些過度擬合。在這種情況下,決策邊界不好并且與其他類重疊。
虛擬對(duì)抗訓(xùn)練已經(jīng)在半監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)中的各種應(yīng)用中顯示出令人難以置信的結(jié)果。
虛擬對(duì)抗訓(xùn)練用于半監(jiān)督學(xué)習(xí):虛擬對(duì)抗性訓(xùn)練在半監(jiān)督學(xué)習(xí)中表現(xiàn)出良好的效果。在這里,我們有大量未標(biāo)記的數(shù)據(jù)點(diǎn)和一些標(biāo)記的數(shù)據(jù)點(diǎn)。應(yīng)用vat_loss未標(biāo)記的集合和標(biāo)記集合上的監(jiān)督損失可以提高測(cè)試精度。該方法優(yōu)于其他幾種半監(jiān)督學(xué)習(xí)方法。
虛擬對(duì)抗梯形網(wǎng)絡(luò):已經(jīng)顯示出半監(jiān)督分類的有希望的結(jié)果。在那里,在每個(gè)輸入層,添加隨機(jī)噪聲并且訓(xùn)練解碼器以對(duì)每層的輸出進(jìn)行去同化。在虛擬對(duì)抗梯形網(wǎng)絡(luò)中,不使用隨機(jī)噪聲,而是使用對(duì)抗性噪聲。
使用自增強(qiáng)訓(xùn)練的無監(jiān)督聚類:這里的目標(biāo)是在不使用任何標(biāo)記樣本的情況下將數(shù)據(jù)點(diǎn)聚類在固定數(shù)量的聚類中。是一種用于無監(jiān)督聚類的技術(shù)。這里輸入和模型輸出之間的相互信息被最大化。通過添加虛擬對(duì)抗訓(xùn)練擴(kuò)展了該方法。隨著互信息的丟失,應(yīng)用了vat_loss。在添加虛擬對(duì)抗訓(xùn)練后,它們顯示出很大的改進(jìn)。
本文,我們討論了一種稱為虛擬對(duì)抗訓(xùn)練的有效正則化技術(shù)。我們還使用Tensorflow和Keras進(jìn)行實(shí)施。我們觀察到,當(dāng)訓(xùn)練樣本很少時(shí),含虛擬對(duì)抗的模型表現(xiàn)更好。我們還討論了使用虛擬對(duì)抗訓(xùn)練的各種其他作品。
聯(lián)系客服