深度卷積神經網路演化歷史及結構改進脈絡-40頁長文全面解讀
導言從1989年LeCun提出第一個真正意義上的卷積神經網路到今天為止,它已經走過了29個年頭。自2012年AlexNet網路出現之後,最近6年以來,卷積神經網路得到了急速發展,在很多問題上取得了當前最好的結果,是各種深度學習技術中用途最廣泛的一種。在本文中SIGAI將為大家回顧和總結卷積神經網路的整個發展過程。
早期成果
卷積神經網路是各種深度神經網路中應用最廣泛的一種,在機器視覺的很多問題上都取得了當前最好的效果,另外它在自然語言處理,計算機圖形學等領域也有成功的應用。
第一個真正意義上的卷積神經網路由LeCun在1989年提出[1],後來進行了改進,它被用於手寫字元的識別,是當前各種深度卷積神經網路的鼻祖。接下來我們介紹LeCun在早期提出的3種卷積網路結構。
文獻[1]的網路由卷積層和全連接層構成,網路的輸入是16x16的歸一化圖像,輸出為0-9這10個類,中間是3個隱含層。這個網路的結構如下圖所示:
這篇文章提出了權重共享(weight sharing)和特徵圖像(feature map)的概念,這些概念被沿用至今,就是卷積層的原型。網路有1個輸入層,1個輸出層,3個隱含層構成,其中隱含層H1和H2是卷積層,H3是全連接層。網路的激活函數選用了tanh(雙曲正切)函數,損失函數選用了均方誤差(mean squared error)函數,即歐氏距離的均值。網路的權重用均勻分布的隨機數進行初始化,訓練時參數梯度值的計算採用了反向傳播演算法,梯度值的更新採用了在線(online)的隨機梯度下降法。
文獻[2]的網路結構和文獻[1]類似,用於郵政編碼的識別,在9%拒識率的條件下錯誤率為1%。網路的輸入為28x28的圖像,輸出為0-9這10個類。整個網路有4個隱含層,其中H1為4個5x5的卷積核,輸出為4張24x24的特徵圖像。H2為下採樣層,對H1的輸出結果進行2x2的下採樣,得到4張12x12的圖像。H3有12個5x5的卷積核,輸出為12張8x8的圖像,這裡輸出圖像每個通道的多通道卷積只作用於前一層輸出圖像的部分通道上,為什麼採用這樣方式?有兩個原因:1.減少參數,2.這種不對稱的組合連接的方式有利於提取多種組合特徵。H2和H3的連接關係如下圖所示:
H4為下採樣層,對H3的輸出圖像進行2x2的下採樣,得到12張4x4的特徵圖像。最後為輸出層,接收H4特特徵圖像,輸出10個類別的概率。
文獻[3]的網路即為大家熟知的LeNet-5網路,這是第一個被廣為流傳的卷積網路,奠定了現代卷積神經網路的基礎。整個網路的結構如下圖所示:
下面是基於LeNet-5的手寫體數字識別案例:
這個網路的輸入為32x32的圖像,整個網路有2個卷層,2個池化層,2個全連接層,一個輸出層,輸出層有10個神經元,代表10個數字類。卷積層C1有6個5x5的卷積核,作用於灰度圖像,產生6張28x28的輸出圖像。池化層S2作用於C1的輸出圖像,執行2x2的池化,產生6張14x14的輸出圖像。卷積層C3有16個5x5的卷積核,每個卷積核作用於前一層輸出圖像的部分通道上,產生16張10x10的輸出圖像。C3和S2的連接關係如下圖所示:
池化層S4對C3的輸出圖像進行2x2的池化,得到16張5x5的輸出圖像。全連接層C5有120個節點,全連接層F6有64個節點。
網路的激活函數選用tanh函數,損失函數採用均方誤差函數,訓練時採用隨機梯度下降法和反向傳播演算法。
早期的卷積網路被用於人臉檢測[4][5],人臉識別[6],字元識別[7]等各種問題。但並沒有成為主流的方法,其原因在SIGAI公眾號之前的文章「卷積神經網路為什麼能稱霸計算機視覺領域?」中已經分析過了,主要是梯度消失問題、訓練樣本數的限制、計算能力的限制3方面因素。梯度消失的問題在之前就已經被發現,對於深層神經網路難以訓練的問題,文獻[8]進行了分析,但給出的解決方法沒有成為主流。
深度卷積神經網路
在深入分析比較當前主流深度卷積神經網路的特點之前,我們從各網路在ImageNet 2012測試數據集的準確率以及網路的參數量和計算複雜度三個維度進行分析,希望讀者對當前的主流網路結構有一個整體的認知。如下圖所示:
深度卷積網路的大發展起步於2012年的AlexNet網路,在這之後各種改進的網路被不斷的提出,接下來我們會介紹各種典型的網路結構。
AlexNet網路
現代意義上的深度卷積神經網路起源於AlexNet網路[9],它是深度卷積神經網路的鼻祖。這個網路相比之前的卷積網路最顯著的特點是層次加深,參數規模變大。網路結構如下圖所示:
這個網路有5個卷積層,它們中的一部分後面接著max-pooling層進行下採樣;最後跟3個全連接層。最後一層是softmax輸出層,共有1000個節點,對應ImageNet圖集中 1000個圖像分類。網路中部分卷基層分成2個group進行獨立計算,有利於GPU並行化以及降低計算量。
這個網路有兩個主要的創新點:1. 新的激活函數ReLU,2. dropout機制[10]。dropout的做法是在訓練時隨機的選擇一部分神經元進行休眠,另外一些神經元參與網路的優化,起到了正則化的作用以減輕過擬合。
網路的輸入圖像為的彩色三通道圖像。第1個卷積層有96組11x11大小的卷積核,卷積操作的步長為4。這裡的卷積核不是2維而是3維的,每個通道對應有3個卷積核(所以是一組卷積核),具體實現時是用3個2維的卷積核分別作用在RGB通道上,然後將三張結果圖像相加。下圖為輸入為3通道,卷積層參數為2組每組3個卷積核,輸出結果為2通道的動態卷積過程
第2個卷積層有256組5x5大小的卷積核,分為兩個group,即每個group通道數為128組,每組有48個卷積核。第3個卷積層有384組3x3大小的卷積核,每組有256個卷積核。第4個卷積層有384組3x3大小的卷積核,分為兩個group,即每個group通道數為192組,每組有192個卷積核。第5個卷積層有256組,3x3大小的卷積核,分為兩個group,即每個group為128組,每組有192個卷積核。
這個網路沒有使用傳統的sigmoid或tanh函數作為激活函數,而是使用了新型的ReLU函數[11]:
其導數為符號函數sgn。ReLU函數和它的導數計算簡單,在正向傳播和反向傳播時都減少了計算量。由於在時函數的導數值為1,可以在一定程度上解決梯度消失問題,訓練時有更快的收斂速度。當時函數值為0,這使一些神經元的輸出值為0,從而讓網路變得更稀疏,起到了類似L1正則化的作用,也可以在一定程度上緩解過擬合。在SIGAI公眾號上一篇文章「理解神經網路的激活函數」中我們已經對激活函數做了全面深入的介紹。
ZFNet網路
文獻[12]提出通過反卷積(轉置卷積)進行卷積網路可視化的方法,以此分析卷積網路的效果,並指導網路的改進,在AlexNet網路的基礎上得到了效果更好的ZFNet網路。
該論文是在AlexNet基礎上進行了一些細節的改動,網路結構上並沒有太大的突破。該論文最大的貢獻在於通過使用可視化技術揭示了神經網路各層到底在幹什麼,起到了什麼作用。如果不知道神經網路為什麼取得了如此好的效果,那麼只能靠不停的實驗來尋找更好的模型。使用一個多層的反卷積網路來可視化訓練過程中特徵的演化及發現潛在的問題;同時根據遮擋圖像局部對分類結果的影響來探討對分類任務而言到底那部分輸入信息更重要。下圖為典型反卷積網路示意圖:
ZFNet網路結構如下圖所示:
ZFNet在保留AlexNet的基本結構的同時利用反卷積網路可視化的技術對特定卷積層的卷積核尺寸進行了調整,第一層的卷積核從11*11減小到7*7,將stride從4減小到2,Top5的錯誤率比AlexNet比降低了1.7%。
GoogLeNet網路
文獻[13]提出了一種稱為GoogLeNet網路的結構(Inception-V1)。在AlexNet出現之後,針對圖像類任務出現了大量改進的網路結構,總體來說改進的思路主要是增大網路的規模,包括深度和寬度。但是直接增加網路的規模將面臨兩個問題,首先,網路參數增加之後更容易出現過擬合,在訓練樣本有限的情況下這一問題更為突出。另一個問題是計算量的增加。GoogLeNet致力於解決上面兩個問題。
GoogLeNet由Google在2014年提出,其主要創新是Inception機制,即對圖像進行多尺度處理。這種機制帶來的一個好處是大幅度減少了模型的參數數量,其做法是將多個不同尺度的卷積核,池化層進行整合,形成一個Inception模塊。典型的Inception模塊結構如下圖所示:
上圖的模塊由3組卷積核以及一個池化單元組成,它們共同接受來自前一層的輸入圖像,有三種尺寸的卷積核,以及一個max pooling操作,它們並行的對輸入圖像進行處理,然後將輸出結果按照通道拼接起來。因為卷積操作接受的輸入圖像大小相等,而且卷積進行了padding操作,因此輸出圖像的大小也相同,可以直接按照通道進行拼接。
從理論上看,Inception模塊的目標是用尺寸更小的矩陣來替代大尺寸的稀疏矩陣。即用一系列小的卷積核來替代大的卷積核,而保證二者有近似的性能。
上圖的卷積操作中,如果輸入圖像的通道數太多,則運算量太大,而且卷積核的參數太多,因此有必要進行數據降維。所有的卷積和池化操作都使用了1x1卷積進行降維,即降低圖像的通道數。因為1x1卷積不會改變圖像的高度和寬度,只會改變通道數。
GoogleNet網路結構如下圖所示:
GoogleNet在ILSVRC 2014的比賽中取得分類任務的第一名,top-5錯誤率6.67%。相較於之前的AlexNet-like網路,GoogleNet的網路深度達到了22層,參數量減少到AlexNet的1/12,可以說是非常優秀且非常實用的模型。
為了降低網路參數作者做了2點嘗試,一是去除了最後的全連接層,用全局平均池化替代。全連接層幾乎佔據了AlexNet中90%的參數量,而且會引起過擬合,去除全連接層後模型訓練更快並且減輕了過擬合。用全局平均池化層取代全連接層的做法借鑒了Network In Network(以下簡稱NIN)論文[16]。二是GoogleNet中精心設計的Inception模塊提高了參數的利用效率,這一部分也借鑒了NIN的思想,形象的解釋就是Inception模塊本身如同大網路中的一個小網路,其結構可以反覆堆疊在一起形成大網路。不過GoogleNet比NIN更進一步的是增加了分支網路。
VGG網路
VGG網路由著名的牛津大學視覺組(Visual Geometry Group)2014年提出[14],並取得了ILSVRC 2014比賽分類任務的第2名(GoogleNet第一名)和定位任務的第1名。同時VGGNet的拓展性很強,遷移到其他圖片數據上的泛化性非常好。VGGNet的結構非常簡潔,整個網路都使用了同樣大小的卷積核尺寸(3x3)和池化尺寸(2x2)。到目前為止,VGGNet依然經常被用來提取圖像特徵,被廣泛應用於視覺領域的各類任務。
VGG網路的主要創新是採用了小尺寸的卷積核。所有卷積層都使用3x3卷積核,並且卷積的步長為1。為了保證卷積後的圖像大小不變,對圖像進行了填充,四周各填充1個像素。所有池化層都採用2x2的核,步長為2。全連接層有3層,分別包括4096,4096,1000個節點。除了最後一個全連接層之外,所有層都採用了ReLU激活函數。下圖為VGG16的結構:
VGG與Alexnet相比,做了以下改進:
1.去掉了LRN層,作者實驗中發現深度卷積網路中LRN的作用並不明顯。
2.採用更小的連續3x3卷積核來模擬更大尺寸的卷積核,例如2層連續的3x3卷積層可以達到一層5x5卷積層的感受野,但是所需的參數量會更少,兩個3x3卷積核有18個參數(不考慮偏置項),而一個5x5卷積核有25個參數。後續的殘差網路等都延續了這一特點。
殘差網路
殘差網路(Residual Network)[15]用跨層連接(Shortcut Connections)擬合殘差項(Residual Representations)的手段來解決深層網路難以訓練的問題,將網路的層數推廣到了前所未有的規模,作者在ImageNet數據集上使用了一個152層的殘差網路,深度是VGG網路的8倍但複雜度卻更低,在ImageNet測試集上達到3.57%的top-5錯誤率,這個結果贏得了ILSVRC2015分類任務的第一名,另外作者還在CIFAR-10數據集上對100層和1000層的殘差網路進行了分析。VGG19網路和ResNet34-plain及ResNet34-redisual網路對比如下:
之前的經驗已經證明,增加網路的層數會提高網路的性能,但增加到一定程度之後,隨著層次的增加,神經網路的訓練誤差和測試誤差會增大,這和過擬合還不一樣,過擬合只是在測試集上的誤差大,這個問題稱為退化。
為了解決這個問題,作者設計了一種稱為深度殘差網路的結構,這種網路通過跳層連接和擬合殘差來解決層次過多帶來的問題,這種做法借鑒了高速公路網路(Highway Networks)的設計思想,與LSTM有異曲同工之妙。這一結構的原理如下圖所示:
後面有文獻對殘差網路的機制進行了分析。得出了以下結論:殘差網路並不是一個單一的超深網路,而是多個網路指數級的隱式集成,由此引入了多樣性的概念,它用來描述隱式集成的網路的數量;在預測時,殘差網路的行為類似於集成學習;對訓練時的梯度流向進行了分析,發現隱式集成大多由一些相對淺層的網路組成,因此,殘差網路並不能解決梯度消失問題。
為了進一步證明殘差網路的這種集成特性,並確定刪除掉一部分跨層結構對網路精度的影響,作者進行了刪除層的實驗,在這裡有兩組實驗,第一組是刪除單個層,第二組是同時刪除多個層。為了進行比較,作者使用了殘差網路和VGG網路。實驗結果證明,除了個別的層之外,刪掉單個層對殘差網路的精度影響非常小。相比之下,刪掉VGG網路的單個層會導致精度的急劇下降。這個結果驗證了殘差網路是多個網路的集成這一結論。
第三組實驗是對網路的結構進行變動,集調整層的順序。在實驗中,作者打亂某些層的順序,這樣會影響一部分路徑。具體做法是,隨機的交換多對層的位置,這些層接受的輸入和產生的輸出數據尺寸相同。同樣的,隨著調整的層的數量增加,錯誤率也平滑的上升,這和第二組實驗的結果一致。
但是筆者認為作者的這種解釋有些牽強。普通意義上的集成學習演算法,其各個弱學習器之間是相互獨立的,而這裡的各個網路之間共享了一些層,極端情況下,除了一層不同之外,另外的層都相同。另外,這些網路是同時訓練出來的,而且使用了相同的樣本。
GoogleNet-Inception-Like網路改進系列
Inception-V2(GoogleNet-BN)
作者基於GoogleNet的基本結構進行了改進,Top1錯誤率相較減少了2個百分點,主要做了以下的改進:
1.加入了BN層,減少了Internal Covariate Shift(內部neuron的數據分布發生變化),使每一層的輸出都規範化到一個N(0, 1)的高斯。
2.學習VGG用2個3x3的conv替代Inception模塊中的5x5,既降低了參數數量,也加快了計算速度。
Inception-V3
Inception-V3一個最重要的改進是卷積核分解(Factorization),將7x7的卷積核分解成兩個一維的卷積(1x7,7x1),3x3也是一樣(1x3,3x1),我們稱為非對稱分解,如下圖所示。這樣做既可以加速計算減少參數規模,又可以將1個卷積拆成2個卷積,使得網路深度進一步增加,增加了網路的非線性。
除此以外作者對訓練優化的演算法也做了改進:
1.通過改進AdaGrad提出了RMSProp一種新的參數優化的方式。RMSprop是Geoff Hinton提出的一種自適應學習率方法。AdaGrad會累加之前所有的梯度平方,而RMSprop僅僅是計算對應的平均值,因此可緩解AdaGrad演算法學習率下降較快的問題。 實驗證明RMSProp在非凸條件下優化結果更好。
AdaGrad的迭代公式為:
RMSProp的迭代公式為:
2.採用了Label Smoothing的策略,該方法是一種通過在輸出標籤中添加雜訊,實現對模型進行約束,降低模型過擬合程度的一種正則化方法。
Inception-V4
Inception-v4相較於v3版本增加了Inception模塊的數量,整個網路變得更深了。
Xception
Xception是Google針對Inception v3的另一種改進,主要是採用Depthwise Separable Convolution來替換原來Inception v3中的卷積操作, 在基本不增加網路複雜度的前提下提高了模型的效果。什麼是Depthwise Separable Convolution? 通常,在一組特徵圖上進行卷積需要三維的卷積核,也即卷積核需要同時學習空間上的相關性和通道間的相關性。Xception通過在卷基層加入group的策略將學習空間相關性和學習通道間相關性的任務分離,大幅降低了模型的理論計算量且損失較少的準確度。
Xception網路結構如下圖所示:
Inception-ResNet v1/v2
作者基於Inception-v3和Inception-v4將殘差網路的思想進行融合,分別得到了Inception-ResNet-v1和Inception-ResNet-v2兩個模型。不僅提高了分類精度而且訓練的穩定性也得到增強。
Inception-ResNet-v2 網路結構如下圖所示:
NASNet
此論文由Google brain出品,是在之前的一篇論文NAS-Neural Architecture Search With Reinforcement Learning的基礎做了突破性的改進,使得能讓機器在小數據集(CIFAR-10數據集)上自動設計出CNN網路,並利用遷移學習技術使得設計的網路能夠被很好的遷移到ImageNet數據集,驗證集上達到了82.7%的預測精度,同時也可以遷移到其他的計算機視覺任務上(如目標檢測)。該網路的特點為:
1.延續NAS論文的核心機制,通過強化學習自動產生網路結構。
2.採用ResNet和Inception等成熟的網路拓撲結構減少了網路結構優化的搜索空間,大型網路直接由大量的同構模塊堆疊而成,提高學習效率。
3.在CIFAR-10上進行了架構搜索,並將最好的架構遷移到ImageNet圖像分類和COCO物體檢測上。
下圖為採用AutoML設計的Block結構:
WRN(wide residual network)
作者認為,隨著模型深度的加深,梯度反向傳播時,並不能保證能夠流經每一個殘差模塊(residual block)的權重,以至於它很難學到東西,因此在整個訓練過程中,只有很少的幾個殘差模塊能夠學到有用的表達,而絕大多數的殘差模塊起到的作用並不大。因此作者希望使用一種較淺的,但是寬度更寬的模型,來更加有效的提升模型的性能。
ResNet原作者針對CIFAR-10所使用的的網路,包含三種Residual Block,卷積通道數量分別是16、32、64,網路的深度為6*N+2。而在這裡,WRN作者給16、32、64之後都加了一個係數k,也就是說,作者是通過增加Residual Block卷積通道的數量來使模型變得更寬,從而N可以保持很小的值,就可以是網路達到很好的效果。
CIFAR-10和CIFAR -100性能對比:
上述實驗表明單獨增加模型的寬度是對模型的性能是有提升的。不過也不能完全的就認為寬度比深度更好,兩者只有相互搭配,才能取得更好的效果。
ResNeXt
作者提出 ResNeXt 的主要原因在於:傳統的提高模型準確率的做法,都是加深或加寬網路,但是隨著超參數數量的增加(比如通道數,卷積核大小等),網路設計的難度和計算開銷也會增加。因此本文提出的 ResNeXt 結構可以在不增加參數複雜度的前提下提高準確率。
這篇論文提出了ResNeXt網路,同時採用了VGG堆疊的思想和Inception 的 split-transform-merge 思想,但是可擴展性比較強,可以認為是在增加準確率的同時基本不改變或降低模型的複雜度。這裡提到一個名詞cardinality,原文的解釋是the size of the set of transformations,如下圖(a)(b) cardinality=32所示:
通過實驗給出了下面的結論:
1.證明ResNeXt比ResNet更好,而且Cardinality越大效果越好
2.增大Cardinality比增大模型的width或者depth效果更好
當時取得了state-of-art的結果,雖然後來被其它的網路結構超越,但就在最近Facebook 在圖像識別技術上又有了新突破,基於ResNeXt 101-32x48d在ImageNet測試中準確度達到創紀錄的 85.4%!(使用了35億張圖像,1.7萬主題標籤進行模型訓練,規模史無前例!!!筆者這裡不下什麼結論,各位看官自行體會...)
DenseNet
DenseNet 是一種具有密集連接的卷積神經網路。在該網路中,任何兩層之間都有直接的連接,也就是說,網路每一層的輸入都是前面所有層輸出的並集,而該層所學習的特徵圖也會被直接傳給其後面所有層作為輸入。DenseNet的一個優點是網路更窄,參數更少,很大一部分原因得益於dense block的設計,後面有提到在dense block中每個卷積層的輸出feature map的數量都很小(小於100),而不是像其他網路一樣動不動就幾百上千的寬度。同時這種連接方式使得特徵和梯度的傳遞更加有效,網路也就更加容易訓練。下面是DenseNet 的示意圖:
DenseNet可以有效地減少網路參數規模,達到減輕過擬合的效果,對小數據集合的學習很有效果。但是由於中間輸出的feature map數量是多層Concat的結果,導致網路在訓練和測試的時候顯存佔用並沒有明顯的優勢,計算量也沒有明顯的減少!
MobileNet
MobileNets是Google針對手機等嵌入式設備提出的一種輕量級的深層神經網路,網路設計的核心Separable Convolution可以在犧牲較小性能的前提下有效的減少參數量和計算量。Separable Convolution將傳統的卷積運算用兩步卷積運算代替:Depthwise convolution與Pointwise convolution,如下圖所示:
從圖中可以明確的看出,由於輸入圖片為三通道,Depthwise conv的filter數量只能為3,而傳統的卷積方法會有3x3總共9個filter。
後續的MobileNet-v2主要增加了殘差結構,同時在Depthwise convolution之前添加一層Pointwise convolution,優化了帶寬的使用,進一步提高了在嵌入式設備上的性能。可分離卷積的思路如下圖所示:
深度神經網路優化策略匯總
接下來介紹卷積神經網路的各種改進措施,其中經典網路的改進措施已經在前面各個網路中介紹。針對卷積神經網路的改進措施主要在以下幾個方面:卷積層,池化層,激活函數,損失函數,網路結構,正則化技術等方面。優化演算法對網路的訓練至關重要,在這裡我們單獨列出來了。
卷積層
卷積層的改進有以下幾種:卷積核小型化,1x1卷積,Network In Network,Inception機制,卷積分解(Factorization),反卷積運算等,下面分別介紹。
Network In Network[16]的主要思想是用一個小規模的神經網路來替代卷積層的線性濾波器,在這篇文獻中,小型網路是一個多層感知器卷積網路。顯這種小型網路比線性的卷積運算有更強的的描述能力。
卷積核小型化是現在普遍接受的觀點,在VGG網路中已經介紹了。1x1卷積可以用於通道降維,也可以用於全卷積網路,保證卷積網路能接受任意尺寸的輸入圖像,並能做逐像素的預測。Inception機制在GoogLeNet網路中已經介紹,這裡也不在重複。
卷積操作可以轉化為圖像與一個矩陣的乘積來實現,反卷積[17]也稱為轉置卷積,它的操作剛好和這個過程相反,正向傳播時左乘矩陣的轉置,反向傳播時左乘矩陣。注意這裡的反卷積和信號處理里的反卷積不是一回事,它只能得到和原始輸出圖像尺寸相同的圖像,並不是卷積運算的逆運算。反卷積運算有一些實際的用途,包括接下來要介紹的卷積網路的可視化;全卷積網路中的上採樣,圖像生成等。反卷積運算通過對卷積運算得到的輸出圖像左乘卷積矩陣的轉置,可以得到和原始圖像尺寸相同的一張圖像。
池化層
池化層的改進主要有以下幾種:L-P池化,混合池化,隨機池化,Spatial pyramid pooling,ROI pooling。Spatial pyramid pooling在SPP網路中提出,之前的「基於深度學習的目標檢測演算法綜述」文章中SIGAI已經做了講解,這裡不再重複。ROI pooling在Fast R-CNN演算法中提出,同樣的在目標檢測文章中已經做了介紹。
激活函數
除了傳統的sigmoid,tanh函數,深度卷積神經網路中出現了各種新的激活函數,主要的有:ReLU,ELU,PReLU等,它們取得了不錯的效果,其中ReLU以及它的改進型在卷積網路中被普遍採用。這些激活函數在SIGAI公眾號上一篇文章「理解神經網路的激活函數」中已經做了介紹。
損失函數
損失函數也是一個重要的改進點。除了歐氏距離損失之外,交叉熵,對比損失,合頁損失等相繼被使用。這些基本的損失函數SIGAI在後續的文章中會專門介紹,敬請期待!
在一些複雜的任務上,出現了多任務損失損失函數。典型的有目標檢測演算法,人臉識別演算法,圖像分割演算法等,這些損失函數在人臉識別、目標檢測系列綜述文章中已經進行介紹,在這裡不再重複。
網路結構
這裡的網路結構指拓撲結構以及層的使用上。連接關係的改進如殘差網路和DenseNet等結構在前面已經做了介紹。
全卷積網路Fully Convolutional Networks[31],簡稱FCN,是在標準卷積網路基礎上所做的改變,它將標準卷積網路的全連接層替換成卷積層,以適應圖像分割、深度估計等需要對原始圖像每個像素點進行預測的情況。一般情況下,全卷積網路最後幾個卷積層採用1x1的卷積核。由於卷積和下採樣層導致了圖像尺寸的減小,為了得到與原始輸入圖像尺寸相同的圖像,使用了反卷積層實現上採樣以得到和輸入圖像尺寸相等的預測圖像。
不同層的卷積核有不同的感受野,描述了圖像在不同尺度的信息。多尺度處理也是卷積網路的一種常用手段,將不同卷積層輸出圖像匯總到一個層中進行處理可以提取圖像多尺度的信息,典型的做法包括GoogLeNet,SSD,Cascade CNN,DenseBox。
歸一化技術
神經網路在訓練過程中每一層的參數會隨著迭代的進行而不斷變化,這會導致它後面一層的輸入數據的分布不斷發生變化,這種問題稱為internal covariate shift。在訓練時,每一層要適應輸入數據的分布,這需要我們在迭代過程中調整學習率,以及精細的初始化權重參數。為了解決這個問題,我們需要對神經網路每一層的輸入數據進行歸一化。其中一種解決方案為批量歸一化Batch Normalization[66],它是網路中一種特殊的層,用於對前一層的輸入數據進行批量歸一化,然後送入下一層進行處理,這種做法可以加速神經網路的訓練過程。
優化演算法
除了標準的mini-batch隨機梯度下降法之外,還有一些改進版本的梯度下降法,它們在很多實驗和實際應用中取得了更好的效果,下面分別進行介紹。
AdaGrad[67]為自適應梯度,即adaptive gradient演算法,是梯度下降法最直接的改進。唯一不同的是,AdaGrad根據前幾輪迭代時的歷史梯度值來調整學習率。AdaDelta演算法[70]也是梯度下降法的變種,在每次迭代時也利用梯度值構造參數的更新值。Adam演算法[68]全稱為adaptive moment estimation,它由梯度項構造了兩個向量m和v,它們的初始值為0。NAG演算法是一種凸優化方法,由Nesterov提出。和標準梯度下降法的權重更新公式類似,NAG演算法構造一個向量v,初始值為0。RMSProp演算法[69]也是標準梯度下降法的變種,它由梯度值構造一個向量,初始化為0,
參數初始化和動量項對演算法的收斂都至關重要,文獻[32]對這兩方面的因素進行了分析。它的觀點認為,對於深度神經網路和循環神經網路的訓練優化問題求解,權重初始值和動量項都很重要,二者缺一不可。如果初始值設置不當,即使使用動量項也很難收斂到好的效果;另一方面,如果初始值設置的很好,但不使用動量項,收斂效果也打折扣。
理論解釋
卷積網路一般有很深的層次,要對它進行嚴格而細緻的分析比較困難。與網路的應用和設計相比,對它的理論和運行機理分析與解釋相對較少。如果我們能分析清楚卷積網路的運行機理,把卷積操作可視化的顯示出來,無論是對於理解卷積網路,還是對於網路的設計都具有重要的意義。
對多層卷積神經網路的理論解釋和分析來自兩個方面。第一個方面是從數學角度的分析,對網路的表示能力、映射特性的數學分析;第二個方面是多層卷積網路和人腦視覺系統關係的研究,分析二者的關係有助於理解、設計更好的方法,同時也促進了神經科學的進步。
在SIGAI公眾號之前的文章「卷積神經網路為什麼能稱霸計算機視覺領域?」中,我們介紹了對卷積網路的理論分析,感興趣的讀者可以閱讀那篇文章,在這裡不再重複介紹。
典型應用
卷積神經網路在諸多領域得到了成功的應用。接下來我們將介紹它在機器視覺,計算機圖形學,自然語言處理這些典型領域的應用。對於這些應用問題和為它們設計的網路結構和演算法,理解的關鍵點是:
1.網路的結構。即網路由那些層組成,各個層的作用是什麼,它們的輸入數據是什麼,輸出數據是什麼。
2.訓練目標即損失函數,這直接取決於要解決的問題。
機器視覺
卷積神經網路在圖像分類問題上取得成功之後很快被用於人臉檢測問題,在精度上大幅度超越之前的AdaBoost框架。直接用滑動窗口加卷積網路對窗口圖像進行分類的方案計算量太大很難達到實時,使用卷積網路進行人臉檢測的方法採用各種手段解決或者避免這個問題。在這些方法中,Cascade CNN,DenseBox,Femaleness-Net,MT-CNN是其中的代表。在SIGAI之前的公眾號文章「人臉檢測演算法綜述」中我們已經對這些演算法進行了介紹,這裡不再重複。
和人臉、行人等特定目標檢測不同,通用目標檢測的任務是同時檢測圖像中多種類型的目標。各類目標的形狀不同,因此目標矩形的寬高比不同,難度更大。典型的演算法是R-CNN,SPP網路,Fast R-CNN,Faster R-CNN,YOLO,SSD,R-FCN,FPN等。基於卷積神經網路的通用目標檢測演算法已經在SIGAI公眾號之前的文章「基於深度卷積神經網路的目標檢測演算法綜述」講述,在這裡不再重複,感興趣的讀者可以閱讀這篇文章。
人臉關鍵點定位的目標是確定關鍵位置的坐標,如眼睛的中點,鼻尖和嘴尖等。它在人臉識別、美顏等功能中都有應用。這個問題是一個回歸問題,要實現的是如下映射:
文獻[26]提出了一種用級聯的卷積網路進行人臉關鍵點檢測的方法,通過逐級細化的思路實現。本文檢測5個關鍵點,分別是左右眼的中心LE和RE,鼻尖N,嘴的左右端LM和RM。採用了3個層次的卷積網路進行級聯,逐步求精。第一個層次上包含3個卷積網路,分別稱為F1,EN1,NM1,輸入分別為整個人臉圖像,眼睛和鼻子,鼻子和嘴巴。每個網路都同時預測多個關鍵點。對每個關鍵點,將這些網路的預測值進行平均以減小方差。系統的結構如下圖所示:
人臉識別也是深度卷積神經網路成功應用的典型領域,在SIGAI之前的公眾號文章「人臉識別演算法演化史」中我們已經做了綜述,感興趣的讀者可以參考那篇文章。
文字定位和識別也是卷積網路成功應用的方向[27][28][29][30],後者屬於圖像分類問題。在這裡我們不詳細介紹。除了圖像分類,目標檢測等大類任務之後,接下來我們重點介紹卷積網路在機器視覺其他問題上的應用。
圖像語義分割和圖像識別是密切相關的問題。分割可看做對每個像素的分類問題。卷積網路在進行多次卷積和池化後會縮小圖像的尺寸,最後的輸出結果無法對應到原始圖像中的單一像素,卷積層後面接的全連接層將圖像映射成固定長度的向量,這也與分割任務不符。針對這兩個問題有幾種解決方案,最簡單的做法是對一個像素為中心的一塊區域進行卷積,對每個像素都這樣的操作。這種方法有兩個缺點:計算量大,利用的信息只是本像素周圍的一小片區域。更好的方法是全卷積網路,這是我們接下來要介紹的重點。
文獻[31]提出了一種稱為全卷積網路FCN的結構來實現圖像的語義分割,這種模型從卷積特徵圖像恢復出原始圖像每個像素的類別。網路能夠接受任意尺寸的輸入圖像,併產生相同尺寸的輸出圖像,輸入圖像和輸出圖像的像素一一對應。這種網路支持端到端、像素到像素的訓練。
最簡單的FCN的前半部分改裝自AlexNet網路,將最後兩個全連接層和一個輸出層改成3個卷積層,卷積核均為1x1大小。解決卷積和池化帶來的圖像解析度縮小的問題的思路是上採樣。
網路的最後是上採樣層,在這裡用反卷積操作實現上採樣,反卷積的卷積核通過訓練得到。在實現時,在最後一個卷積層後面接上一個反卷積層,將卷積結果映射回和輸入圖像相等的尺寸。為了得到更精細的結果,可以將不同卷積層的反卷積結果組合起來。系統結構如下圖所示:
文獻[34]提出了一種稱為DeepLab的圖像分割方法。這個方法的創新有3點:用上採樣的濾波器進行卷積,稱為atrous卷積,以實現密集的、對像素級的預測;採用了atrous空間金字塔下採樣技術,以實現對物體的多尺度分割;第三點是使用了概率圖模型,實現更精確的目標邊界定位,通過將卷積網路最後一層的輸出值與一個全連接的條件隨機場相結合得到。演算法運行結果如下圖所示:
文獻[35]提出了一種稱為SegNet的圖像語義分割網路,這也是一個全卷積網路,其主要特點是整個網路由編碼器和解碼器構成。網路的前半部分是編碼器,由多個卷積層和池化層組成。網路的後半部分為解碼器,由多個上採樣層和卷積層構成。解碼器的最後一層是softmax層,用於對像素進行分類。
編碼器網路的作用是產生有語義信息的特徵圖像;解碼器網路的作用是將編碼器網路輸出的低解析度特徵圖像映射回輸入圖像的尺寸,以進行逐像素的分類。解碼器用編碼器max池化時記住的最大元素下標值執行非線性上採樣,這樣上採樣的參數不用通過學習得到。上採樣得到的特徵圖像通過卷積之後產生密集的特徵圖像。整個框架實現了完全端到端的訓練。
邊緣檢測的目標是找出圖像中所有的邊緣像素點。Sobel運算元和拉普拉斯運算元都可以通過卷積和閾值化的方式提取出圖像的邊緣。更複雜的方法有Canny運算元,它首先用Sobel運算元得到梯度圖像,在進行閾值化之後進行非最大抑制,最後得到更為乾淨的邊緣圖。和圖像分割一樣,純圖像處理的方法只在像素一級進行操作,沒有利用圖像語義和結構信息。邊緣和輪廓檢測可以看做是二分類問題,正樣本為邊緣點的像素,負樣本為非邊緣像素。
文獻[39]提出了一種稱為DeepEdge的邊緣提取方法,這是一種基於圖像塊的方法,卷積網路作用於原始圖像中以每個像素為中心的小圖像塊,判斷該像素是否為邊緣像素。輪廓檢測流程分為如下幾步:
1.用Canny運算元提取候選輪廓點,它輸出的邊緣圖像中所有的邊界點作為候選輪廓點。
2.為所有候選輪廓點提取4個尺度的子圖像,將它們同時送入卷積網路中進行處理。
3.將卷積的結果送入2個子網路中進行處理,第一個網路用於分類,第二個網路用於回歸。
4.將這兩個網路的輸出值進行加權平均,得到最後的分數值,這個分數值表示該候選輪廓點是否真的是輪廓點。
5.對上一步的輸出分數進行閾值化,得到最終的輪廓圖像。
邊緣檢測的結果如下圖所示:
文獻[37]提出了一種稱為DeepContour的物體輪廓提取演算法,這也是一種基於圖像塊的方法。在這裡將正樣本即輪廓劃分為多個子類,並且用不同的模型擬合這些子類。作者設計了一種新的損失函數,稱為positive-sharing loss,各個子類共享正樣本類的損失。在這裡用卷積網路對小的圖像塊進行分類,這些圖像塊從整個圖像中切分出來,可能包括輪廓,也可能不包括輪廓。
文獻[38]提出了一種稱為整體式嵌套(Holistically-Nested)的邊緣檢測演算法。整體式是指整個演算法是端到端的,嵌套式指在整個邊緣檢測的過程中通過不斷的細化求解,得到精確的邊界圖像。網路對輸入圖像進行了多尺度的處理,這通過卷積網路運行過程中得到的多個尺度的特徵圖像進行處理融合而實現。
風格遷移的任務是把輸入圖像變成另一種風格,如油畫風格,但要保持和輸入圖像的內容相同,這是一個根據兩張圖像生成一張圖像的問題。
文獻[40]提出了一種用卷積網路進行風格遷移的方法。在這裡將風格看成是紋理特徵,風格遷移看成是提取待遷移圖像的語義及內容信息,然後將紋理風格作用於該圖像,得到想要的風格的輸出圖像。
演算法的輸入包括一張風格圖像和一張要進行風格遷移的內容圖像,輸出的新圖像內容和內容圖像保持一致,風格和風格圖像保持一致。處理流程為:
1.用卷積網路提取風格圖像的風格特徵,內容圖像的內容特徵。
2.從一張白雜訊圖像開始迭代生成目標圖像,優化的目標是使得目標圖像的風格特徵與風格圖像相似,內容特徵與內容圖像相似。
圖像增強的任務是提升圖像的對比度。文獻[90]提出了一種用卷積神經網路進行圖像增強的方法。其基本思想是學習人工對圖像進行增強調整的模型。這種方法達到了非常好的效果,而且可以在移動設備上做到實時處理。
在進行圖像增強時,卷積網路輸出的是原始圖像的低分辨版本,進行雙邊空間中的一系列仿射變換,然後對這些仿射變換進行保邊緣的上採樣。然後將上採樣後的變換作用於原始輸出圖像,得到增強後的圖像。
卷積神經網路被成功的用於根據單張圖像估計深度信息。文獻[41]提出了一種用多尺度的卷積網路從單張圖像估計深度的方法,在這裡,深度信息只是相對數據,即圖像中每個像素離攝像機的遠近關係,而不是真實的物理距離。由於每個像素點都會預測出一個深度值,因此這是一個逐像素的回歸問題。
系統的輸入是單張RGB圖像,輸出是深度圖,和輸入圖像尺寸相同。系統由兩個卷積網路層疊組成,第一個網路對整個圖像進行粗的全局深度預測,第二個卷積網路用局部信息對全局預測結果進行求精。
演算法運行的結果如下圖所示:
更進一步,文獻[42]提出了一種用多尺度卷積神經網路從單張圖像估計深度信息、法向量的方法。這個卷積網路的輸入為單張RGB圖像,輸出為三張圖像,分別為深度圖,法向量圖,以及物體分割標記圖。
這個卷積網路包括三個尺度,形成級聯結構。每個尺度的第一個層都接受原始RGB圖像作為輸入,另外還接受上一個級卷積網路的輸出作為輸入,這個輸出是經過上採樣的。
目標跟蹤是機器視覺領域中的一個重要問題,它分為單目標跟蹤與多目標跟蹤兩種問題。前者只跟蹤單個目標,後者要對多個目標同時進行跟蹤。單目標跟蹤是一個狀態預測問題,它根據目標在之前幀中的位置、大小、外觀和運動信息估計在當前幀中的位置、大小等狀態。
文獻[44]用卷積神經網路來實現目標的檢測以用於目標跟蹤。網路的輸入為固定尺寸的圖像,包含3個卷積層,輸出為概率圖像,表示該位置為目標的概率。在卷積層和全連接層之間加入了SPP網路中的SPP池化層,以提高目標定位的精度。整個網路先用ImageNet的目標檢測數據集進行離線訓練,這樣就具有區分目標和背景的能力。
文獻[46]提出了一種用全卷積網路進行目標跟蹤的方法,卷積網路的作用是目標檢測。這種方法用一個在ImageNet數據集上預先訓練好的卷積網路提取圖像的特徵,用於區分目標和背景,卷積網路採用VGG結構。另外也用卷積網路的特徵生成熱度圖,表示每個位置處是目標的概率。
文獻[45]提出了一種稱為Multi-Domain的卷積網路結構實現目標跟蹤。這個網路的前半部分是卷積層和全連接層,後面是多個domain-specific層, 它們用於實現目標的精確定位。
其他的目標跟蹤文章見參考文獻,在此不一一列舉。
圖形學
計算機圖形學是計算機科學的一個重要分支,它的任務是用計算機程序生成圖像,尤其是真實感圖像。圖形學中有3個主要的問題:幾何模型的建立,物理模型的建立包括光照模型,渲染即由幾何和物理模型生成最終的圖像。
機器學習技術在圖形學中的應用代表了數據驅動這類方法,它通過大量的訓練樣本得到要建立的模型的參數,或者直接由訓練的模型生成圖像。卷積網路適合處理圖像、2D或者3D空間中的網格數據這裡具有空間結構的數據,在圖形學的很多問題上也取得了很好的效果。
文獻[51]提出了一種用基於八叉樹的卷積網路進行3D形狀分析的方法,稱為O-CNN。在這裡用八叉樹表示3D物體,將八叉樹最精細葉子節點的法向量均值作為卷積網路的輸入,執行3D卷積運算。這種卷積網路能對3D形狀進行分類,檢索和分割。
在圖形學中,物理模型包括對要繪製的物體進行力學和光學建模。前者主要針對運動的物體,包括剛體和流體。對所有要渲染的物體,都需要建立光學模型,包括物體表面材質的光學特徵,以及光照模型。
文獻[53]提出了一種使用單張圖片估計物體表面反射函數的方法,該演算法用卷積網路表示表面反射函數。表面反射函數定義了物體表面的光學反射特性,它決定了給定光照條件下物體表面的顏色和紋理,這對繪製物體至關重要。
流體模擬是圖形學中一個重要的問題,它對液體、氣體如煙霧等物體的運動進行建模和繪製。在模擬、遊戲與動畫、電影特技里都有這種技術的應用。經典的方法是基於物理的流體模擬。它主要由兩步構成:對流體的運動進行建模,及對流體的表面進行繪製,前者的基礎是流體力學。在流體力學領域,描述流體運動使用的是Navier-Stokes方程,這是一個複雜的偏微分方程組。用離散化的數值方法計算需要求解大規模的方程組,非常耗時,使得高精度的流體模擬很難實時進行。
文獻[58]提出了一種用卷積網路加速流體模擬的方法,這種方法不再求解大規模的線性方程組,而是直接用卷積網路進行預測。這個網路用大量的模擬數據作為訓練集,採用半監督的方法進行訓練,目標是最小化長期速度散度。
文獻[52]提出了一種用卷積網路進行煙霧合成的方法,其關鍵是用卷積網路建立煙霧運動的力學模型。在這裡採用了一個有4個卷積層和2個全連接層的卷積網路。卷積網路的作用是學習描述粗糙尺度煙霧模擬局部和精細尺度煙霧模擬局部對應關係的映射。在新場景中生成精細的煙霧特效時,只需進行快速的粗糙模擬,並根據卷積網路建立的映射得到與各局部相對應的精細模擬局部,然後將其細節形體信息轉移過來即可。
紋理合成是渲染時重要的一步,它從小的紋理樣圖生成大的紋理圖像,然後映射到物體表面的曲面上,要保證生成的圖像沒有縫隙。和風格遷移一樣,這也是一個從圖像生成圖像的問題。卷積神經網路的卷積輸出值蘊含了圖像的信息,因此可以根據它來計算紋理特徵,用來衡量樣例圖像和生成的圖像的相似度。
文獻[55]提出了一種用卷積網路合成紋理的方案,其思想和前面介紹的風格遷移類似。這個方法分為兩步。首先是紋理分析,它的輸入是紋理樣圖,送入卷積網路處理之後,在各個卷積層的輸出特徵圖像上計算Gram矩陣。第二步是紋理合成,它的輸入是一張白雜訊圖像,送入卷積網路進行處理,用紋理模型在卷積網路的各個層上計算損失函數。然後用梯度下降法迭代更新這張白雜訊圖像,使得損失函數最小化。對白雜訊圖像的優化結果就是合成得到的紋理圖像,它與紋理樣例圖像具有相同的Gram矩陣。
文獻[56]提出了一種用卷積網路學習紋理的特徵,然後合成紋理的方法。它們的方法思路和Leon 的類似,也是用一個卷積網路提取出圖像在各個層的紋理特徵,另外,用同樣的網路對一張白雜訊圖像進行處理,提取出相同的紋理特徵。然後用梯度下降法更新雜訊圖像,目標是使得二者的紋理特徵相同。在這裡,他們沒有使用Gram矩陣描述紋理特徵,而是使用了結構化能量,它基於輸出圖像的相關係數,捕捉紋理的自相似性和規則性。
圖像彩色化的目標是給定一張黑白圖像,在少量的用戶交互作用下生成對應的彩色圖像。在這裡的用戶交互一般是讓用戶在黑白圖像的某些位置設置顏色。
文獻[60]提出了一種使用卷積網路將黑白圖像彩色化的方法。卷積網路的輸入是灰度圖像以及少量的用戶提示信息,輸出數據是彩色圖像。其目標是根據灰度圖像的結構信息以及用戶在幾個典型位置的輸入顏色,預測出每個像素的顏色值。系統由兩個神經網路構成。第一個為局部提示網路,它接受稀疏的用戶輸入;第二個網路是全局提示網路,它使用圖像的全局統計信息。
下圖是彩色化的結果:
High Dynamic Range即高度動態範圍,簡稱HDR,它確保在某些極端光照條件下,圖像的高光和弱光區域都很清晰。普通照相機因為感測器量化範圍的限制,產生的圖像圖像會有欠曝光或者過曝光區域,HDR是解決這個問題的一種方法。
產生HDR圖像的做法一般是用相機拍攝多張有不同曝光度的LDR(Low Dynamic Range,低動態範圍)的圖像,然後合併成一張高動態範圍的圖像。生成HDR圖像需要解決兩個問題:1.需要將多張LDR圖像對齊,2.將這些圖像進行合併,生成HDR圖像。第1個問題可以用光流法等手段解決,但會留下人工痕迹。
文獻[54]提出了一種用機器學習的手段進行HDR圖像合成的方法。這種方法能夠根據3張不同曝光的LDR圖像生成HDR圖像。首先用光流法將高曝光與低曝光圖像與中度曝光圖像對齊,中度曝光圖像為參考圖像。最後生成的HDR圖像與參考圖像對齊,但包含另外兩張圖像即高曝光與低曝光圖像的信息。然後將3張對齊的圖像送入卷積網路中預測,生成HDR圖像。
自然語言處理
自然語言處理領域大多數的問題都是時間序列問題,這是循環神經網路擅長處理的問題,在下一章中我們將詳細介紹。但對於有些問題,使用卷積網路也能進行建模並且得到了很好的結果,在這裡我們重點介紹文本分類和機器翻譯。
文獻[64]設計了一種用卷積網路進行句子分類的方案。這個方法的結構很簡單,使用不同尺寸的卷積核對文本矩陣進行卷積,卷積核的寬度等於詞向量的長度,然後使用max池化。對每一個卷積核提取的向量進行操作,最後每一個卷積核對應一個數字,把這些數據拼接起來,得到一個表徵該句子的向量。最後的預測都是基於該句子的。
文獻[65]提出了一種用卷積網路進行機器翻譯的方法。這篇文章用卷積網路實現了序列到序列的學習,而之前的經典做法是用循環神經網路構建序列到序列的學習框架。在WMT 14的英語-德語,英語-法語數據集上,這種方法的精度超越了Google的LSTM循環神經網路翻譯系統。
工程優化
深度神經網路的模型需要佔用大量的存儲空間,網路傳輸時也會耗費大量的帶寬和時間,這限制了在移動設備、智能終端上的應用。在Caffe中,AlexNet網路的模型文件超過200MB,VGG則超過500MB,這樣的模型文件是不適合集成到app安裝包中的。因此需要對模型進行壓縮,在下一節中我們將介紹解決這一問題的典型方法。
複雜的模型不僅帶來存儲空間的問題,還有計算量的增加。運行在服務端的模型可以通過GPU、分散式等並行計算技術進行加速,運行在移動端和嵌入式系統中的模型由於成本等因素的限制,除了採用並行計算等進行加速之外,還需要對演算法和模型本身進行裁剪或者優化以加快速度。在下一節中,我們將詳細介紹加快網路運行速度的方法。
減少存儲空間和計算量的一種方法是對神經網路的模型進行壓縮。有多種實現手段,包括減小網路的規模,對模型的權重矩陣進行壓縮,對模型的參數進行編碼,神經網路二值化等,接下來分別介紹。
權重剪枝
文獻[71]提出了一種卷積神經網路模型壓縮方法。在不影響精度的前提下,能夠將AlexNet網路模型的參數減少到1/9,VGG-16網路模型的參數減少到1/13。其做法是先按照正常的流程訓練神經網路,然後去掉小於指定閾值的權重,最後對剪枝後的模型進行重新訓練,反覆執行上面的過程直到完成模型的壓縮。
更進一步,文獻[72]提出了一種稱為deep compression的深度模型壓縮技術,通過剪枝、量化和哈夫曼編碼對模型進行壓縮,而且不會影響網路的精度。整個方法分為3步,第1步對模型進行剪枝,只保留一些重要的連接。第2步通過權值量化來共享一些權值。第3步通過哈夫曼編碼來進一步壓縮數據。
二值化網路
將網路的權重由浮點數轉換為定點數甚至是二值數據可以大幅度的提高計算的速度,減少模型的存儲空間。相比浮點數的加法和乘法運算,定點數要快很多,而二值化數據的運算可以直接用位運算實現,帶來的加速比更大。
文獻[73]提出了一種稱為二值神經網路(簡稱BNN)的模型。二值神經網路的權重值和激活函數都是二值化的數據,這能顯著減小模型存儲空間,並且加快模型的計算速度。
文獻[74]提出了一種稱為二值權重網路和XNOR(同或門)網路的模型,這是對卷積神經網路的二值化逼近,也是對文獻[17]方法的進一步優化。
二值權重網路的權重矩陣是二值化數據,輸入數據是實數。XNOR網路的卷積核、卷積層、全連接層的輸入數據都是二值化的。在不損失精度的前提下,XNOR網路能夠把模型的存儲空間壓縮為1/32,速度提升58倍。
更多乾貨請關注V X公眾號:SIGAI
推薦閱讀:
TAG:深度學習DeepLearning | 機器學習 | 神經網路 |