不是特別清楚這三個流行且有用的模型(或者說層)的具體作用和使用方法。
概念
CNN演化
先引入一張CNN結構演化圖:
2012年AlexNet做出歷史突破以來,直到GoogLeNet出來之前,主流的網絡結構突破大致是網絡更深(層數),網絡更寬(神經元數)。所以大家調侃深度學習爲“深度調參”,但是純粹的增大網絡的缺點:
- 參數太多,容易過擬合,若訓練數據集有限;
- 網絡越大計算複雜度越大,難以應用;
- 網絡越深,梯度越往後穿越容易消失(梯度彌散),難以優化模型
梯度消失
我們都知道神經網絡中會使用非線性變換。
一般會使用sigmoid函數,得到,這個函數會把數據壓縮到開區間(0,1),函數的圖像如下:
可以看到,函數的兩側非常平滑,而且無限的接近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層網絡組成,每層網絡對輸入進行一個非線性映射變換,可以表達如下
- 對於高速CNN網絡,我們定義一層網絡如下 ,其中T和C分別表示 對輸入的門控(0到1) 和 直接傳送。
- 爲了理解,我們觀察到,對於特殊的門值T
也就是:當門爲1的時候,全部輸出原x,不用激活。
意義、好處
- 物理意義:假設所有的門t的均值爲0.5的話,就是把所有的原始信息一半激活,一半不變直接輸入下一層,保留了很多信息。
- 反向傳播的時候,可以讓更多的(梯度)信息直接回流到輸入,而不需要經過一個非線性轉化。
ResNet
網上有傳言 微軟的深度殘差學習是抄襲 Highway Networks,只是Highway Networks的一個特例。Highway Networks 的確是先發表的。
但不管怎麼說,ResNet的名氣確實更大,很多面試會問到。
動機、目的
ResNet最根本的動機就是所謂的“退化”問題。
但是模型的深度加深,學習能力增強,因此更深的模型不應當產生比它更淺的模型更高的錯誤率。
而退化就是當模型的層次加深時,錯誤率卻提高了,如下圖:
而這個“退化”問題產生的原因歸結於優化難題,當模型變複雜時,SGD的優化變得更加困難,導致了模型達不到好的學習效果。
針對這個問題,作者提出了一個Residual的結構:
模型
模型增加一個identity mapping(恆等映射),將原始所需要學的函數H(x)轉換成F(x)+x,
而作者認爲這兩種表達的效果相同,但是優化的難度卻並不相同,作者假設F(x)的優化 會比H(x)簡單的多。
這一想法也是源於圖像處理中的殘差向量編碼,通過一個reformulation,將一個問題分解成多個尺度直接的殘差問題,能夠很好的起到優化訓練的效果。
這個Residual block通過shortcut connection實現,通過shortcut將這個block的輸入和輸出進行一個element-wise的加疊。
作用:
- 這個簡單的加法並不會給網絡增加額外的參數和計算量,同時卻可以大大增加模型的訓練速度、提高訓練效果
- 並且當模型的層數加深時,這個簡單的結構能夠很好的解決退化問題。因爲identity map是的梯度可以直接回流到了輸入層
Inception
那麼解決深度學習 參數過多、和梯度消失問題,方法當然就是增加網絡深度和寬度的同時減少參數,Inception就是在這樣的情況下應運而生。
Inception v1模型
目前很多工作證明,要想增強網絡能力,可以:增加網絡深度,增加網絡寬度;
但是爲了減少過擬合,也要減少自由參數。
因此,就自然而然有了這個第一版的Inception網絡結構——同一層裏面,有卷積1* 1, 3* 3,5* 5 不同的卷積模板,他們可以在不同size的感受野做特徵提取,也算的上是一種混合模型了。
因爲Max Pooling本身也有特徵提取的作用,而且和卷積不同,沒有參數不會過擬合,也作爲一個分支。
但是直接這樣做,整個網絡計算量會較大,且層次並沒有變深,因此,在3*3和5*5卷積前面先做1*1的卷積,降低input的channel數量,這樣既使得網絡變深,同時計算量反而小了;(在每一個卷積之後都有ReLU)
第一張圖是論文中提出的最原始的版本,所有的卷積核都在上一層的所有輸出上來做,那5×5的卷積核所需的計算量就太大了,造成了特徵圖厚度很大。爲了避免這一現象提出的inception具有如下結構,在3x3前,5x5前,max pooling後分別加上了1x1的卷積核起到了降低特徵圖厚度的作用,也就是Inception v1的網絡結構:
Inception V2-V3:
V2和V3版本比較接近,就不絕對區分了,具體可以看[3]。講一講其中的創新點:
首先,用兩層堆疊的3*3代替了一層5*5,我們可以看到,這樣做參數量少了,計算量少了,但是層數變深了,效果也變好了:
Inception v4模型
v4研究了Inception模塊結合Residual Connection能不能有改進?發現ResNet的結構可以極大地加速訓練,同時性能也有提升,得到一個Inception-ResNet v2網絡,同時還設計了一個更深更優化的Inception v4模型,能達到與Inception-ResNet v2相媲美的性能。