CNN—-卷积神经网络理论理解

人工神经网络(ANN)

在介绍卷积神经网络之前,先来了解一下人工神经网络。

概念

人工神经网络(Artificial Neural Network,简称ANN ),以数学模型模拟神经元活动,是基于模仿大脑神经网络结构和功能而建立的一种信息处理系统。神经网络是一种运算模型,由大量的节点(或称“神经元”)和之间相互的联接构成。每个节点代表一种特定的输出函数,称为激励函数、激活函数(activation function)。每两个节点间的联接都代表一个对于通过该连接信号的加权值,称之为权重


结构

神经网络包含三层:输入层、隐含层(可以有多层)、输出层。

sWHm2d.png

  • Inputs:输入,输入的是向量
  • Weights:权重
  • Bias:偏置
  • Activationfunction:激活函数

卷积神经网络(CNN)

介绍

卷积神经网络(Convolutional Neural Network,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,它的神经元间的连接是非全连接的,且同一层中某些神经元之间的连接的权重 w和偏移 b 是共享的(即相同的),这样大量地减少了需要训练参数的数量。CNN真正能做的,只是起到一个特征提取器的作用!所以有关应用,都是建立在CNN对图像进行特征提取的基础上进行的。


特点

  1. 局部连接:非全连接,隐含层一个神经元对应输入层一个窗口内n个神经元。
  2. 参数共享:输入层各个窗口共享一个权重矩阵。

结构

  • 输入层:用于数据的输入
  • 卷积层:使用卷积核进行特征提取和特征映射
  • 激励层:由于卷积也是一种线性运算,因此需要通过激励函数进行非线性映射
  • 池化层:进行下采样,对特征图稀疏处理(降维),减少数据运算量。
  • 全连接层:通常在CNN的尾部进行重新拟合,减少特征信息的损失
  • 输出层:用于输出结果

输入层

CNN的输入层的输入格式保留了图片本身的结构。

对于黑白的 28×28 的图片,CNN的输入是一个 28×28 的的二维神经元;而对于RGB格式的28×28图片,CNN的输入则是一个 3×28×28 的三维神经元。


卷积层

在卷积层中有两个重要的概念:

  • local receptive fields:感受视野或窗口
  • shared weights:共享权值

从待识别的图片中提取特征(feature),使这些feature能够代表图中的内容。feature在CNN中也被成为卷积核(filter),一般是3X3,或者5X5的大小。构成卷积核的矩阵称为权重矩阵

卷积核的权重矩阵的值,便是卷积神经网络的参数w,卷积核可附带一个偏移项 b ,它的初值可以随机来生成,可通过训练进行变化。

卷积运算

卷积运算总结起来就是:对应相乘,求和平均。

定义一个local receptive fields(窗口),使其大小与卷积核大小相同。然后定义一个步长stride = n,该窗口从输入向量矩阵的左上角开始,每次向右滑动n个单位。当滑动到最右边时,窗口回到最左侧并向下滑动n个单位,然后继续向右扫描,以此类推。为了扫描到边缘的一些特征,感受视野可能会“出界”,这时需要对**边界扩充(pad)**,边界扩充可以设为 0 或 其他值。步长 和 边界扩充值的大小由用户来定义。

窗口每滑动到一个地方,将窗口里的每个数值与权重矩阵对应位置的值相乘,然后将所有相乘后的值求平均值,最后将这个平均值放入一个新的矩阵中。当窗口扫描完整个输入向量图后,这个矩阵也被填满,我们将这个新的矩阵称为feature map特征图)。至此,卷积运算就结束了。

需要注意的是:

  • feature map是每一个feature从原始图像中提取出来的“特征”。其中的值,越接近为1,表示对应位置和feature的匹配越完整;越接近-1,表示对应位置和feature的反面匹配越完整,而值接近0表示对应位置没有任何匹配或者说没有什么关联
  • 一个卷积核产生一张feature map。

激励层

激励层主要对卷积层的输出进行一个非线性映射,因为卷积层的计算是一种线性计算。使用的激励函数一般为ReLu函数:

f(x)=max(x,0)

即,保留大于等于0的值,其余所有小于0的数值直接改写为0。

为什么要这么做呢?上面说到,卷积后产生的特征图中的值,越靠近1表示与该特征越关联,越靠近-1表示越不关联,而我们进行特征提取时,为了使得数据更少,操作更方便,就直接舍弃掉那些不相关联的数据。

经过激励后,feature map中小于0的值都被置为0。


池化层

池化层的作用就是将feature map进行降维,进一步简化数据。

池化分为两种,Max Pooling 最大池化、Average Pooling平均池化。顾名思义,最大池化就是取最大值,平均池化就是取平均值。

如最大池化,先选取一个nxn的池化窗口,设步长为m,在特征图上从左到右,从上到下扫描(和卷积运算类似)。每次滑动,取窗口内所有值的最大值作为特征图对应位置的新值。


全连接层和输出层

全连接层主要对特征进行重新拟合,减少特征信息的丢失。全连接层中有一个非常重要的函数—-Softmax,它是一个分类函数,输出的是每个对应类别的概率值。

输出层主要准备做好最后目标结果的输出。


卷积神经网络的训练与优化

神经网络到底需要训练什么呢?训练的就是那些卷积核(filter)。

在最开始,训练前,我们定义一个大小为3X3的卷积核,那么里面具体的值是多少,我们都不知道,所以就用随机初始化法来进行赋值,卷积核获取到了一个随机值,便可以开始工作。

这样得出来的结果肯定是不准确的,所以我们通过BP算法,根据得到的结果反向改变卷积核的数值,从而达到训练卷积核的效果。


参考文章