【深度学习】ResNet的思想
轉載地址:https://www.jianshu.com/p/e58437f39f65
網絡的深度為什么重要?
因為CNN能夠提取low/mid/high-level的特征,網絡的層數越多,意味著能夠提取到不同level的特征越豐富。并且,越深的網絡提取的特征越抽象,越具有語義信息。
為什么不能簡單地增加網絡層數?
- 對于原來的網絡,如果簡單地增加深度,會導致梯度彌散或梯度爆炸。
對于該問題的解決方法是正則化初始化和中間的正則化層(Batch Normalization),這樣的話可以訓練幾十層的網絡。
- 雖然通過上述方法能夠訓練了,但是又會出現另一個問題,就是退化問題,網絡層數增加,但是在訓練集上的準確率卻飽和甚至下降了。這個不能解釋為overfitting,因為overfit應該表現為在訓練集上表現更好才對。
退化問題說明了深度網絡不能很簡單地被很好地優化。
作者通過實驗:通過淺層網絡+ y=x 等同映射構造深層模型,結果深層模型并沒有比淺層網絡有等同或更低的錯誤率,推斷退化問題可能是因為深層的網絡并不是那么好訓練,也就是求解器很難去利用多層網絡擬合同等函數。
怎么解決退化問題?
深度殘差網絡。如果深層網絡的后面那些層是恒等映射,那么模型就退化為一個淺層網絡。那現在要解決的就是學習恒等映射函數了。 但是直接讓一些層去擬合一個潛在的恒等映射函數H(x) = x,比較困難,這可能就是深層網絡難以訓練的原因。但是,如果把網絡設計為H(x) = F(x) + x,如下圖。我們可以轉換為學習一個殘差函數F(x) = H(x) - x. 只要F(x)=0,就構成了一個恒等映射H(x) = x. 而且,擬合殘差肯定更加容易。
?
其他的參考解釋
- 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%。明顯后者輸出變化對權重的調整作用更大,所以效果更好。殘差的思想都是去掉相同的主體部分,從而突出微小的變化,看到殘差網絡我第一反應就是差分放大器...地址
-
至于為何shortcut的輸入時X,而不是X/2或是其他形式。kaiming大神的另一篇文章[2]中探討了這個問題,對以下6種結構的殘差結構進行實驗比較,shortcut是X/2的就是第二種,結果發現還是第一種效果好啊(攤手)。
?
這種殘差學習結構可以通過前向神經網絡+shortcut連接實現,如結構圖所示。而且shortcut連接相當于簡單執行了同等映射,不會產生額外的參數,也不會增加計算復雜度。 而且,整個網絡可以依舊通過端到端的反向傳播訓練。
ImageNet上的實驗證明了作者提出的加深的殘差網絡能夠比簡單疊加層生產的深度網絡更容易優化,而且,因為深度的增加,結果得到了明顯提升。另外在CIFAR-10數據集上相似的結果以及一系列大賽的第一名結果表明ResNet是一個通用的方法。
作者:AlanMa
鏈接:https://www.jianshu.com/p/e58437f39f65
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。
總結
以上是生活随笔為你收集整理的【深度学习】ResNet的思想的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深度学习】训练集、验证集、测试集
- 下一篇: 【深度学习】LeNet-5、AlexNe