王 軍,馮孫鋮,程 勇
(1.南京信息工程大學計算機與軟件學院,南京 210044;2.南京信息工程大學數(shù)字取證教育部工程研究中心,南京 210044;3.南京信息工程大學 科技產(chǎn)業(yè)處,南京 210044)
在17 世紀,貝葉斯和拉普拉斯完成對最小二乘法的推導并提出馬爾科夫鏈,這兩個理論成為機器學習發(fā)展的基礎(chǔ)理論。在1950 年,艾倫·圖靈提議建立一個學習機器,之后機器學習進入飛速發(fā)展階段。在1986 年,深度學習被引入機器學習領(lǐng)域,為人工智能的發(fā)展提供了極大的動力支持。在2000年,深度學習通過組合多個隱藏層的神經(jīng)元,并利用非線性函數(shù)學習多個具有抽象意義的數(shù)據(jù)特征,達到模擬神經(jīng)網(wǎng)絡的目的[1-3],且廣泛適用于有監(jiān)督和無監(jiān)督特征學習[4-6]、特征表示[7]、模式識別等任務。深度卷積神經(jīng)網(wǎng)絡(Convolutional Neural Networks,CNN)在圖像識別[8-9]、目標檢測[10-11]、語義分割[12]等計算機視覺的前沿領(lǐng)域展現(xiàn)出巨大的潛力,但是常規(guī)的卷積神經(jīng)網(wǎng)絡在達到較高分類精度的同時需要較快的運算速度和占用大量存儲空間[13]。目前,智能移動設備的發(fā)展趨向于邊緣化和移動化發(fā)展,但卻受限于設備本身的硬件條件,而深度卷積神經(jīng)網(wǎng)絡輕量化設計的目標就是在低硬件條件的設備上仍能保持良好的網(wǎng)絡性能來適應智能設備的發(fā)展趨勢。
輕量化的本質(zhì)是在硬件不足的設備上解決存儲空間和能耗對于傳統(tǒng)神經(jīng)網(wǎng)絡性能的限制,在保持傳統(tǒng)神經(jīng)網(wǎng)絡精度的基礎(chǔ)上,通過人工設計、神經(jīng)結(jié)構(gòu)搜索或自動化機器學習等方法降低對存儲空間的要求,提高運行速度。LECUN 等[14]在信息論的基礎(chǔ)上,通過對網(wǎng)絡中不重要的權(quán)重進行剪除,增強神經(jīng)網(wǎng)絡的泛化性,提高學習速率,最終實現(xiàn)模型壓縮。HAN 等[15]發(fā)表了一篇關(guān)于模型壓縮方法的綜述型文章,該文作為ICLR 2016 的最佳論文,受到了學術(shù)界的廣泛關(guān)注。CHENG 等[16-17]對近年來提出的模型壓縮方法進行了綜述。輕量化網(wǎng)絡結(jié)構(gòu)設計是深度學習中的熱點研究方向。2012 年,AlexNet[18]由于受到硬件設備的限制,創(chuàng)新性地使用組卷積并將一個網(wǎng)絡在兩個硬件設備上進行訓練,對于輕量化網(wǎng)絡結(jié)構(gòu)具有一定的借鑒意義。目前,針對輕量化深度學習網(wǎng)絡的研究主要集中于人工設計的輕量化網(wǎng)絡和基于神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索的自動輕量化網(wǎng)絡。在人工設計的輕量化網(wǎng)絡方面,包括基于深度可分離卷積(Depthwise Separable Convolution,DSC)的SqueezeNet[19]、MobileNet[20]、MobileNet V2[21]、ShuffleNet[22]、ShuffleNet V2[23]、基于Octave 卷積[24]的改進基線網(wǎng)絡、基于Ghost特征的GhostNet[25]等輕量化網(wǎng)絡。在神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索的自動輕量化網(wǎng)絡設計方面有NasNet[26]、MnasNet[27]等輕量化網(wǎng)絡。本文對深度學習的輕量化網(wǎng)絡結(jié)構(gòu)設計方法進行詳細介紹和優(yōu)勢分析,闡述人工設計的輕量化方法、基于神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索的輕量化方法、基于自動模型壓縮的輕量化方法的應用現(xiàn)狀和發(fā)展趨勢。
組卷積[8]對于輸入特征圖按通道進行分組卷積,再將分組卷積得到的結(jié)果按通道進行連接(concat)得到最終的輸出特征,具有輕量化效果。例如,將輸入特征分成G組進行組卷積,僅需原有1/G的參數(shù)。因此,組卷積對深度神經(jīng)網(wǎng)絡具有一定的正則化作用。但是,組卷積也有局限性,會導致特征圖之間的信息不流暢,輸出的特征圖沒有包含所有輸入特征圖的信息。因此,在組卷積的基礎(chǔ)上,使用深度可分離卷積中的Pointwise 卷積和ShuffleNet 中的通道變換來改善該問題。
深度可分離卷積主要由Depthwise卷積和Pointwise卷積組成,如圖1 和圖2 所示。Depthwise 卷積使用卷積核對輸入特征按通道進行分別卷積,即第一通道的卷積核與第一通道的輸入特征進行卷積。Depthwise卷積在獲得特征的空間信息后,將得到的輸出特征進行Pointwise 卷積,即利用1×1 的卷積核對Depthwise 卷積的輸出進行卷積,以獲取特征中不同通道之間的信息,通過該組合方式達到輕量化效果。
圖1 Depthwise 卷積Fig.1 Depthwise convolution
圖2 Pointwise 卷積Fig.2 Piontwise convolution
對網(wǎng)絡參數(shù)量和運算量進行分析,假設輸入的特征圖大小為hin×win×cin,卷積核大小為k×k×cout,輸出特征為hout×wout×cout,深度可分離卷積的運算量和參數(shù)量計算如下:
其中:hin和win分別表示輸入特征的高度和寬度;cin表示輸入特征圖的通道數(shù);k表示卷積核尺寸;cout表示輸出特征圖的通道數(shù);hout和wout分別表示輸出特征的高度和寬度。
深度可分離卷積在保持較高分類精度的前提下,僅需常規(guī)卷積1/3 的參數(shù)量,但在訓練過程中計算零散是影響其實際應用性能的主要阻力。
現(xiàn)在主流的輕量化網(wǎng)絡結(jié)構(gòu)MobileNet 就是基于深度可分離卷積。MobileNet[20]的基本思想是使用深度可分離卷積代替常規(guī)卷積,利用深度卷積代替?zhèn)鹘y(tǒng)卷積中的濾波器進行特征提取,并采用點卷積來代替濾波器對特征進行組合,同時減少參數(shù)量和運算量,最終將MobileNet[28]堆疊成深度神經(jīng)網(wǎng)絡。常規(guī)卷積和深度可分離卷積如圖3 所示,其中,BN 表示批量正則化,ReLU 表示激活函數(shù)。
圖3 常規(guī)卷積和深度可分離卷積Fig.3 Conventional convolution and depthwise separable convolution
MobileNet V2[21]作為MobileNet 的改進網(wǎng)絡,引入ResNet 網(wǎng)絡中的殘差思想,同時為了解決常規(guī)ResNet 中大量使用ReLU 激活函數(shù)導致神經(jīng)元失活的缺陷,通過高維的特征結(jié)合ReLU 激活層盡可能地保留低維輸入信息。MobileNet V2 的核心為反向殘差塊,如圖4 所示。與常規(guī)殘差塊不同,反向殘差塊采用兩邊窄中間寬的通道結(jié)構(gòu),首先對輸入進行特征擴展,將低維特征映射到高維空間,然后對高維特征使用Depthwise 卷積代替常規(guī)3×3 卷積,這樣既可以保留信息且不失非線性,最后去除最后一個ReLU激活層并使用投影層代替,即使用1×1 的網(wǎng)絡結(jié)構(gòu)將高維特征映射到低維空間。
圖4 反向殘差塊Fig.4 Inverse residual block
改進的MobileNet V2 網(wǎng)絡結(jié)構(gòu)如表1 所示,其中,Conv 2d 表示卷積操作,bottleneck 表示MobileNet V2 中的瓶頸結(jié)構(gòu),1×1 Conv 2d 表示點卷積,7×7 Avgpool 表示平均池化,K表示根據(jù)實際需求設置的輸出通道數(shù),t表示對于操作輸入特征圖的擴展系數(shù),n表示該操作的重復操作次數(shù),c表示輸出通道數(shù),s表示該操作模塊第1 次使用的卷積步長,之后重復的卷積默認步長為1。
表1 MobileNet V2 整體結(jié)構(gòu)Table 1 The overall structure of MobileNet V2
MobileNet V2 有效解決了ReLU 函數(shù)導致的神經(jīng)元失活問題,實驗效果相比MobileNet 更優(yōu)異。但是,基于深度可分離卷積的MobileNet V2 存在局限性。在實際訓練過程中,由于深度可分離卷積的卷積核和常規(guī)卷積相比較小,在激活函數(shù)的非線性激活作用下使得輸出易趨近0,因此通常會出現(xiàn)卷積核失活的問題。
1.4.1 ShuffleNet
ShuffleNet[22]是一個效率極高且可運行在手機等移動設備上的網(wǎng)絡。常規(guī)組卷積最大的局限性為在訓練過程中不同分組之間沒有信息交換,這樣會大幅降低深度神經(jīng)網(wǎng)絡的特征提取能力。因此,在MobileNet 中使用大量的1×1 Pointwise 卷積來彌補這一缺陷,而ShuffleNet 采用通道變換來解決該問題。通道變換的核心思想是對組卷積之后得到的特征圖在通道上進行隨機均勻打亂,再進行組卷積操作,這樣就保證了執(zhí)行下一個組卷積操作的輸入特征來自上一個組卷積中的不同組,如圖5 所示?;谏疃瓤煞蛛x卷積、通道變換和組卷積得到ShuffleNet 結(jié)構(gòu),如圖6 所示。通過堆疊ShuffleNet的基本單元來構(gòu)建輕量化的ShuffleNet 結(jié)構(gòu)。
圖5 通道變換在組卷積中的應用Fig.5 Application of channel shuffle in group convolution
圖6 ShuffleNet 結(jié)構(gòu)Fig.6 Structure of ShuffleNet
1.4.2 ShuffleNet V2
在ShuffleNet V2[23]被 提出之前,輕量化網(wǎng)絡中衡量模型復雜度的通用指標為每秒浮點運算次數(shù)(Floating-point Operations Per Second,F(xiàn)LOPS)。FLOPS 代表運算力,對于網(wǎng)絡性能評估是一個間接指標,因為運算力不完全等同于運行速度。通過實驗可以發(fā)現(xiàn),相同F(xiàn)LOPS 的兩個模型的運行速度卻存在差異,導致該差異的原因包括GPU、內(nèi)存使用量(Memory Access Cost,MAC)等因素。因此,MA等[23]對于輕量化網(wǎng)絡提出了4 條更實用的指導原則:
1)盡量使用和輸入特征通道數(shù)相同的卷積核個數(shù)來最小化內(nèi)存使用量。以上文提及的深度可分離卷積中的Pointwise 卷積為例,假設輸入特征尺寸為h×w×cin,輸出通道數(shù)為cout,于是在Pointwise 卷積中可得到:
當固定FFLOPS時,根據(jù)均值不等式得到:
當cin=cout時,MAC 取最小值,此時內(nèi)存使用量最小。
2)適量使用組卷積以降低內(nèi)存使用量。在組卷積中,假設輸入特征尺寸為h×w×cin,輸出通道數(shù)為cout,得到:
當固定FFLOPS時,得到:
由式(8)可見,當G增加時,內(nèi)存使用量也會增加。
3)盡量減少碎片化的網(wǎng)絡結(jié)構(gòu)以增加并行度。在Inception 模塊和機器學習自動生成的神經(jīng)網(wǎng)絡中,通常會趨向于使用多路網(wǎng)絡結(jié)構(gòu),這樣就很容易造成神經(jīng)網(wǎng)絡的碎片化,從而使模型并行度降低,減緩運行速度。
4)重視元素級操作。激活函數(shù)(例如ReLU)和特征圖的相加(add)雖然對于浮點運算力的影響很小,但它們對于內(nèi)存使用量會產(chǎn)生較大的影響。
針對上述4 個原則可知ShuffleNet 存在以下問題:1)在基本單元中大量使用了1×1 的組卷積操作;2)在殘差網(wǎng)絡的瓶頸層中,輸入特征和輸出特征的通道數(shù)不同;3)過量使用組卷積;4)在Shortcut 中過量使用元素級操作。ShuffleNet V2 是在上述4 條原則的基礎(chǔ)上對ShuffleNet 進行的改進,并引入了通道分離操作。
ShuffleNet V2 結(jié)構(gòu)如圖7 所示。通道分離本質(zhì)上是將輸入特征按通道分成兩部分,一部分通道數(shù)為c′,另一部分為c-c′。在圖7(a)中左分支等同于恒等映射,對應殘差網(wǎng)絡中的Shortcut,右分支包含了3 個連續(xù)的卷積操作,且滿足輸入特征和輸出特征通道相同的原則。同時,ShuffleNet V2 基本單元中的1×1 卷積不再使用組卷積,而是使用常規(guī)卷積,彌補了過度使用組卷積的缺陷。在圖7(b)中,首先將左右分支分成兩組,兩個分支不再使用相加元素級操作,而是連接在一起,從而滿足原則3。然后對其進行通道變換以保證兩個分支的信息交流。最后連接和通道變換可以與下一個模塊單元的通道分離合成一個元素級運算,減少了元素級操作次數(shù)。
圖7 ShuffleNet V2 結(jié)構(gòu)Fig.7 Structure of ShuffleNet V2
對基于深度可分離卷積的主流輕量化神經(jīng)網(wǎng)絡結(jié)構(gòu)的創(chuàng)新點和優(yōu)劣勢進行分析和對比:
1)MobileNet。創(chuàng)新點和優(yōu)勢為引入深度可分離卷積進行網(wǎng)絡結(jié)構(gòu)輕量化設計。劣勢為網(wǎng)絡結(jié)構(gòu)單一,且過量使用激活函數(shù)導致神經(jīng)元易失活。
2)MobileNet V2。創(chuàng)新點和優(yōu)勢為引入反殘差模塊。劣勢為由于深度可分離卷積中卷積核較小,激活后易為0。
3)ShuffleNet。創(chuàng)新點和優(yōu)勢為引入通道轉(zhuǎn)換。劣勢為輸入輸出特征通道數(shù)不同、過量使用組卷積、網(wǎng)絡碎片化、元素級操作過多。
4)ShuffleNet V2。創(chuàng)新點和優(yōu)勢為引入通道分離、輸入輸出特征通道數(shù)相等、基礎(chǔ)單元中使用常規(guī)卷積代替組卷積及使用concat 代替元素級操作add。劣勢為運行速度和存儲空間有待進一步提升。
深度可分離卷積可大幅減少計算量,又能保持較高的分類精度,但是存在計算零散的問題。Xception[29]是谷歌于2017 年 在Inception V3[30]的 基礎(chǔ)上,基于空間相關(guān)性和通道相關(guān)性設計的輕量化網(wǎng)絡結(jié)構(gòu)。Xception 模塊如圖8 所示。
圖8 Xception 模塊Fig.8 Xception module
Xception 模塊與深度可分離卷積的不同之處在于:1)深度可分離卷積先進行同一平面卷積得到空間相關(guān)性,再在不同通道之間進行卷積得到通道相關(guān)性,而Xception 模塊采用相反的方法,先得到通道之間的相關(guān)性,再學習空間相關(guān)性;2)Xception 在空間相關(guān)性和通道相關(guān)性的學習過程中未使用激活函數(shù),實驗證明這一改進有效地加快了收斂速度,提升了網(wǎng)絡性能。Xception 網(wǎng)絡基于殘差網(wǎng)絡進行構(gòu)建,但將其中的卷積層換成了Xception 模塊。如圖9 所示,Xception 網(wǎng)絡被分為輸入流部分、中間流部分和輸出流部分[29],其中,ReLU 表示激活函數(shù),SeparableConv 表示深度可分離卷積,Maxpool 表示最大值池化操作。Xception相比Inception V3 提升了網(wǎng)絡運算量并降低了參數(shù)量。輸入流部分通過下采樣模塊來降低特征圖的空間維度;中間流部分通過優(yōu)化網(wǎng)絡特征提取來學習關(guān)聯(lián)關(guān)系;輸出流部分將特征進行匯總輸出,最終由全連接層進行表達。
圖9 Xception 網(wǎng)絡結(jié)構(gòu)Fig.9 Structure of Xception network
在現(xiàn)實生活中,圖片中不同的信息都以不同的頻率傳遞,主要分為高頻信息和低頻信息,其中:高頻通常用于細節(jié)編碼,高頻信息代表圖片中的細節(jié)特征;低頻通常用于全局編碼,低頻信息代表圖片中的全局特征,即較低空間分辨率下變化較慢的特征。圖像低頻和高頻信息的分離如圖10 所示。由高頻信息和低頻信息組成的特征圖就是Octave 特征圖。
圖10 圖像低頻和高頻信息的分離Fig.10 Separation of low-frequency and high-frequency information in the image
卷積層之間的特征圖可以看作是高頻信息和低頻信息的混合特征圖。在傳統(tǒng)卷積方式中,無論高頻信息還是低頻信息都是用同一種方式存儲的,這對于其中的低頻信息而言就會造成存儲冗余并增加計算成本。Octave 卷積[24]是針對這一問題提出的新型卷積方式,將特征圖根據(jù)不同的頻率進行因式分解,對不同頻率的信息進行不同的存儲和操作,再在不同頻率的信息之間進行信息交換。Octave 卷積的作用在于將傳統(tǒng)的特征存儲方式轉(zhuǎn)化成基于低頻和高頻的輕量化存儲方式,具體轉(zhuǎn)變過程如圖11 所示,其中,αin代表在卷積操作輸入的Octave 特征圖中高頻信息所占的比例,αout代表卷積操作輸出的Octave 特征圖中高頻信息所占的比例。在Octave 卷積的輸入特征圖中,當αin=αout=0 時,Octave 卷積就等同于常規(guī)卷積。當αin=0 且αout≠0 時,代表當輸入特征圖為常規(guī)卷積特征圖時,將其轉(zhuǎn)化成用于Octave 卷積的Octave 特征圖,通常應用于Octave 卷積的第一層。當αin≠0 且αout≠0 時,代表當輸入是Octave 特征圖時進行Octave 卷積操作,通常應用于Octave 卷積的中間層。當αin≠0 且αout=0 時,代表在獲得傳統(tǒng)特征圖時需進行Octave 卷積,其作用是將Octave 特征圖經(jīng)過卷積之后得到傳統(tǒng)特征圖,通常應用于Octave 卷積的最后一層。
圖11 Octave 卷積前后的數(shù)據(jù)變化Fig.11 Data changes before and after Octave convolution
Octave 卷積通常對低頻信息和高頻信息進行分別存儲和處理,如果不能實現(xiàn)不同頻率信息之間的信息交換,則非常影響網(wǎng)絡性能。因此,在Octave 卷積中必須同時實現(xiàn)同頻率信息的傳遞和不同頻率信息的交換,如圖12 所示。
圖12 Octave 卷積中信息的傳遞和交換Fig.12 Transfer and exchange of information in Octave convolution
在獲得高頻信息時,對輸入特征圖中的高頻信息進行常規(guī)卷積操作,同時對低頻信息進行上采樣,將兩者結(jié)合得到卷積之后的高頻信息。在獲得低頻信息時,對輸入特征圖中的低頻信息進行常規(guī)卷積操作,同時對高頻信息進行池化,將兩者結(jié)合得到卷積之后的低頻信息,如圖13 所示,其中,XH、XL分別表示輸入的高頻和低頻特征圖,YH、YL代表輸出特征中的高頻和低頻特征圖,WH→H、WL→H、WH→L、WL→L分別表示根據(jù)輸入的高頻和低頻特征得到輸出高頻和低頻特征時的權(quán)值矩陣,pool 代表池化操作,upsample 代表上采樣操作,h、w、0.5h、0.5w分別表示高頻和低頻信息的高度和寬度,(1-αin)、αin、(1-αout)、αout分別表示輸入和輸出時高頻和低頻特征的通道數(shù),YH→H、YL→H分別表示從輸入的高維特征圖中得到的部分輸出的高維特征和從輸入的低維特征中得到的部分輸出的高維特征,YH→L、YL→L分別表示從輸入的高維特征圖中得到的部分輸出的低維特征和從輸入的低維特征中得到的部分輸出的低維特征。
圖13 Octave 卷積操作Fig.13 Octave convolution operation
根據(jù)實驗效果,Octave 卷積可用于ResNet[13]、GoogLeNet[31]等基線網(wǎng)絡及MobileNet、MobileNet V2、ShuffleNet、ShuffleNet V2 等常規(guī)輕量化網(wǎng)絡進行網(wǎng)絡優(yōu)化,實現(xiàn)輕量化處理。雖然Octave 卷積對于存儲空間優(yōu)化效果較好,但是在提高運算速度及效率方面有待進一步提升。
傳統(tǒng)深度神經(jīng)網(wǎng)絡的輕量化方法研究主要集中于減少參數(shù)量及改進卷積方式。2020 年,HAN 等[25]對深度神經(jīng)網(wǎng)絡特征圖進行分析,發(fā)現(xiàn)常規(guī)卷積中特征圖的冗余性在神經(jīng)網(wǎng)絡結(jié)構(gòu)中很少被關(guān)注,為了從特征圖冗余的角度實現(xiàn)網(wǎng)絡結(jié)構(gòu)輕量化,GhostNet 應運而生。如圖14 所示,對常規(guī)卷積生成的特征圖進行可視化,其中同色方框內(nèi)的特征圖非常相似,這說明在訓練好的神經(jīng)網(wǎng)絡進行前向傳播時,中間過程使用的特征圖中含有大量相似的冗余特征,這樣做的目的是為了使神經(jīng)網(wǎng)絡對輸入的圖像有更全面的理解。
圖14 常規(guī)卷積的可視化分析Fig.14 Visual analysis of conventional convolution
在此基礎(chǔ)上,GhostNet 為了使用更低的成本完成更多的特征映射,采用線性變化得到Ghost 特征。GhostNet 模塊[26]如圖15 所示,其中Φk表示對初次卷積之后的特征圖進行線性變換。首先使用較少的卷積核對輸入進行常規(guī)卷積,獲得通道較少的輸出特征并將其作為內(nèi)在特征圖,然后對內(nèi)在特征圖的每個通道進行線性變換,得到其對應的Ghost 特征圖,最后將內(nèi)在特征圖與Ghost 特征圖進行通道連接,取得最終的GhostNet 卷積輸出特征。
圖15 GhostNet 模塊Fig.15 GhostNet module
GhostNet 使用GhostNet 模塊代替?zhèn)鹘y(tǒng)MobileNet中的bottleneck層,GhostNet整體結(jié)構(gòu)如表2所示,其中,SE 代表是否在該操作中使用SE 模塊,1表示使用SE 模塊,0 表示未使用SE 模塊,G-bn 表示使用GhostNet 模塊構(gòu)建的bottleneck 結(jié)構(gòu)。GhostNet 模塊具有很強的即插即用性,可以用于優(yōu)化現(xiàn)有深度神經(jīng)網(wǎng)絡結(jié)構(gòu)或者輕量化網(wǎng)絡結(jié)構(gòu),對于神經(jīng)網(wǎng)絡運算速度優(yōu)化效果較明顯,但不能有效降低輕量化過程中的參數(shù)量及存儲空間。
表2 GhostNet 整體結(jié)構(gòu)Table 2 The overall structure of GhostNet
人工設計的輕量化深度神經(jīng)網(wǎng)絡雖然得到了廣泛應用,但是人工方法需要豐富的神經(jīng)網(wǎng)絡設計經(jīng)驗,以及在設計整體網(wǎng)絡的模塊和超參數(shù)時需要投入大量的人力和時間。隨著強化學習的快速發(fā)展,基于神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索[26]的輕量化方法應運而生。MobileNet、MobileNet V2、ShuffleNet、ShuffleNet V2傳統(tǒng)輕量化網(wǎng)絡都是將各自的基本單元堆疊成相應的神經(jīng)網(wǎng)絡結(jié)構(gòu),這種堆疊基本單元的方式用到的超參數(shù)是一個有序數(shù)列,而循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network,RNN)[32]則是擅長學習這種有序數(shù)列。神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索的主要目的是利用強化學習方法,在搜索空間中搜索到最適合的基本單元中的超參數(shù),再將搜索到的基本單元進行堆疊得到神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索的輕量化網(wǎng)絡。神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索流程如圖16 所示。
圖16 神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索流程Fig.16 Procedure of neural network structure search
控制器根據(jù)結(jié)構(gòu)搜索形成搜索空間內(nèi)的子網(wǎng)絡結(jié)構(gòu),將神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索應用于搜索ResNet、Inception 等具有跳躍連接的CNN 網(wǎng)絡,并將整個控制器分成N段,每段控制器的搜索流程如圖17所示。
圖17 控制器搜索流程Fig.17 Procedure of controller search
通過訓練控制器能夠?qū)W習到一層卷積層所需的所有超參數(shù),并且基于RNN 注意力機制為其添加可以學習的跳躍點。為了判斷第N段是否與之前的某一段有跳躍連接,神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索添加了N-1 個跳躍點,用于學習是否具有跳躍連接。具體地,第N段的跳躍點由2 個隱節(jié)點和1 個Sigmoid 激活函數(shù)確定,第N-1 段的輸出為第N段的輸入的概率計算公式如下:
其中:vT、WN-1、WN是需要學習的網(wǎng)絡中的超參數(shù);hN-1和hN分別是第N-1 段和第N段的跳躍點的狀態(tài)。根據(jù)準確率來更新控制器的參數(shù)形成新的子網(wǎng)絡,依次循環(huán),得到子網(wǎng)絡在訓練完成后在目標驗證集上的最高準確度。傳統(tǒng)NasNet 只會搜索復雜單元,然后對這些單元進行堆疊來構(gòu)建網(wǎng)絡結(jié)構(gòu),但是一些與上述單元不同的神經(jīng)層對于降低網(wǎng)絡延遲、提高精度具有重要的作用,因此傳統(tǒng)NasNet 僅堆疊相同的單元層會忽略神經(jīng)層的多樣性。
在目前主流的輕量化方法中,基于神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索的自動化網(wǎng)絡模型設計的優(yōu)勢非常明顯,通過搜索并堆疊小的基本單元來產(chǎn)生移動端模型,但是沒有考慮移動設備的約束條件。為了彌補這一不足,谷歌在2019 年提出MnasNet[27]。MnasNet 在神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索過程中考慮了模型延遲,能夠搜索到一個在模型精度和模型延遲之間取得最優(yōu)平衡的深度神經(jīng)模型。傳統(tǒng)輕量化網(wǎng)絡使用FLOPS 間接評價模型延遲,MnasNet 選擇直接在移動設備上運行模型來得到真實的模型延遲參數(shù),并且為了在較小的搜索空間中獲得更高的網(wǎng)絡性能,提出分解式層次搜索空間。
在平衡模型精度和模型延遲方面,MnasNet 采用多目標優(yōu)化方法來改進常規(guī)方法并將移動設備的真實延遲作為衡量標準。MnasNet 設計模型M,在M中使用TDelay(M)表示網(wǎng)絡在移動設備上的真實延遲,AACC(M)表示訓練好的網(wǎng)絡在目標驗證集上的準確度,目標延遲設為T,則多目標優(yōu)化如式(10)所示:
MnasNet 使用自定義加權(quán)法來近似帕累托最優(yōu)解:
其中,α、β為超參數(shù)。
針對NasNet 中僅搜索復雜單元且重復堆疊相同單元的情況,MnasNet采用分解式層次搜索空間,如圖18所示。將傳統(tǒng)卷積神經(jīng)網(wǎng)絡劃分為若干塊,按照塊的順序逐漸減少輸入分辨率,同時增加卷積核數(shù)。在分解式層次搜索中將傳統(tǒng)網(wǎng)絡分成不同的塊后,每一個塊中都具有相同的層結(jié)構(gòu),但操作和連接都由各自塊的子搜索空間決定。分解式層次搜索空間的優(yōu)勢是可以平衡層的多樣性和整個搜索空間的尺寸。
圖18 分解式層次搜索空間Fig.18 Decomposed hierarchical search space
MnasNet 的搜索步驟如下:1)基于循環(huán)神經(jīng)網(wǎng)絡生成的控制器來搜索并生成深度神經(jīng)網(wǎng)絡;2)在目標數(shù)據(jù)集上訓練控制器生成的網(wǎng)絡,并且在驗證集上得到模型精度;3)推理得到移動端的真實延遲,根據(jù)模型運行之后得到的模型精度和推理延遲,利用近似策略來最大化期望(PPO)獎勵并更新控制器,一直循環(huán)直至完成所有步驟或者參數(shù)收斂。
MnasNet 存在以下局限性:1)由于目前使用的MnasNet 仍然包含大量人工設計特征,因此不能完全自行設計網(wǎng)絡結(jié)構(gòu),未來神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索以及MnasNet的發(fā)展方向需在更廣泛的搜索空間內(nèi)進行,尋找具有高效率且輕量化的網(wǎng)絡結(jié)構(gòu);2)由于目前使用的主流神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索技術(shù)多數(shù)基于谷歌模型,其過多專注模型準確率而忽略了底層硬件設備的影響,因此在實際應用中還有很大的優(yōu)化空間。
在人工設計的輕量化網(wǎng)絡和基于神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索的輕量化網(wǎng)絡中都廣泛使用了常規(guī)深度可分離卷積,但由于常規(guī)深度可分離卷積使用大小相同的卷積核,忽略了不同大小的卷積核對卷積效果的影響。谷歌在2019 年提出基于混合深度可分離卷積[33]的MixNet 結(jié)構(gòu),通過將多個尺寸的卷積核混疊到同一層的卷積中替換常規(guī)深度可分離卷積?;旌仙疃瓤煞蛛x卷積如圖19 所示。首先,對輸入特征進行分組卷積,并在不同的組使用不同尺寸的卷積核,使其能夠捕獲不同分辨率的特征模式。其次,混合深度可分離卷積基于神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索的輕量化方法,搜索深度神經(jīng)網(wǎng)絡分組卷積的分組數(shù)(1~5),第i組的卷積核大小計算公式如下:
圖19 混合深度可分離卷積Fig.19 Mix depthwise separable convolution
在通道數(shù)的選擇上,混合深度可分離卷積考慮以下兩種方案:1)使用平均通道數(shù),以32 通道4 組為例,每組卷積的通道數(shù)為8;2)使用組號指數(shù)衰減,以32 通道4 組為例,各組通道數(shù)為16、8、4 和4。具體卷積方式以輸入特征尺寸為Xh×w×c、深度卷積核為Wk×k×c×m為例,首先將其按通道分成g組,則原始輸入轉(zhuǎn)化為,其中c1+c2+…+cg對應每組的卷積核尺寸為第δ組對應的混合深度可分離卷積如式(14)所示:
然后將各組卷積的輸出在通道上進行連接,得到:
MixNet 重點研究了卷積核尺寸對網(wǎng)絡輕量化效果的影響,基于此提出混合深度可分離卷積,通過在同一卷積層中使用不同大小的卷積核,學習不同分辨率的特征,從而提升網(wǎng)絡性能。
在人工設計的輕量化神經(jīng)網(wǎng)絡結(jié)構(gòu)部分,使用的輕量化方法多數(shù)依賴組卷積、深度可分離卷積等基本單元組成的塊,再通過堆疊這些塊來構(gòu)建網(wǎng)絡,由此導致的局限性就是其中存在極大的偶然性,有很大概率搜索不到空間的最優(yōu)解。模型壓縮主要分為細粒度修剪和粗粒度修剪兩部分,細粒度修剪針對權(quán)重中的冗余部分進行修改,粗粒度修剪則是針對通道、行列、塊等整個區(qū)域按照一定的稀疏率進行壓縮。
模型壓縮[12,34]針對常規(guī)CNN,通常采用 剪枝[35-36]、權(quán)值共享[15,37]與量化[38]、哈夫曼編碼[39]這3 種方法來減少參數(shù)量,達到輕量化目的。剪枝的本質(zhì)是剪去深度神經(jīng)網(wǎng)絡中不必要的冗余權(quán)值和分支,僅保留對于神經(jīng)網(wǎng)絡的目標任務有效用的權(quán)值參數(shù)。權(quán)值共享是使用同一組參數(shù)來避免過多參數(shù)導致的訓練和模型冗余。權(quán)值量化旨在用較小的比特值來表示權(quán)值,以達到減少存儲量的目的。哈夫曼編碼[40-41]是將兩個權(quán)值最低的節(jié)點作為左右子樹形成新的節(jié)點,再選取兩個權(quán)值最低的節(jié)點作為左右子樹形成新的節(jié)點,以此類推,達到根據(jù)使用頻率來最大化節(jié)省存儲空間的目的。
為減少在傳統(tǒng)機器學習中特征提取、模型選擇、參數(shù)調(diào)試等方面的人工干預[42-44],YAO 等[45]提出自動機器學習(AutoML)技術(shù)。AutoML 的通用計算公式如下:
自動特征工程的目的是自動發(fā)掘并構(gòu)造相關(guān)特征來優(yōu)化模型性能,包括自動選擇最優(yōu)參數(shù)、自動選擇最優(yōu)方法。除此之外,還包含特征選擇、特征降維[46-48]、特征生成[49-51]、特征編碼[52-54]等特定的特征增強方法。這些方法在自動機器學習領(lǐng)域有很大的發(fā)展空間。
為了避免在模型壓縮過程中過分依賴人工設計的啟發(fā)式策略和基于規(guī)則的策略,西安交通大學與Google 于2018 年提出基于自動機器學習的模型壓縮(AutoML for Model Compression,AMC)[55]方法。AMC 方法的性能明顯優(yōu)于基于規(guī)則的壓縮策略,壓縮模型能在保證準確性的同時大幅減少人工成本。由于壓縮模型精度受各層稀疏性的影響,因此需要更細粒度的搜索空間。自動機器學習在模型壓縮方面具有很大優(yōu)勢,采用強化學習中的深度確定性策略梯度法(DDPG)產(chǎn)生連續(xù)空間上的壓縮率,通過大量學習達到提升網(wǎng)絡精度和運行速度的目的。
圖20 給出了AMC 引擎示意圖。首先,使用一個預訓練好的基線網(wǎng)絡,代理部分從第t層中接收嵌入,輸出稀疏率并根據(jù)稀疏率對t層進行模型壓縮。然后,環(huán)境部分移動到第t+1 層進行操作,在完成對所有層的操作后評估整個網(wǎng)絡的準確率。最后,將包含準確率和浮點運算量(或者參數(shù)量)的獎勵反饋給代理部分。
圖20 AMC 引擎Fig.20 AMC engine
在通道修剪環(huán)境中的每一層均使用11 個特征來描述嵌入St,如式(17)所示:
其中:卷積核維度為k×k×c×n;輸入數(shù)據(jù)的維度為h×w×c;t為層數(shù);FLOPS[t]為第t層的浮點運算量;reduced 為前一層中減少的浮點運算總量;rest 是后面所有層中剩余的浮點運算量;αt-1為上一層的壓縮率。在代理部分,使用深度確定性策略梯度法來連續(xù)控制壓縮率。Block-QNN[56]應用Bellman 方程[57]的變體形式,在Block-QNN[56]之后,DDPG 在探索過程中的轉(zhuǎn)換公式過渡為(st;αt,R;st+1),其中R為網(wǎng)絡壓縮后的獎勵,在更新過程中減去基線獎勵r以減少梯度估計方差[58-59],如式(18)、式(19)所示:
其中:γ為折扣因子。
根據(jù)經(jīng)驗得出,由于AMC 誤差(E)與loga FFLOPS或loga Pparameter[60]成反比,因此設計以下獎勵公式:
AMC 利用增強學習方法自動搜索設計空間,對于模型壓縮的質(zhì)量相較人工壓縮有了質(zhì)的飛躍。除此之外,AMC 包含兩種不同的獎勵方案,在實現(xiàn)模型壓縮的同時,又能保證模型精度,在ImageNet、MobileNet、MobileNet V2、ResNet 和VGG 上都展現(xiàn)出了優(yōu)異的性能。
目前,智能移動設備趨向于邊緣化、輕量化發(fā)展趨勢。如何在盡可能保持神經(jīng)網(wǎng)絡模型精度的前提下,最大程度地降低模型延遲和存儲空間是目前研究的熱點問題。但是現(xiàn)有性能較好的人工設計的輕量化方法不僅需要耗費大量的人力資源,而且需要具備豐富的深度學習經(jīng)驗,才能使得延遲、運算速度、存儲空間等神經(jīng)網(wǎng)絡模型的各項性能指標都達到要求?;趶娀瘜W習的神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索方法是目前主流的輕量化方法,但是大量基于神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索的輕量化方法僅專注于提高神經(jīng)網(wǎng)絡模型的準確率,卻忽視了底層硬件設備的限制,這樣得到的高效模型由于對硬件要求較高,通常難以在移動智能端進行部署應用。而基于神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索的輕量化方法通過強化學習控制器在搜索空間內(nèi)搜索生成網(wǎng)絡,無需耗費大量的人力資源,這是其得以快速發(fā)展的重要原因。
在人工設計的輕量化方法中,目前效果顯著的方法多數(shù)集中于提高神經(jīng)網(wǎng)絡模型的運行速度或者降低存儲空間,如何同時對其進行優(yōu)化是下一步需要研究的重要方向。此外,基于神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索的輕量化方法的神經(jīng)網(wǎng)絡模型精度和輕量化效果也有待提升,可以通過設計更加合理的搜索空間來找到更合適的網(wǎng)絡或者增加機器自動化學習在整個神經(jīng)網(wǎng)絡中所占的比重,而在基于自動模型壓縮的輕量化方法中,如何進一步實現(xiàn)網(wǎng)絡搜索與壓縮的自動化也是亟待解決的難點之一。
本文研究深度神經(jīng)網(wǎng)絡的輕量化網(wǎng)絡結(jié)構(gòu)設計方法,對人工設計的輕量化方法、基于神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索的輕量化方法和基于自動模型壓縮的輕量化方法進行創(chuàng)新點與優(yōu)劣勢對比,并指出深度神經(jīng)網(wǎng)絡的輕量化網(wǎng)絡結(jié)構(gòu)設計方法的評價指標已從單一的浮點運算量發(fā)展到如今包含模型延遲、存儲空間等的綜合評價指標,而研究人員應根據(jù)不同的應用場景合理選取輕量化評價標準和輕量化結(jié)構(gòu)設計方法。后續(xù)可將神經(jīng)網(wǎng)絡結(jié)構(gòu)搜索技術(shù)應用到輕量化網(wǎng)絡模型搜索中,通過算法自動搜索合適的輕量化網(wǎng)絡模型,進一步提升神經(jīng)網(wǎng)絡運算速度。