1.基本概念
1.1 填充(Padding)
卷积操作时会遇到在图像边界卷积造成图像信息丢失的问题,而Padding 操作则是为了解决边界卷积问题而提出的,增加矩阵的大小,通常用 0 或者复制边界像素来进行填充。如下图所示,输入为5*5的图像矩阵,输出为6*6的图像矩阵。
1.2 步长(Stride)
指卷积核从上一次卷积到下一次卷积需要移动的距离,步长决定了卷积输出矩阵的大小。
1.3 卷积(Convolution)
简单来说,每一次卷积进行的操作就是将卷积核盖在输入矩阵上,被覆盖的部分分别相乘并相加。更具体一点,即将被覆盖子矩阵拉成向量(9*1),将卷积核也拉成向量(9*1),两个向量进行内积。一次卷积操作的详细过程如下图所示:
理解了单次卷积,下面我们让卷积核动起来,让卷积核沿着输入矩阵的某一个维度移动一个步长到达新的位置,再次进行卷积操作,并把卷积的结果录入到输出矩阵中。如下图所示,经过多次卷积->移动->卷积->移动后卷积核到达输入矩阵的右下角,卷积操作结束。
通过简单的分析可以得到输出矩阵的大小与输入矩阵、卷积核大小以及步长的关系:
其中feature map为输出矩阵, img 为输入矩阵, kernel为卷积核, stride 为步长, w 为矩阵的宽, h 为矩阵的长。
1.4 多通道卷积
对于彩色图像,存在RGB三个通道,则输入图像不再是一个二维矩阵,而是一个三维张量,或者理解为三个二维矩阵叠在一起,分别代表RGB三个通道。这时卷积核也应当相应的升级为张量形式,即一个卷积立方,如下图所示。但操作仍然是类似的,即将输入矩阵与卷积核的重合处相乘再将所有相乘结果累加得到卷积结果。或者仍然用内积的角度理解,将输入矩阵的覆盖处拉成向量(27*1),将卷积核拉成向量(27*1),两个向量的内积即为卷积结果。
1.5 池化(Pooling)
池化又称下采样,常用来对输入的图像进行压缩,减少输出的总像素。
常用的Pooling方法有如下两种,如下图所示
( 1 )最大池化(MaxPooling): 取Pooling 窗口的最大值作为Pooling 特征。
( 2 )均值池化(MeanPooling):取Pooling 窗口的均值作为Pooling 特征。
2. 基本算法
2.1前向传播
其中p,q为卷积核的行数与列数
2.2 反向传播
平均池化,每个单元具有相同的偏导
最大池化,每个单元内一个偏导直接传递,其余为零。
一层卷积,将输入矩阵、卷积核、输出矩阵拉成向量类比全连接层即可得到
卷积层+卷积层
卷积层+全连接层
3. 网络结构
构成:由多个卷积层和下采样层构成,后面可连接全连接网络
卷积层:𝑘个卷积核
下采样层:采用 mean 或 max
4. 典型网络
4.1 LeNet
• 输入层: LeNet5 网络的输入为32 × 32 大小的图像,比MNIST 数据集的图片稍微大一些。
• C1 层( 卷积层):使用6 个大小为5 × 5 的卷积核对输入图像进行卷积操作,卷积后得到的特征图尺寸为28 ,因此产生6 个大小为28 × 28 的特征图。
• S2 层( Pooling 层):这里采用Max Pooling 操作, Pooling 窗口大小为2 × 2 。经过Pooling 层后得到6 个14 × 14 的特征图,作为下一层的输入。
• C3 层(卷积层):使用16 个大小为5 × 5 的卷积核对输入的特征图进行卷积操作。值得注意的是, C3 中输出的特征图是S2 中的特征图进行加权组合得到的。输出为16 个10 × 10 的特征图。
• S4 层( Pooling 层):同样采用Max Pooling 操作, Pooling 窗口大小为2 × 2 。最后输出16 个5 × 5 的特征图,神经元个数为400 ( 16 × 5 × 5 )。
• C5 层(全连接层):该层可以理解对S4 层产生的特征向量进行拉伸,每一个像素代表一个神经元,使用全连接操作输出特征为120 个神经元。同样可以当作使用120 个大小为5 × 5 的卷积核对输入的特征图进行卷积操作(没有进行Padding 操作),这样C5 层的输出120 个特征图大小变为5-5 + 1 = 1 。
• F6 层:该层与C5 层进行全连接,输出特征为84 个神经元。
• 输出层:该层与F6 层全连接,输出长度为10,代表所抽取的特征属于哪个类别。例如特征向量[0,0,0,0,0,1,0,0,0,0], 1 在索引位置5 ,故该特征向量表示输入的图片属于第5 个分类。
4.2 AlexNet
AlexNet的创新点:
(1)使用ReLU 函数作为激活函数:降低了Sigmoid 激活函数的计算量,并且有效地避免了过度拟合和梯度消散等问题,提高了卷积神经网络的预测准确率。
(2)使用Dropout 技术: 在训练期间选择性地去掉不重要的神经元,避免卷积神经网络模型过度拟合。
(3)引入Max Pooling 下采样操作:减少网络参数的同时,提高预测准确率。
(4)利用双GPU 架构: 大大减少了模型训练时间。
AlexNet结构:
如图所示为AlexNet 的网络模型,其网络架构一共有5 个卷积层、3 个maxpooling 层、2 个全连接层(值得注意的是三、四卷积层后没有Pooling 层),其输入矩阵为3 × 224 × 224 大小的三通道彩色图像。
• 输入层( Input ):输入为3 × 224 × 224 大小图像矩阵。
• 卷积层( Conv1 ): 96 个11 ×11大小的卷积核(每个GPU 上48 个卷积核) 。
• Pooling 层( Pool1): Max Pooling 窗口大小为2 × 2, stride=2 。
• 卷积层( Conv2 ): 256 个5 × 5 大小的卷积核( 每个GPU 上128 个卷积核)。
• Pooling 层( Pool2): Max Pooling 窗口大小为2 × 2, stride=2 。
• 卷积层( Conv3): 384 个3 × 3 大小的卷积核(每个GPU 上各192 个卷积核)。
• 卷积层( Conv4): 384 个3 × 3 大小的卷积核( 每个GPU 上各192 个卷积核) 。
• 卷积层( Conv5): 256 个3 × 3 大小的卷积核(每个GPU 上各128 个卷积核) 。
• Pooling 层( Pool5): Max Pooling 窗口大小为2 × 2, stride=2 。
• 全连接层(FC1 ):第一个全连接层,将第五层Pooling 层的输出连接成为一个一维向量作为该层的输入,输出4096 个神经节点。
• 全连接层(FC2 ):第二个全连接层,输入输出均为4096 个神经节点。
• Softmax 输出层:输出为1000 个神经节点,输出的每个神经节点单独对应图像所属分类的概率。因为在Image Net 数据集中有1000 个分类,因此设定输出维度为1000 。