一、CNN介绍
① 基本背景
卷积神经网络(convolutional neural network)是具有局部连接、权重共享等特性的深层前馈神经网络,最早主要是用来处理图像信息。
相比于全连接前馈神经网络,卷积神经网络有三个结构上的特性:局部连接、权重共享以及汇聚,这些特性使得卷积神经网络具有很好的特征提取能力,且参数更少。
卷积神经网络一般由卷积层、汇聚层和全连接层构成。
② 卷积层
对于一维卷积层,我们有:
该卷积核大小为 1×3,在一维数据上依次滑动计算。
根据卷积核滑动计算方式的定义,我们自然地会引入步长和零填充来增加卷积的多样性,以便更加灵活地进行特征提取。
假设卷积层的输入神经元个数为𝑀,卷积大小为𝐾,步长为𝑆,在输入两端各填补𝑃 个0(zero padding),那么该卷积层的神经元数量为(𝑀 − 𝐾 + 2𝑃)/𝑆 + 1.
(划重点,该公式很重要,在我们设计卷积层、池化层大小个数时需要考虑)
以此类推,对于二维卷积层,我们有:
该图中的卷积层进行了180°翻转处理,卷积核的翻转会减少一些不必要的操作和开销,其本身翻转与否并不影响其特征提取能力。
具体到MATLAB程序应用当中,即我们的输入数据应该是一个四维数组【M,N,D,SN】
其中,M和N分别为单个样本数据长和宽,D为通道数(输入特征类别,如RGB有三个通道),SN为样本个数。
抛开样本个数,我们考虑单个的样本数据结构【M,N,D】如下图所示:
输入特征映射组x为【M,N,D】,输出特征映射组y为【M',N',P】,卷积核为【U,V,P,D】
D为输入特征个数;P为输出特征个数;U、V是二维卷积核的长宽。
假设D=3;当P=1时:
就只会有一种卷积核(上图紫色柱体)存在,该柱体包含的权重信息代表了对你所需要输出的那一个特征的提取方式(即一个拟合函数,对应一个输出),该柱体在平面M×N滑动,并且在深度D方向(D=1、D=2、D=3)分别进行二维卷积操作,最后将三层的卷积结果相加并进行非线性映射得到输出特征映射组y;
当P=2时:
就会有两种卷积核(上图紫色柱体)存在,两个不同的柱体包含不同的权重信息代表了对你所需要输出的不同的两个特征的提取方式(即两个拟合函数,对应两个输出),两个柱体分别在平面M×N滑动,并且在深度D方向(D=1、D=2、D=3)分别进行二维卷积操作,最后将三层的卷积结果相加并进行非线性映射,由柱体1得到的输出特征映射组为y1,柱体2得到的输出特征映射组为y2;
以此类推……
③ 池化层
池化层又叫汇聚层、子采样层,其作用是进行特征选择,降低神经元个数,从而减少参数个数。根据卷积层的计算方式我们可以发现,卷积层主要是减少了网络中连接的数量,神经元的个数却并没有显著减少。因此在卷积层之后加上一个汇聚层,从而降低特征维数,避免过拟合。
常用的汇聚层有两种:
最大汇聚:
选择区域内所有神经元的最大活性值作为这个区域的表示。
理解了最大汇聚层的原理,第二种常见的汇聚层:平均汇聚层也不难理解,即是取区域内所有神经元活性值的平均值。
④ 卷积网络整体结构
了解完CNN的输入输出格式以及网络结构后,我们就可以展开代码的编写了。
具体代码将在(二)中给出。
参考书籍:《神经网络与深度学习》邱锡鹏 ,文中图片均来自该书。