卷积神经网络-卷积神经网络

一、计算机视觉

《卷积神经网络-卷积神经网络》 计算机视觉应用

  深度学习的进步带来了计算机视觉领域的长足发展,深度学习已经在很多计算机视觉应用中发光发彩,比如图片分类、物体识别和图片风格迁移。

《卷积神经网络-卷积神经网络》 图片运算

   我们前面学到的例子中,运用了一张64×64像素的图像,加上RGB通道一共有12288个特征输入。这还是一张比较小的图片,当我们遇到1000×1000像素的图片时,输入特征达到3百万个,假设第一层隐藏层的神经元个数为1000,那么w[1]维度是(1000,3m),矩阵元素个数达到3 billion。这样的图片处理所需要的内存是巨大的。

  我们希望既能处理小图片,也能够处理大图片,这时就需要卷积运算,卷机运算是卷积神经网络的基础。

二、边缘检测示例

  如果利用深度学习解决人脸识别的问题,深度学习模型一般会做边缘检测、局部特征识别和完整特征识别。

《卷积神经网络-卷积神经网络》 人脸识别

  如图中一张图片为例,边缘检测一般需要检测竖直边缘和水平边缘,那这样的检测是如何实现的呢?

  答案是运用卷积运算。

《卷积神经网络-卷积神经网络》 卷积运算

  图中包含三个矩阵。左边待处理的图片矩阵维度是(6,6),中间的(3,3)矩阵称为边缘检测的“过滤器”,它们进行卷积运算后得到的结果是一个(4,4)的矩阵。计算结果矩阵的第一个元素方法是将过滤器矩阵套入原矩阵第一个能套入的位置,对应项进行乘积运算后相加获得第一个元素数值。

《卷积神经网络-卷积神经网络》 卷积运算

  在数学理论中,×代表乘积运算,*代表卷积运算,这可能和计算机中符号使用存在冲突,要注意辨析。python中可利用conv-forward函数或tensorflow中tf.nn.conv2d函数计算。

《卷积神经网络-卷积神经网络》 竖直边缘检测

  为什么这样的卷积计算能识别出边缘。以上图为例,观察原矩阵可以看出中间存在一条明显的竖直边缘。原矩阵代表一张左白右灰的图片(此处以正数为白,负数为黑,0为灰)。竖直过滤器矩阵代表一张白灰黑相间的图片。

  卷积计算能够通过结果竖直得到存在边缘的可能性。结果举证的白色区域代表这其中包含边缘。

   个人理解的卷机运算:过滤器是一个存在边缘的示例,得到结果矩阵中每一个元素的卷积运算都是在将原矩阵一小块和过滤器矩阵进行类比,看是否存在类似的矩阵。数值为0就是不存在边缘,数值大小代表存在边缘的程度。

  可能图中例子让我们觉得检测到的边缘太宽了,我们希望得到更明晰的边缘。原矩阵只代表一张像素为6×6的图片,当图片矩阵变大时,边缘就会更明显。

三、更多边缘检测内容

  前面一小节中,我们可以通过卷积运算的结果矩阵的数值获悉哪里存在边缘(有数值的地方存在边缘,为0的地方不存在边缘),那么结果矩阵中正数和负数又有什么区别呢?

《卷积神经网络-卷积神经网络》 结果矩阵数值正负

  结果矩阵中,有数值(非0)的地方就代表存在边缘。上方的原图形是一个由明到暗的图像,与由明到暗过滤器进行卷积运算,得到的正数代表此处边缘是由明到暗的。上方的原图形是一个由暗到明的图像,与由明到暗过滤器进行卷积运算,得到的负数代表此处边缘是由暗到明的。

  反转过滤矩阵,上图中结果矩阵边缘是负数,下图中结果矩阵边缘是正数。

  所以结果矩阵边缘如果是正数,代表着边缘的变化与过滤矩阵明暗变化相同;结果矩阵边缘如果是负数,代表着边缘的变化与过滤矩阵明暗变化相反。

《卷积神经网络-卷积神经网络》 垂直和水平边缘检测

  水平的边缘检测过滤器其实就是竖直过滤器顺时针转动90°。

《卷积神经网络-卷积神经网络》 过滤器矩阵权重

  当然,过滤器矩阵中权重的分布不一定一定是1、-1这样死板,学术领域提出了许多其他权重的过滤器,比如中间的叫作Sobel filter,右边的叫作Scharr filter。

  不同的权重会影响识别的边缘,你可能想辨析竖直边缘、水平边缘、45°边缘、70°边缘,这些可以根据不同权重的设置实现。

  也可能你的应用需要的权重并不一定来自学术论文,将过滤器每个元素当做参数,在深度学习反向反馈阶段不断修正,也许能获得更有效的过滤器权重。

四、Padding

  卷积神经网络中,一个需要学习的很重要知识点就是padding填充。

《卷积神经网络-卷积神经网络》 Padding

  前面我们学过了卷积运算,发现原矩阵(图像)与过滤器进行卷积运算之后,得到的是一个较小的矩阵。假设原图像矩阵维度是(n,n),过滤器矩阵维度是(f,f),经过计算后的结果矩阵维度为(n-f+1,n-f+1)。

  进行卷积运算有两个缺点:1.图像矩阵会越来越小。每经过一层处理,图像矩阵就缩小一层,假如我们有100层隐藏层神经,处理的矩阵维度最后会变得无法处理,这是我们不希望看到的。2.会降低边缘点的影响。例如图像矩阵最左上方的一个元素,在所有的卷积运算中它只会被用到一次,这就弱化了和它一样的边缘点的影响。

  为了解决这两个问题,可以使用填充Padding技术。在原图像矩阵周围填充元素,使得经过卷积运算的结果矩阵是我们想要的维度。p = padding的层数,填充元素的数值默认为0.

  当p=1时,图中原图像的维度从(6,6)变成(8,8),与(3,3)的过滤器进行卷积运算后得到的结果矩阵维度为(6,6)。此时结果矩阵的新维度公式是(n+2p-f+1,n+2p-f+1)。

《卷积神经网络-卷积神经网络》 Valid和Same convolutions

 至于填充多少像素,有两种典型的选择:

    1.Valid convolution:即不填充的卷积运算。结果矩阵维度是(n-f+1,n-f+1)。

    2.Same convolution:即填充的卷积运算,顾名思义是为了让输出矩阵的维度和输入矩阵的维度相同。为了让n+2p-f+1 = n , 我么可以得到p = (f-1) / 2。

  f通常取奇数,一般认为有两个原因:1.f取奇数可以让p为一个整数,填充的元素相互对称,如果左边加1个元素右边加2个元素,会造成矩阵不对称。2.f取奇数可以让过滤矩阵有一个中心元素,一般在图像处理中有中心元素便于指出过滤器的位置。

五、卷积步长

  卷积步长Strident也是卷积神经网络中一个重要的概念。

《卷积神经网络-卷积神经网络》 卷积步长

  不同于前面例子中的每次移动一格再计算卷积,此时我们移动步长s个单位计算卷积。当s=2时,原矩阵(7,7)经过过滤器矩阵(3,3)卷积运算后得到的结果矩阵维度是(3,3)。此时,我们可以得到新的结果矩阵维度公式。

  原矩阵维度(n,n),过滤器矩阵维度(f,f),填充Padding = p ,步长Stride = s , 结果矩阵的维度是( (n+2p-f)/s+1,(n+2p-f)/s+1 )。如果(n+2p-f)/s不是整数,我们向下取整,因为卷积运算的定义中过滤矩阵在原矩阵中的对应位置不能超过原矩阵的范围,所以只能向下取整,向下取整函数是floor(z)。

《卷积神经网络-卷积神经网络》 互相关与卷积

  在数学教科书中,卷积的定义是现将过滤矩阵在横向竖向方向上进行一次镜像变换,之后再进行卷积运算。数学家通常将省略镜像变换的计算叫作Cross-correlation互相关,但在深度学习领域,这种镜像变换没有什么意义,我们会省略这个步骤,按照惯例,在深度学习文献中,仍然将严格意义上的“互相关”计算称为卷积计算。

六、三维图像卷积运算

  前面我们已经了解到如何在二维图像上进行卷积运算,接下来我们开始了解如何在三维图像上实现卷积运算。

《卷积神经网络-卷积神经网络》 在RGB图像上实现卷积

  一张RGB图像可以看做三维,因为它不但有高度和宽度,还在三个通道上有不同的数值。我们将三维图像的三个参数称为:高度、宽度、通道数量(之所以不称为深度是不想和神经网络的隐藏层深度混淆)。

  如果原图像有三个通道数量,那么相应的过滤器矩阵也应该是对应三个二维过滤器叠加。如图我们维度是(6,6,3)的原图像经过和维度(3,3,3)的过滤器卷积计算后得到的是维度是(4,4)的二维矩阵。

  那么这样的计算是如何实现的呢?

《卷积神经网络-卷积神经网络》 三维卷积计算

  注意图中维度是(3,3,3)的过滤器有27个元素,依旧和原图像中对应的元素乘积运算得到对应的27个值,此时我们将这27个值相加得到结果矩阵中一个元素的结果。

  如果你只想要通道Red上的卷积结果矩阵,可以将过滤器在Red通道上的权重正常设置,Blue和Green通道上的权重赋值为0。

《卷积神经网络-卷积神经网络》 多个边缘

  如果既想要水平边缘也想要数值边缘,则要和两个不同的三维过滤器进行卷积运算。总结来说,原矩阵维度是(n,n,c),过滤器维度是(f,f,c),最终结果是(n-f+1,n-f+1,c’)。这里n是原矩阵宽度和高度,f是过滤器宽度和高度,c是通道数量,c’是过滤器数量。

七、单层卷积网络

  接下来看看如何实现单层卷积网络。

《卷积神经网络-卷积神经网络》 单层卷积网络

 与前面学到的正常神经网络做类比:此时输入的原图像是输入矩阵X , 过滤器是参数矩阵W,在卷积计算结果矩阵上加上一个偏差值b得到Z,对Z进行激活函数运算得到A。

  会发现原图像与过滤器做卷积计算的过程与W和X做矩阵乘法运算相似。

《卷积神经网络-卷积神经网络》 一层上参数数量

  如果有十个过滤器,每个过滤器的维度是(3,3,3),那么这一层上有多少个参数呢。每个过滤器本身有27个元素作为参数,再加上过滤器自身的偏差b,每个过滤器有28个参数。10个过滤器自然是有280个参数啦。

  接下来梳理卷积神经网络中的符号和维度。

《卷积神经网络-卷积神经网络》 符号和维度

  在卷积神经网络的l层上:

    f[l]、p[l]、s[l]、nc[l]分别代表l层上过滤器大小、填充大小、步长和过滤器数目。

    输入是上一层的图像,维度为(nH[l-1],nW[l-1],nc[l-1]);输出是结果图像,维度为(nH[l],nW[l],nc[l])。

    每个过滤器的维度是(f[l],f[l],nc[l-1]);注意到过滤器最后一个维度必须等于输入的最后一个输入,最后一个维度nc[l-1]来自Input(维度为(nH[l-1],nW[l-1],nc[l-1]))。

    激活函数a[l] –>(nH[l],nW[l],nc[l])。

    权重维度是(f[l],f[l],nc[l-1],nc[l])。

    偏差维度是(1,1,1,nc[l])

    A[l] –> m × nH[l] × nW[l] × nc[l]。

八、卷积神经网络示例

  依据前面所学的知识,可以推导一个简单的卷积神经网络如下:

《卷积神经网络-卷积神经网络》 简单卷积神经网络

  图中是一个图片分类器例子。可以看到根据上一小结给出的公式,随着卷积神经网络层数的加深,一般趋势是,宽度和长度逐渐减小,过滤器个数逐渐增加。在最后结果矩阵成为维度(7,7,40)时,将矩阵的元素平滑成一列包含1960个数(7×7×40=1960)的矩阵,之后通过logistic或soft max给出结果。

《卷积神经网络-卷积神经网络》 三种典型类型

  卷积神经网络有三种常见类型的层。第一种是我们前面提过的卷积层,除此之外还有池化层和全连接层,后两者的构造比卷积层简单,却能和卷积层共同构成更强大的卷积神经网络。接下来学习这两层。

《卷积神经网络-卷积神经网络》 池化层

  除了卷积层,卷积神经网络也经常使用池化层来减小特征规模,增加运算速度,同时提高所提取特征的鲁棒性。

  池化层的一种形式是最大化池化层,最大化操作的功能就是只要在任何一个象限内提取到某个特征,它都会保留在最大池化的输出里,最大化运算的实际作用是,如果在过滤器中提取到某个特征,保留其最大值。如果没有提取到这个特征,那么在这个象限中可能也不存在这个特征,那么其中的最大值也还是很小,这就是最大池化的直观理解。

  最大化池化层没有参数只有超参数,所以反向反馈过程不会改变什么。

《卷积神经网络-卷积神经网络》 三维图像池化层

  当图像成为三维的时候,也就是拥有了多层的过滤器,每层过滤器上的最大化池化操作仍然不变。

《卷积神经网络-卷积神经网络》 平均池化层

  不同于最大化池化层,平均池化层是取每个过滤范围中的平均值,只是很少用到。

《卷积神经网络-卷积神经网络》 池化层总结

  总的来说,池化层没有参数,只有超参数f和s,一般不会设置padding超参数,因为池化本质就是希望精化特征。池化层输入的维度如果是(nH , nW, nc),那么输出的维度自然是( floor( (nH-f)/s + 1) , floor( (nH-f)/s + 1) , nc)。

  一般选择是f=2、s=2或f=3、s=2,这样的作用是让长宽减半,这样的设置在解决实际问题中有良好效果,也根据具体问题具体设置。

  接下来介绍一个略微复杂的卷积神经网络例子:

《卷积神经网络-卷积神经网络》 复杂卷积神经网络

  图中例子是一个手写数字识别应用。我们这里的顺序是输入紧接一个卷积层、一个池化层、一个卷积层、一个池化层、两个全连接层、以及一个soft max做输出层。

  有人会将卷积层和池化层分为两层,但理论上认为应该把有权重和参数的层算为一层,因为池化层没有权重和参数,只有超参数,所以一般将池化层和卷积层共计为一层。这里我们用CONV1和POOL1来标识这两层都属于layer 1 。

  当经过Layer 2 处理后,我们得到一个拥有400个元素的单列向量,此时可以利用全连接层将它全连接为一个拥有120元素的单列向量。全连接层有点类似于传统神经网络中的单层神经网络,经过一个维度为(120,400)的权重变换得到全连接的新向量。

  最后通过soft max输出层输出识别结果为0~9的可能性。

  一种经典的卷积神经网络架构是:CONV — POOL — CONV — POOL — FC — FC — FC — SOFTMAX。

《卷积神经网络-卷积神经网络》 示例的维度与超参数数值

  一般选择每一层使用的超参数都不是手工的方法,而是查阅文献看他人的模型是否能用于自己的应用之中,在卷积层、池化层、全连接层的选择上也可以使用这种方法。

九、为什么使用卷积?

  和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀疏连接。

《卷积神经网络-卷积神经网络》 更少的参数

  与普通的全连接神经网络相比,卷积神经网络的参数更少。如图中的例子,卷积神经网络仅有6×(5×5+1)=156个参数,而普通的全连接网络有3072×4704≈14M个参数。

《卷积神经网络-卷积神经网络》 参数共享和稀疏连接

    *参数共享:一个特征过滤器(filter)对图片的一部分有用的同时也有可能对图片的另外一部分有用,可以共享过滤器的参数。

    *连接的稀疏性:在每一层中,每个输出值只取决于少量的输入。

《卷积神经网络-卷积神经网络》 卷积神经网络训练

  在训练卷积神经网络的时候,每一层也都存在参数w和b。像以前一样可以初始化参数,计算成本函数,利用反向传播调整参数,以及用一些优化算法进行梯度下降。

    原文作者:读海明威的狗熊
    原文地址: https://www.jianshu.com/p/9c316341f0df
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞