天天看點

【模型解讀】resnet中的殘差連接配接,你确定真的看懂了?

1殘差連接配接

想必做深度學習的都知道skip connect,也就是殘差連接配接,那什麼是skip connect呢?如下圖

【模型解讀】resnet中的殘差連接配接,你确定真的看懂了?

上面是來自于resnet【1】的skip block的示意圖。我們可以使用一個非線性變化函數來描述一個網絡的輸入輸出,即輸入為X,輸出為F(x),F通常包括了卷積,激活等操作。

當我們強行将一個輸入添加到函數的輸出的時候,雖然我們仍然可以用G(x)來描述輸入輸出的關系,但是這個G(x)卻可以明确的拆分為F(x)和X的線性疊加。

這就是skip connect的思想,将輸出表述為輸入和輸入的一個非線性變換的線性疊加,沒用新的公式,沒有新的理論,隻是換了一種新的表達。

它解決了深層網絡的訓練問題,作者的原論文中達到了上千層。

殘差連接配接是何的首創嗎?當然不是,傳統的神經網絡中早就有這個概念,文【2】中則明确提出了殘差的結構,這是來自于LSTM的控制門的思想。

y = H(x,WH)•T(x,WT) + X•(1- T(x,WT))

可以看出,當T(x,WT) = 0,y=x,當T(x,WT) = 1,y= H(x,WH) 。關于LSTM相關的知識,大家可以去其他地方補。

在該文章中,研究者沒有使用特殊的初始化方法等,也能夠訓練上千層的網絡。但為什麼這篇文章沒有resnet火呢?原因自然有很多了,何的文章做了更多的實驗論證,簡化了上面的式子,得了cvpr best paper,以及何的名氣更大等等因素。

總之,為我們所知道的就是下面的式子

y = H(x,WH) + X,此所謂殘差連接配接,skip connection。

2為什麼要skip connect

那為什麼要這麼做呢?首先大家已經形成了一個通識,在一定程度上,網絡越深表達能力越強,性能越好。

不過,好是好了,随着網絡深度的增加,帶來了許多問題,梯度消散,梯度爆炸;在resnet出來之前大家沒想辦法去解決嗎?當然不是。更好的優化方法,更好的初始化政策,BN層,Relu等各種激活函數,都被用過了,但是仍然不夠,改善問題的能力有限,直到殘差連接配接被廣泛使用。

大家都知道深度學習依靠誤差的鍊式反向傳播來進行參數更新,假如我們有這樣一個函數:

【模型解讀】resnet中的殘差連接配接,你确定真的看懂了?

其中的f,g,k大家可以自行腦補為卷積,激活,分類器。

cost對f的導數為:

【模型解讀】resnet中的殘差連接配接,你确定真的看懂了?

它有隐患,一旦其中某一個導數很小,多次連乘後梯度可能越來越小,這就是常說的梯度消散,對于深層網絡,傳到淺層幾乎就沒了。但是如果使用了殘差,每一個導數就加上了一個恒等項1,dh/dx=d(f+x)/dx=1+df/dx。此時就算原來的導數df/dx很小,這時候誤差仍然能夠有效的反向傳播,這就是核心思想。

我們舉個例子直覺了解一下:

假如有一個網絡,輸入x=1,非殘差網絡為G,殘差網絡為H,其中H=F(x)+x

有這樣的一個輸入輸出關系:

在t時刻:

非殘差網絡G(1)=1.1,

殘差網絡H(1)=1.1, H(1)=F(1)+1, F(1)=0.1

在t+1時刻:

非殘差網絡G’(1)=1.2,

殘差網絡H’(1)=1.2, H’(1)=F’(1)+1, F’(1)=0.2

這時候我們看看:

非殘差網絡G的梯度 = (1.2-1.1)/1.1

而殘差網絡F的梯度 = (0.2-0.1)/0.1

因為兩者各自是對G的參數和F的參數進行更新,可以看出這一點變化對F的影響遠遠大于G,說明引入殘差後的映射對輸出的變化更敏感,輸出是什麼?不就是反應了與真值的誤差嗎?

是以,這麼一想想,殘差就應該是有效的,各方實驗結果也證明了。

3skip connect就隻是這樣嗎

上面我們解釋了skip connect改善了反向傳播過程中的梯度消散問題,是以可以使得訓練深層網絡變得容易,但研究者們表示NoNoNo,沒這麼簡單。

如今在國内的研究人員,大公司,産品,都醉心于将深度學習用于網絡直播和短視訊,把整個環境搞的浮躁不堪的情況下,國外有很多的大拿都在潛心研究深度學習理論基礎,水準高低之分,可見一斑。文【3】的研究直接表明訓練深度神經網絡失敗的原因并不是梯度消失,而是權重矩陣的退化,是以這是直接從源頭上挖了根?

【模型解讀】resnet中的殘差連接配接,你确定真的看懂了?

當然,resnet有改善梯度消失的作用,文中也做了實驗對比如上:但不僅僅不如此,下圖是一個采用殘差連接配接(藍色曲線)和随機稠密的正交連接配接矩陣的比對,看得出來殘差連接配接并不有效。

【模型解讀】resnet中的殘差連接配接,你确定真的看懂了?

結合上面的實驗,作者們認為神經網絡的退化才是難以訓練深層網絡根本原因所在,而不是梯度消散。雖然梯度範數大,但是如果網絡的可用自由度對這些範數的貢獻非常不均衡,也就是每個層中隻有少量的隐藏單元對不同的輸入改變它們的激活值,而大部分隐藏單元對不同的輸入都是相同的反應,此時整個權重矩陣的秩不高。并且随着網絡層數的增加,連乘後使得整個秩變的更低。

這也是我們常說的網絡退化問題,雖然是一個很高維的矩陣,但是大部分次元卻沒有資訊,表達能力沒有看起來那麼強大。

殘差連接配接正是強制打破了網絡的對稱性。

【模型解讀】resnet中的殘差連接配接,你确定真的看懂了?

第1種(圖a),輸入權重矩陣(灰色部分)完全退化為0,則輸出W已經失去鑒别能力,此時加上殘差連接配接(藍色部分),網絡又恢複了表達能力。第2種(圖b),輸入對稱的權重矩陣,那輸出W一樣不具備這兩部分的鑒别能力,添加殘差連接配接(藍色部分)可打破對稱性。第3種(圖c)是圖b的變種,不再說明。

總的來說一句話,打破了網絡的對稱性,提升了網絡的表征能力,關于對稱性引發的特征退化問題,大家還可以去參考更多的資料【4】。

對于skip連接配接的有效性的研究【5-6】,始終并未停止,至于究竟能到什麼地步,大家還是多多關注吧學術研究,也可以多關注我們呀!