深度學(xué)習(xí)與圖神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)分享:CNN 經(jīng)典網(wǎng)絡(luò)之-ResNet
resnet 又叫深度殘差網(wǎng)絡(luò)
圖像識別準(zhǔn)確率很高,主要作者是國人哦
深度網(wǎng)絡(luò)的退化問題
深度網(wǎng)絡(luò)難以訓(xùn)練,梯度消失,梯度爆炸,老生常談,不多說
resnet 解決了這個問題,并且將網(wǎng)絡(luò)深度擴展到了最多152層。怎么解決的呢?
殘差學(xué)習(xí)
結(jié)構(gòu)如圖
在普通的卷積過程中加入了一個x的恒等映射(identity mapping)
專家把這稱作 skip connections或者 shortcut connections
殘差結(jié)構(gòu)的理解
為什么要這樣呢?下面我從多個角度闡述這個問題。
生活角度
每學(xué)習(xí)一個模型,我都希望能用日常的生活去解釋為什么模型要這樣,一是加深對模型的理解,二是給自己搭建模型尋找靈感,三是給優(yōu)化模型尋找靈感。
resnet 無疑是解決很難識別的問題的,那我舉一個日常生活中人類也難以識別的問題,看看這個模型跟人類的識別方法是否一致。
比如人類識別杯子里的水燙不燙
一杯水,我摸了一下,燙,好,我的神經(jīng)開始運轉(zhuǎn),最后形成理論杯子里的水燙,這顯然不對
又一杯水,我一摸,不燙,好嘛,這咋辦,認知混亂了,也就是無法得到有效的參數(shù),
那人類是怎么辦呢?
我們不止是摸一摸,而且在摸過之后還要把杯子拿起來仔細看看,有什么細節(jié)可以幫助我們更好的識別,這就是在神經(jīng)經(jīng)過運轉(zhuǎn)后,又把x整體輸入,
當(dāng)然即使我們拿起杯子看半天,也可能看不出任何規(guī)律來幫助我們識別,那人類的作法是什么呢?我記住吧,這種情況要小心,這就是梯度消失了,學(xué)習(xí)不到任何規(guī)律,記住就是恒等映射,
這個過程和resnet是一致的。
網(wǎng)絡(luò)結(jié)構(gòu)角度
當(dāng)梯度消失時,f(x)=0,y=g(x)=relu(x)=x,怎么理解呢?
1. 當(dāng)梯度消失時,模型就是記住,長這樣的就是該類別,是一個大型的過濾器
2. 在網(wǎng)絡(luò)上堆疊這樣的結(jié)構(gòu),就算梯度消失,我什么也學(xué)不到,我至少把原來的樣子恒等映射了過去,相當(dāng)于在淺層網(wǎng)絡(luò)上堆疊了“復(fù)制層”,這樣至少不會比淺層網(wǎng)絡(luò)差。
3. 萬一我不小心學(xué)到了什么,那就賺大了,由于我經(jīng)常恒等映射,所以我學(xué)習(xí)到東西的概率很大。
數(shù)學(xué)角度
可以看到 有1 的存在,導(dǎo)數(shù)基本不可能為0
那為什么叫殘差學(xué)習(xí)呢
可以看到 F(x) 通過訓(xùn)練參數(shù) 得到了 H(x)-x,也就是殘差,所以叫殘差學(xué)習(xí),這比學(xué)習(xí)H(x)要簡單的多。
等效映射 identity mapping
上面提到殘差學(xué)習(xí)中需要進行 F(x)+x,在resnet中,卷積都是 same padding 的,當(dāng)通道數(shù)相同時,直接相加即可,
但是通道數(shù)不一樣時需要尋求一種方法使得y=f(x)+wx
實現(xiàn)w有兩種方式
1. 直接補0
2. 通過使用多個 1x1 的卷積來增加通道數(shù)。
網(wǎng)絡(luò)結(jié)構(gòu)
block
block為一個殘差單元,resnet 網(wǎng)絡(luò)由多個block 構(gòu)成,resnet 提出了兩種殘差單元
左邊針對的是ResNet34淺層網(wǎng)絡(luò),右邊針對的是ResNet50/101/152深層網(wǎng)絡(luò),右邊這個又被叫做 bottleneck
bottleneck 很好地減少了參數(shù)數(shù)量,第一個1x1的卷積把256維channel降到64維,第三個又升到256維,總共用參數(shù):1x1x256x64+3x3x64x64+1x1x64x256=69632,
如果不使用 bottleneck,參數(shù)將是 3x3x256x256x2=1179648,差了16.94倍
這里的輸出通道數(shù)是根據(jù)輸入通道數(shù)確定的,因為要與x相加。
整體結(jié)構(gòu)
1. 與vgg相比,其參數(shù)少得多,因為vgg有3個全連接層,這需要大量的參數(shù),而resnet用 avg pool 代替全連接,節(jié)省大量參數(shù)。
2. 參數(shù)少,殘差學(xué)習(xí),所以訓(xùn)練效率高
結(jié)構(gòu)參數(shù)
Resnet50和Resnet101是其中最常用的網(wǎng)絡(luò)結(jié)構(gòu)。
我們看到所有的網(wǎng)絡(luò)都分成5部分,分別是:conv1,conv2_x,conv3_x,conv4_x,conv5_x
其結(jié)構(gòu)是相對固定的,只是通道數(shù)根據(jù)輸入確定。
注意,Resnet 最后的 avg_pool 是把每個 feature map 轉(zhuǎn)換成 1 個特征,故池化野 size 為 feature map size,如 最后輸出位 512x7x7,那么池化野size 為 7
最新進展
殘差單元被進一步更新
個人經(jīng)驗
1. 卷積層包含大量的卷積計算,如果想降低時間復(fù)雜度,減少卷積層
2. 全連接層包含大量的參數(shù),如果想降低空間復(fù)雜度,減少全連接層
轉(zhuǎn)載自努力的孔子
審核編輯 黃昊宇
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4722瀏覽量
100308 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5431瀏覽量
120790 -
cnn
+關(guān)注
關(guān)注
3文章
350瀏覽量
22091 -
resnet
+關(guān)注
關(guān)注
0文章
12瀏覽量
3152
發(fā)布評論請先 登錄
相關(guān)推薦
評論