到底Resnet在解決一個什麼問題呢?
既然可以通過初試化和歸一化(BN層)解決梯度彌散或爆炸的問題,那Resnet提出的那條通路是在解決什麼問題呢?
在He的原文中有提到是解決深層網路的一種退化問題,但並明確說明是什麼問題!
今年2月份有篇文章,正好跟這個問題一樣。
The Shattered Gradients Problem: If resnets are the answer, then what is the question?
大意是神經網路越來越深的時候,反傳回來的梯度之間的相關性會越來越差,最後接近白雜訊。因為我們知道圖像是具備局部相關性的,那其實可以認為梯度也應該具備類似的相關性,這樣更新的梯度才有意義,如果梯度接近白雜訊,那梯度更新可能根本就是在做隨機擾動。
有了梯度相關性這個指標之後,作者分析了一系列的結構和激活函數,發現resnet在保持梯度相關性方面很優秀(相關性衰減從 到了 )。這一點其實也很好理解,從梯度流來看,有一路梯度是保持原樣不動地往回傳,這部分的相關性是非常強的。
理解不對請指正。
本質其實和LSTM類似,通過加入gate的方法保留任何想長期保留的信息,RNN最大的挑戰本來也是diminishing gradients,這個residual learning其實就是gated learning, 解決方法本質上是和GRU或者LSTM是相似的,保證gradients不要消失得太厲害。
或者看這篇:
https://arxiv.org/pdf/1507.06228v2.pdf
簡單地說解決了剃度彌散的問題。可以說,resnet出現後,神經網路正式開啟超深層時代。
resnet提出的背景是,更深層的網路不應該比淺層網路差,至少也應該是一樣的,因為可以恆等映射。但事實上,對於平原網路結構,更深層的網路結果可能是更糟糕的,凱明大神在論文里證明了這一點。
那麼,怎麼樣才能讓網路具備學習恆等映射的能力呢?論文里提到,直接學習任意函數的恆等映射是很困難的,但是如果使用殘差函數,也就是H(x)=F(x)+x,F(x)=H(x)-x,如果能使F(x)為零的話,H(x)就是恆等映射。這裡解釋一下,x是殘差塊的輸入,F是殘差塊內部非線性層的映射,H是殘差塊的輸出,H也是我們希望得到的映射。至於這裡為什麼是x,而不是x/2或其他形式,請參見論文。
整理一下流程,殘差學習在淺層的時候,學習F,F+x是線性疊加。而到更深層時,F會漸漸趨於零,也就是說F(x)=0,這時,殘差塊為恆等映射,避免了增加層數反而影響效果的情況。
個人理解,歡迎指正。有沒人就發現一個問題msra_init在resent不好用原來的推導只在plane的relu激活下做的沒有考慮id的shortcut
BN也解決不了信息損失的問題,不管做不做BN,每經過一層,信息一定會有損的。
一方面: ResNet解決的不是梯度彌散或爆炸問題,kaiming的論文中也說了:臭名昭著的梯度彌散/爆炸問題已經很大程度上被normalized initialization and intermediate normalization layers解決了;
另一方面: 由於直接增加網路深度的(plain)網路在訓練集上會有更高的錯誤率,所以更深的網路並沒有過擬合,也就是說更深的網路效果不好,是因為網路沒有被訓練好,至於為啥沒有被訓練好,個人很贊同前面王峰的答案中的解釋。
在ResNet中,building block:
H(x)是期望擬合的特徵圖,這裡叫做desired underlying mapping
一個building block要擬合的就是這個潛在的特徵圖
當沒有使用殘差網路結構時,building block的映射F(x)需要做的就是擬合H(x)
當使用了殘差網路時,就是加入了skip connection 結構,這時候由一個building block 的任務由: F(x) := H(x),變成了F(x) := H(x)-x
對比這兩個待擬合的函數,文中說假設擬合殘差圖更容易優化,也就是說:F(x) := H(x)-x比F(x) := H(x)更容易優化,接下來舉了一個例子,極端情況下:desired underlying mapping要擬合的是identity mapping,這時候殘差網路的任務就是擬合F(x): 0,而原本的plain結構的話就是F(x) : x,而F(x): 0任務會更容易,原因是:resnet(殘差網路)的F(x)究竟長什麼樣子?中theone的答案:
F是求和前網路映射,H是從輸入到求和後的網路映射。比如把5映射到5.1,那麼引入殘差前是F(5)=5.1,引入殘差後是H(5)=5.1, H(5)=F(5)+5, F(5)=0.1。這裡的F和F都表示網路參數映射,引入殘差後的映射對輸出的變化更敏感。比如s輸出從5.1變到5.2,映射F的輸出增加了1/51=2%,而對於殘差結構輸出從5.1到5.2,映射F是從0.1到0.2,增加了100%。明顯後者輸出變化對權重的調整作用更大,所以效果更好。殘差的思想都是去掉相同的主體部分,從而突出微小的變化,看到殘差網路我第一反應就是差分放大器
後續的實驗也是證明了假設的, 殘差網路比plain網路更好訓練。因此,ResNet解決的是更好地訓練網路的問題,王峰的答案算是對ResNet之所以好的一個理論論證吧.
不妨認為resnet基於這樣的假設: hidden layers大部分是identity mapping或者接近它
所以如果假設成立,就可以構造residual block+skip connection結構,skip connection是identity mapping,resBlock轉而去學習H(x)-x,即所謂的殘差
網路深會遇到收斂慢的問題,但是resnet一定程度予以解決,因為:
- skip connection類似於gradient super highway,讓一部分梯度流快速從深層進入非resBlock的淺層
- 根據假設,殘差部分的權重應該較小,於是另一部分梯度流也應該可以收斂較快
…儘管這算是這種結構的優勢,但其實不是motivation(在回顧你的問題之後才意識到= =)
剛看到你的問題…深層網路的退化是指,我們常常以為網路越深越好,其實不是的,實驗可以發現,深到一定程度網路性能不穩定,在退化(我記得那篇文章看到一張圖描述的就是depth versus performance)然後he的實驗說明,resnet越深性能總是越好在這一點上,為什麼這種結構取得了這樣的效果我還沒找到很好的解釋= =(我去翻翻那張圖)
-------------------------------------------------圖找到回來更新------------------------------------------------
Kaiming He, Xiangyu Zhang, Shaoqing REn, Jian Sun. "Deep Residual Learning for Image Recognition"
左圖plain dnn,右圖resnet
Experiments on CIFAR10
推薦閱讀:
※1.19【OpenCV圖像處理】Canny邊緣檢測
※圖像分割中的自動求閾值法
※我的CUDA學習之旅——啟程
※信號處理與數字媒體
TAG:圖像處理 | 機器學習 | 深度學習DeepLearning |