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 中很清楚的表明了。

CS231n Class Notes- lecture11 ConvNets in Practice_第1张图片

CS231n Class Notes- lecture11 ConvNets in Practice_第2张图片

对比使用一层 7x7 的卷积和使用三层 3x3 的卷积,发现后者有更少的参数,更少的乘法运算,以及更好的非线性(层数变多,非线性就变多了),所以在 VGG 论文中全部使用了 3x3 的卷积核!

bottlenech 结构

CS231n Class Notes- lecture11 ConvNets in Practice_第3张图片

CS231n Class Notes- lecture11 ConvNets in Practice_第4张图片

CS231n Class Notes- lecture11 ConvNets in Practice_第5张图片

在最新版的 GoogLeNet[2] 使用了所有这些想法。
CS231n Class Notes- lecture11 ConvNets in Practice_第6张图片

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 为结果矩阵就行了。

从上面的描述也可以看到这种方法也有一个缺点,就是会比原来占用更多内存。不过在实际使用时并不是一个很大的问题。

CS231n Class Notes- lecture11 ConvNets in Practice_第7张图片

还有一些其他加速卷积计算的方法,比如利用快速傅立叶变换 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

你可能感兴趣的:(machine,learning)