GoogleNet网络(纵横交错)
論文
該篇論文的作者在ILSVRC 2014比賽中提交的報告中使用了GoogLeNet,這是一個22層的深度網絡。在這里面提出了一種新的叫做Inception的結構。該網絡具有很大的depth和width,但是參數數量卻僅為AlexNet的1/12。
《更深層的卷積》(Going deeper with convolutions)[2]。因為這篇論文的作者基本都來自于谷歌,所以文章提出的模型有時候又被叫作 GoogleNet。這篇論文擁有 8 千多次的引用數。
GoogleNet 不僅和 VGG 一樣在把架構做“深”上下文章,而且在模型的效率上比 AlexNet 更加優秀。作者們利用了比 AlexNet 少 12 倍的參數,在更深的架構上達到了更好的效果。
簡介
GoogLeNet是谷歌(Google)研究出來的深度網絡結構,為什么不叫“GoogleNet”,而叫“GoogLeNet”,論文說是為了向“LeNet”致敬,因此取名為“GoogLeNet”。
inception(也稱GoogLeNet)是2014年Christian Szegedy提出的一種全新的深度學習結構, 在這之前的AlexNet、VGG等結構都是通過增大網絡的深度(層數)來獲得更好的訓練效果, 但層數的增加會帶來很多負作用,比如overfit、梯度消失、梯度爆炸等。inception的提出則從另一種角度來提升訓練結果:能更高效的利用計算資源,在相同的計算量下能提取到更多的特征,從而提升訓練結果。
創新
GoogleNet 創新的重點是在網絡架構上。和 AlexNet 以及 VGG 都不同的是,GoogleNet 的作者們認為更加合適的網絡架構不是簡單地把相同的卷積層疊加起來,然后再把相同的全聯通層疊加。如果我們需要更深的架構,必須從原理上對網絡架構有一個不同的理解。作者們認為,網絡結構必須走向“稀疏化”(Sparsity),才能夠達到更深層次、更高效的目的。
那么,能否直接用稀疏結構來進行網絡的架構呢?過去的經驗表明,這條路并不那么直觀。
第一,直接利用稀疏的結構所表達的網絡結構效果并不好,
第二,這樣做就無法利用現代的硬件,特別是 GPU 的加速功能。現代的 GPU 之所以能夠高效地處理視覺以及其他一系列類似的問題,主要的原因就是快速的緊密矩陣運算。所以,直接使用稀疏結構有一定的挑戰。
一般來說,提升網絡性能最直接的辦法就是增加網絡深度和寬度,但是這樣會帶來一些缺陷:
參數太多,容易過擬合
網絡越大計算復雜度越大,難以應用
網絡越深,梯度越往后越容易消失
于是GoogLeNet針對這些問題給出了兩個解決方案:
深度方面:層數更深,文章采用了22層,為了避免上述提到的梯度消失問題,GoogLeNet巧妙的在不同深度處增加了兩個loss來保證梯度回傳消失的現象。
寬度方面:采用了Inception結構,這是一種網中網(Network In Network)的結構,即原來的結點也是一個網絡。
初步inception結構
初始結構的主要思想是找出卷積視覺網絡中的最優局部稀疏結構是如何被容易獲得的稠密分量逼近和覆蓋的。
用分層結構,分析最后一層的相關統計數據,并將其聚類成高相關的單元組。這些簇構成下一層的單元,并連接到上一層的單元。
當時的Inception體系結構僅限于1×1、3×3和5×5大小的過濾器。體系結構是所有這些層及其輸出濾波器組的組合,這些濾波器組連接成一個輸出向量,形成下一階段的輸入。
結構存在問題:即使是少量的5×5卷積,在具有大量濾波器的卷積層上也會非常昂貴,至少在這種簡單的形式下是這樣。 為此,文章借鑒NIN2,采用1x1卷積核來進行降維。這也就形成了以下改進后的inception結構。
改進inceptionv0結構
在分支2,3,4上加入了卷積核大小為1x1的卷積層,目的是為了降維(減小深度),減少模型訓練參數,減少計算量。
在上述模塊的基礎上,為進一步降低網絡參數量,Inception又增加了多個1×1的卷積模塊。如圖所示,這種1×1的模塊可以先將特征圖降維,再送給3×3和5×5大小的卷積核,由于通道數的降低,參數量也有了較大的減少。值得一提的是,用1×1卷積核實現降維的思想,在后面的多個輕量化網絡中都會使用到。
Inception v1網絡一共有9個上述堆疊的模塊,共有22層,在最后的Inception模塊處使用了全局平均池化。為了避免深層網絡訓練時帶來的梯度消失問題,作者還引入了兩個輔助的分類器,在第3個與第6個Inception模塊輸出后執行Softmax并計算損失,在訓練時和最后的損失一并回傳。
改進inception結構
在Inception v1網絡的基礎上,隨后又出現了多個Inception版本。 Inception v2進一步通過卷積分解與正則化實現更高效的計算,增加了 BN層,同時利用兩個級聯的3×3卷積取代了Inception v1版本中的5×5卷積,如圖3.15所示,這種方式既減少了卷積參數量,也增加了網絡的非線性能力
更進一步,Inceptionv2將n×n的卷積運算分解為1×n與n×1兩個卷積,如圖3.16所示,這種分解的方式可以使計算成本降低33%。
Inception v3在Inception v2的基礎上,使用了RMSProp優化器,在輔助的分類器部分增加了7×7的卷積,并且使用了標簽平滑技術。
Inception v4則是將Inception的思想與殘差網絡進行了結合,顯著提升了訓練速度與模型準確率,這里對于模塊細節不再展開講述。至于殘差網絡這一里程碑式的結構,正是由下一節的網絡ResNet引出的。
GoogLeNet網絡結構
具有128個濾波器的1×1卷積,用于降維和校正線性。
具有1024個單元和整流線性**的完全連接層。
輸出下降率為70%的輟學層。
一個全連接層,具有1024個單元和修正線性。
以softmax損耗為分類器的線性層(預測與主分類器,但在推斷時移除)
網絡主干右邊的 兩個分支 就是 輔助分類器,其結構一模一樣。 在訓練模型時,將兩個輔助分類器的損失乘以權重(論文中是0.3)加到網絡的整體損失上,再進行反向傳播。
輔助loss函數
為防止網絡中間部分不會「梯度消失」,作者引入了 2 個輔助分類器,它們本質上對 2 個 inception 模塊的輸出執行 softmax,并計算對同一個標簽的 1 個輔助損失值。
輔助損失值純粹是為訓練構建,分類推斷時將被忽略。輔助分類器促進了更穩定的學習和更好的收斂。輔助分類器往往在接近訓練結束時,輔助分支網絡開始超越沒有任何分支的網絡的準確性,達到了更高的穩定水平。
作用一:可以把他看做inception網絡中的一個小細節,它確保了即便是隱藏單元和中間層也參與了特征計算,他們也能預測圖片的類別,他在inception網絡中起到一種調整的效果,并且能防止網絡發生過擬合。
作用二:給定深度相對較大的網絡,有效傳播梯度反向通過所有層的能力是一個問題。通過將輔助分類器添加到這些中間層,可以期望較低階段分類器的判別力。在訓練期間,它們的損失以折扣權重(輔助分類器損失的權重是0.3)加到網絡的整個損失上。
總結
使用1x1卷積(進一步融合各個通道的特征;降維減少計算量)
使用Inception結構(使用四種方式對特征進行提取;使用1x1卷積降維,減少計算量)
結構優化(輔助loss1,loss2,目的讓低層特征也有很好的區分能力;使用全局最大池化和一層全連接層代替原來的兩層全連接層)
批規一化(使用BN操作優化均值大小和方差使得訓練模型時數據盡量貼近所有數據的分布,可以用來作為對抗梯度消失的一種手段。)
總結
以上是生活随笔為你收集整理的GoogleNet网络(纵横交错)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android emulator启动的两
- 下一篇: js 正则表达式 取反