周安眾,羅 可
(長沙理工大學 計算機與通信工程學院,長沙 410114) E-mail:sprite4@163.com
卷積神經網絡模型擁有大量的可訓練參數,使其具有強大的特征提取能力,在機器學習領域表現優異[1].并且通過增加網絡層數和卷積核數量可以進一步提升其性能[2].然而隨著層數和卷積核數的增加,模型變得更加復雜,大量參數的學習受限于訓練數據的規模,當訓練數據不足時,常常出現過擬合現象,導致模型泛化能力變差.怎樣減小過擬合問題的影響就成為了近年來在卷積神經網絡中急需解決的一個問題.
在實際應用中,組合多個模型幾乎總可以獲得比單一模型更好的結果.但是對于越來越復雜的卷積神經網絡,訓練多個模型變得越來越困難.為了降低模型的復雜度,又不影響特征表達能力,常用的方法是對參數施加額外限制,間接減少自由變量的參數數量,稱為正則化方法[3].L2正則化[4]是其中一種簡單且有效的方法,在權值優化過程中使模型傾向于選擇較小的參數,避免過大參數的影響.Hinton等[5]提出的Dropout是另外一種正則化方法,在網絡對不同的樣本進行訓練時以一定概率隨機將部分節點的輸出值置0,相當于將此節點從網絡中刪除,每個樣本只訓練原網絡的一部分,測試時再組合所有部分形成完整的網絡.該方法在機器學習的許多問題中都取得了不錯的效果.DropConnect[6]采用類似的方法,通過隨機刪除部分連接權值可以從原網絡中得到更多的局部結構,最后通過組合所有部分取得了更好的結果.
Dropout用固定的概率隨機從原網絡中刪除部分節點,由于每個節點被刪除的概率相等,保留下的網絡結構對所有樣本服從統一分布,沒有對不同樣本進行區分,都具有同等的特征提取能力.基于這種想法,本文希望局部結構對樣本的特征是敏感的,根據文獻[7],神經網絡對不同的刺激是有選擇性激活的,如顏色、材質、邊緣等,只提取自己感興趣的部分,相當于從原始的稠密數據中分離出關鍵特征數據.這個特點使神經網絡表現出稀疏性,對特征感興趣的節點有較大的激活值,不感興趣的節點激活值為0或者接近于0.因此,需要保留對特征感興趣的節點以提高模型的判別性.
基于以上討論,本文提出一種稀疏性Dropout(Sparse Dropout,S-Dropout)正則化方法,其基本思想是更改局部結構對樣本的統一分布,尋找對特征感興趣的節點.為此,在Dropout的基礎上增加稀疏性限制,訓練時以更大的概率刪除激活值較低的節點.通過該方法訓練的卷積神經網絡不僅組合了多個局部結構,同時利用稀疏性提高了每個局部結構的特征提取能力,使模型的泛化能力得到提升.
2012年文獻[5]提出了Dropout正則化方法,在神經網絡中得到了廣泛應用,能有效防止模型過擬合問題.該方法在神經網絡的訓練階段,前向傳播時以概率P=0.5隨機刪除掉部分節點,這樣網絡在傳播時只會通過保留下的節點,如圖1所示,相當于從原網絡中隨機選出一個局部結構.

圖1 使用Dropout正則化訓練時的網絡結構Fig.1 Use dropout to regularize the structure of the network during training
訓練過程中刪除節點的方法是強制將此節點的激活值置0,此時節點在網絡中沒有任何貢獻,誤差也不會經過輸出值為0的節點反向傳播.節點激活值的計算如公式(1)所示:
r=m·f(wx+b)
mj~Bernoulli(p)
(1)
公式(1)中x是輸入,f是激活函數,m是一個二值掩膜矩陣,m中的元素mj以伯努利概率P隨機取值0或1.每個節點激活后乘以m中對應元素得到最后的輸出值r,mj為1的對應節點輸出值保留下來,mj為0的對應節點輸出值為0.
在測試階段,將刪除的節點恢復以組合所有的局部網絡,此時網絡結構的改變使總的輸出值發生改變,如圖2所示,為了保證輸出值不變,測試階段的節點激活值需要乘以一個比例系數,即節點被刪除的概率P,相當于對所有局部網絡取平均值.

圖2 訓練階段與測試階段節點的輸出值Fig.2 Output value of the training phase and the test phase node
此方法的優點是隨機產生的局部網絡擁有比原網絡更少的參數,不容易過擬合,而且每次產生的局部網絡的參數共享自原網絡的一部分,雖然總的網絡個數增加了,但是參數沒有增加,在沒有提升訓練難度的情況下可以得到多個網絡的訓練結果,測試時再組合這些局部網絡,使泛化性得到提升.另一方面,神經網絡的節點之間有相互合作能力,這種合作能力很容易擬合到一些噪聲,隨機的選擇節點打破了合作表達的聯系,能有效防止模型的過擬合問題.
自從Olshausen等[8]發現自然圖像具有稀疏結構,大量研究關注于稀疏編碼和稀疏特征表示[9,10],用于解決機器學習中的各項任務.當前深度學習中一個明確的目標是從數據中提取出關鍵特征.大量的訓練樣本富含稠密的信息,其中可能包含著大小不同的關鍵特征,假如神經網絡具有稀疏性,可以將稠密特征轉換為稀疏特征,就具有更強的魯棒性.Bouthillier等[11]通過分析Dropout正則化方法,指出局部空間特征有更好的區分性,將數據映射為特征后,特征之間的重疊度越低越好,而降低重疊度的主要方法就是使特征產生稀疏性,稀疏特征有更大可能線性可分,或者對非線性映射機制有更小的依賴.Wan等[6]將神經網絡激活值二值化后也能得到不錯的效果,不僅說明了稀疏性的正確性,同時表明激活值不是最重要的,重要的是節點是否被激活,當一個節點被激活時,表示該特征存在于一個子空間中,模型重點關注子空間中的特征.線性修正單元激活函數(Rectified Linear Units,ReLU)[12]正是利用了稀疏性的特點,將小于0的激活值置0,在深度神經網絡中被大量采用.
為了利用Dropout組合多個模型的能力,同時使模型對局部關鍵特征有更好的表達能力,本文受稀疏自編碼器的啟發,對節點激活值增加稀疏性限制,提出S-Dropout正則化方法.根據激活值的大小選擇節點,使更多激活值較低的節點輸出值為0,相當于將這部分節點從網絡中刪除,而不再采用Dropout中所有節點都以相等的概率被刪除的方式.對模型中的某一層施加稀疏性限制時,取這一層所有節點激活值的中值,大于中值的定義為高激活值節點,小于中值的定義為低激活值節點.高激活值的節點代表網絡對樣本感興趣的部分,對分類結果起到關鍵作用,是主要保留的節點.然而對于激活值小的那部分節點并不是完全沒有作用.Ngiam等[13]的研究發現,在樣本空間不足的情況下,需要通過全局訓練樣本的共同作用才足以表達出測試樣本.Sun等[14]依據節點之間的相關性對網絡進行裁剪,指出相關性接近0的弱相關節點對相關性高的節點有補充作用,可以提高分類結果.基于此,為了進一步提升模型的表達能力,增加一個隨機因素,保留一部分低激活值節點.首先考慮S-Dropout在全連接層上的應用,如圖3所示,模型隨機保留大部分高激活值的節點,同時隨機選擇小部分低激活值節點保留,稀疏化的模型使得分類能力提高,而隨機性的加入使模型有更強的魯棒性[15].

圖3 使用稀疏性Dropout訓練時的網絡結構Fig.3 Use sparse dropout to regularize the structure of the network during training
根據上述討論,S-Dropout正則化方法定義了兩個參數需要優化,稀疏度S和隨機因素λ,S(0
S|r|=(1-λ)S|rm+|+λS|rm-|
(2)
|r|代表一層中節點的數量,|rm+|和|rm-|分別代表高激活值節點和低激活值節點數量.本文中S取0.5,λ取0.7,實驗部分分析取值原因.于是在訓練階段全連接層將刪除50%的節點,其中的70%為低激活值節點,30%為高激活值節點.節點的激活值計算公式同公式(1),不同的是掩膜矩陣的表示,如公式(3)所示.
r=m·f(wx+b)
mj~Bernoulli[(1-λ)S],r=rm+
mj~Bernoulli(λS),r=rm-
(3)
由于每個節點被刪除的概率不再相等,測試階段組合所有局部網絡時,不能簡單地采用2.1節Dropout的方法乘以概率P.此時,為了達到類似Dropout平均局部網絡的目的,測試階段激活值需要乘以一個比例系數α,使得測試階段激活值總和與訓練階段激活值的期望相等,計算方法如公式(4)、公式(5)所示.
(4)
(5)
公式(4)中E[r]是訓練時S-Dropout層激活值的期望,由高激活值節點和低激活值節點的期望相加得到,然后根據公式(5)計算期望與激活值總和的比值α,最后測試階段的節點激活值乘以α得到輸出值.
將稀疏性限制應用在卷積層時與全連接層遵循一樣的流程,不同的是計算各項參數時不再是針對整個層的節點,而是根據每一個卷積層的各個特征圖分別計算.對于一個特征圖,首先找到特征圖中所有節點激活值的中值,然后根據中值找出特征圖中的高激活值節點和低激活值節點,最后,同樣根據公式(4)、公式(5)計算訓練階段和測試階段的激活值.圖4給出了整個算法的流程.

圖4 稀疏性Dropout正則化的計算流程
Fig.4 Calculation process of sparse dropout regularization
通過對Dropout增加稀疏性限制,卷積神經網絡每次迭代訓練時的結構都不相同,而每次結構的改變都使部分節點有選擇地激活,相當于產生了不同的激活路徑,路徑上的節點只對特定樣本敏感,去除了不相關因素的干擾,使得卷積神經網絡成為一個大小可變的容器,處理不同的樣本變得更加靈活.另一方面,對于難以求得的全局最優解,從多個容易求得的局部解去逼近,這也是正則化思想的體現,可以更好地從有效的數據維度上,學習到相對稀疏的特征,起到自動提取關鍵特征的效果.
為了對比本文方法在卷積神經網絡上的效果,使用L2、Dropout、S-Dropout正則化方法分別在MNIST[16],CIFAR-10/100[17]數據集上進行比較.根據不同的數據集,實驗使用的卷積神經網絡略有不同,以下幾點是共同使用的相同策略:
1)訓練采用隨機梯度下降算法,每個樣本都進行了預處理,減去所有樣本的均值.
2)所有卷積層和全連接層都使用ReLU激活函數,且卷積層后都有池化層進行降采樣.
3)訓練使用標準數據集中的數據,沒有進行數據擴充.
4)權值參數采用均值為0,方差為1的高斯分布隨機初始化,由于Dropout和S-Dropout方法具有隨機性,對這兩種方法,實驗都訓練了5個模型,結果取其平均值.
5)實驗對比了Dropout與S-Dropout分別應用在全連接層和卷積層的效果,參數P和S在全連接層設為0.5,卷積層為0.2,λ在所有層的取值都為0.7.
MNIST由大小為28×28 的手寫數字圖片組成,數據集中包含60000 張訓練圖片和10000 張測試圖片.LeNet[16]模型在數字分類任務中取得了非常好的效果,本文采用的模型基于LeNet改進,將原來的激活函數sigmoid替換為ReLU,并增加了卷積核的數量,第1個卷積層20個卷積核,第2個卷積層50個卷積核,第3個卷積層500個卷積核,初始學習率0.05,實驗共迭代50次.采用不同的正則化方法時,結果如表1所示.
實驗對比了Dropout和S-Dropout方法分別在不同層上的效果.訓練過程中,L2正則化已經完全擬合了訓練數據,預測誤差卻相對較大,已產生過擬合現象.Dropout和S-Dropout方法有效緩解了過擬合,這與模型組合了多個局部結構的特性相關.S-Dropout因為稀疏性限制的引入,進一步降低了預測誤差.當所有層都應用S-Dropout正則化時,結果達到最好,可見S-Dropout正則化無論在全連接層還是卷積層都有不錯的效果.由于MNIST數據集本身不是很大,在卷積神經網絡強大的特征提取能力下,結果幾乎已經接近最優,正則化方法的提升幅度都不是很大,但S-Dropout仍然取得了最好的效果.
CIFAR-10包含6萬張32×32的RGB圖片,共分為10個類別.訓練數據50000張圖片( 每類5000張),測試數據10000張圖片.為了測試S-Dropout正則化方法在不同規模的網絡中的表現,設計了兩種卷積神經網絡模型.網絡A基于文獻[5]提出的Dropout模型的改進,是一種簡化的模型,主要為了達到快速訓練的目的.該網絡包含3 個卷積層,前兩個卷積層由64 個5×5 的卷積核構成,第三個卷積層采用128個3×3的卷積核,池化層選擇大小為3的池化區域,以步長2 實施池化操作,第一個池化層為最大池化,后兩個池化層為平均池化.倒數第二層是128個節點的全連接層,最后的softmax層輸出整個網絡的分類預測結果.網絡B采用文獻[18]介紹的NiN(Network in Network)網絡,共有三個模塊,每個模塊包含一個卷積層和一個由1×1卷積核組成的多層感知器(MultiLayer Perceptron,MLP),卷積層有192個卷積核,后面接一個MLP,迭代次數為100次.MLP能有效的提高模型的表達能力,同時由于大量1×1卷積核的加入,參數數量和訓練時間也會增加.實驗分別在MLP和所有層上應用Dropout和S-Dropout方法,表2所示為在兩種模型下的結果.
由表2可以看出,網絡A在第一層應用S-Dropout可以使效果得到進一步提升,而在所有層應用S-Dropout反而使結果下降.這是因為網絡A是簡化的模型,本身參數不多,而卷積層需要對樣本進行特征提取,特征的信息含量尤為重要,又由于參數共享使卷積層本身參數較少,刪除過多節點造成信息損失,所以在多個卷積層上刪除部分節點會使誤差增大.另一方面,只在第一層卷積層上使用具有較小稀疏度值的S-Dropout相當于對樣本加入部分輸入噪聲,類似于降噪自編碼器[19]的效果,可以使網絡學習到一定的降噪能力,可以更好的防止過擬合現象.而Dropout方法只在網絡A中的全連接層有效.可見本文方法在簡單的模型上適用的層數更多.網絡B由于擁有大量參數,使預測誤差大大降低,而且無論是Dropout還是S-Dropout方法,都能應用在網絡B的所有層上.
CIFAR-100數據集與CIFAR-10類似,不同之處在于它增加了圖片類別數到100類,包含50000 張訓練數據( 每類500張)及10000 張測試數據.相較于CIFAR-10,CIFAR-100的訓練數據相當有限,需要更復雜的模型擬合訓練數據,網絡A不足以達到可觀的精度,所以只使用網絡B進行實驗,且各層參數保持不變.結果如表3所示,在CIFAR-100有限的訓練數據下傳統的正則化方法并沒有很好的泛化能力,而S-Dropout避免過度擬合訓練數據的同時降低了預測誤差,整體趨勢與CIFAR-10相一致,可見在訓練數據不足的情況下,本文方法效果提升明顯.

表3 不同正則化方法在CIFAR-100數據集上的結果Table 3 Results of different regularization methods on the CIFAR-100 dataset
正則化方法使具有大量參數的模型在面對小樣本訓練集時不容易產生過擬合,為了測試本文方法在小樣本上的效果,隨機的從MNIST數據集中選擇大小為100、500、1000、5000、10000和50000的樣本來比較L2、Dropout和S-Dropout正則化的效果,使用4.1節中介紹的改進LeNet模型和參數設置,不同的是迭代次數根據樣本集的大小會有所改變,樣本數量較小時模型收斂速度變慢,相應的迭代次數就需要增加,訓練時如果連續10次迭代誤差不再減小時就停止.訓練完成后,在測試集上的預測誤差如圖5所示.

圖5 樣本數量對預測誤差的影響Fig.5 Effect of the number of samples on predictive errors
對于樣本數量小于1000的極端情況,Dropout和S-Dropout都沒有改進預測誤差,原因是此時的訓練樣本太小,模型有足夠的參數擬合訓練集,甚至是刪除部分節點所產生的噪聲數據也進行了擬合.而隨著訓練樣本數量的增加,S-Dropout的效果開始提升,總的預測誤差也不斷減小,圖5中所示,在樣本數量達到5000時S-Dropout的誤差已經低于L2,可見在樣本數量達到一個比較小的閾值時,本文方法就體現出較好的效果,且樣本越多誤差越低.
S-Dropout具有兩個可調節的參數S和λ,其中參數S稱為稀疏度,代表模型中刪除的節點所占的比率,取值為0到1之間,值越大刪除的節點數越多,稀疏度越高.本節通過調節參數S驗證不同的稀疏度帶來的效果變化情況.選擇4.1節中改進的LeNet模型,分別在全連接層和卷積層上進行驗證,使S的取值從0到0.9變化,每間隔0.1訓練一個模型,并將Dropout方法中節點被刪除的概率P取同樣的值進行對比.
如圖6所示是S在全連接層上的變化對預測誤差的影響.S在0.4到0.7之間取值時,曲線趨于平滑且預測誤差達到最低,當S為0時,沒有節點被刪除,相當于使用原網絡進行訓練,S過大時被刪除的節點過多,模型的表達能力會降低.可見在全連接層上選擇適中的稀疏度使模型達到最優,而同樣的取值下本文方法比Dropout更優,比較理想的取值為0.5.

圖6 全連接層上稀疏度的變化對預測誤差的影響Fig.6 Effect of the change of sparsity on the prediction error of the full connection layer
如圖7所示是參數S在卷積層上的變化對預測誤差的影響,在取值0.2和0.3附近時預測誤差達到最小.當卷積層上的S取值過大時,預測誤差上升很明顯,這是因為卷積層用于特征提取,刪除過多的節點造成信息損失,符合4.2節中在CIFAR-10上的實驗結果及推論,所以本文在卷積層上的稀疏度選擇較小的值0.2,保留了足夠的特征量,同時又達到了稀疏化的效果.且參數S在同樣的取值下,本文方法的結果優于Dropout.

圖7 卷積層上稀疏度的變化對預測誤差的影響Fig.7 Effect of the change of sparsity on the prediction error of the convolutional layer
S-Dropout中的參數λ稱為隨機因素,用來確定高激活節點與低激活節點分別被刪除的比率.根據激活值大小選擇節點使模型具有更強的特征提取能力,同時通過一定的隨機性增強模型的魯棒性,參數λ正是確定這種隨機性的因素.為了找到隨機因素的最優取值,在S取不同值的情況下,使λ從0.5到1變化,間隔為0.05,利用LeNet模型,在MNIST數據集上進行對比驗證.
如圖8所示,當λ取值為1的時候,刪除的節點全部從低激活值中選擇,此時模型保留所有高激活值部分,相當于失去了隨機性,節點是否被刪除完全依賴于激活值大小,但泛化性能并不理想,可見保留部分低激活值的節點是能夠提升最終結果的.當λ取0.5時,隨機性達到最大,節點是否被刪除完全隨機決定,在理想情況下與Dropout具有相等的效果,但也沒有得到最低的預測誤差.而根據圖8中的曲線,在所有S的不同取值下,λ在0.7附近的變化都達到了較理想的結果,這也是本文選擇的取值.可見模型的某一層在選擇了理想的稀疏度后,通過調節λ到合適的值,可以進一步降低預測誤差.

圖8 稀疏度取不同值時隨機因素對預測誤差的影響Fig.8 Effect of random factors on prediction error with different values of sparsity
從以上已經看到,具有稀疏結構的卷積神經網絡在防止模型過擬合方面具有更好的效果,從稠密的樣本空間中提取的稀疏特征向量具有更好的可區分性.為了驗證模型是否提取了稀疏的特征向量,將5000個測試樣本通過改進的LeNet模型提取特征向量,特征向量是從模型的全連接層獲得的輸出值,每個向量500維.圖9所示是特征向量輸出值的統計直方圖,左邊是每張測試樣本激活的節點數量,右邊是被激活的節點對應的圖片數量,即有多少張樣本可以激活此節點,根據圖9的結果可知,使用S-Dropout正則化后,無論是被激活的節點數還是激活節點的圖片數都取得了更小的值(直方圖往左移動),模型確實提取到了更稀疏的特征向量,在圖像分類任務中可以達到更優的泛化性能.

圖9 特征向量輸出值的統計直方圖Fig.9 Statistical histogram of eigenvector output values
本文提出一種稀疏性Dropout正則化方法,并將其應用于卷積神經網絡,不僅具有組合多個模型結果的優點,防止過擬合現象的產生,而且對激活值增加稀疏性限制后,能針對不同的樣本產生特定的對樣本敏感的局部結構,有效提升了模型的泛化能力.刪除部分節點減少了模型參數,稀疏性限制保留高激活值節點,增強了模型的特征提取能力,隨機因素的加入又一定程度上提高了模型的魯棒性.然而,通過節點激活值大小進行稀疏性限制略顯簡單,后續可以通過節點間相關性的大小增加限制,從而得到更理想的效果.