卷积神经网络起源于上世纪九十年代Yann LeCun提出的Lenet5,卷积神经网络可用于目标检测、交通流量检测,还可用于人口密度测算,在医学上面,卷积神经网络可用于辅助诊断,在图像的语义分析方面卷积也是一个重要的算法,需要我们把图像中不同的物体用不同的颜色区分出来,是基于像素级的分析。
前馈神经网络因为层与层之间是全连接的结构,当隐层较多时参数量很多,整个网络计算量很大,卷积神经网络采用局部连接模式很好的解决了这一问题。
神经元所影响的刺激区域称为感受野,不同神经元感受野的大小和性质都不同
研究表明:有些细胞对处于某一角度上的线条、垂直线条、直角或明显的边缘线都有特别的反应,直线的朝向只能落在一个很小的角度范围里即细胞的感受野内。
如何用数学的方法实现感受野呢?在信号学中有一个卷积可以实现感受野机制。
卷积操作简单地说就是相乘相加。
卷积主要是对两个函数的一种运算,假设我们有f函数和g函数
可以分为连续函数和离散函数
图中有f函数,g函数,我们首先对g函数做一个反转,再平移 n 个单位长度,再和 f 函数相乘,最后求积分实际上就是求相乘后图像的面积。平移可以每次平移一个步长也可平移多个步长。
从卷积公式可以看出最后的输出y是步长n的函数,f 函数与g函数的乘积实际上就是两函数相交部分的面积。
随着平移的进行,我们可以看到两函数图像的交集是一个从开始的零到相交部分取得最大值,再由最大值减少为零的过程。当g函数全部落在正方形内时达到最大值。
图像的编码:将图像生成灰度图
灰度图;把图形的每一个像素点用对应的灰度值表示出来。每一个像素点都对应一个位置。
灰度图的编码就是一个 f 函数,想要获得图的特征,我们需要找一个 g 函数(核函数)做为滤波器提取图像的特征。
如下图,在卷积动画中,一般来说经卷积操作后图像会变小。
特征保留:卷积保留原始图像的特征
特征变少:经卷积后得到的图像比原来的图像小
卷积核一般比较小,如3×3,5×5,7×7
现在的算法都是用小卷积,多深度。这样可以把特征获取得更全。
从图中可看到,3×3的像素图经卷积操作后是1个像素,卷积的本质就是压缩图像。
卷积操作还要平移,每次移动一个步长,相应两个函数对应区域相乘相加,移动的时候可从左往右再从上往下,整个图像都经过卷积后原来5×5的图像变成一个3×3的特征图。
在上述卷积操作中,图像边缘的部分只是做一次操作,可能会损失图像的边缘特征,这就引入了Padding操作,也就是补零。
通过Padding操作,很好的保留了原图的边缘特征。
新的特征图大小如何计算?
计算公式如下:
n o u t = ⌊ n i n + 2 p − f s + 1 ⌋ n_{out}=\lfloor\frac{n_{in}+2p-f}{s}+1\rfloor nout=⌊snin+2p−f+1⌋
式中nin表示输入图像的大小;p表示Padding;f 表示卷积核的大小;s表示步长,步长是以像素为单位的。根据这个公式,我们可以很容易求出经过卷积后的特征图的大小。
如上边例子中,我们输入的是5×5的图像,Padding为1,步长 s 为1,卷积核是3×3的,那么输出的就是5×5的特征图。
n o u t = ⌊ 5 + 2 − 3 1 + 1 ⌋ = 5 n_{out}=\lfloor\frac{5+2-3}{1}+1\rfloor=5 nout=⌊15+2−3+1⌋=5
如果我们想获得水平方向的特征,我们可以使用卷积核(1),该滤波器的特征是水平方向有一行全为1,其余方向全为零;可以很好地把水平方向的特征提取出来,把其他方向的特征隐去。
如果我们想获得垂直方向的特征,我们可以使用卷积核(2),该滤波器的特征是垂直方向有一列全为1,其余方向全为零,从而很好地吧垂直方向的特征提取出来,吧其余方向的特征隐去;
当然,也可以获得其他方向的特征,如45度角方向,我们可以使用卷积核(3),该卷积核的特征是斜向上45度对角线全为1,其余方向全为零。
由此可知,同一张图我们可以使用不同的卷积核获取不同方向的特征。
基于三基色原理,任何一种颜色我们都可以通过红蓝绿三种颜色暗一定比例调出来,图像上的任意一个像素都可以分解成RGB三个值,我们就可以用三个矩形,一个张量来表示图像。
对于彩色图像如何进行卷积呢?
会用到多通道卷积。所谓多通道卷积就是用是哪个卷积核分别对图像像素点的RGB三个矩阵作卷积得到三个同样大小的特征图,最后将这三个特征图对应像素值相加合成一个特征图。
池化也叫下采样,通常和卷积配对使用。池化实际上就是对图像进一步的压缩将图像最重要的特征保留下来。
常用的池化方法有两种:
把特征图分块后,取其中像素的最大值最为输出。
把特征图分块后,计算每一小块所有像素值的平均值作为输出。
1998年,LeCun提出LeNet,并成功应用于手写数字识别,测试误差小于1%。
这个网络看起来很像传统神经网络,但实际上它的结构发生了很大的变化。
从输入层到第一个卷积层,卷积层到池化层它的就结构都发生了很大变化。
输入层:32×32灰度图像(28×28),周围有两个填充像素。
卷积的目的是为了实现感受野,它是不提倡使用全连接的,而是使用了6个5×5的卷积核提取图像的特征,继而得到6个通道的28×28的特征图。
在输入层与第一个卷积层之间我们用了共享权重。
所谓“共享权重”就是指同一个卷积核对图像不同位置进行特征提取时所作的卷积操作的权重是一致的,输入层原图的每个5×5的像素对应隐层的一个神经元,因为卷积核是一样的所以输出的神经元的偏置也是一样的。
参数计算:
LeNet 结构输入层与第一个卷积层,使用的深度为6,即学习6个不同的内核,一次第一个卷积层C1的输出为6×28×28。
每个内核具有5×5=25个权重,(外加一个偏置项,因此实际上是26个参数),权重总数=6×26=156。
传统神经网络是全连接的,LeNet5网络结构由于共享权重大大减少了参数的数目。
紧接着就是池化
池化的目的是进行特征图的压缩,用的是2×2的池化可以得到14×14的特征图,特征图变小了,特征图的编码压缩了。
池化单元大小为2×2,得到6个14×14的特征图
仅仅一对卷积+池化是不够的,因此又来了一对卷积池化操作
上一层6个通道如何转换成16个通道呢?
6个通道14×14的特征图转换成了16个通道10×10 的特征图。
获得特征后如何分类呢? LeNet5有两层全连接层,两层相比一层映射更加充分,与传统前馈神经网络一样,做拟合和映射工作。
全连接层与池化层S2的连接
将S2层的特征图(矩形编码)进行“拉直”操作,所谓“拉直”就是将矩形的编码第二行放在第一行后面拉直成一个向量,16个通道的矩形首尾相连组成一个大的向量。
第一个全连接层有120个神经元,第二个全连接层有84个神经元,输出层有10个。
LeNet 5 特殊的地方主要在于隐层层数加深了,层与层之间不再是全连接,而是卷积池化的局部连接,参数个数大大减少了。