卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器。在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接。在CNN的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。共享权值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。子采样也叫做池化(pooling),通常有均值子采样(mean pooling)和最大值子采样(max pooling)两种形式。子采样可以看作一种特殊的卷积过程。卷积和子采样大大简化了模型复杂度,减少了模型的参数。卷积神经网络的基本结构如图所示:
卷积神经网络由三部分构成。第一部分是输入层。第二部分由n个卷积层和池化层的组合组成。第三部分由一个全连结的多层感知机分类器构成。
CNN 卷积神经网络基础介绍
神经网络的基本组成包括输入层、隐藏层、输出层。而卷积神经网络的特点在于隐藏层分为卷积层和池化层。
输入层
在CNN卷积神经网络中,图片的输入格式和神经网络输入格式不太一样,神经网络输入层是转化为一维向量,而卷积神经网络输入层保存了图片的本身结构。对于黑白图片输入层是一个二维神经元,对于彩色图片输入层是一个三维神经元(每个颜色通道都有一个矩阵)。
卷积层
卷积层:将图像经过卷积运算产生了多个图像,像是将多个相片叠加起来。
卷积层运算方式:
- 定义一个卷积核(过滤器)大小,比如 3 * 3 。便会在矩阵为 3 * 3 中随机产生数字。如果是彩色图片会有 3 个不同的卷积核和彩色图片 3 个通道进行计算。
- 定义卷积核个数 ,多少个卷积核多少个输出结果,产生多少个图像。
- 定义步长,比如移动 2 个步长。
- 定义是否需要零填充,需要零填充参数是 SAME,不需要零填充参数 VALID。
卷积层运算方式例子如图一所示
- Input Volume 为输入彩色图片有 3 个通道
- 卷积核大小为 3 * 3 因为对应彩色图片便会有 3 个通道的卷积核,卷积核权重刚开始是随机产生的,也会产生随机一个偏置项 b。经过训练修改卷积核权重和偏置项最后才能稳定下来。
- 卷积核个数为 2 个 Filter W0 和 Filter W1,所以输出 Output Volume 也是 2 个即输出两个图像。
- 步长为 2,根据图二所示每一次移动都是 2 个步长,从左到右和从上到下都是 2 个步长。
- 是否要零填充,这个例子根本不需要零填充,所以使用零填充和不使用效果是一样的。
- 图一 Output Volume 第一个数 1 的计算:(01 + 01 + 0-1 + 0-1 + 00 + 11 + 0-1 + 0-1 + 10) + (0-1 + 00 + 0-1 + 00 + 10 + 1-1 + 01 + 0-1 + 00) + (00 + 01 + 00 + 01 + 20 + 01 + 00 + 0-1 + 0*1) + 1 = 1 第二个数依次类推。
(图一)
(图二)
激活函数
把卷积层结果经过激活函数做非线性映射,常用的激活函数 ReLU。
池化层
池化层:通过特征后稀疏参数来减少学习参数,降低网络的复杂度。有最大池化和平均池化,常用最大池化。
池化层运算方式:
- 定义窗口大小,比如 2 * 2。
- 定义步长,正常是窗口的大小,比如 2。
- 定义用什么池化,比如最大池化,选取窗口最大的值:
输出层
最后输出的结果层,有多少个分类输出层便有多少个神经元,输出层的激活函数用 softmax 分类。
CNN训练过程中向前传播和向后传播的原理
我们对比神经网络训练,CNN卷积神经网络训练会复杂一点点,但是训练的方法原理基本是一模一样的。一般我们的CNN 卷积神经网定义流程如下图:
- 随机初始化卷积核权重和偏置值
- 向前计算多个卷积层和池化层,并计算输出层结果
- 对比输出层结果和真是结果,反向计算卷积层误差项
- 用链式求导法则对卷积层进行求导,更新卷积核权重和偏置值,重复第 2 步第 3 步第 4 步直到卷积核权重和偏置值得到最优解