吳恩達深度學習筆記(85)-殘差網絡為什麼起作用?

殘差網絡為什麼有用?(Why ResNets work?)

為什麼ResNets能有如此好的表現,我們來看個例子,它解釋了其中的原因,至少可以說明,如何構建更深層次的ResNets網絡的同時還不降低它們在訓練集上的效率。

通常來講,網絡在訓練集上表現好,才能在Hold-Out交叉驗證集或dev集和測試集上有好的表現,所以至少在訓練集上訓練好ResNets是第一步。

先來看個例子,之前我們瞭解到,一個網絡深度越深,它在訓練集上訓練的效率就會有所減弱,這也是有時候我們不希望加深網絡的原因。而事實並非如此,至少在訓練ResNets網絡時,並非完全如此,舉個例子。

吳恩達深度學習筆記(85)-殘差網絡為什麼起作用?

假設有一個大型神經網絡,其輸入為X,輸出激活值a^([l])。假如你想增加這個神經網絡的深度,那麼用Big NN表示,輸出為a^[l] 。再給這個網絡額外添加兩層,依次添加兩層,最後輸出為a^[l+2] ,可以把這兩層看作一個ResNets塊,即具有捷徑連接的殘差塊。為了方便說明,假設我們在整個網絡中使用ReLU激活函數,所以激活值都大於等於0,包括輸入X的非零異常值。因為ReLU激活函數輸出的數字要麼是0,要麼是正數。

吳恩達深度學習筆記(85)-殘差網絡為什麼起作用?

我們看一下a^[l+2] 的值,也就是上節課講過的表達式,即a^[l+2] =g(z^[l+2] +a^[l] ),添加項a^[l] 是剛添加的跳躍連接的輸入。展開這個表達式a^[l+2] =g(W^[l+2] a^[l+1] +b^[l+2] +a^[l] ),其中z^[l+2] =W^[l+2] a^[l+1] +b^[l+2] 。

注意一點,如果使用L2正則化或權重衰減,它會壓縮W^[l+2] 的值。如果對b應用權重衰減也可達到同樣的效果,儘管實際應用中,你有時會對b應用權重衰減,有時不會。這裡的W是關鍵項,如果W^[l+2] =0,為方便起見,假設b^[l+2] =0,這幾項就沒有了,因為它們(W^[l+2] a^[l+1] +b^[l+2] )的值為0。最後a^[l+2] = g(a^([l]) )=a^[l] ,因為我們假定使用ReLU激活函數,並且所有激活值都是非負的,g(a^([l]) )是應用於非負數的ReLU函數,所以a^([l+2])=a^([l])。

吳恩達深度學習筆記(85)-殘差網絡為什麼起作用?

結果表明,殘差塊學習這個恆等式函數並不難,跳躍連接使我們很容易得出a^[l+2] =a^[l] 。這意味著,即使給神經網絡增加了這兩層,它的效率也並不遜色於更簡單的神經網絡,因為學習恆等函數對它來說很簡單。儘管它多了兩層,也只把a^([l])的值賦值給a^[l+2] 。所以給大型神經網絡增加兩層,不論是把殘差塊添加到神經網絡的中間還是末端位置,都不會影響網絡的表現。

吳恩達深度學習筆記(85)-殘差網絡為什麼起作用?

當然,我們的目標不僅僅是保持網絡的效率,還要提升它的效率。

想象一下,如果這些隱藏層單元學到一些有用信息,那麼它可能比學習恆等函數表現得更好。而這些不含有殘差塊或跳躍連接的深度普通網絡情況就不一樣了,當網絡不斷加深時,就算是選用學習恆等函數的參數都很困難,所以很多層最後的表現不但沒有更好,反而更糟。

我認為殘差網絡起作用的主要原因就是這些殘差塊學習恆等函數非常容易,你能確定網絡性能不會受到影響,很多時候甚至可以提高效率,或者說至少不會降低網絡的效率,因此創建類似殘差網絡可以提升網絡性能

吳恩達深度學習筆記(85)-殘差網絡為什麼起作用?

除此之外,關於殘差網絡,另一個值得探討的細節是,假設z^[l+2] 與a^([l])具有相同維度,所以ResNets使用了許多same卷積,所以這個a^[l] 的維度等於這個輸出層的維度。之所以能實現跳躍連接是因為same卷積保留了維度,所以很容易得出這個捷徑連接,並輸出這兩個相同維度的向量。

如果輸入和輸出有不同維度,比如輸入的維度是128,a^[l+2] 的維度是256,再增加一個矩陣,這裡標記為W_s,W_s是一個256×128維度的矩陣,所以W_s a^[l] 的維度是256,這個新增項是256維度的向量。你不需要對W_s做任何操作,它是網絡通過學習得到的矩陣或參數,它是一個固定矩陣,padding值為0,用0填充a^([l]),其維度為256,所以者幾個表達式都可以。

吳恩達深度學習筆記(85)-殘差網絡為什麼起作用?

最後,我們來看看ResNets的圖片識別。這些圖片是我從何凱明等人論文中截取的,這是一個普通網絡,我們給它輸入一張圖片,它有多個卷積層,最後輸出了一個Softmax。

吳恩達深度學習筆記(85)-殘差網絡為什麼起作用?

如何把它轉化為ResNets呢?

只需要添加跳躍連接。這裡我們只討論幾個細節,這個網絡有很多層3×3卷積,而且它們大多都是same卷積,這就是添加等維特徵向量的原因。所以這些都是卷積層,而不是全連接層,因為它們是same卷積,維度得以保留,這也解釋了添加項z^[l+2] +a^[l] (維度相同所以能夠相加)。

吳恩達深度學習筆記(85)-殘差網絡為什麼起作用?

ResNets類似於其它很多網絡,也會有很多卷積層,其中偶爾會有池化層或類池化層的層。

不論這些層是什麼類型,正如我們在上圖看到的,你都需要調整矩陣W_s的維度。普通網絡和ResNets網絡常用的結構是:卷積層-卷積層-卷積層-池化層-卷積層-卷積層-卷積層-池化層……依此重複。直到最後,有一個通過softmax進行預測的全連接層。

以上就是ResNets的內容。使用1×1的過濾器,即1×1卷積,這個想法很有意思,為什麼呢?我們下節筆記再講。


分享到:


相關文章: