羅國強,李家華,左文濤
1(廣州科技職業技術大學 信息工程學院,廣州 510550)
2(廣州工商學院 計算機科學與工程系,廣州 510850)
深度學習是機器學習的一個子集,通過組合低層特征形成更加抽象的高層語義以發現數據的特征分布表示.Hinton 等人[1]提出,深度置信網絡(Deep Belief Network,DBN)的訓練可以由非監督逐層訓練以及后期微調的方式完成.這為解決深層神經網絡結構相關的訓練優化難題帶來希望.但是在2012年之前,深度學習仍然處于理論研究階段,還沒有真正進入應用階段.這受制于兩個原因,第一是深度模型的訓練需要大批量數據,當時在模型預訓練階段一般采用ImageNet[2]數據集或其子集;第二是計算力特別是GPU 等硬件設備還沒能夠提供強大計算支持.2012年,在ImageNet圖像識別競賽中,Hinton 和他的學生Alex Krizhevsky設計出AlexNet[3]神經網絡結構,并以此在這次比賽中獲得冠軍.這成為深度學習應用領域的標志性事件.之后各種神經網絡結構應運而生.深度學習應用領域比較成功的有計算機視覺、自然語言處理、語音識別、目標檢測等.其中計算機視覺領域常用的基礎網絡結構有AlexNet、VGGNet[4]、GoogleNet[5]、ResNet[6]、denseNet[7]、mobileNet[8]、shuffleNet[9,10]等.這些基礎網絡[3-10]在實際應用中表現各有優劣.Goodfellow[11,12]提出,一個測試效果良好的分類器并不是學習到了所分類樣本的真正底層意義,只不過剛好構建了一個在訓練數據上運行相當良好的模型,而這個模型遇到一些空間中不太可能出現的點時,模型能力的有限性就會隨之暴露出來.這個可能也就是許多模型對于外來樣本泛化能力不足的原因.
深度學習會自動學習數據集上的特征分布.一般而言,數據需要盡可能地保持獨立同分布.但是實際情況由于各種條件的限制,獨立同分布往往是不可能做到的.當非獨立同分布的數據量比較大,會嚴重影響模型對數據特征的有效學習,模型的魯棒性得不到保證.實際應用中針對特定任務需要采集和標注適合自己任務的數據集,這些數據的獨立同分布特性往往得不到保證.當然,有關聯的數據往往被用作上下文信息,但就數據的角度看,這些有關聯的數據是不符合機器學習的獨立同分布假設的.
本文研究分別采用了LeNet-5[13],VGGNet16,ResNet50 作為基礎網絡,實驗對比發現,批規范化算法[14](Batch Normalization,BN)有非常大的可調空間,其對最終的分類和檢測識別結果也有一定程度的影響.實驗觀察出該算法有下面三點不足:
(1)批規范化算法在模型訓練時要求有足夠大的批量才能工作.如果每批的數據量太少則會導致對統計數據的估計不準確.每批的數據量減少則會顯著增加模型誤差.現在的模型訓練,如果硬件設備條件允許,則是采用大批量數據來訓練的.而這大批量數據中非獨立同分布數據也可能比較多.
(2)批規范化算法做規范化運算時,每批的輸出與這批量數據的每一個樣本都有關聯.這從批規范化的計算公式可以看出.
(3)目標檢測、分割、視頻識別和其他基于此的高級系統對批量大小的限制要求更高.如Faster[15]和Mask R-CNN[16]系列檢測框架使用批量為1 或2 的圖像,為了能夠使用更高分辨率的圖像,批規范化算法通過變換而被線性層所固定.
基于以上3 個觀察,本文提出批規范化算法的改進算法.該改進算法在模型訓練前,在數據集中固定一個批量數據,對該批量數據做規范化計算后,其結果作為參考值對訓練中的其他數據進行更新運算.提高該改進策略,實驗效果比較明顯.
在神經網絡訓練過程中,網絡隱層的輸入分布經常變化,如果要使訓練數據獲得的模型能夠有泛化能力,就須使訓練數據與測試數據滿足獨立同分布假設.批規范化算法的初衷是使神經網絡訓練過程中輸入分布保持一致,即把神經網絡每一層神經元輸入值的分布規范化為標準正態分布.這就很大程度防止了訓練過程中的梯度消失問題.在反向傳播時以批為單位進行梯度更新,極大加快了網絡訓練速度.
當批量數據樣本很少的時候,非獨立同分布問題越來越顯現,模型的泛化能力大幅度降低,模型也難以訓練.為解決這個問題,批再規范化算法[17](Batch ReNormalization,B-RN)在批規范化算法基礎上引入兩個參數,通過對權重的尺度(scale)和偏移(shift)去適應一個小批量數據,然后移動平均值消除歸一化后的激活值對當前批量數據的依賴性.其本質是網絡參數前傳中仿射變換修正小批量數據和數據集普適樣本的差異,使得該層的激活值在推斷階段能得到更有泛化性的修正.
批規范化算法主要適用于CNN 或者DNN 這種有固定深度的神經網絡,而在RNN 中,序列(sequence)的長度不一致,不同的時間步(time-step)需要保存不同的統計特征,可能存在一個特殊序列比其他序列長很多.即RNN 的深度不固定.因此,批規范化算法在RNN 上效果不理想.層規范化算法[18](Layer Normalization,LN)不依賴于批量數據的大小和輸入序列的深度,同一層的輸入樣本擁有相同的均值和方差,而不同的輸入樣本有不同的均值和方差.如圖1 所示,層規范化算法不在批量維度上做規范化,而是在層的維度上做規范化.層規范化算法在RNN 中效果明顯.
圖像風格化應用中,生成結果依賴于某個圖像實例,因此也不能在批量數據的維度進行歸范化操作.實例規范化算法[19](Instance Normalization,IN)在HW 的維度做規范化操作,可以加速模型收斂,并且保持每個圖像實例之間的獨立.
自適配規范化算法[20](Switchable Normalization,SN)使用可微分學習,為一個深度網絡中的每一個需要做規范化操作的層確定合適的規范化操作.區別于BN 需要手工為每一個規范化層設計操作,自適配規范化算法的這個特性可以減少手工設計量,省去大量的實驗.
群組規范化算法[21](Group Normalization,GN)在通道的維度分組,并在每組內進行規范化操作,計算出均值和方差.群組規范化算法的計算與批量數據的大小無關,并且在神經網絡模型訓練時,其準確度在大范圍的批量下運行都非常穩定.
令X={x1,x2,···,xN}為訓練數據集,在神經網絡訓練時,可令損失函數:
其中,F 為每一層的非線性轉換函數.因此,對于每一個樣本,使用隨機梯度下降法[22,23](Stochastic Gradient Descent,SGD)計算最優化參數 Θ,即,

在該數據集中取一個批量數據B={x1,x2,···,xm},用該批量數據的平均梯度去擬合該批量數據每一個樣本的梯度,即:

由式(1)可知,對于每一層收入x,有:

因此可知,每一個梯度優化步驟為:

其中,α為學習率.
上述過程是典型的隨機梯度優化過程.大量的實驗經驗表明,如果在神經網絡訓練過程中,簡單地使用隨機梯度下降法會使訓練的計算量和時間大大增加.而且,經過非線性轉換函數F(*)的作用,每一層的輸出不能保持同分布狀態,模型難以訓練,并且表達能力有限,致使泛化性能降低.因此,批規范化算法引入兩個可學習參數 γ,β,該參數有保持神經網絡模型特征表達能力的作用.那么,神經網絡每一層輸出即:

對于每一層輸入x,有:

其中,μ和 δ 即為每一層輸入x 的均值和標準差.當:

時,神經網絡訓練時的每一層即可保持標準正態分布.因此,由以上分析,令批規范化轉換表示為:

本文給出批規范化轉換算法偽代碼描述如算法1.其中,ε是一個常量,其作用是為了保證方差數值上的穩定.

?
本文在第一章相關工作中介紹了批規范化算法的幾個改進算法[18-21].該系列算法針對批規范化算法的許多不足之處做出改進.但是各有其使用場景.本文提出一種批規范化改進算法,一定程度上解決神經網絡訓練過程中數據不能保持獨立同分布問題.即:每一層批量數據的輸出與這批量數據的每一個樣本都有關聯.該改進算法即是降低這種數據的關聯性.
該改進算法分為3 步:
(1)神經網絡訓練時,每一層的輸入數據中,取出一個批量數據,按照算法1 取出該批量數據的均值和方差,這兩個統計數據在之后訓練時固定下來保持不變.令Bfix={x1,x2,···,xm},則:

(2)求出其他批量數據的均值和方差,并根據批量數據的樣本量求出其他批量數據與固定批量數據的比例系數,根據該比例系數更新其他批量數據的均值和方差.令:

則其他批量數據的均值和方差更新方式為:

(3)根據(2)得出的 μothers和δ2others在批量數據上作規范化運算.
根據以上分析,可以得出批規范化改進算法的偽代碼描述如算法2.

?
給定一個神經網絡,加入批規范化改進算法后的訓練和推斷方式與批規范化算法無異.下面給出具有批規范化改進算法網絡層的神經網絡訓練和推斷算法描述如算法3.

?
本文算法的實驗環境配置為Intel I7 8700 處理器,8 塊NVIDIA GTX 1080ti 顯卡,64 GB RAM 的深度學習服務器.軟件環境配置為Ubuntu 16 系統,GCC 5.4,CUDA 9,OpenCV 3,TensorFlow,Caffe/Caffe2,Detectron 框架等.
為了驗證算法各方面性能,本文進行了3 組對比實驗,分別為訓練速度對比,ImageNet 分類實驗,目標檢測實驗.
4.2.1 模型訓練速度對比
為了快速得到訓練結果,簡化調參步驟,使實驗對照組更具說服力,該組對比實驗模型選用LeNet-5 和VGG-16,數據集選用Mnist,對比算法選用批規范化算法以及本文改進算法.圖2 和圖3 分別說明了批規范化算法和改進算法在Mnist 數據集上兩個神經網絡模型的訓練情況.

圖2 LeNet-5 訓練曲線
由圖2 和圖3 訓練曲線可以看出,在Mnist 數據集上,LeNet-5 和VGG-16 的3 條曲線的趨勢大致是一樣的,隨著訓練步的增加,訓練精度分別呈上升趨勢.
在模型訓練過程中,相對于沒有規范化操作的LeNet-5 或者VGG-16 網絡,加入本文改進算法后,網絡模型訓練速度有所提高,特別是在訓練的前期,改進后的模型更快的進入飽和點.圖2 中在訓練步為26 000 時可以看出,3 條曲線的斜率變緩,模型訓練進入飽和階段.其中,批規范化算法最先進入飽和點,其次本文改進算法進入飽和點,沒有進行規范化操作的LeNet-5 最后進入飽和點.圖3 中VGG 曲線也遵循這個趨勢.

圖3 VGG-16 訓練曲線
由圖2 和圖3 也可以對比得出,在訓練速度上,改進算法可以加快網絡模型的訓練,但是相對于批規范化算法,改進算法沒有明顯優勢.可能的原因在于,在設計改進算法時引入了一個固定批量數據,對其做了規范化操作.因此,改進算法相對于原批規范化算法,相當于做了兩次規范化操作.計算量有所增加,體現在訓練曲線上即為飽和點右移.
4.2.2 ImageNet 數據集分類實驗
該組實驗采用ResNet50 作為基準網絡,在ImageNet 數據集上進行分類訓練.實驗采用了8 塊GPU,批規范化運算時,批量數據的均值和方差將在不同的GPU 上進行計算.卷積層初始化采用He 等[24]的方法,γ初始化為1,而每一個殘差模塊的最后一個規范化層的 γ初始化為0.訓練時權重衰減為0.0001,學習率初始化為0.001.當模型訓練分別到100 epochs、120 epochs 和160 epochs 時,學習率依次降低10 倍.該訓練參數設置分別參考了文獻[17-21].
為了作對比,本文在ResNet50 基準網絡上分別采用BN、LN、IN、GN 以及本文改進算法Ours 進行分類訓練.
圖4 和圖5 分別為ImageNet 訓練集和驗證集上的訓練曲線.因為幾個算法都是在BN算法的基礎上改進而來,本實驗以BN算法作為基準對比組.由圖4和圖5 可以看出,ResNet50 在模型訓練時,引入5 種算法后都能夠收斂.此時規范化批量數據大小為128,群組規范化算法的分組數為32.表1 和表2 列出了ResNet50 基準網絡引入5 種算法后在ImageNet 訓練集和驗證集上訓練錯誤率.

圖4 ImageNet 訓練error 曲線

圖5 ImageNet 驗證集訓練error 曲線

表1 ImageNet 訓練集結果對比(%)

表2 ImageNet 驗證集結果對比(%)
分析表1,可以看出BN算法在批量數據大小為128 時,錯誤率比其它5 個算法低.相對于BN算法訓練集上26.3%的錯誤率,GN算法高出1.1 個百分點,本文的改進算法Ours 高出1.9 個百分點.而LN 和IN算法則分別高出2.4 和4.2 個百分點.因此,本文改進算法Ours 在ImageNet 訓練集上相對于BN算法和GN算法訓練錯誤率并沒有優勢,但是優于LN算法和IN算法.
圖4 和表1 在訓練集上的訓練結果并不能說明一個模型的泛化能力,一個模型即使訓練擬合得很好,其對于外來樣本可能沒有泛化性.分析表2 可知,5 個算法在ImageNet 驗證集錯誤率均高于在ImageNet 訓練集上的錯誤率.對照組BN算法驗證集錯誤率為28.6%,相對于GN算法28.1%的錯誤率高出0.5 個百分點,而相對于本文改進算法Ours 的28.3% 錯誤率則高出0.3 個百分點.可以得出,本文改進算法驗證集上錯誤率在GN算法和BN算法之間,略差于GN算法,而優于BN算法.LN算法和IN算法的錯誤率相對于BN算法則分別高出4.6 和5.1 個百分點.
綜上分析,在本實驗環境和條件下,本文改進算法Ours 相對于BN算法和GN算法有一定的競爭優勢.Ours算法在訓練集上表現不如BN算法和GN算法,但是在驗證集上則優于BN算法,略差與GN算法.即,本文改進算法對外來樣本處理得較好,訓練的模型泛化性能相對于BN算法有一定程度的提高.由以上實驗也可以得出,采用LN算法和IN算法訓練的ResNet網絡雖然訓練能夠收斂,但是訓練集和驗證集分類錯誤率都比較高.這是因為LN算法主要用于RNN,而IN算法主要用于圖像風格化等,都有其特定的適用場景,其適用范圍可能沒有BN算法、GN算法以及本文改進算法Ours 那么廣.
4.2.3 目標檢測和分割實驗對比
該組實驗中,本文驗證改進算法在COCO2017 數據集上目標檢測和實例的效果.實驗采用深度學習框架caffe2,以及通用目標檢測框架Detectron,目標檢測算法使用Mask R-CNN.
表3 列出了采用Mask R-CNN 作目標檢測和實例分割時,以ResNet50 的conv4 作為目標的特征提取層,conv5 層接一個ROI 層用于目標分類和回歸.在該實驗中,改進算法比批規范化算法目標邊框的APbbox值提高了0.5,而掩膜的APmask值提高0.1.該實驗說明在目標檢測和實例分割任務上,一定程度上本文改進算法的目標檢測泛化能力優于BN算法.圖6 為采用本文改進算法后Mask R-CNN 效果圖.

表3 Mask R-CNN 目標檢測與分割

圖6 Mask R-CNN 效果圖
4.2.4 魯棒性說明
本文算法在神經網絡模型訓練過程中能夠一定程度上提高基準網絡模型的魯棒性.其中,在VGG 網絡模型訓練過程中尤為明顯,梯度彌散的現象出現的幾率很小,網絡訓練易于收斂.基于大量對比實驗以及分析得出:
(1)本文算法在大批量數據訓練過程中可以降低樣本之間的關聯性.這種特性使模型易于訓練.
(2)魯棒性的強弱很大程度依賴于基準網絡.Su等[25]通過大量實驗對18 個常用的分類基準網絡進行對抗樣本研究分析發現:1)準確度越高的模型的普遍魯棒性越差,且分類錯誤率的對數和模型魯棒性存在線性關系;2)相比于模型的大小,模型的結構對于魯棒性的影響更大;3)黑盒遷移攻擊是一直以來都比較困難的任務,但在VGG 系列模型上生成的對抗樣本可以比較容易地直接攻擊其它的模型.這在一定程度佐證了本文實驗.
深度神經網絡模型的訓練到目前為止還是非常具有挑戰性的研究點.本文在批規范化算法方面對其進行了探索.在神經網絡訓練中,改進算法有比較好的實驗表現,能夠一定程度上提高分類精度,在特定檢測任務上提高檢測精度.但是,該改進算法在模型訓練前傳過程中做了兩次批規范化運算,計算量增加不少,因此,深度神經網絡模型的訓練速度減慢了.這是對時間與空間,性能與速度的取舍平衡的考慮.本課題將繼續這兩方面的研究.