VGG Net、GoogLe Net、Squeezed Net、Mobile Net、Shuffle Net、Res Net梳理與網絡優化

摘要:深度學習不能僅僅停留在理論層面,更重要的是爲人所用。但是如下圖所示,深度神經網絡應用於實際生活,還有很多困難。所以將網絡模型部署到存儲空間更小、計算力更低的可移動設備上對於深度學習的發展至關重要。這篇文章從以上角度對一些經典網絡進行簡要介紹與分析,並搭配一些常用的網絡優化方法,希望可以讓對於這方面比較感興趣的讀者對此有一定的瞭解。

在這裏插入圖片描述

首先,讓我們來逐一介紹分析幾種經典網絡。

下圖是Imagenet歷年冠軍模型的錯誤率和網絡深度,可以看出“更深更準”是大勢所趨。但是更深的網絡往往會帶來參數量和計算量的激增,爲此研究者們提出了許多解決方法。
在這裏插入圖片描述
讓我們先看以下兩張圖片,可以看出,我們可以使用2個3x3的濾波器替換1個5x5的濾波器,使用3個3x3的濾波器替換1個7x7的濾波器,因爲感受野(由輸出的1x1對應到輸入的feature map大小)是相同的。

在這裏插入圖片描述
在這裏插入圖片描述
通過這個方式,增加了網絡的深度,增加了網絡的非線性表達能力(卷積層多了,對應的激活函數層也多了),同時還降低了參數和計算量(如下式)。
在這裏插入圖片描述
根據以上思想,19層的VGG出現了,與以前的8層相比,可謂發生了質的變化,其網絡結構如下:
在這裏插入圖片描述

從深度出發提高了準確率,那麼我們自然會想到從寬度上做一些文章,於是誕生了GoogLe Net(據說L大寫是爲了紀念Le Net)。其主要結構爲Inception,如下圖所示:
在這裏插入圖片描述
一個卷積層內含有1x1卷積、3x3卷積、5x5卷積和池化,這樣就提取了更加豐富的信息。但是這樣做,通道數會明顯增加,所以引入了1x1卷積對通道數進行降維。

先來介紹一下,爲何1x1卷積可以用來改變通道數,如下圖所示。
在這裏插入圖片描述
用降維舉例,陰影是1x1卷積核。卷積覈對每一個點進行卷積,每一次卷積輸出下面的一個點。如果有兩個卷積核,那麼第一個卷積核就輸出了粉色的通道,第二個卷積核就輸出了黃色的通道。這樣就實現了通道數的改變。

因此,改進後的Inception結構如下所示(b):降低了通道數,雖然網絡寬度變大了,但是計算量也不會增加太多。
在這裏插入圖片描述
一定有人想到了將5x5替換爲2個3x3,確實是這樣。進一步,我們甚至可以將3x3替換爲1x3和3x1,如下圖所示。

在這裏插入圖片描述

這樣就可以進一步改進Inception的結構:
在這裏插入圖片描述
同時,爲了防止網絡深度增加,反向傳播過程中梯度消失,前幾層的效果較差,在網絡中間部分同樣設置了輸出,計算損失,用以監督學習過程,如下圖黃色部分所示。
在這裏插入圖片描述

以上兩種網絡,雖然考慮到了計算量和效率,但是主要是爲了準確率而生,那麼接下來的兩個網絡則主要是爲了效率和減少存儲空間而生。

第一個是Squeezed Net。

該網絡的主要思想濃縮於Fire Module,如下圖所示,一個瓶頸結構。
在這裏插入圖片描述
首先使用1x1的卷積進行降維,然後再對輸出進行一些3x3和1x1的卷積操作。這樣既增加了深度,也增加了寬度。同時,增加了網絡超參數控制3x3和1x1的比例,調整該參數可以在網絡性能幾乎不變的條件下,控制模型的大小。

第二個是Mobile Net。
在這裏插入圖片描述
Mobile Net可以實現很大的可控壓縮比,能夠部署在移動設備上,讓我們看看它是如何做到的。

該網絡利用了深度可分離卷積,如下圖所示。
在這裏插入圖片描述
輸入的大小爲N個DfxDf,濾波器的大小爲DkxDk,通道數爲M。那麼普通的卷積對應圖中的a,右側是其計算量。那麼b、c對應了深度可分離卷積,先對輸入的每一個通道分別進行卷積,再用1x1的卷積覈對所有通道進行卷積,兩者的計算量之和遠遠低於a的計算量,如下式。

在這裏插入圖片描述
α和ρ分別代表寬度因子和分辨率因子,可以進一步對網絡進行壓縮,一般兩者取0.7,這樣0.7x0.7x0.7x0.7=0.24,模型又被壓縮了76%,而且準確率不會受到較大影響。

除了深度可分離卷積之外,還有羣組卷積,同樣可以提高計算效率,如下圖。
在這裏插入圖片描述
將各個通道分組,然後分別卷積,這樣降低了計算量。但是如a所示,這樣影響了信息的流通,所以要進行通道混洗,如b、c所示。這樣就在降低計算量的同時,也保證了信息的流通。

最後一個要介紹的網絡是目前經常被用作baseline的Res Net。文中開始時提到“更深更準”是大勢所趨,那麼Res Net將網絡深度陡然提升。
但是,理想很豐滿,現實很骨幹。如前所述,網絡太深不利於訓練,甚至不如比較淺的網絡。如下圖所示。
在這裏插入圖片描述
爲了解決這一問題,Res Net使用如下結構:
在這裏插入圖片描述
將每一個部分的輸入直接連接到輸出,再將多個這樣的結構級聯,那麼如果左側的影響忽略不計,那麼Res Net就相當於減少了層數,它的性能就至少不會比較淺的網絡差。而事實上,Res Net的性能超越了較淺的網絡,成爲了當今的主流網絡之一。實驗結果如下圖所示。

在這裏插入圖片描述

介紹完一些經典網絡,我們來聊一聊一些常用的網絡壓縮方法。

剪枝
在這裏插入圖片描述
對於權重較小的連接,直接去除,可以大幅度提升網絡速度並對網絡進行大幅壓縮。

權值共享
在這裏插入圖片描述
對成千上萬的權值進行聚類,用新的權值替代該類別的所有權值,這樣就降低了網絡需要存儲的數據量,實現了對網絡的壓縮。

量化

在這裏插入圖片描述
上面對應兩種量化,其中把輸入和權值全部量化爲1和-1的網絡叫做XNOR Net。通過量化降低了存儲空間,實現了網絡壓縮。(在此基礎上當然可以進行編碼操作,比如哈夫曼編碼)

蒸餾

在這裏插入圖片描述
嚴格意義上不屬於網絡壓縮方法。用大的模型監督小的模型訓練,使小的模型具有一定大的模型的能力,這樣就可以在一定場合用小模型代替大模型,間接實現了網絡壓縮。

一般來說,可以將如上操作組合使用,這樣的壓縮效率是很可觀的。

以上內容大多一帶而過,僅僅介紹了思想。感興趣的讀者應該以此爲原點,繼續深入研究學習。

歡迎討論 歡迎吐槽

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章