解決梯度消失和梯度爆炸的ResNets

!非常非常深的網絡是很難訓練的,因爲存在梯度消失和梯度爆炸的問題,利用跳遠連接構建能夠訓練深度網絡的ResNets,有時深度可能超過一百層。ResNets是由殘差塊構建的,什麼是殘差塊呢?
在這裏插入圖片描述

這裏的g是指Relu非線性函數,信息流從a[l]—>a[l+2]需要經過以上所有步驟,在殘差網絡中有一點變化:我們將a[l]直接拷貝到神經網絡的深層,在線性**之後,Relu非線性**之前加上a[l],這使a[l]的信息直接到達神經網絡的深層,不再沿着主路經傳遞, 加上的a[l]產生了一個殘差塊,即a[l+2]的生成式變爲:
在這裏插入圖片描述
所以跳遠連接就是a[l]跳過一層或者好幾層,將信息傳遞到神經網絡的更深層,通過求偏導我們就能看出,這樣就算深度很深,梯度也不會消失了。
在這裏插入圖片描述

在這裏插入圖片描述
由普通網絡變爲ResNet的方法是加上所有的跳遠連接,一個連接構成一個殘差塊,5個殘差塊連接在一起,構成一個殘差網絡。**對於傳統網絡而言,理論上,網絡深度越深,訓練的應該越來越好,**但如過沒有殘差網絡,對傳統網絡來說,深度越深意味着用優化算法越難訓練,隨着網絡的深入,訓練錯誤會越來越多,但如果有ResNet,可以保證我們在訓練更深網絡的同時,保證其良好的性能,實踐證明,ResNet確實在訓練深度網絡方面非常有效。

!使用1×1的卷積:通道爲一的矩陣卷積1×1的卷積核只是相當於對矩陣乘以某個數字,但如果是多通道的矩陣如32通道,使用一個1×1×32的卷積核,就會把各個通道的數據乘以卷積核的值再求和成爲一維
例如其的一個應用:28×28×192的輸入層,我們可以用池化層壓縮它的高度和寬度,但如果通道很大,如何把它的維度壓縮爲28×28×32維度的層呢,這裏可以使用32個1×1×192維的核來壓縮通道,這裏1×1的主要目的在於保證長寬不變。在這裏插入圖片描述

!什麼是梯度消失:例如,對於下圖所示的含有3個隱藏層的神經網絡,梯度消失問題發生時,接近於輸出層的hidden layer 3等的權值更新相對正常,但前面的hidden layer 1的權值更新會變得很慢,導致前面的層權值幾乎不變,仍接近於初始化的權值,這就導致hidden layer 1相當於只是一個映射層,對所有的輸入做了一個同一映射,這是此深層網絡的學習就等價於只有後幾層的淺層網絡的學習了。如果我們使用標準方法來初始化網絡中的權重,那麼會使用一個均值爲0標準差爲1的高斯分佈。因此所有的權重通常會滿足|wj|<1,而s‘是小於0.25的值,當神經網絡特別深的時候,梯度呈指數級衰減,導數在每一層至少會被壓縮爲原來的1/4,當z值絕對值特別大時,導數趨於0,正是因爲這兩個原因,從輸出層不斷向輸入層反向傳播訓練時,導數很容易逐漸變爲0,使得權重和偏差參數無法被更新,導致神經網絡無法被優化,訓練永遠不會收斂到良好的解決方案。
在這裏插入圖片描述
什麼是梯度爆炸
當我們將w初始化爲一個較大的值時,例如>10的值,那麼從輸出層到輸入層每一層都會有一個s‘(zn)*wn的增倍,當s‘(zn)爲0.25時s‘(zn)*wn>2.5,同梯度消失類似,當神經網絡很深時,梯度呈指數級增長,最後到輸入時,梯度將會非常大,我們會得到一個非常大的權重更新,這就是梯度爆炸的問題,在循環神經網絡中最爲常見.圖中的曲線表示權值更新的速度:
在這裏插入圖片描述

其實梯度爆炸和梯度消失問題都是因爲網絡太深,網絡權值更新不穩定造成的,從深層網絡角度來講,不同的層學習的速度差異很大,表現爲網絡中靠近輸出的層學習的情況很好,靠近輸入的層學習的很慢,有時甚至訓練了很久,前幾層的權值和剛開始隨機初始化的值差不多。因此,梯度消失、爆炸,其根本原因在於反向傳播訓練法則,屬於先天不足,本質上是因爲梯度反向傳播中的連乘效應。對於更普遍的梯度消失問題,可以考慮用ReLU**函數取代sigmoid**函數。另外,LSTM的結構設計也可以改善RNN中的梯度消失問題。