深度学习(DL)-- CNN卷积神经网络算法详解

    卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层子采样层(池化层)构成的特征抽取器。

    在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接。在CNN的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。共享权值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。

    子采样也叫做池化(pooling),通常有均值子采样(mean pooling)和最大值子采样(max pooling)两种形式。子采样可以看作一种特殊的卷积过程。卷积和子采样大大简化了模型复杂度,减少了模型的参数。
    积神经网络CNN(Convolutional Neural Network)可以应用于语音识别、图像处理和图像识别等领域。

1、卷积神经网络的架构

    深度学习(DL)-- CNN卷积神经网络算法详解
    如上图所示,卷积神经网络架构与常规人工神经网络架构非常相似,特别是在网络的最后一层,即全连接。此外,还注意到卷积神经网络能够接受多个特征图作为输入,而不是向量。

    深度学习(DL)-- CNN卷积神经网络算法详解
    下面让我们探索构成卷积神经网络的基本构件及相关的数学运算过程,并根据在训练过程中学到的特征和属性对图像进行可视化和分类。

2、输入层(Input Layer)

    输入层主要是n×m×3 RGB图像,这不同于DNN神经网络,DNN神经网络的输入是n×1维的矢量。

3、卷积层(Convolution Layer)

    在卷积层中,计算输入图像的区域和滤波器(卷积核)的权重矩阵之间的点积,并将其结果作为该层的输出。滤波器将滑过整个图像,重复相同的点积运算。这里注意两件事:

  • 滤波器必须具有与输入图像相同数量的通道;
  • 网络越深,使用的滤波器就越多;拥有的滤波器越多,获得的边缘和特征检测就越多;

    深度学习(DL)-- CNN卷积神经网络算法详解
    深度学习(DL)-- CNN卷积神经网络算法详解

  • 上图有RGB三个颜色通道,则对应的filter过滤器也是三维的,图像经过每个filter做卷积运算后都会得到对应提取特征的图像,途中两个filter:W0和W1,输出的就是两个图像

  • 这里的步长stride2(一般就取2,3)

  • 在原图上添加zero-padding,它是超参数,主要用于控制输出的大小

  • 同样也是做卷积操作,以下图的一步卷积操作为例:
    与w0[:,:,0]卷积:0x(-1)+0x0+0x1+0x1+0x0+1x(-1)+1x0+1x(-1)+2x0=-2
    与w0[:,:,1]卷积:2x1+1x(-1)+1x1=2
    与w0[:,:,2]卷积:1x(-1)+1x(-1)=-2
    最终结果:-2+2+(-2)+1=-1 (1为偏置)

    深度学习(DL)-- CNN卷积神经网络算法详解

  • 卷积层输出的尺寸:

    输出宽度
        深度学习(DL)-- CNN卷积神经网络算法详解
    输出高度
        深度学习(DL)-- CNN卷积神经网络算法详解
        其中:
            W :输入图像的宽度

         H :输入图像的高度

        Fw :滤波器或内核的宽度

        Fh :滤波器的高度

        P :填充

        S :移动步幅

  • 卷积层输出的通道数等于卷积操作期间使用的滤波器的个数。

  • 为什么选择卷积?

    为什么要首先使用卷积操作?为什么不从一开始就展开输入图像矩阵?在这里给出答案,如果这样做,我们最终会得到大量需要训练的参数,而且大多数人都没有能够以最快的方式解决计算成本高昂任务的能力。此外,由于卷积神经网络具有的参数会更少,因此就可以避免出现过拟合现象。

4、池化层(Pooling Layer)

    池化层也叫下采样层,其具体操作与卷基层的操作基本相同,只不过下采样的卷积核为只取对应位置的最大值、平均值等(最大池化、平均池化),并且不经过反向传播的修改。

    目前,有两种广泛使用的池化操作——平均池化(average pooling)和最大池化(max pooling),其中最大池化是两者中使用最多的一个操作,其效果一般要优于平均池化。池化层用于在卷积神经网络上减小特征空间维度,但不会减小深度。当使用最大池化层时,采用输入区域的最大数量,而当使用平均池化时,采用输入区域的平均值。

    深度学习(DL)-- CNN卷积神经网络算法详解

  • Pooling的方法中average方法对背景保留更好,max对纹理提取更好
  • 深度学习可以进行多次卷积、池化操作
  • 为什么要池化?

    池化层的核心目标之一是提供空间方差,这意味着你或机器将能够将对象识别出来,即使它的外观以某种方式发生改变。

5、**层(也称:非线性层(Non-linearity Layer))

  • 在每次卷积操作之后一般都会经过一个**层,也称非线性层

  • 现在一般选择是ReLu,层次越深,相对于其他的函数效果较好,还有Sigmod,tanh函数等

    如图,ReLU**函数:

    深度学习(DL)-- CNN卷积神经网络算法详解

6、全连接层(Fully Connected Layer)

    基本上全连接层的部分就是将之前的结果平坦化之后接到最基本的神经网络了。
    在全连接层中,我们将最后一个卷积层的输出展平,并将当前层的每个节点与下一层的另一个节点连接起来。全连接层只是人工神经网络的另一种说法,如下图所示。全连接层中的操作与一般的人工神经网络中的操作完全相同:

深度学习(DL)-- CNN卷积神经网络算法详解
深度学习(DL)-- CNN卷积神经网络算法详解
深度学习(DL)-- CNN卷积神经网络算法详解

7、反向传播(Backpropagation)

    上面讨论的层和操作都是每个卷积神经网络的核心组件,现在已经讨论了卷积神经网络在前向传播中经历的操作,下面让我们跳转到卷积神经网络在反向传播中经历的操作。

(1)全连接层:

    在全连接层中,反向传播与任何常规人工神经网络完全相同,在反向传播中(使用梯度下降作为优化算法),使用损失函数的偏导数即损失函数关于权重的导数来更新参数,其中我们将损失函数的导数与**输出相乘,**输出的导数与非**输出相乘,导数为未**的输出与权重相对应。

    反向传播数学表达式如下:

    深度学习(DL)-- CNN卷积神经网络算法详解
    深度学习(DL)-- CNN卷积神经网络算法详解
    在计算梯度之后,我们从初始权重中减去它以得到新的优化:

    深度学习(DL)-- CNN卷积神经网络算法详解
    其中:

        θi+ 1 :优化的权重

        θi:初始权重

        α :学习率

        ∇J(θi):损失函数的梯度

    深度学习(DL)-- CNN卷积神经网络算法详解
    在下面的动态图中,是将梯度下降应用于线性回归的结果。从图中可以清楚地看到代价函数越小,线性模型越适合数据。

    深度学习(DL)-- CNN卷积神经网络算法详解
    此外,请注意一点,应该谨慎地选择学习率的取值,学习率太高可能会导致梯度超过目标最小值, 学习率太低可能导致网络模型收敛速度变慢。

    深度学习(DL)-- CNN卷积神经网络算法详解
    在所有优化任务中,无论是在物理学、经济学还是计算机科学中,偏导数都被大量使用。偏导数主要用于计算因变量f(x, y, z)相对于其独立变量之一的变化率。例如,假设你拥有一个公司的股份,后者的股票会根据多种因素(证券、政治、销售收入等)上涨或下跌,在这种情况下通过偏导数,你会计算多少股票受到影响而其他因素保持不变,股票发生变化,则公司的价格也会发生变化。

(2)池化层(Pooling Layer):

    在最大池化特征图层中,梯度仅通过最大值反向传播,因此稍微更改它们并不会影响输出。在此过程中,我们将最大池化操作之前的最大值替换为1,并将所有非最大值设置为零,然后使用链式法则将渐变量乘以先前量以得到新的参数值。

    深度学习(DL)-- CNN卷积神经网络算法详解
    与最大池化层不同,在平均池化层中,梯度是通过所有的输入(在平均合并之前)进行传播。

(3)卷积层(Convolution Layer)

    你可能现在问自己,如果卷积层的前向传播是卷积,那么它的反向传播是什么?幸运的是,它的向后传播也是一个卷积,所以你不必担心学习新的难以掌握的数学运算。

    如图,卷积层反向传播:

    深度学习(DL)-- CNN卷积神经网络算法详解
    其中:

        ∂hij:损失函数的导数

        深度学习(DL)-- CNN卷积神经网络算法详解
    简而言之,上图表明了反向传播是如何在卷积层中起作用的。