CS231n Class Notes- lecture11 ConvNets in Practice

這節課主要講了一些在實際使用 CNN 時的技巧,可以加速訓練網絡。很多內容需要圖解,所以我就直接截圖了。所有圖都是從 CS231n lecture 11的課件中截取的。


The power of small filters

Three 3 x 3 conv gives similar representational power as a single 7 x 7 convolution
這是在 VGG[1] 這篇論文中最先提出來的,3 層 3x3 大小的卷積 和 一層 7x7 大小的卷積效果差不多,因爲等效的 感受野(receptive field)大小都是 7x7。這在下面這張 slice 中很清楚的表明了。

這裏寫圖片描述

這裏寫圖片描述

對比使用一層 7x7 的卷積和使用三層 3x3 的卷積,發現後者有更少的參數,更少的乘法運算,以及更好的非線性(層數變多,非線性就變多了),所以在 VGG 論文中全部使用了 3x3 的卷積核!

bottlenech 結構

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

在最新版的 GoogLeNet[2] 使用了所有這些想法。
這裏寫圖片描述

summary:

  • Replace large convolutions (5 x 5, 7 x 7) with stacks of
    3 x 3 convolutions
  • 1 x 1 “bottleneck” convolutions are very efficient
  • Can factor N x N convolutions into 1 x N and N x 1
  • All of the above give fewer parameters, less compute,
    more nonlinearity

Implementing Convolutions: im2col 加速卷積計算的方法

在計算機中矩陣乘法是比較快的,而且有很多優化的矩陣乘法庫,所以可以把卷積操作轉化爲矩陣乘法來加速。

把 feature map 中所有對應一個 conv filer 大小的感受野區域 K x K x C 轉化爲有 CK^2 個元素的列向量,可以得到一個大小爲 (CK^2) x N 的矩陣,同時把每個conv filer也相應轉換爲一個有 CK^2 個元素的行向量,得到一個大小爲 D x (CK^2) 的矩陣,兩個矩陣相乘,就得到了一個大小爲 D x N 的矩陣,再 reshape 爲結果矩陣就行了。

從上面的描述也可以看到這種方法也有一個缺點,就是會比原來佔用更多內存。不過在實際使用時並不是一個很大的問題。

這裏寫圖片描述

還有一些其他加速卷積計算的方法,比如利用快速傅立葉變換 FFT 來計算卷積,不過目前還沒有普遍使用。


Reference

[1]Very Deep Convolutional Networks for Large-Scale Image Recognition

[2]Rethinking the Inception Architecture for Computer Vision

[3] cs231 lecture 11 slice

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章