日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

【深度学习之ResNet】——深度残差网络—ResNet总结

發(fā)布時(shí)間:2023/12/10 pytorch 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【深度学习之ResNet】——深度残差网络—ResNet总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

目錄

?

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

摘要:

1、引言

2、為什么會(huì)提出ResNet殘差網(wǎng)絡(luò)呢?

3、深度殘差網(wǎng)絡(luò)結(jié)構(gòu)學(xué)習(xí)(Deep?Residual?learning)

  (1)殘差單元

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

  (3)瓶頸(BottleNeck)模塊

  (4)ResNet的結(jié)構(gòu)

?  (5)ResNet的進(jìn)一步改進(jìn)

參考博客:


轉(zhuǎn)載:https://www.cnblogs.com/xiaoboge/p/10539884.html(個(gè)人覺得這篇博客寫的很詳細(xì),對(duì)于殘差網(wǎng)絡(luò)的原理和優(yōu)勢(shì)進(jìn)行了詳細(xì)的解釋)

紅色部分為自己添加

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

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

摘要:

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

1、引言

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

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

?

2、為什么會(huì)提出ResNet殘差網(wǎng)絡(luò)呢?

add:

??????? VGGNet和Inception出現(xiàn)后,大家都想著通過增加網(wǎng)絡(luò)深度來尋求更加優(yōu)秀的性能,但是網(wǎng)絡(luò)的加深也帶來了一定的困難,如:

??????? 1)網(wǎng)絡(luò)加深導(dǎo)致參數(shù)增加,導(dǎo)數(shù)網(wǎng)絡(luò)難以訓(xùn)練

??????? 2)因?yàn)榫W(wǎng)絡(luò)太深,導(dǎo)致根據(jù)梯度鏈條傳遞原則,使得傳播到淺層時(shí),梯度消失;也可能出現(xiàn)梯度爆炸的情況,但是通過BN層歸一化到【0,1】之間已經(jīng)很好地解決了梯度爆炸的現(xiàn)象

??????? 3)越深的網(wǎng)絡(luò)梯度相關(guān)性差,接近白噪聲,導(dǎo)致梯度更新也接近于隨機(jī)擾動(dòng)

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

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

?? ? ?????????????????????????????????????????? 圖1:VGGNet網(wǎng)絡(luò)結(jié)構(gòu)和實(shí)驗(yàn)結(jié)果

?  但是更深的網(wǎng)絡(luò)其性能一定會(huì)更好嗎?我們后來發(fā)現(xiàn)傳統(tǒng)的CNN網(wǎng)絡(luò)結(jié)構(gòu)隨著層數(shù)加深到一定程度之后,越深的網(wǎng)絡(luò)反而效果更差,過深的網(wǎng)絡(luò)竟然使分類的準(zhǔn)確率下降了(相比于較淺的CNN而言)。比較結(jié)果如圖2。

?

圖2:常規(guī)的CNN網(wǎng)絡(luò)過分加深網(wǎng)絡(luò)層數(shù)會(huì)帶來分類準(zhǔn)確率的降低

  

  為什么CNN網(wǎng)絡(luò)層數(shù)增加分類的準(zhǔn)確率卻下降了呢?難道是因?yàn)槟P蛥?shù)過多表達(dá)能力太強(qiáng)出現(xiàn)了過擬合?難道是因?yàn)閿?shù)據(jù)集太小出現(xiàn)過擬合?顯然都不是!!!我們來看,什么是過擬合呢?過擬合就是模型在訓(xùn)練數(shù)據(jù)上的損失不斷減小,在測(cè)試數(shù)據(jù)上的損失先減小再增大這才是過擬合現(xiàn)象。根據(jù)圖2?的結(jié)果可以看出:56層的網(wǎng)絡(luò)比20層網(wǎng)絡(luò)在訓(xùn)練數(shù)據(jù)上的損失還要大。這可以肯定不會(huì)是過擬合問題。因此,我們把這種問題稱之為網(wǎng)絡(luò)退化問題(Degradation problem)。

  我們知道深層網(wǎng)絡(luò)存在著梯度消失或者爆炸的問題,這使得深度學(xué)習(xí)模型很難訓(xùn)練。但是現(xiàn)在已經(jīng)存在一些技術(shù)手段如BatchNorm來緩解這個(gè)問題。因此,出現(xiàn)深度網(wǎng)絡(luò)的退化問題是非常令人詫異的。

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

?

3、深度殘差網(wǎng)絡(luò)結(jié)構(gòu)學(xué)習(xí)(Deep?Residual?learning)

  (1)殘差單元

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


圖3:殘差學(xué)習(xí)單元

  為什么殘差學(xué)習(xí)相對(duì)更容易,從直觀上看殘差學(xué)習(xí)需要學(xué)習(xí)的內(nèi)容少,因?yàn)闅埐钜话銜?huì)比較小,學(xué)習(xí)難度小點(diǎn)。不過我們可以從數(shù)學(xué)的角度來分析這個(gè)問題,首先殘差單元可以表示為:

?

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

?

?我們可以知道,對(duì)于傳統(tǒng)的CNN,直接堆疊的網(wǎng)絡(luò)相當(dāng)于一層層地做——仿射變換-非線性變換,而仿射變換這一步主要是矩陣乘法。所以總體來說直接堆疊的網(wǎng)絡(luò)相當(dāng)于是乘法性質(zhì)的計(jì)算。而在ResNet中,相對(duì)于直接堆疊的網(wǎng)絡(luò),因?yàn)閟hortcut的出現(xiàn),計(jì)算的性質(zhì)從乘法變成了加法。計(jì)算變的更加穩(wěn)定。當(dāng)然這些是從前向計(jì)算的角度,從后向傳播的角度,如果代價(jià)函數(shù)用Loss表示,則有

增加短路連接shortcut_connection后的梯度(1表示能夠?qū)p失無損地傳遞到上一層,而殘差項(xiàng)需要經(jīng)過w卷積層等,結(jié)合圖3:殘差學(xué)習(xí)單元來理解)

未增加短路連接的梯度表達(dá)式(當(dāng)網(wǎng)絡(luò)很深時(shí)傳到淺層殘差會(huì)很小,導(dǎo)致梯度會(huì)有消失的風(fēng)險(xiǎn)):


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

下面這段話很重要,因?yàn)橥ㄟ^一個(gè)短路連接使得梯度能夠比較完整的傳遞到上一層,雖然有殘差項(xiàng),但是梯度比沒有短路前更加完整,從而使得梯度的衰減進(jìn)一步得到了抑制,這樣使得從深層反向傳播回來的梯度不至于消失,這也為增加更多層實(shí)現(xiàn)更深層的神經(jīng)網(wǎng)絡(luò)提供了可行性的保障。

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

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

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

  當(dāng)X與Y通道數(shù)目不同時(shí),作者嘗試了兩種 identity mapping 的方式。一種即簡(jiǎn)單地將X相對(duì)Y缺失的通道直接補(bǔ)零從而使其能夠相對(duì)齊的方式,另一種則是通過使用1x1的conv來表示W(wǎng)s映射從而使得最終輸入與輸出的通道達(dá)到一致的方式

  (3)瓶頸(BottleNeck)模塊

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

?

圖4:BottleNeck模塊

  (4)ResNet的結(jié)構(gòu)

創(chuàng)新點(diǎn):

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

2)圖像輸入直接使用了步長(zhǎng)為2進(jìn)行下采樣

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

4)當(dāng)特征圖大小發(fā)生倍數(shù)變化時(shí),其個(gè)數(shù)也會(huì)發(fā)生相應(yīng)的倍數(shù)變換,比如大小減半則數(shù)量會(huì)增倍,保證了網(wǎng)絡(luò)結(jié)構(gòu)的復(fù)雜度

何為全局平均池化?

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

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

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

圖5 ResNet網(wǎng)絡(luò)結(jié)構(gòu)圖

?

表1?不同深度的ResNet

?

  下面我們?cè)俜治鲆幌職埐顔卧?#xff0c;ResNet使用兩種殘差單元,如圖6所示。左圖對(duì)應(yīng)的是淺層網(wǎng)絡(luò),而右圖對(duì)應(yīng)的是深層網(wǎng)絡(luò)。對(duì)于短路連接,當(dāng)輸入和輸出維度一致時(shí),可以直接將輸入加到輸出上。但是當(dāng)維度不一致時(shí)(對(duì)應(yīng)的是維度增加一倍),這就不能直接相加。有兩種策略:

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

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

圖6?不同的殘差單元

作者對(duì)比18-layer和34-layer的網(wǎng)絡(luò)效果,如圖7所示。可以看到普通的網(wǎng)絡(luò)出現(xiàn)退化現(xiàn)象,但是ResNet很好的解決了退化問題。

圖7 18-layer和34-layer的網(wǎng)絡(luò)效果

  最后展示一下ResNet網(wǎng)絡(luò)與其他網(wǎng)絡(luò)在ImageNet上的對(duì)比結(jié)果,如表2所示。可以看到ResNet-152其誤差降到了4.49%,當(dāng)采用集成模型后,誤差可以降到3.57%。

表2 ResNet與其他網(wǎng)絡(luò)的對(duì)比結(jié)果

?

?  (5)ResNet的進(jìn)一步改進(jìn)

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

?

圖8?改進(jìn)后的殘差單元及效果

參考博客:

?

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

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

總結(jié)

以上是生活随笔為你收集整理的【深度学习之ResNet】——深度残差网络—ResNet总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。