小学三年级必修课《卷积神经网络(CNN)卷在哪里?》

今天的主题是卷积神经网络(与之相对的是全链接神经网络),一起来看看它为何能够成功地用在图像识别领域。公式有点少,配图有点多,拥有小学三年级的基础知识就能看懂。
1. 生物神经网络
神经网络是一种仿生模型,因此先带大家了解一下生物神经元
的结构与工作原理,如下图神经元所示:

一个神经元是一个可以接收、发射脉冲信号的细胞。在细胞体
(核心)之外有树突
与轴突
,树突接收其它神经元的脉冲信号, 而轴突将神经元的输出脉冲传递给其它神经元。 一个神经元传递给不同神经元的输出是相同的,并且在突触
部分发生信息的交换传递。
无数个生物神经元的组合就形成了生物神经网络,具备了处理复杂信息的能力。

2. 人工神经网络
人工神经网络模仿了生物神经网络的工作原理,对应的形式在下图中列举了出来:

输入变量先后经过加权求和与非线性变换之后得到输出。
大多数时候为了保证数据的合理性(如非负性)会引入偏差参与计算。

在整个神经网络的训练过程中,我们所要做的就是确定上图中的那些权重参数(w)与偏差参数(b)。当然,激活函数f(x) 的选择也非常重要。
我们为什么要经历激活函数这一步?
可以看出加权和是线性运算,假设如下图所示去掉了激活函数这一步。当神经元组网后,无论多少个线性运行叠加后都是线性的,也就失去了深层神经网络的意义,因此需要非线性的激活函数来增加非线性。

一个神经元的功能其实就是求得输入向量与权向量的内积后,经一个非线性传递函数得到一个标量结果。多个神经元连接起来,就形成了类似大脑的神经网络。如下图:

通常一个完整的神经网络包含三个部分:
输入层
隐藏层
输出层
本文所说的卷积神经网络
(Convolutional Neural Network, CNN)就是一种用卷积运算代替了上述矩阵乘法(加权和)的神经网络,这种体代可以是全部的,也可以是部分的。
3. 卷积神经网络 CNN
CNN为什么会产生?为什么CNN被广泛应用于图像识别?
当使用全连接的神经网络时,因为相邻两层之间的神经元都是有边相连的,当输入层的特征维度非常高时(如图片),全连接网络需要被训练的参数就会非常多,导致训练效率低下,而CNN可以通过训练少量的参数从而进行特征提取。
图图将按下图所示顺序介绍CNN的结构:

3.1 输入层
输入层通常是一张图片的RGB三个通道的图像:

3.2 卷积层(CONV)
卷积层就是用来提取图像的特征的,它是识别图像最核心的部分;不同的卷积核可以得到不同的特征;如下图所示,该卷积核提取到了边缘特征。
假设我们现在有一张m^2(m=8)大小的图像(下图左),并有一个大小是n^2(n=3)的卷积核(下图中)。我们让这个卷积核在图片上滑行,从左上角开始一行一行滑动,每次滑动步长为1,每一次滑动都会对应图片上的9个像素,让卷积核中的数字与图片中对应的像素值先相乘再相加得到一个新数值(卷积),最后得到一个新的图片(下图右)。
特别地,卷积后得到的图片大小是(m-n+1)(m-n+1)。

可以看出。卷积核这一结构使得卷积神经网络能够利用输入图像数据的二维结构。

3.3 激活层(ReLU)
激活层主要对卷积层的输出进行一个非线性映射,在CNN中一般为ReLU函数
。

ReLU函数保留大于0的值,即保留特征比较好的值,将特征小于0的值舍去(从下图的对比中可以看出一些不重要的细节特征都被舍去啦)。这对于图像来说也具有另外的实际意义:从卷积层计算得来的RGB数据可能是负值,经过ReLU函数之后可以全部变为合理的RGB值。

至于为什么要进行非线性映射,前文已经提到过是为了使得多层的神经网络具有实际意义,否则无论多少层线性的映射最终都会与单层的感知机等效。我们现在来看一下为什么引入ReLU函数而不是sigmoid等其它函数。
1 采用sigmoid等函数,反向传播求误差梯度时,求导涉及除法,计算量大;而采用ReLU激活函数,整个过程的计算量节省很多。
2 对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失,从而无法完成深层网络的训练。
3 ReLU会使一部分神经元的输出为0,减少了参数的相互依存关系,缓解了过拟合问题的发生。
3.4 池化层(POOL)
池化过程在一般在卷积和激励过程之后进行。池化的本质,其实就是降采样(subsampling),或者说对输入的图像数据进行降维压缩,以加快运算速度。 这样也能够很大程度避免过拟合的发生,提高神经网络的泛化能力。
我们为什么可以进行池化? 图像中的相邻像素倾向于具有相似的值,因此通常卷积层相邻的输出像素也具有相似的值。这意味着,卷积层输出中包含的大部分信息都是冗余的。池化层解决了这个问题。这个层所做的就是通过减小输入的大小降低输出值的数量。

池化一般通过简单的最大值、最小值或平均值操作完成。以下是池大小为2*2的最大池化层的示例:

进行上述的池化后,可以将输入数据变为原始数据的25%大小。再如下图的池化结果(为1/9的池化)

3.5 全连接层(Full Connection)
全连接层的作用,就是将前面经过卷积以及池化后高度抽象化的特征进行整合,然后可以进行归一化,对各种分类情况都输出一个概率,之后可以根据全连接得到的概率进行分类。
在完成池化之后,输出还是二维的图像数据,我们需要利用Flatten
操作将二维数据展平为一维数据。

3.6 输出层(OUTPUT)
全连接层的下一层就是网络的输出层,输出结果通常是图像属于某个分类的概率。
全文结束
查看个人主页获得更多作品