卷积神经网络

作者: 此间不留白 | 来源:发表于2019-11-15 20:54 被阅读0次

    计算机视觉

    利用神经网络进行图片识别时,通常会将三通道图片转化为一维向量:
    高度×宽度×3,当图片的像素较低时,在神经网络中,可以将整个向量作为神经网络输入。但是,处理高分辨率的图片时,图片的尺寸过于庞大,利用神经网络进行处理,显然是不现实的,为此,需要对图片进行卷积运算。

    卷积运算

    对于卷积的运算如下动态图表示:

    • 定义一个过滤器,一个3×3的矩阵
    • 将过滤器矩阵的对应元素值与原矩阵的对应元素相乘并求和,得到输出矩阵值。
    • 按照行列之间的关系对应移动这个过滤器矩阵。

    以过滤器选定的第一个区域做计算,其计算过程是:
    3*1+0*0+1*(-1)+1*1+5*0+8*(-1)+2*1+7*0+2*(-1)=-5

    利用卷积运算实现边缘检测的过程如下图所示,

    如上所述的矩阵中,像素为10代表代表较为明亮的颜色区域,而像素为0则代表较暗的区域,通过过滤器的卷积运算后,得到一个新的矩阵,中间的区域较边缘区域更为明亮(像素值更大),所以,可以很好的实现一个简单的垂直边缘检测。

    边缘检测

    如上所示的边缘检测中,实现了垂直的边缘检测。可以通过调整过滤器的参数实现水平检测,如下图所示:

    通过调整过滤器,可以检测垂直或者水平的边缘,在计算机视觉中,可以通过调整过滤器的参数不同的组合,可以实现不同的效果,常见的两种过滤器,如下所示:


    (1,2,-1,-2,0)的组合,称之为sobel过滤器,具有更强的鲁棒性,而(3,10,0,-3,-10)的组合称之为Scharr过滤器。

    在深度学习中,目标就是当需要检测复杂图像的边缘时,将过滤器的参数设置为神经网络的参数,希望通过网络的学习,得到较好的参数,能够有效的检测图像的边缘。

    Padding

    构建卷积神经网络时,一个基本的卷积操作数就是Padding,关于Padding,有如下解释:

    以上述例子为例,对一个6*6的像素矩阵,使用一个3*3的过滤器进行卷积运算,就会得到一个4*4的输出矩阵,假设输入矩阵的维度是n×n,而过滤器矩阵的维度是f×f,则卷积后的矩阵维度大小是(n-f+1)×(n-f+1),以深层神经网络为例,随着神经网络层数的增加,每一层的训练将会使得输入矩阵缩小,而我们希望输出矩阵跟输入矩阵有相同的大小,所以需要对输入矩阵进行填充。

    对输入矩阵进行填充时,通常填充的值是0,关于填充大小,有以下两种情况:

    • Valid卷积:Valid意味着不进行填充,通过卷积运算会得到一个(n-f+1)*(n-f+1)的输出矩阵。

    • Same卷积:这种卷积方式,意味着输出矩阵和输入矩阵有相同的大小,假设填充p个像素点,则有如下推导:

    当填充p个像素点时,此时输入矩阵将会变成n+2p

    此时输出矩阵的大下将会变成n+2p-f+1;

    希望输入矩阵和输出矩阵有相同的大小,则有:n+2p+f-1=n,即有:p= \frac{f-1}{2},即为此时的填充大小,可以看出,填充的值是由过滤矩阵的大小决定的。

    注意:在计算机视觉中,通常选择过滤矩阵的大小f为奇数值。

    卷积步长

    上述例子中,卷积步长都是1,在神经网络中,可以对卷积步长做出调整,如下所示,将卷积步长调整为2时,卷积的过程将会如下所示:

    卷积步长发生变化时,输出矩阵的大小也会发生变化,假设卷积步长为s,填充为p,输入矩阵为n×n,而过滤器矩阵大小为f×f,那么输出矩阵的大小的计算方式如下所示:

    \lfloor {\frac{n+2p-f}{s}+1}\rfloor ×\lfloor \frac{n+2p-f}{s}+1\rfloor

    其中,\lfloor \rfloor表示向下取整,因为,我们不能保证以上公式中的除法运算得到的商是整数,需要向下取整,即也就是,希望,在卷积运算时,过滤矩阵能够完整的覆盖到输入矩阵上,而不至于过滤矩阵的一部分超出输入矩阵的大小,而导致运算错误。

    三维卷积

    在图像处理中,如果是彩色的三维图像(RGB三通道),卷积的过程如下图所示:


    此时,过滤器也是一个三维矩阵,计算方法与二维卷积的计算类似,也是将对应元素相乘并相加。以上述图片为例,每次卷积的元素都是27个,最后将这些元素相加起来得到卷积后的元素。

    可以设置不同的过滤矩阵,得到不同颜色卷积边缘,假设,只想检测红色图像的边缘,可以将过滤器矩阵的对应的蓝色通道和绿色通道的数据全部设置为0,红色部分设置为(-1,0,1)组成的矩阵即可。

    除了设置一个过滤卷积矩阵外,还可以设置多个过滤矩阵进行卷积,以两个过滤矩阵进行卷积为例,其实现可以如下图所示;


    整个实现过程就是分别利用两个过滤矩阵对图像进行卷积,最后的输出图像是由卷积后得到的图像组合而得到的。

    由以上过程,可以得到如下规律:

    1. 输入图像的维数是n×n×n_cn_c 代表通道数目)
    2. 过滤矩阵的维数是f×f×n_c(按照惯例,输入图像的通道和过滤矩阵的通道应该一样。)
    3. 最后,会得到一个维数为(n-f+1)×(n-f+1)×n_c^{'},其中n_c^{'}代表过滤矩阵的个数。

    单层卷积网络

    以上图所示的卷积计算过程为例,卷积网络的前向传播过程如下所示:

    • 6×6×3的矩阵作为输入,即令a^{[0]} = x,计算 z^{[1]} = W^{[1]}a^{[0]}+b^{[1]} \tag{1}

    • 如公式(1)所示,这里的参数W^{[1]}代表过滤矩阵的值,而b^{[1]}表示的偏置,利用广播机制,对过滤矩阵的每一个元素都加上偏置参数。

    • 最后利用,激活函数计算得到a^{[1]} = g(z^{[1]}) \tag{2}

    l层为例,总结卷积神经网络的一层(l层)的各种标记,如下所示:

    f^{[l]}:l层过滤矩阵的大小
    p^{[l]}:l层的填充大小
    s^{[l]}:l层的卷积步长
    n_C^{[l]}: 过滤矩阵的通道数量
    l层的输入(即第l-1层的输出):n_H^{[l-1]} × n_W^{[l-1]} × n_C^{[l-1]}

    l层的过滤矩阵的大小:f^{[l]}×f^{[l]}×n_c^{[l-1]}

    l层的参数矩阵W的大小:f^{[l]}×f^{[l]}×n_c^{[l-1]}×n_C^{[l]},即权重参数就是所有过滤矩阵的集合再乘以过滤器的总数量。

    偏置参数b^{[l]}的大小为一个1×1×1×n^{[l]}_C的四维向量。

    经过卷积之后,输出图像的维度高度和宽度是:
    n_H^{[l]} ×n_W^{[l]} = \lfloor{\frac{n_H^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}} +1} \rfloor × \lfloor{\frac{n_W^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}} +1} \rfloor
    则第l层的输出矩阵的激活值a^{[l]} = n_H^{[l]}×n_W^{[l]}×n_C^{[l]}

    其中,n_Hn_W分别表示输入图像矩阵的高和宽。最后,若有m个样本,则输出矩阵A^{[l]}的维度大小是m×n_H^{[l]}×n_W^{[l]}×n_C^{[l]}

    池化层

    除了使用卷积层,卷积网络经常使用池化层缩减模型的大小,以提高计算速度,同时提高所提取特征的鲁棒性。以最大池化为例,具体计算的过程如下所示:


    与上述卷积计算不同的是,最大池化的计算是选择过滤矩阵所覆盖部分的最大值作为输出矩阵。数字大意味着可能探测到了某些特定的特征,最大化操作的功能是只要在任何一个区域内提取到某个特征,都会保留在最大化的池化输出里。其直观理解也就是只要在某个区域内提取到这个特征,就保留这个最大值,如果没有提取到这个特征,即使得到的最大值也还是较小。

    此外,池化层没有需要学习的参数,只要确定了卷积步长s和填充p,此计算过程将会是一个固定运算,梯度下降不需要改变任何参数,并且最大池化的输出仍然满足卷积层的输出大小计算公式
    \lfloor{\frac{n+2p-f}{s}+1} \rfloor ×\lfloor{\frac{n+2p-f}{s}+1} \rfloor

    如果参与计算的矩阵是多通道的矩阵,则计算过程需要对每个通道执行最大池化。

    实际运算过程中,很少使用padding 填充,对于多通道图像,则最大池化后的输出大小是:
    \lfloor {\frac{n_H-f}{s}+1}\rfloor ×\lfloor {\frac{n_W-f}{s}+1}\rfloor

    卷积神经网络示例

    一个卷积神经网络的示例,如下图所示,卷积层和池化层构成了神经网络的“层”,最后,在其后连接全连接层和一个softmax输出层。


    随着神经网络深度的加深,高度n_H和宽度n_W都会逐渐减小,而通道数量会增加,最后得到一个全连接层。在卷积神经网络中,一个卷积层和其后的池化层构成了神经网络的一层,因为池化层并不进行参数更新。

    如上图所示的卷积神经网络中,其激活值大小如下表所示,可以看出,随着神经网络的加深,激活值尺寸逐渐变小,如果激活值尺寸下降太快,则会影响神经网络的性能。


    卷积的优势

    与全部使用全连接层的神经网络相比,卷积在神经网络中的两个优势是参数共享和稀疏连接。

    • 参数共享:
      对于图片的特征检测而言,如果过滤矩阵能够检测图片的某一区域,那么该过滤矩阵的参数也能够检测图像的另一区域。以图像的垂直边缘检测为例,直观感受就是,特征检测器既能够检测图片左上角的垂直边缘,也能够检测图片右下角的边缘,即使左上角和右下角的分布可能不同,但是不需要添加其他特征检测器。整张图片共享特征检测器,其提取效果也会很好。

    • 稀疏连接:
      所谓稀疏连接,就是通过过滤矩阵卷积运算后得到的输出值,只与输入矩阵的被卷积运算的部分有关,而不受输入矩阵其他部分元素的影响。

    神经网络通过这两种方法减少参数,以便能够使用更小的训练集进行训练,从而防止过拟合。

    相关文章

      网友评论

        本文标题:卷积神经网络

        本文链接:https://www.haomeiwen.com/subject/lfykictx.html