- 全连接神经网络
我们先回顾一下之前介绍过的全连接神经网络的结构:
在全连接神经网络中,同一层中的节点(即神经元)组织成一列,每相邻两层之间的节点都有边相连, 上一层的输出作为下一层的输入。
当没有激活函数时,模型是线性的,只能解决线性可分问题:
((X*W1 B1)*W2 B2)*W3 B3...
为了求解非线性可分问题,我们引入了激活函数,即将每一个节点的输出通过一个非线性函数,以实现去线性化。
常用的激活函数有:
使用全连接网络处理图像的最大问题在于全连接层的参数太多。对应MNIST数据集,每张图片的大小是28X28X1,其中28X28为图片的大小,X1表示图像是黑白的,只有一个颜色通道。假设只有一层节点数为500的隐藏层,那么这样一个全连接神经网络的全部待训练参数有28X28X1X500 个权重值和500个偏置值,共392,500个参数。
当图片更大时,比如在CIFAR-10数据集中,图片是大小为32x32的彩图,这样输入层有32X32X3=3072个节点,假设任然只有一层节点数为500的隐藏层,那么这一全连接神经网络将有3072X500 500 = 1,5365,00个待训练参数。参数增多出了导致计算速度建模,还很容易导致过拟合的问题(因样本数小于参数个数)。所有需要一个更合理的神经网络结构来有效地减少神经网络中的参数个数。卷积神经网络可以达到这一目的。
- 卷积神经网络
一种卷积神经网络的结构图:
一个卷积神经网络主要有以下5种结构组成:
- 输入层 输入层是整个神经网络的输入,在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵,如28X28X1, 32X32X3
- 卷积层(convolution) 从名字可以看出,卷积层是一个卷积神经网络中最为重要的部分。和全连接层不同,卷积层中的每一个节点的输入只是上一层神经网络的一小块,常用的尺寸有3X3或者5x5,但是深度会增加。卷积层视图将神经网络中的每一小块进行更加深入分析从而得到抽象程度更高的特征。
- 池化层(pooling) 池化层可以缩减特征,即可以缩小矩阵的大小,但不改变三维矩阵的深度。池化操作类似于将已知高分辨率的图片转化为低分辨率的图片。通过池化层,可以进一步缩小最后全连接层中节点的个数,从而达到减少整个神经网络参数个数的目的。
- 全连接层 我们可将卷积层和池化层看成自动图像特征提取的过程。在特征提取完成并展平后,任然需要使用全连接层来完成分类任务。
- Softmax层 和全连接神经网络中一样,通过Softmax层,可以得到当前样例属于不同种类的概率大小。
下面着重介绍卷积层和池化层的网络结构以及前向传播过程。
- 卷积层
卷积层中最重要的部分称为过滤器(filter)或叫内核(kernel)。如上图所示,过滤器将上层神经网络上的一个子节点矩阵转化为当前层神经网络上的一个单位节点矩阵。单位节点矩阵指的是一个长和宽都为1,但深度不限的节点矩阵(下图中最右层每一个小方块)。当前层的输出矩阵就是由这些单位节点矩阵拼接而成。
在一个卷积层中,过滤器所处理的上一层子节点矩阵的长和宽都是由人工指定的,这个子节点矩阵的尺寸也被称之为过滤器的尺寸,如下图中滤器的尺寸是3X3:
过滤器中另外一个需要人工指定的设置是处理得到的单位节点矩阵的深度,这个设置称为过滤器的深度。注意,过滤器的尺寸指的是其输入节点的大小,而其深度却指的是其输出单位节点矩阵的深度。上图中为了方便演示,输入图片的仅有一个颜色通道,单位节点矩阵也只有一层深度,过滤器的偏置矩阵B为零矩阵,且未引入激活函数。
同一卷积层中对应上一层各个子节点矩阵的过滤器是相同的,即拥有相同的权重矩阵,相同的偏置矩阵,和相同的激活函数。但过滤器中的每一深度层却各不相同。单位节点矩阵中的第i个深度层的取值g(i)为:
其中x,y,c为上一层中子矩阵元素的坐标(比如,x ,y为像素坐标,c为颜色通道索引),a为该元素的值,w为过滤器第i个深度层中权重矩阵对应坐标处的元素值,b为过滤器第i个深度层中偏置矩阵对应坐标处的元素值。f为激活函数,如ReLU。
上述公式简写为(B可为常量矩阵):
上层输入的通道数为3,过滤器深度为4(B=0, f=1)时,见下图
全0填充(zero-padding):
当过滤器的大小不为1X1时,前向传播得到的结果矩阵的尺寸要小于上一层输入矩阵的尺寸。如下图,输入矩阵的尺寸为4X4, 过滤器尺寸为3X3,结果矩阵的尺寸就为2X2。为了避免尺寸的变化,也避免降低图像边缘处特征的重要性,可以在输入矩阵的边界上加入全0填充。从图中可以看出,填充后结果矩阵的大小就也为4X4了。
过滤器的移动步长:
上图中过滤器每次水平方向和竖直方向均移动1步,可以设置为其它步长,近一步减少神经网络的参数个数。假如步长为3X3时,结果矩阵的大小将变为2X2。
不使用全0填充时(TensorFlow中设置padding=‘VALID')结果矩阵的大小:
使用全0填充时(TensorFlow中设置padding=‘SAME')结果矩阵的大小:
注:上述两张图中的括号表示向上取整。
- 池化层
与卷积层类似,池化层前向传播的过程也是通过移动一个类似过滤器的结构完成的。不过池化层的过滤器中的计算不是求节点的加权和,而是采用更加简单的方式,计算最大值或者平均值。
池化层的过滤器也需要仍设定尺寸,是否使用全0填充,以及过滤器的移动步长等设置,而且这些设置的意义也是一样的。
部分图片来源于网络,如有侵权,请联系删除。