卷积神经网络CNN中的几个重要概念

1. 滤波器 Filter

在卷积层中,需要用到滤波器去和图像中的一块进行运算。这个概念可以参考通俗易懂理解卷积神经网络CNN,下面给出卷积的动态图:
卷积神经网络CNN中的几个重要概念
图中灰色的3*3矩阵就是一个filter,它正在图像矩阵上滑动来对图像上不同部分进行聚焦。卷积操作中,一般会有多于一个filter,因为每一个filter会获取一个方面的特征。比如在识别小狗的图像时,需要一个filter去获取颜色,还有一个去获取形状,还有其他的一些特征。但是这些东西的可解释性并不好,也就是说你设计了一个filter让它去获取想要的特征,但你并不知道这个filter获取的特征是什么。总之,filter是获取了它自身认为重要的特征(这个其实是filter矩阵中的每一个值决定的)。

filter滑动的间隔叫做步长stride,在我们这个图里面,步长为1,每次移动一个单元格。

还需要注意的就是,如果输入数据不是二维的,比如彩色图像是三维的,那么filter也是有深度的,而且深度和输入数据维度相同。

为什么要用卷积这个操作呢?
在普通网络中,我们把输入图片中的每一个像素与下一层的神经元相连。但是图片中相邻像素在一起是有原因的,并且有着特殊意义,但普通网络没有有效利用好这些信息。

2. Feature Map

每种filter去卷积图像就得到对图像的不同特征的放映,称之为Feature Map。所以有多少种filter就有多少个Feature Map。

一般在卷积层之后会连接一个非线性的**函数,例如:sigmoid, tanh, ReLU等。

3. 池化Pooling

常用的pooling方法有两种:average pooling,max pooling
以下展示的是max pooling的过程:
卷积神经网络CNN中的几个重要概念
max pooling就是在一个小区域里面选择一个最大值保留,其他的内容丢弃。
average pooling就是将一个小区域内的值进行平均,得到一个平均值。

但是,这两种方法都有不足之处:
average pooling: 卷积之后通过**函数,一个小区域内的每个部分的**值是不同的,如果使用average pooling就会削弱强的**值,特别是对于tanh**函数来说,**值的正负会进行抵消。

max pooling: 在一篇论文里[1]提到可能会导致overfitting,在训练数据上表现不好。论文里也提到了有很多stochastic pooling 方法提出。还有一个改进方法是k-max pooling,选取最大的k个值,并且这个k值还可以根据句子的长度和卷积的层数进行自动调整。

[1]M. D. Zeiler and R. Fergus. Stochastic pooling for regularization of deep convolutional neural networks. CoRR, abs/1301.3557, 2013.