2 3 殘差網路為什麼有用?

2022-05-28 06:15:14 字數 2009 閱讀 3416

乙個網路深度越深,它在訓練集上訓練的效率就會有所減弱,這也是有時候我們不希望加深網路的原因。而事實並非如此,至少在訓練 resnets網路時,並非完全如此,舉個例子:

設有乙個大型神經網路,其輸入為x,輸出啟用值$}$ 。假如你想增加這個神經網路的深度,那麼用 big nn 表示,輸出為$}$ 。再給這個網路額外新增兩層,依次新增兩層,最後輸出為$}$ ,可以把這兩層看作乙個 resnets 塊,即具有捷徑連線的殘差塊。為了方便說明,假設我們在整個網路中使用 relu 啟用函式,所以啟用值都大於等於 0,包括輸入x的非零異常值。因為 relu 啟用函式輸出的數字要麼是 0,要麼是正數。

$}^} = g(}^} + }^})$

展開:$}^} = g(}^}) = g(}} + } + }^})$

這裡的w是關鍵項,如果:

$} = 0$,為方便起見,假設$} = 0$

那麼:$}} + } = 0$

因為我們假定使用 relu 啟用函式,並且所有啟用值都是非負的,從而:

$}^} = g(}^}) = }^}$

結果表明,殘差塊學習這個恒等式函式並不難,跳躍連線使我們很容易得出:

$}^} = }$

這意味著,即使給神經網路增加了這兩層,它的效率也並不遜色於更簡單的神經網路,因為學習恒等函式對它來說很簡單。儘管它多了兩層,也只把$}$ 的值賦值給$}^}$ 。所以給大型神經網路增加兩層,不論是把殘差塊新增到神經網路的中間還是末端位置,都不會影響網路的表現。

當然,我們的目標不僅僅是保持網路的效率,還要提公升它的效率。想象一下,如果這些隱藏層單元學到一些有用資訊,那麼它可能比學習恒等函式表現得更好。而這些不含有殘差塊或跳躍連線的深度普通網路情況就不一樣了,當網路不斷加深時,就算是選用學習恒等函式的引數都很困難,所以很多層最後的表現不但沒有更好,反而更糟。

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

關於殘差網路,另乙個值得**的細節是,假設$}^}$ 與$}^}$

具有相同維度,所以 resnets 使用了許多 same 卷積,所以這個$}^}$ 的維度等於這個輸出層的維度。之所以能實現跳躍連線是因為 same 卷積保留了維度,所以很容易得出這個捷徑連線,並輸出這兩個相同維度的向量。

如果輸入和輸出有不同維度,比如輸入的維度是 128,$}^}$ 的維度是 256,再增加乙個矩陣,這裡標記為$$,$$是乙個 256×128 維度的矩陣,所以$}$ 的維度是 256,這個新增項是 256 維度的向量。你不需要對$$做任何操作,它是網路通過學習得到的矩陣或引數,它是乙個固定矩陣, padding 值為 0,用 0 填充$}$ ,其維度為 256。

這是乙個普通網路,我們給它輸入一張,它有多個卷積層,最後輸出了乙個 softmax。

如何把它轉化為 resnets 呢?只需要新增跳躍連線。這裡我們只討論幾個細節,這個網路有很多層 3×3 卷積,而且它們大多都是 same 卷積,這就是新增等維特徵向量的原因。所以這些都是卷積層,而不是全連線層,因為它們是 same 卷積,維度得以保留,這也解釋了新增項:$}^} + }^}$ (維度相同所以能夠相加)。

resnets 類似於其它很多網路,也會有很多卷積層,其中偶爾會有池化層或類池化層的層。不論這些層是什麼型別,你都需要調整矩陣$$的維度。普通網路和 resnets 網路常用的結構是:卷積層-卷積層-卷積層-池化層-卷積層-卷積層-卷積層-池化層……依此重複。 直到最後, 有乙個通過 softmax 進行**的全連線層。

深度殘差網路

深度殘差學習 deep residual learning 的思想 在residual net中 1 identity 為恒等對映,此條路徑一直存在 2 f x 為需要學習的殘差函式 residual function h x x f x 問題的重新表示或預處理會簡化問題的優化 假設我們期望的網路層...

殘差網路雜記

深度增加的乙個問題在於這些增加的層是引數更新的訊號。梯度是從後向前傳播的,增加網路深度後,比較靠前的層梯度會很小。當網路更深時意味著引數空間更大,優化問題變得更難,因此簡單地去增加網路深度反而出現更高的訓練誤差。殘差網路resnet設計一種殘差模組讓我們可以訓練更深的網路。殘差模組在輸入和輸出之間建...

殘差神經網路 殘差網路學習心得

殘差網路介紹 resnets是由殘差塊構建的,首先先解釋一下什麼是殘差塊。這是乙個兩層神經網路在l層進行啟用。計算過程是從a l 開始,首先進行線性啟用 根據這個等式,通過a l 算出z l 1 即a l 乘以權重矩陣再加上偏差因子,然後通過非線性relu啟用得到a l 1 隨後我們再進行線性啟用,...