为什么使用卷积神经网络
卷积神经网络最初的设计是为了解决图像数据预处理的要求,避免复杂的特征过程。因为其对于图像的缩放,评议,旋转等畸变有着不变性,所以有着很强的泛化性。它最大的特点是权重共享,这大大减少来参数量,简化网络结构,防止来过拟合。
卷积神经网络的构成
卷积神经网络一般包括以下几个部分:
1. 输入层
即输入的图片等数据。我们以图片为例,输入层为一个32 * 32 * 3的矩阵。3代表RGB模式下,一个图片有三个原色图叠合而成。
2. 卷积层
我们用来做卷积计算的部分称为过滤器(filter)或卷积核(kernel)。它的尺寸由我们自己指定,通常为3 * 3,5 * 5,深度不限。
什么是卷积计算呢?
我们在输入矩阵中选取和卷积核一样大小的数据,进行卷积计算,即求对应位置的乘积和。这个乘积和即为卷积计算的输出值。
以此为例,我们在5 * 5原图上选取一个3 * 3的区域,每次移动一格,那么输出就是3 * 3的矩阵。这个一格,就是步长。如果我们把步长设为2,那么输出就是2 * 2的矩阵。
每一个卷积层中卷积核的参数都是一样的,这就巨幅减少了网络结构中的参数量。假设我们卷积核的尺寸为5 * 5,深度为16(可以理解为16个不同的5 * 5的而为过滤器),那么这一层的参数就是5 * 5 * 3 * 16 + 16 = 1216个。倘若我们使用全连接神经网络,一个32 * 32 * 3的输入,在第一层有200个隐藏节点,那么就需要32 * 32 * 3 * 200 + 200 = 614600个参数。
3. 池化层
池化层用于卷积层中间,可以有效的缩减矩阵的尺寸,进一步减少参数量,加快运算并防止过拟合。
池化层的使用类似于卷积层,它规定一个窗口大小,比如2 * 2, 然后将输入中每2 * 2的区域用一个值来代替。比较常用的是最大化池和平均值池。
最大化池是指取每个目标区域中的最大值代替。下图是一个变成为2,步长为2的最大化池,它取每一个2 * 2区域中最大的值作为这个目标区域的代替:
平均池就是顾名思义,用平均值代替。
4. 全连接层
经过若干层卷积和池化之后,我们需要用1-2层全连接层来进行最后的分类。这里的全连接就跟全连接神经网络的全连接步骤一样。
5. 分类层
分类层也是和我们以前的步骤一样。
BONUS
在实际操作中我们也会使用以下几个技术:
- ReLU激活函数我们一般会在卷积层之后,池化层之前使用,用以对数据进行去线性化
- LRN, 即局部响应归一化。它对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。 tensorflow官方文档中的tf.nn.lrn函数给出了局部响应归一化的论文出处 :http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks
- Dropout层,即随机忽略一部分神经元,以避免模型过拟合
下面几章我们会通过分析几款经典的卷积神经网络来理解卷积神经网络的强大应用。