下文是自己學習和了解到的,可能比較淺顯,也可能比較散,主要作用還是幫自己記錄,友善日後檢視,是以很多東西都給出了連結,但願對讀者有所幫助,主要學習來源
文章目錄
-
- 一、前言
- 二、存在問題
- 三、殘差塊
- 四、殘差塊的優點
- 五、網絡結構
- 六、網絡的參數
- 七、複現
一、前言
在2015年的Imagenet比賽中五項都是第一,錯誤率降低到了3.6%,超出了人眼的識别精度
論文:Deep Residual Learning for Image Recognition
回顧之前的網絡:
LeNet:5層
AlexNet:8層
VGG:19層
GoogLeNet:22層
ResNet:152層
神經網絡層數越深,越可以提取更多層次的特征,對特征進行融合,可以提升模型表現,但具有兩面性
二、存在問題
Problem of Deep Network
(存在的問題)
Vanishing gradients:梯度消失
Exploding gradients:梯度爆炸
Solution:
(解決方法)
Normalized initialization 歸一化
Intermediate normalization layers(BatchNorm) 中間層歸一化
當然對于梯度消失可以通過改變激活函數來解決,梯度爆炸可以通過梯度裁剪(clip)來解決
當神經網絡的層數增加時,容易引發神經網絡的退化(峰型)
伴随着網絡深度的增加,精度飽和,然後迅速退化,于是發現神經網絡退化才是神經網絡難以訓練的原因,而不是梯度消失和梯度爆炸,于是提出了ResNet網絡
三、殘差塊
介紹殘差塊之前,先看下面是一個簡單的模型介紹,右邊模型相較于左邊多一個網絡,正常來說B模型比A模型的效果好,如果B的網絡為恒等因式,那麼A模型的解其實是B模型解的子空間
恒等因式
:輸出與輸入相同,後來何凱明也寫了一篇關于恒等因式的論文,下面圖檔下方的*号是論文名稱,有興趣可以看看
殘差塊
:F(x)就是殘差,整個網絡被稱為殘差網絡
輸入是x,如果使用恒等因式,那麼輸出為H(x)—>y = x;但如果使用跨層連接配接,那麼最終的輸出就會變成F(x)+x;使用F(x)+x減去H(x)就可以得到F(x),他就是殘差,作者認為這樣訓練出的網絡相對于對x進行修正,F(x)就是修正的幅度。
四、殘差塊的優點
1.沒有增加任何的額外參數和計算複雜度
2.可以通過随機梯度下降進行反向傳播
3.依賴現有架構實作,實作簡單(tensorflow,pytorch)
五、網絡結構
在網絡結構過程中block會出現次元不一樣的情況,可以用兩種方法(具體可以檢視完整的網絡結構圖)
1.仍然執行恒等因式,額外填充0來增加次元,保證前後次元一樣
2.用1×1的卷積維持次元的變化
ResNet50完整的網絡結構圖,網絡圖太大,可點選連結進去檢視,也是借鑒的他人部落格。
六、網絡的參數
Conv1的7×7,64,stride 2:表示7*7的卷積核,64個通道,兩個步長的卷積
七、複現
ResNet50的複現暫時沒有細研究,可以移步該連結,代碼和細節可以檢視該連結,自己找到的比較好的資源,推薦有興趣的可以看看。