【深度學習之ResNet】——深度殘差網絡—ResNet總結

?

目錄

?

論文名稱:Deep Residual Learning for Image Recognition?

摘要:

1、引言

2、為什么會提出ResNet殘差網絡呢?

3、深度殘差網絡結構學習(Deep?Residual?learning)

  (1)殘差單元

  (2)恒等映射/單位映射(identity?mapping)

  (3)瓶頸(BottleNeck)模塊

  (4)ResNet的結構

?  (5)ResNet的進一步改進

參考博客:


轉載:https://www.cnblogs.com/xiaoboge/p/10539884.html(個人覺得這篇博客寫的很詳細,對于殘差網絡的原理和優勢進行了詳細的解釋)

紅色部分為自己添加

論文名稱:Deep Residual Learning for Image Recognition?

?作者:微軟亞洲研究院的何凱明等人? ? ? ? ? ? ?論文地址:https://arxiv.org/pdf/1512.03385v1.pdf

摘要:

  隨著人們對于神經網絡技術的不斷研究和嘗試,每年都會誕生很多新的網絡結構或模型。這些模型大都有著經典神經網絡的特點,但是又會有所變化。你說它們是雜交也好,是變種也罷,總之針對神經網絡的創新的各種辦法那真叫大開腦洞。而這些變化通常影響的都是使得這些網絡在某些分支領域或者場景下表現更為出色(雖然我們期望網絡的泛化性能夠在所有的領域都有好的表現)。深度殘差網絡(deep?residual?network)就是眾多變種中的一個代表,而且在某些領域確實效果不錯,例如目標檢測(object?detection)。  

1、引言

  2015年時,還在MSRA的何愷明祭出了ResNet這個“必殺技”,在ISLVRC和COCO上“橫掃”了所有的對手,可以說是頂級高手用必殺技進行了一場殺戮。除了取得了輝煌的成績之外,更重要的意義是啟發了對神經網絡的更多的思考。可以說深度殘差網絡(Deep residual network, ResNet)的提出是CNN圖像史上的一件里程碑事件。

  ResNet的作者何愷明獲得了CVPR2016最佳論文獎。那么ResNet為什么會如此優異的表現呢?其實ResNet是解決了深度CNN模型難訓練的問題,我們知道2014年的VGG才19層,而15年的ResNet多達152層,這在網絡深度完全不是一個量級上,所以如果是第一眼看到這個層數的話,肯定會覺得ResNet是靠深度取勝。事實當然是這樣,但是ResNet還有架構上的trick,這才使得網絡的深度發揮出作用,這個trick就是殘差學習(Residual learning)。接下來我們將詳細分析ResNet的原理。

?

2、為什么會提出ResNet殘差網絡呢?

add:

??????? VGGNet和Inception出現后,大家都想著通過增加網絡深度來尋求更加優秀的性能,但是網絡的加深也帶來了一定的困難,如:

??????? 1)網絡加深導致參數增加,導數網絡難以訓練

??????? 2)因為網絡太深,導致根據梯度鏈條傳遞原則,使得傳播到淺層時,梯度消失;也可能出現梯度爆炸的情況,但是通過BN層歸一化到【0,1】之間已經很好地解決了梯度爆炸的現象

??????? 3)越深的網絡梯度相關性差,接近白噪聲,導致梯度更新也接近于隨機擾動

??????? 綜上可知:要想更加深的網絡進行訓練,并且獲得良好的性能,我們首要需要解決的就是使得深層的梯度能夠傳遞到淺層來,這樣才能使得網絡參數能夠有效的更新,其實就是抑制梯度損失

VGG網絡試著探尋了一下深度學習網絡的深度究竟可以深到何種程度還可以持續提高分類的準確率。對于傳統的深度學習網絡,我們普遍認為網絡深度越深(參數越多)非線性的表達能力越強,該網絡所能學習到的東西就越多。我們憑借這一基本規則,經典的CNN網絡從LetNet-5(5層)和AlexNet(8層)發展到VGGNet(16-19),再到后來GoogleNet(22層)。根據VGGNet的實驗結果可知,在某種程度上網絡的深度對模型的性能至關重要,當增加網絡層數后,網絡可以進行更加復雜的特征模式的提取,所以當模型更深時理論上可以取得更好的結果,從圖1中也可以看出網絡越深而效果越好的一個實踐證據。

?? ? ?????????????????????????????????????????? 圖1:VGGNet網絡結構和實驗結果

?  但是更深的網絡其性能一定會更好嗎?我們后來發現傳統的CNN網絡結構隨著層數加深到一定程度之后,越深的網絡反而效果更差,過深的網絡竟然使分類的準確率下降了(相比于較淺的CNN而言)。比較結果如圖2。

?

圖2:常規的CNN網絡過分加深網絡層數會帶來分類準確率的降低

  

  為什么CNN網絡層數增加分類的準確率卻下降了呢?難道是因為模型參數過多表達能力太強出現了過擬合?難道是因為數據集太小出現過擬合?顯然都不是!!!我們來看,什么是過擬合呢?過擬合就是模型在訓練數據上的損失不斷減小,在測試數據上的損失先減小再增大這才是過擬合現象。根據圖2?的結果可以看出:56層的網絡比20層網絡在訓練數據上的損失還要大。這可以肯定不會是過擬合問題。因此,我們把這種問題稱之為網絡退化問題(Degradation problem)。

  我們知道深層網絡存在著梯度消失或者爆炸的問題,這使得深度學習模型很難訓練。但是現在已經存在一些技術手段如BatchNorm來緩解這個問題。因此,出現深度網絡的退化問題是非常令人詫異的。

  何愷明舉了一個例子:考慮一個訓練好的網絡結構,如果加深層數的時候,不是單純的堆疊更多的層,而是堆上去一層使得堆疊后的輸出和堆疊前的輸出相同,也就是恒等映射/單位映射(identity?mapping),然后再繼續訓練。這種情況下,按理說訓練得到的結果不應該更差,因為在訓練開始之前已經將加層之前的水平作為初始了,然而實驗結果結果表明在網絡層數達到一定的深度之后,結果會變差,這就是退化問題。這里至少說明傳統的多層網絡結構的非線性表達很難去表示恒等映射(identity?mapping),或者說你不得不承認目前的訓練方法或許有點問題,才使得深層網絡很難去找到一個好的參數去表示恒等映射(identity?mapping)。

?

3、深度殘差網絡結構學習(Deep?Residual?learning)

  (1)殘差單元

  這個有趣的假設讓何博士靈感爆發,他提出了殘差學習來解決退化問題。對于一個堆積層結構(幾層堆積而成)當輸入為x時其學習到的特征記為H(x),現在我們希望其可以學習到殘差F(x) = H(x) - x,這樣其實原始的學習特征是H(x)。之所以這樣是因為殘差學習相比原始特征直接學習更容易。當殘差為F(x) = 0時,此時堆積層僅僅做了恒等映射,至少網絡性能不會下降,實際上殘差不會為0,這也會使得堆積層在輸入特征基礎上學習到新的特征,從而擁有更好的性能。殘差學習的結構如圖3所示。這有點類似與電路中的“短路”,所以是一種短路連接(shortcut connection)


圖3:殘差學習單元

  為什么殘差學習相對更容易,從直觀上看殘差學習需要學習的內容少,因為殘差一般會比較小,學習難度小點。不過我們可以從數學的角度來分析這個問題,首先殘差單元可以表示為:

?

其中,XL和XL+1分別表示第L個殘差單元的輸入和輸出,注意每個殘差單元一般包含多層結構。F是殘差函數,表示學習到的殘差,而h(XL) = XL表示恒等映射,f 是ReLu激活函數。基于上式,我們求得從淺層 l?到深層 L?的學習特征。

?

?我們可以知道,對于傳統的CNN,直接堆疊的網絡相當于一層層地做——仿射變換-非線性變換,而仿射變換這一步主要是矩陣乘法。所以總體來說直接堆疊的網絡相當于是乘法性質的計算。而在ResNet中,相對于直接堆疊的網絡,因為shortcut的出現,計算的性質從乘法變成了加法。計算變的更加穩定。當然這些是從前向計算的角度,從后向傳播的角度,如果代價函數用Loss表示,則有

增加短路連接shortcut_connection后的梯度(1表示能夠將損失無損地傳遞到上一層,而殘差項需要經過w卷積層等,結合圖3:殘差學習單元來理解)

未增加短路連接的梯度表達式(當網絡很深時傳到淺層殘差會很小,導致梯度會有消失的風險):


???????????????????????

下面這段話很重要,因為通過一個短路連接使得梯度能夠比較完整的傳遞到上一層,雖然有殘差項,但是梯度比沒有短路前更加完整,從而使得梯度的衰減進一步得到了抑制,這樣使得從深層反向傳播回來的梯度不至于消失,這也為增加更多層實現更深層的神經網絡提供了可行性的保障。

也就是說,無論是哪層,更高層的梯度成分都可以直接傳過去。小括號中的1表明短路機制(shortcut)可以無損地傳播梯度,而另外一項殘差梯度則需要經過帶有weights的層,梯度不是直接傳遞過來的。殘差梯度不會那么巧全為-1,而且就算其比較小,有1的存在也不會導致梯度消失。這樣一來梯度的衰減得到進一步抑制,并且加法的計算讓訓練的穩定性和容易性也得到了提高。所以可訓練的網絡的層數也大大增加了。

  (2)恒等映射/單位映射(identity?mapping)

  我們知道殘差單元通過 identity?mapping?的引入在輸入和輸出之間建立了一條直接的關聯通道,從而使得強大的有參層集中學習輸入和輸出之間的殘差。一般我們用F(X, Wi)來表示殘差映射,那么輸出即為:Y = F(X, Wi) + X 。當輸入和輸出通道數相同時,我們自然可以如此直接使用X進行相加。而當它們之間的通道數目不同時,我們就需要考慮建立一種有效的 identity mapping 函數從而可以使得處理后的輸入X與輸出Y的通道數目相同即Y = F(X, Wi) + Ws*X

  當X與Y通道數目不同時,作者嘗試了兩種 identity mapping 的方式。一種即簡單地將X相對Y缺失的通道直接補零從而使其能夠相對齊的方式,另一種則是通過使用1x1的conv來表示Ws映射從而使得最終輸入與輸出的通道達到一致的方式

  (3)瓶頸(BottleNeck)模塊

  如下圖4所示,左圖是一個很原始的常規模塊(Residual block),實際使用的時候,殘差模塊和Inception模塊一樣希望能夠降低計算消耗。所以論文中又進一步提出了“瓶頸(BottleNeck)”模塊,思路和Inception一樣,通過使用1x1 conv來巧妙地縮減或擴張feature map維度(也就是改變channels通道數)從而使得我們的3x3 conv的filters數目不受外界即上一層輸入的影響,自然它的輸出也不會影響到下一層module。不過它純是為了節省計算時間進而縮小整個模型訓練所需的時間而設計的,對最終的模型精度并無影響。

?

圖4:BottleNeck模塊

  (4)ResNet的結構

創新點:

1)短路連接,使得梯度消失得到了一定的改善

2)圖像輸入直接使用了步長為2進行下采樣

3)使用全局平均池化代替了全連接層

4)當特征圖大小發生倍數變化時,其個數也會發生相應的倍數變換,比如大小減半則數量會增倍,保證了網絡結構的復雜度

何為全局平均池化?

全局平均池化其實就是將最后一層每個通道取均值,最終變成channels * 1 * 1的一維格式,這樣的效果和全連接層是一致的

圖片來自:https://blog.csdn.net/weixin_37721058/article/details/96573673

  ResNet網絡是參考了VGG19的網絡,在其基礎上進行了修改,并通過短路機制加入了殘差單元,如圖5所示。變化主要體現在ResNet直接使用stride=2的卷積做下采樣,并且用global average pool層替換了全連接層。ResNet的一個重要設計原則是:當feature map大小降低一半時,featuremap的數量增加一倍,這保持了網絡層的復雜度。從圖5中可以看到,ResNet相比普通網絡每兩層間增加了短路機制,這就形成了殘差學習,其中虛線表示featuremap數量發生了改變。圖5展示的34-layer的ResNet,還可以構建更深的網絡如表1所示。從表中可以看到,對于18-layer和34-layer的ResNet,其進行的兩層間的殘差學習,當網絡更深時,其進行的是三層間的殘差學習,三層卷積核分別是1x1,3x3和1x1,一個值得注意的是隱含層的feature map數量是比較小的,并且是輸出feature map數量的1/4。

圖5 ResNet網絡結構圖

?

表1?不同深度的ResNet

0?wx_fmt=png

?

  下面我們再分析一下殘差單元,ResNet使用兩種殘差單元,如圖6所示。左圖對應的是淺層網絡,而右圖對應的是深層網絡。對于短路連接,當輸入和輸出維度一致時,可以直接將輸入加到輸出上。但是當維度不一致時(對應的是維度增加一倍),這就不能直接相加。有兩種策略:

(1)采用zero-padding增加維度,此時一般要先做一個downsamp,可以采用strde=2的pooling,這樣不會增加參數;

(2)采用新的映射(projection shortcut),一般采用1x1的卷積,這樣會增加參數,也會增加計算量。短路連接除了直接使用恒等映射,當然都可以采用projection shortcut。

圖6?不同的殘差單元

作者對比18-layer和34-layer的網絡效果,如圖7所示。可以看到普通的網絡出現退化現象,但是ResNet很好的解決了退化問題。

0?wx_fmt=png

圖7 18-layer和34-layer的網絡效果

  最后展示一下ResNet網絡與其他網絡在ImageNet上的對比結果,如表2所示。可以看到ResNet-152其誤差降到了4.49%,當采用集成模型后,誤差可以降到3.57%。

表2 ResNet與其他網絡的對比結果

0?wx_fmt=png

?

?  (5)ResNet的進一步改進

?  在2015年的ILSVRC比賽獲得第一之后,何愷明對殘差網絡進行了改進,主要是把ReLu給移動到了conv之前,相應的shortcut不在經過ReLu,相當于輸入輸出直連。并且論文中對ReLu,BN和卷積層的順序做了實驗,最后確定了改進后的殘差網絡基本構造模塊,如下圖8所示,因為對于每個單元,激活函數放在了仿射變換之前,所以論文叫做預激活殘差單元(pre-activation residual unit)。作者推薦在短路連接(shortcut)采用恒等映射(identity?mapping)。

?

圖8?改進后的殘差單元及效果

參考博客:

?

你必須要知道的CNN模型ResNet:https://blog.csdn.net/u013709270/article/details/78838875

經典分類CNN模型系列其四https://www.jianshu.com/p/93990a641066

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255979.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255979.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255979.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Atitit.??c#?語法新特性?c#2.0?3.0?4.0?4.5?5.0?6.0???attilax總結

Atitit. c# 語法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0 attilax總結 1.1. C# 1.0-純粹的面向對象 1.2. C# 2.0-泛型編程新概念 1.3. C# 2.0的另一個突出的特性就是匿名方法 1.4. C#3.0 linq 1.5. C# 4.0動態編程 dynamic 1.6. C# 4.5 異步編程 async和await 1.7. C# 5.0 更方便…

關于SafeMove White Paper功能

ABB機器人網站有一個 Safemove 功能的介紹,在Overview頁面右半版有一篇文檔是 SafeMove White Paper ,在45頁的 pdf 文檔中,詳細了介紹工業機器人的安全原則,以及ABB工業機器人自身 EPS (Electronic Position Switches) 和 SafeMo…

面試疑難點解析

List,Set,Map,有什么區別? List和Set實際上市實現了Collection接口,那么Collection接口的原理你能簡單描述一下嗎? List接口可以插入多個NULL值,并且重復值,而且LIST是一個有序的集合。 Set是一個不可重復的集合&#…

【深度學習】——日常知識點總結(持續更新)

設計卷積網絡的原則: 1、最后轉為一維有兩種方式:1)全局平均池化;2)扁平化直接轉化為一維的 2、在卷積層的大小變化時盡量保證特征圖大小減小n倍時,特征圖的個數也增加n倍,維持網絡的復雜度&a…

主機無法訪問虛擬機的httpd服務

癥狀:虛擬機裝的centos6.3 通過橋接的方式與主機連接 虛擬機通過yum安裝httpd服務 在主機瀏覽器中輸入 虛擬機ip 無法訪問虛擬機Apache 虛擬機和主機可以相互ping通 解決:關掉虛擬機的防火墻就可以了 命令setup進入防火墻管理 按空格鍵取消防火墻啟用 轉…

越獄Season 1- Episode 22: Flight

Season 1, Episode 22: Flight -Franklin: You know you got a couple of foxes in your henhouse, right? fox: 狐貍 henhouse: 雞舍 你的隊伍里都是一群狐貍 -Michael: They both want out of here. both: 兩者都 他們都想出去 Theyll behave until then. behave: 舉止端…

巴科斯范式BNF: Backus-Naur Form介紹

巴科斯范式(BNF: Backus-Naur Form. 的縮寫)是由 John Backus 和 Peter Naur 首次引入一種形式化符號來描述給定語言的語法(最早用于描述ALGOL 60 編程語言)。 現在,幾乎每一位新編程語言書籍的作者都使用巴科斯范式來定義編程語言的語法規則…

2017-2018-1 20155229 《信息安全系統設計基礎》第十三周學習總結

2017-2018-1 20155229 《信息安全系統設計基礎》第十三周學習總結 對“第二章 信息的表示和處理”的深入學習 這周的任務是選一章認為最重要的進行學習,我選擇了第二章。當今的計算機存儲和處理信息基本上是由二進制(位)組成,二進…

【VOC格式xml文件解析】——Python

#!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2021/4/26 12:49 # Author : linlianqin # Site : # File : test1.py # Software: PyCharm # description: import xml.etree.ElementTree as ETdef xmli(xmlpath):xmlTree ET.parse(xmlpath) # 解析xml文…

C—的BNF語法

近期用到ABB機器人&#xff0c;RAPID使用BNF語法規則描述&#xff0c;所以不得不復習了一下BNF語法描述規則&#xff0c;通過C的BNF描述&#xff0c;喚醒我的記憶 %>_<% C—的BNF語法如下&#xff1a; 1. program → declaration-list 2. declaration-list → decla…

Warning: Attempt to present on whose view is not in模態跳轉問題

錯誤分析&#xff1a; controller A present controller B ,前提是A的view要存在&#xff0c;如果不存在&#xff0c;就會報這個錯。解決方法&#xff1a; 將原來的present語句由 viewDidLoad方法中移到 viewDidAppear中&#xff0c;問題就可以解決。但是這樣的話&#xff0c;畫…

Reflector7及破解

Reflector7開始收費&#xff0c;前面的版本都已經過期&#xff0c;在網上下載了Reflector7&#xff0c;并找到了破解軟解&#xff0c;特在此分享。 下載地址&#xff1a; Reflector7.1.0.143.zip&Red.Gate_.NET_.Reflector.7.1.0.143.patch-SND.zip 本文轉自xwdreamer博客園…

win7系統的右鍵菜單只顯示一個白色框不顯示菜單項 解決辦法

如上圖所示&#xff0c;桌面或其他大部分地方點擊右鍵菜單&#xff0c;都只顯示一個白色框&#xff0c;鼠標移上去才有菜單項看&#xff0c;并且效果很丑 解決辦法&#xff1a; 計算機—右鍵—屬性—高級—性能—設置—視覺效果—淡入淡出或滑動菜單到視圖&#xff0c;將其前面…

【setup.py編譯出錯】——提示無法查找到powershell.exe

https://www.cnblogs.com/wind-chaser/p/11359521.html pytorch fasterrcnn訓練自己數據集文章鏈接 在進行faster rcnn pytorch跑通的時候遇到的&#xff0c;我是直接在pycharm中的終端上進行運行的&#xff0c;但是一直會跳出powershell.exe無法查找的錯誤&#xff0c; pytho…

同工不同酬,年薪 50 萬美金的工程師到底有什么神本事?

同工不同酬&#xff0c;年薪 50 萬美金的工程師到底有什么神本事&#xff1f;投遞人 itwriter 發布于 2014-05-10 23:09 評論(6) 有6066人閱讀 原文鏈接 [收藏] 英文原文&#xff1a;What kind of jobs do the software engineers who earn $500K a year do? 他們究竟是作…

201671010117 2016-2017-2 《Java程序設計》Java第十七周學習心得

Java第十七周學習心得 這一周老師對線程的內容進行了詳細講解&#xff0c;包括線程創建的兩種技術&#xff0c;和線程的優先級屬性及調度方法&#xff0c;對于布置的實驗作業中&#xff0c;實驗九中存在一點問題&#xff0c;程序運行不出來&#xff0c;后來跟同學商量探討沒有…

ACM數論之旅4---擴展歐幾里德算法(歐幾里德(???)?是誰?)

為什么老是碰上 擴展歐幾里德算法 ( ????? )最討厭數論了 看來是時候學一學了 度娘百科說&#xff1a; 首先&#xff0c; axby gcd(a, b) 這個公式肯定有解 &#xff08;( ????? )她說根據數論中的相關定理可以證明&#xff0c;反正我信了&#xff09; 所以 axby g…

艾里斑大小與像元尺寸的匹配問題

寫給自己看的學習記錄&#xff1a; 光具有波粒二象性&#xff0c;由此衍生出了幾何光學與衍射光學。在光學設計軟件中&#xff0c;最常用的判斷標準是查看點列圖的RMS半徑以及MTF圖的曲線&#xff0c;這兩者分別代表了兩種傳播性質的評價方式。 在剛接觸光學設計時&#xff0…

Android 保持Service不被Kill掉的方法--雙Service守護 Android實現雙進程守護

本文分為兩個部分&#xff0c;第一部分為雙Service守護&#xff0c;第二部分為雙進程守護 第一部分&#xff1a; 一、Service簡介&#xff1a;Java.lang.Object ?Android.content.Context ?android.content.ContextWrapper ?android.app.Service Service是應用程序Applicati…

【mmdetection2.0錯誤】——ModuleNotFoundError: No module named ‘mmdet‘

一開始以為是安裝包導入的相對路徑的問題&#xff0c;結果鼓搗了一上午都沒有用&#xff0c;最后才發現再進行mmdet2.0環境配置的時候忘記編譯了 也就是如下語句&#xff1a; python setup.py develop