设计CNN时的小技巧

YouTube视频

设计CNN时的小技巧
现在,我们有一个原始输入,它的尺寸为5×5,经过一次卷积之后,它得到了3×3的特征图,对于中间的绿色的小方块来说,它的感受野就是对应着最左边的3×3的输入。(感受野,又称receptive field,是指对于特征图上的一个小单元,所对应的原始图像的尺寸)。
设计CNN时的小技巧
当我们再进行第二次卷积之后,红色的小方块的感受野代表了整个原始图像中的5×5的区域。因此,有一个规律:当卷积层数越多,后面特征图的感受野的范围越大,即能够代表提取到了原始图像的更多信息。
设计CNN时的小技巧
用1个7×7的filter VS 3个3×3的filter
刚才已经说到,用 3个3×3的filter对7×7的原始图像进行3次卷积之后能够得到1个1×1的特征图,和用1个7×7的filter得到的结果是一样的,那么哪种效果更好呢?
我们评价一个模型的好坏,首先要衡量权重参数的个数,因为权重的参数越多,意味着模型更难训练,发生过拟合的现象的概率也越高。
假设filter的深度是C(和输入的深度保持一致),filter的个数也是C。
当用1个7×7的filter时,参数的个数是49C²;用 3个3×3的filter时,参数的个数是27C².因此我们选择用 3个3×3的filter,因为参数个数少,训练起来比较容易,不易发生过拟合现象,还有更重要的一点是非线性更强(用来3层卷积,意味着有3个**函数)。
可以用1×1尺寸大小的吗?
设计CNN时的小技巧
我们看到左右两边通过卷积之后达到相同的效果,但是左边的网络由于再前两层用到了1×1的卷积核,且深度为输入的1/2,使得最终的参数个数更少,因此可以选择左边的这一种网络方式。这样的方式是再ResNet中提出来的,训练效果好于VGGNet。
总结技巧
设计CNN时的小技巧
1、用多层的小卷积核代替大的卷积核;(VGGNet就是全部用3×3的小卷积核)
2、也可以使用1×1的的卷积核;
3、将5×5的拆分成1×5和5×1的(不太常用)。
总之以上的操作能产生更少的参数、更小的计算量、更多的非线性。
池化的技巧
我们利用pooling对原始图像信息进行压缩,使得模型能够更快地收敛,但是由于压缩会丢失部分信息,我们为了弥补这样的损失,我们一般经过pooling之后,需要将filter的个数变成上一步的两倍。