(1)Kernel_size是如何选取的?

Q: 为什么CNN中的卷积核一般都是奇数*奇数 ?

A:  原因有二。(1) 卷积中有一种same convolution,也就是卷积前后尺寸(高x宽)不变。实现same convolution(n + padding - k + 1 = n) 。若 k 为偶数,那么padding就为奇数,就不能平均分配到卷积张量两边。(2)此外,奇数尺寸的卷积核便于用中心定位。

达到相同感受野的情况下,卷积核越小,所需要的参数和计算量越小。所以2×2排除了,一般都用3×3作为卷积核的大小。1×1的卷积核不能提升感受野,不能应用在需要提升感受野的应用中,也排除了。

(2)Channel数如何选取?

这与特征层的大小及能抽象出来的特征数量有关,特征层池化压缩后越小,图片的潜在的东西越复杂,所需要的深度或通道数越多。   极端情况下,假设一个通道只放一个特征例如嘴的特征,那这个图如果为了做一定性能的脸部识别,有千多个特征,那深度可能要一千多个了;幸好一个通道可以不用池化压缩得太小,一个通道放多个特征也能满足卷积的要求。

样本的丰富程度较好的情况下,模型的复杂度可以更高,那核内深度就可以更大,拟合、分类容易做到更准确。但速度上与硬件要求上就可能不行了。一般是能达到性能要求就行,要综合考虑。

之所以搞卷积而非全连接,就是减少参数量,就是准确性性能与速度、资源占用的综合考虑的结果。   综合考虑选取channel数量。既要保证准确度(个数越多越好),又要兼顾算力问题(个数越少越好)。

每一层卷积有多少channel数,以及一共有多少层卷积,这些暂时没有理论支撑,一般都是靠感觉去设置几组候选值,然后通过实验挑选出其中的最佳值。trial and error。 这也是现在深度卷积神经网络虽然效果拔群,但是一直为人诟病的原因之一。

(3)卷积层数如何选取 ?

多说几句,每一层卷积的channel数和网络的总卷积层数,构成了一个巨大的超参集合,这个超参集合里的最优组合,很可能比目前业界各种fancy的结构还要高效。只是我们一来没有理论去求解这个超参集合里的最优,二来没有足够的计算资源去穷举这个超参集合里的每一个组合,因此我们不知道这个超参集合里的最优组合是啥。现在业界里提出的各种fancy结构中不少都是不断trial and error,试出来一个效果不错的网络结构,然后讲一个好听的story,因为深度学习理论还不够,所以story一般都是看上去很美,背后到底是不是这回事只有天知道。比如好用到不行的batch norm,它的story是解决internal covariate shift,然而最近有篇文章How Does Batch Normalization Help Optimization? (No, It Is Not About Internal Covariate Shift)通过实验证明实际情况并不如此。

总结:

卷积核大小、个数,卷积层数,都是先根据以往的经验设定一个初始值,然后根据具体的实验效果进行微调。