前篇主要对CNN的基本网络结构及连接方式做了简单的介绍,还介绍了一个界内经典的LeNet-5
模型。下面重点介绍CNN模型的训练过程/参数学习,在阅读本文之前,最好需要有以下方面的预备知识:
- 神经网络基础(网络结构,前向/后向传播方式,激活函数等);
- 基础的最优化求解方法(梯度法,牛顿法等);
- 机器学习基础
神经网络模型常用于处理有监督学习的问题,例如分类问题,CNN也不例外。模型需要一些有标注的数据进行训练,训练过程中主要涉及到网络的前向传播和反向传播计算,前向传播体现了特征信息的传递,而反向传播则是体现误差信息对模型参数的矫正。
特殊的反向传播
由于CNN中有不同类型的层级,并且层级之间的连接关系有可能是不确定的(如LeNet-5网络中S2层到C3层)。所以,有几个情形下的反向传播比较特别:
- 情况一:当前为Pooling层,前一层是卷积层;
- 情况二:当前为卷积层,前一层是Pooling层;
- 情况三:当前层与前一层的连接关系不确定;
情况一:当前为Pooling层,前一层是卷积层
其中,Kronecker
乘积的计算如下:
情况二:当前为卷积层,前一层是Pooling层
以上的矩阵1和矩阵2进行卷积操作时,需要将矩阵2先水平翻转,然后再垂直翻转;最后在矩阵1上进行卷积操作
(和前向传播时类似)。
情况三:当前层与前一层的连接关系不确定
个人理解,当前层与前一层的连接关系不确定时,反向传播与传统的BP算法类似,只不过更新的是局部连接的那些值。所以需要提前记录当前层的神经元与前一层的哪些元素是连接的。