甘桃菁,朱文斌
(華南理工大學工商管理學院,廣東廣州 510000)
近年來,深度學習網(wǎng)絡(luò)在機器翻譯[1]、圖像分類[2]等領(lǐng)域都有很好的表現(xiàn)。但是深度學習網(wǎng)絡(luò)具有復雜結(jié)構(gòu),有數(shù)量眾多的節(jié)點和參數(shù),面臨著過擬合的問題。Dropout 是由Hinton 等人[3]提出的一種正則化算法,通過隨機丟失一些網(wǎng)絡(luò)節(jié)點,將節(jié)點的輸出置為0,以減輕過擬合問題。名詞dropout指將神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元去除,同時也會暫時移除該神經(jīng)元的所有輸入和輸出連接。
在一個完全連接的神經(jīng)網(wǎng)絡(luò)中,一層網(wǎng)絡(luò)的定義如下:
其中,φ是一個非線性激活函數(shù),如ReLU、tanh和sigmoid 等。xj是一個神經(jīng)元的輸出,y是該層神經(jīng)元的輸出,w和b分別是權(quán)重和偏差。
若增加標準的dropout,則一層的定義如下:
每個rj服從概率為p的伯努利分布,其值為0 或1。使用rj對每一個神經(jīng)元的輸出xj進行控制。只有當rj=1時,該神經(jīng)元才會輸出,否則為0。
在圖1 中,網(wǎng)絡(luò)一為標準的神經(jīng)網(wǎng)絡(luò)。網(wǎng)絡(luò)二是在網(wǎng)絡(luò)一的基礎(chǔ)上運用dropout,丟棄左邊的輸入節(jié)點,此節(jié)點的輸出連接均失效。網(wǎng)絡(luò)三是在網(wǎng)絡(luò)二的基礎(chǔ)上再丟棄隱藏層的兩個節(jié)點,此兩個節(jié)點的輸入和輸出連接都失效,無法再傳輸任何信息。
圖1 標準網(wǎng)絡(luò)和運用dropout后的網(wǎng)絡(luò)示例圖
圖2 變領(lǐng)域搜索算法的示例圖
圖3 使用變領(lǐng)域搜索的思想看Dropout
自從dropout提出以來,它已經(jīng)被成功地應(yīng)用于許多深度學習模型[4-5]。人們也基于dropout 提出許多變體[6-9]。Dropout在訓練網(wǎng)絡(luò)的每次迭代中,會以概率p隨機丟棄節(jié)點。因此有學者提出自適應(yīng)調(diào)整丟棄率p的方法[6],不需要再提前固定概率p。Wan 等人[8]提出DropConnect,不再是隨機丟棄某個神經(jīng)元,而是隨機丟棄某個神經(jīng)元的某個連接權(quán)重。
為了探究Dropout 良好表現(xiàn)的原因,各個研究者從不同的角度對其進行分析。Wager等人[10]將dropout視為一種自適應(yīng)L2 正則化技術(shù),并提出dropout 和自適應(yīng)優(yōu)化算法AdaGrad[11]相關(guān)。還有一些研究試圖用不同的理論去解釋dropout。Gao 和Zhou[12]表明dropout 可以幫助降低深層神經(jīng)網(wǎng)絡(luò)的拉德馬赫復雜性。而Gal 等人[13]則從貝葉斯的角度討論dropout,把它當作深度高斯過程的近似。
在dropout 被提出的原始論文中,Hinton 認為dropout 隨機使一些神經(jīng)元的輸出變?yōu)?,打破神經(jīng)元之間的固定聯(lián)系,可以防止神經(jīng)元之間的協(xié)同適應(yīng)[3-5]。協(xié)同適應(yīng)可以解釋為一個過程,通過這個過程,多個節(jié)點的表現(xiàn)會趨向一致,互相之間更加依賴。這種現(xiàn)象也稱為共同適用問題[13-14]。與此同時,Hinton 還將dropout 描述為一種集成技術(shù),用共享參數(shù)集成許多子網(wǎng)絡(luò)。因此,Hinton認為在訓練過程中丟棄神經(jīng)元實際上是訓練指數(shù)數(shù)量的稀疏網(wǎng)絡(luò),并在測試階段對這些網(wǎng)絡(luò)的結(jié)果進行平均,這個過程也稱為模型組合。
Dropout是一種模型組合方法,這與求解組合優(yōu)化時常用的一種算法有相似之處:變鄰域搜索算法(Variable Neighborhood Search,VNS)[15]。VNS 是Mladenovic和Hansen 提出的一種改進的局部搜索算法。局部搜索算法是一種近似算法,其基本原理是在鄰近解中不斷迭代,使目標函數(shù)逐步優(yōu)化,直至不能再優(yōu)化為止。爬山法、模擬退火算法都屬于局部搜索算法。在搜索過程中,VNS是在不同的領(lǐng)域中交替地進行局部搜索,因此更容易跳出局部最優(yōu)解。若用爬山的思想來解釋變領(lǐng)域搜索,相當于爬到最高的山峰后,再變化到另一個爬山地形,繼續(xù)爬到該地形的最高點。
Dropout 在每次訓練時會隨機丟棄神經(jīng)元,相當于每次訓練時隨機切換一個新的訓練網(wǎng)絡(luò)。因此可以將不同的訓練網(wǎng)絡(luò)視作不同的搜索區(qū)域,每次的訓練過程視為在當前搜索區(qū)域上尋找最大或者最小值。因此,可以用變領(lǐng)域搜索算法的思想來解釋Dropout。
通常用于訓練神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)集較大,所以在每次訓練時只會選擇一部分的數(shù)據(jù)用來訓練。人們通常將這稱為批訓練法,其中批也稱為batch。若一個完整的數(shù)據(jù)集有100個數(shù)據(jù),每個批次的大小為5,則整個數(shù)據(jù)集會分為20 個batch 數(shù)據(jù)。因此Dropout 是使用不同的網(wǎng)絡(luò)去訓練不同batch的數(shù)據(jù)。
但使用Dropout算法后的訓練時間通常是具有相同架構(gòu)的標準神經(jīng)網(wǎng)絡(luò)的2~3 倍。這可能是因為每個網(wǎng)絡(luò)在一個batch 的數(shù)據(jù)上訓練一次后,就被隨機替換成下一個網(wǎng)絡(luò)。這個過程相當于爬山還沒爬到局部最高點,僅僅是在最高點的方向上前進一步,就切換成下一個爬山地形。因此標準的Dropout 與VNS有一定差別。參照VNS 的思想,可以提出一個基于Dropout的算法:DropoutVNS,其與標準Dropout的不同點在于切換訓練網(wǎng)絡(luò)的標準不同。
不同于Dropout 隨機切換訓練網(wǎng)絡(luò),DropoutVNS使用多個batch 數(shù)據(jù)訓練到穩(wěn)定時再切換網(wǎng)絡(luò)?!胺€(wěn)定”被定義為相鄰兩次batch 數(shù)據(jù)得到的訓練指標相近。若訓練時使用的評判指標為a,第i次訓練得到的指標結(jié)果為ai,則第i次訓練穩(wěn)定的公式表達如下:
其中,ε稱為穩(wěn)定參數(shù),可以選擇10-5、10-6等。在后續(xù)實驗中會評估不同的ε對模型結(jié)果的影響。若可隨機丟棄的神經(jīng)元個數(shù)為N,則dropout算法在每次切換網(wǎng)絡(luò)時,可以在2N個網(wǎng)絡(luò)中選擇,定義這些網(wǎng)絡(luò)的集合為D。若整個數(shù)據(jù)集可以分為M個batch數(shù)據(jù),則標準dropout 會切換M 次網(wǎng)絡(luò),而dropoutVNS 的切換次數(shù)會小于等于M。
為了更好地解釋dropoutVNS,這里定義三個訓練算法:標準算法、dropoutVNS以及dropout。
1)標準算法:一直使用一個完整網(wǎng)絡(luò)來訓練。
2)dropoutVNS:使用多個batch數(shù)據(jù)訓練同一個網(wǎng)絡(luò)到穩(wěn)定時,再隨機選擇下一個網(wǎng)絡(luò)。其中每個網(wǎng)絡(luò)都是屬于集合D,每個網(wǎng)絡(luò)會以一定概率丟棄節(jié)點。
3)dropout:每輸入一個batch的數(shù)據(jù)就切換一個網(wǎng)絡(luò)來訓練,每次會隨機刪掉完整網(wǎng)絡(luò)中的某些節(jié)點。其中每個網(wǎng)絡(luò)都是屬于集合D。
DropoutVNS 與dropout 最大的不同在于,切換網(wǎng)絡(luò)時dropoutVNS是使用多個batch數(shù)據(jù)訓練到穩(wěn)定后再切換下一個網(wǎng)絡(luò),而dropout 是每個batch 數(shù)據(jù)都隨機切換一個網(wǎng)絡(luò)。
在圖4 中,每個算法都訓練5 個batch 的數(shù)據(jù),而標準算法的切換次數(shù)為0,一直使用完整網(wǎng)絡(luò)訓練。Dropout 算法的切換次數(shù)為5,每訓練一個batch 數(shù)據(jù)就會隨機切換一個網(wǎng)絡(luò),DropoutVNS的切換次數(shù)為2,只在訓練穩(wěn)定時才會切換網(wǎng)絡(luò)。
圖4 不同算法的訓練示例圖
為了評估dropoutVNS對模型性能的提升效果,在三個圖像分類數(shù)據(jù)集上分別進行實驗分析:MNIST[16]、CIFAR-10、CIFAR-100[17]。
與Hinton等人[3]在2012年發(fā)表的論文中采用的網(wǎng)絡(luò)結(jié)構(gòu)一致,在MNIST上使用只有全連接層的神經(jīng)網(wǎng)絡(luò),在CIFAR-10、CIFAR-100 上使用卷積神經(jīng)網(wǎng)絡(luò)。在這些實驗中,目標是研究dropoutVNS相較于標準算法和dropout算法,是否能夠提高模型的預測性能。
本次實驗數(shù)據(jù)集使用MNIST 數(shù)據(jù)集。網(wǎng)絡(luò)結(jié)構(gòu)為784-1024-1024-1024-10,有三個節(jié)點數(shù)為1 024的隱藏層,輸入和輸出節(jié)點數(shù)分別為784和10。激活函數(shù)使用ReLU。訓練時使用批訓練方法,每個batch有60個數(shù)據(jù),共有1 000個batch。最后使用整個數(shù)據(jù)集訓練100次,即epoch為100。一共重復5次實驗,每次實驗取最后一個epoch 在測試集上的error 值,然后計算5次實驗的error的平均值和標準差。
選擇3 個穩(wěn)定參數(shù)ε,從0.000 01,依次減少100倍,直到0.000 000 001,目的是觀察其對模型性能的影響。表1 總結(jié)了3 種算法,以及dropoutVNS 中不同穩(wěn)定參數(shù)在MNIST 數(shù)據(jù)集上的測試集error 值以及訓練時間。
表1 不同算法在MNIST數(shù)據(jù)集上的測試集error值以及訓練時間
其中,測試集error 值的單位為%,測試集error 值為1.89,指的是有1.89%的圖像被錯誤分類,剩下的圖像被正確歸類。因此error也稱為分類錯誤率,而準確率=1-錯誤率。在測試集error 值中,±符號后面的數(shù)字是相應(yīng)的標準差。丟棄概率p固定為0.5,即網(wǎng)絡(luò)中的每個節(jié)點有50%的可能被丟棄。穩(wěn)定參數(shù)為0.000 01 指的是穩(wěn)定條件為兩次訓練的error 之差的絕對值小于0.000 01,當達到穩(wěn)定條件時dropoutVNS 會切換一次網(wǎng)絡(luò)。
從表1 可知,在模型性能方面,當穩(wěn)定參數(shù)為0.000 000 1時,dropoutVNS與dropout的預測性能相差不大。而在其他的穩(wěn)定參數(shù)下,dropoutVNS均比dropout 在模型預測性能方面有略微提升??傮w而言,dropoutVNS 相比dropout 可以提升模型的預測性能。而dropoutVNS 也比標準的算法網(wǎng)絡(luò)提升約3%的準確率。
在訓練時間方面,無論選擇哪個穩(wěn)定參數(shù),dropoutVNS 的訓練時間都比dropout 算法的訓練時間少。即在MNIST數(shù)據(jù)集上,dropoutVNS使用更少的訓練時間,就達到與dropout相同甚至比其更好的預測性能。
本次實驗使用CIFAR-10數(shù)據(jù)集。網(wǎng)絡(luò)結(jié)構(gòu)則為卷積神經(jīng)網(wǎng)絡(luò),共有三個卷積層,卷積核分別為96、128、256,后接兩個節(jié)點數(shù)為1 024 的全連接層,最后的輸出節(jié)點數(shù)為10。在每個卷積層和全連接層后面均加入dropout或者dropoutVNS,激活函數(shù)為ReLU,學習率為0.001,使用Momentum 優(yōu)化器并且momentum值為0.9。在批訓練參數(shù)方面,每個batch 有64 個數(shù)據(jù),因此共有781個batch,并使用整個數(shù)據(jù)集訓練300次。其余實驗設(shè)置與使用MNIST 數(shù)據(jù)集的實驗設(shè)置相同。
從表2可知,在不同的穩(wěn)定參數(shù)下,dropoutVNS均比dropout 可以更好地提升模型預測能力,其中,最好的是穩(wěn)定參數(shù)為0.000 01 的dropoutVNS,其error 相較于dropout 減少約1%。而dropoutVNS 也比標準的算法網(wǎng)絡(luò)提升約4%的準確率。
表2 不同算法在CIFAR-10數(shù)據(jù)集上的測試集error值以及訓練時間
在訓練時間方面,兩者相差不大。即dropoutVNS使用幾乎相同的時間,就比dropout 算法提升約1%的準確率。
本次實驗使用預測難度更大的數(shù)據(jù)集CIFAR-100,CIFAR-100 相比CIFAR-10 擁有更多的圖像類別。網(wǎng)絡(luò)結(jié)構(gòu)同樣選用卷積神經(jīng)網(wǎng)絡(luò),有三個卷積層,卷積核分別為96、128、256,兩個節(jié)點數(shù)為1 024的全連接層,輸出節(jié)點數(shù)為100。在卷積網(wǎng)絡(luò)的卷積層和全連接層后面均加入dropout或dropoutVNS,激活函數(shù)為ReLU,學習率為0.001,使用Momentum優(yōu)化器且momentum值為0.9。在整個數(shù)據(jù)集的訓練次數(shù)上,因為CIFAR-100 更難訓練,所以epoch 增大到700。其余實驗設(shè)置與使用CIFAR-10 數(shù)據(jù)集的實驗設(shè)置相同。
從表3可知,在不同的穩(wěn)定參數(shù)下,dropoutVNS均比dropout在模型預測性能方面有較大提升。其中,最好的是穩(wěn)定參數(shù)為0.000 000 1的dropoutVNS,相較于dropout 減少約2%的測試集error 值。而dropoutVNS也比標準的算法網(wǎng)絡(luò)提升約6%的準確率。
表3 不同算法在CIFAR-100數(shù)據(jù)集上的測試集error值以及訓練時間
在訓練時間方面,相較于dropout,dropoutVNS 使用的訓練時間更少,可以減少約20分鐘的時間。即在CIFAR-100 數(shù)據(jù)集上,dropoutVNS 使用更少的時間,就可以比dropout算法提升約2%的準確率。
分別在三個常用的圖像分類數(shù)據(jù)集中,比較dropoutVNS、dropout 和標準網(wǎng)絡(luò)的性能。同時,在使用dropoutVNS算法時選取不同的穩(wěn)定參數(shù),分析穩(wěn)定參數(shù)對模型性能的影響。以上實驗結(jié)果說明,dropout-VNS相較于標準網(wǎng)絡(luò)能大大提高模型的預測能力,其中在CIFAR-100 數(shù)據(jù)集上可以提升約6%的準確率。而dropoutVNS 相較于dropout 也能實現(xiàn)更好的模型預測性能。在MNIST數(shù)據(jù)集上,dropoutVNS使用更少的訓練時間,就達到與dropout相同甚至比其更好的預測性能。在CIFAR-10 數(shù)據(jù)集上,dropoutVNS 使用幾乎相同的訓練時間就可以獲得更小的錯誤率。在CIFAR-100數(shù)據(jù)集上,dropoutVNS使用更少的訓練時間就獲得更小的錯誤率。
Dropout 切換訓練網(wǎng)絡(luò)與VNS 變化領(lǐng)域搜索有相似之處,可以將Dropout 看作是一種特殊的變領(lǐng)域搜索算法。但Dropout 在切換訓練網(wǎng)絡(luò)時是完全隨機的,而VNS 是在找到局部最優(yōu)點后才變化領(lǐng)域。因此,在標準Dropout的基礎(chǔ)上進行改進,將切換訓練網(wǎng)絡(luò)的標準改為穩(wěn)定后再切換,從而提出一種新的正則化方法:DropoutVNS。在三個圖像分類數(shù)據(jù)集的實驗結(jié)果均表明,DropoutVNS明顯優(yōu)于標準的網(wǎng)絡(luò),在CIFAR-100數(shù)據(jù)集上可以提升約6%的準確率。與此同時DropoutVNS 也優(yōu)于Dropout,可以提升模型預測性能,提高圖像分類的準確性,減少訓練時間。