深度學習中的highway network、ResNet、Inception

不是特別清楚這三個流行且有用的模型(或者說層)的具體作用和使用方法。

概念

CNN演化

先引入一張CNN結構演化圖:
image

2012年AlexNet做出歷史突破以來,直到GoogLeNet出來之前,主流的網絡結構突破大致是網絡更深(層數),網絡更寬(神經元數)。所以大家調侃深度學習爲“深度調參”,但是純粹的增大網絡的缺點:

  1. 參數太多,容易過擬合,若訓練數據集有限;
  2. 網絡越大計算複雜度越大,難以應用;
  3. 網絡越深,梯度越往後穿越容易消失(梯度彌散),難以優化模型

梯度消失

我們都知道神經網絡中會使用非線性變換。

一般會使用sigmoid函數,得到image,這個函數會把數據壓縮到開區間(0,1),函數的圖像如下:

image

可以看到,函數的兩側非常平滑,而且無限的接近0和1,僅僅是中間部分函數接近一條直線。

要知道,神經網絡訓練的方法是BP算法(反向傳播)。BP算法的基礎其實就是導數的鏈式法則,就是有很多乘法會連接在一起。

看sigmoid函數的圖像知道了,導數最大是1,而且大多數值都被推向兩側飽和的區域,這些區域的導數很小。

可以預見到,隨着網絡的加深,梯度後向傳播到輸入層時,就所剩無幾,基本不能引起參數W數值的擾動,這樣輸入層一側的網絡就學習不到新的特徵了參數得不到更新)。

那麼怎麼辦?我暫時看到了四種解決問題的辦法。
1. 第一種很明顯,可以通過使用別的激活函數;
2. 第二種可以使用層歸一化;
3. 第三種是在權重的初始化上下功夫,
4. 第四種是調整網絡的結構。

我們主要關注第4個。

highway network

Highway Network的靈感來自“解決RNN的問題,提出的LSTM結構” 也就是加入“門”結構。

Highway Network主要解決的問題是,網絡深度加深,梯度信息迴流受阻,造成網絡訓練困難的問題。

公式:

對於highway network來說,不需要看圖片,看公式就可以理解其意義。

  • 1.一般一個 feedforward neural network 有L層網絡組成,每層網絡對輸入進行一個非線性映射變換,可以表達如下

image

  • 對於高速CNN網絡,我們定義一層網絡如下 ,其中T和C分別表示 對輸入的門控(0到1) 和 直接傳送。

image

  • 爲了理解,我們觀察到,對於特殊的門值T

image

也就是:當門爲1的時候,全部輸出原x,不用激活。

意義、好處

  1. 物理意義:假設所有的門t的均值爲0.5的話,就是把所有的原始信息一半激活,一半不變直接輸入下一層,保留了很多信息。
  2. 反向傳播的時候,可以讓更多的(梯度)信息直接回流到輸入,而不需要經過一個非線性轉化。

參考:https://www.cnblogs.com/jie-dcai/p/5803220.html

ResNet

網上有傳言 微軟的深度殘差學習是抄襲 Highway Networks,只是Highway Networks的一個特例。Highway Networks 的確是先發表的。

但不管怎麼說,ResNet的名氣確實更大,很多面試會問到。

動機、目的

ResNet最根本的動機就是所謂的“退化”問題。

但是模型的深度加深,學習能力增強,因此更深的模型不應當產生比它更淺的模型更高的錯誤率。

而退化就是當模型的層次加深時,錯誤率卻提高了,如下圖:

image

而這個“退化”問題產生的原因歸結於優化難題,當模型變複雜時,SGD的優化變得更加困難,導致了模型達不到好的學習效果。

針對這個問題,作者提出了一個Residual的結構:

image

模型

模型增加一個identity mapping(恆等映射),將原始所需要學的函數H(x)轉換成F(x)+x,

而作者認爲這兩種表達的效果相同,但是優化的難度卻並不相同,作者假設F(x)的優化 會比H(x)簡單的多。

這一想法也是源於圖像處理中的殘差向量編碼,通過一個reformulation,將一個問題分解成多個尺度直接的殘差問題,能夠很好的起到優化訓練的效果。

這個Residual block通過shortcut connection實現,通過shortcut將這個block的輸入和輸出進行一個element-wise的加疊。

作用:

  1. 這個簡單的加法並不會給網絡增加額外的參數和計算量,同時卻可以大大增加模型的訓練速度、提高訓練效果
  2. 並且當模型的層數加深時,這個簡單的結構能夠很好的解決退化問題。因爲identity map是的梯度可以直接回流到了輸入層

參考:https://blog.csdn.net/wspba/article/details/56019373

Inception

那麼解決深度學習 參數過多、和梯度消失問題,方法當然就是增加網絡深度和寬度的同時減少參數,Inception就是在這樣的情況下應運而生。

Inception v1模型

目前很多工作證明,要想增強網絡能力,可以:增加網絡深度,增加網絡寬度;
但是爲了減少過擬合,也要減少自由參數。

因此,就自然而然有了這個第一版的Inception網絡結構——同一層裏面,有卷積1* 1, 3* 3,5* 5 不同的卷積模板,他們可以在不同size的感受野做特徵提取,也算的上是一種混合模型了。

因爲Max Pooling本身也有特徵提取的作用,而且和卷積不同,沒有參數不會過擬合,也作爲一個分支。

但是直接這樣做,整個網絡計算量會較大,且層次並沒有變深,因此,在3*3和5*5卷積前面先做1*1的卷積,降低input的channel數量,這樣既使得網絡變深,同時計算量反而小了;(在每一個卷積之後都有ReLU)

image

第一張圖是論文中提出的最原始的版本,所有的卷積核都在上一層的所有輸出上來做,那5×5的卷積核所需的計算量就太大了,造成了特徵圖厚度很大。爲了避免這一現象提出的inception具有如下結構,在3x3前,5x5前,max pooling後分別加上了1x1的卷積核起到了降低特徵圖厚度的作用,也就是Inception v1的網絡結構:

image

Inception V2-V3:

V2和V3版本比較接近,就不絕對區分了,具體可以看[3]。講一講其中的創新點:

首先,用兩層堆疊的3*3代替了一層5*5,我們可以看到,這樣做參數量少了,計算量少了,但是層數變深了,效果也變好了:

image

Inception v4模型

v4研究了Inception模塊結合Residual Connection能不能有改進?發現ResNet的結構可以極大地加速訓練,同時性能也有提升,得到一個Inception-ResNet v2網絡,同時還設計了一個更深更優化的Inception v4模型,能達到與Inception-ResNet v2相媲美的性能。

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