一句话引入: 如果我们要做图像识别,用的是一个200x200的图片,那么BP神经网络的输入层就需要40000个神经元,因为是全连接,所以整个BP神经网络的参数量就是160亿个,显然不能这样来训练网络,所以我们就需要在输入层之前,加入一个处理图片的操作,而这个操作的目的,
1.为了把图片的特征提取出来,减去没有必要的噪音。
2.降低矩阵的参数数量。
然后再输入到BP神经网络中去训练权重和偏置量。
人的眼睛看见东西,不是一个神经元就能做到的,而是很多个神经元,每个神经元只负责自己的那块局部信息,而很多个神经元组合而成,就成了我们可以看见的图像。
卷积运算,是用来提取图片中的特征的,一次卷积运算的过程,就是使用一个卷积核,对整个图像进行一次运算,不同的卷积核,可以提取出来不同的特征,比如直线,曲线。卷积运算如下图:
这实际上就是两个矩阵相乘求和的结果。卷积核会根据步长 来顺着对图片矩阵进行一次卷积运算,假如步长为1,那么下一步就如下图:
其中不同的卷积核,可以提取出不同的图片特征,可以理解为,有些卷积核是用来提取猪耳朵,有些来提取猪鼻子。
Padding: 所谓的padding操作,实际上就是在图片边缘,上下左右补0,目的就是为了可以获取图片的边缘特征。
不同的卷积核,就像不同的视觉神经细胞,不同的卷积核提取图片中不同的特征,而当这些特征组合在一起的时候,就成了一幅图(当然是特征图)。
因为图片是彩色的,所以我们一般会对RGB三个通道,都做卷积运算,然后在合并这三个矩阵:
在进行完卷积运算后,需要对特征矩阵进行池化操作,池化就是把特征矩阵变小!
比较常见的池化操作如下:
一个完整的CNN如下
这也是LeNet网络的结构,两个卷积和池化,最后一个池化中的多个特征矩阵,拉成一个一维的矩阵,作为BP神经网络输入,如下图。
其中隐含层使用ReLu,输出层使用的是softMax,这样输出值就是标签和概率。
参考:深度学习及应用-赵卫亮,神经网络与深度学习-牟奇