ResNet學習與實現
專案地址:https://github.com/zhongqianli/caffe_resnet
《Deep Residual Learning for Image Recognition》的作者提出了ResNet,通過引入深度殘差學習框架,解決了網路退化問題。核心思想是通過擬合殘差對映取代擬合潛在的對映,前者比後者更容易優化。使用1x1 conv(bottleneck)降低了網路的計算複雜度。使用《Batch normalization: Accelerating deep network training by reducing internal covariate shift》提出的Batch normalization減少internal covariate shift,允許使用更大的學習率,不再需要小心翼翼地初始化引數。
解決的問題
通過引入深度殘差學習框架,解決了退化問題。
退化問題(degradation problem):
隨著網路深度的增加,精度達到飽和並且會迅速退化。退化並不是由過擬合引起的,給一個合適深度的網路增加更多層時,訓練誤差會增加。
解決方法
用堆疊的非線性層擬合殘差對映F(x) := H(x) - x
,而不是直接擬合underlying對映H(x)
。原始的對映H(x)可重投射為F(x) + x
。F(x) + x
可以由前饋神經網路和"shortcut connections"(跳躍連線、快捷連線)來實現。在這篇paper中,shortcut connections僅僅充當恆等對映。恆等的shortcut connections既沒有增加額外的引數也沒有增加計算複雜度。
y = F(x, {Wi}) + x
y = F(x, {Wi}) + Wsx
殘差方程F比較彈性,層數不小於2即可。
訓練方法
資料增強
- 隨機裁剪
- 水平翻轉
- 對比度歸一化
批歸一化(batch normalization)
在每個卷積之後,啟用之前使用批歸一化
優化演算法引數
mini-batch size = 256
SGD
lr = 0.1
lr policy
weight decay: 0.0001
momentum: 0.9
實驗步驟
將cifar10資料庫轉換成lmdb資料庫檔案
用create_resnet.py生成訓練測試網路檔案,然後用github上的netscope檢查生成的訓練測試網路檔案是否正確
用create_solver.py生成solver檔案
用train_net.py進行模型訓練
用caffe/tools下的log分析工具分析log檔案,得到訓練誤差變化曲線和準確率變化曲線