深度学习 第四章 卷积神经网络

深度学习入门视频-唐宇迪 (笔记加自我整理)

深度学习 第四章 卷积神经网络

1.卷积特征提取

       卷积神经网络,输入数据主要是图片,图片数据是以像素的形式存储的,把每个像素点存储在计算机中。一般图片分为3个维度,长、宽、高,长和宽比较好理解,就是图片的大小,高的话是指图片存储通道,图片采用RGB通道存储,和绘画中的色彩相类似,比如色彩三原色红黄蓝,其他颜色都是由这三种颜色组合调整出来的,比如青色;图片也是一样,是采用RGB红绿蓝三种通道存储的,三个通道组合就成了我们最后能看到的图片的颜色了,所以图片的高度是3。

   卷积神经网络的核心操作就是卷积层,采用过滤器将图片的主要特征抽取出来,再进行处理,一般会对图片进行多次抽取。最简单的结果就是下图,包含一层卷积层,顺序输入分别是输入层、卷积层(**函数relu)、池化层、全连接层。

  • 组成:输入层-卷积层-**函数-池化层-全连接层

深度学习 第四章 卷积神经网络

  • 卷积层:

     从上图粉色方框到蓝色方框,就是一次卷积,卷积是把原来的图片分成多个小块,每一个小块都是一个矩阵,从每一个矩阵中抽取出一个数值,用来代表整个小块的主要特征,原来切分的所有小块抽取出的数值可以组合成一个矩阵,就是最终输出的卷积层数据。

  • 每个小区抽取出一个值,用来代表该区,注意是数值,不是矩阵
    • 先把图像分成很多小区
    • 每个小区找出一个值,代表该区,即主要特征
    • 把所有值组合起来

            深度学习 第四章 卷积神经网络

         

  • 抽取过程

    假设输入的图片是32*32*3,注意这里图片高度3是固定不可变的,采用过滤器来提取图片特征,这个过滤器指定位5*5*3,注意过滤器的高度3不是随意指定的,和要提取的数据的高度一定要保持一致,长度和宽度5可以自己定义。如果采用一个过滤器器,最后会得到一个矩阵,如果采用多个过滤器,每一个过滤器代表一种特征提取方式,会产出多个矩阵,有多少个过滤器输出多少个图片矩阵,即输出层的高度是多少。

    这里第一张图片中采用了两个过滤器,卷积之后得到两个矩阵,输出的高度是2;第二张图中采用了6个过滤器,卷积之后得到6个矩阵,输出的高度是6。每个过滤器的大小都是5*5*3的,可以理解为是5*5*3的三维矩阵,但是不同的过滤器中的参数是不同的,也就是三维矩阵各位的值是不同的,所以才能提取出不同组合的矩阵。

   注意区别过滤器的高度、过滤器的个数、不同过滤器的参数。

  • 说明
    • 特征输入是32*32*3,即上一层的高是3,那么下一层用来抽取的过滤器的高也要是3,要保持一致,过滤器的长和宽可以自己指定,一般长和宽都会相同;
    • 每个过滤器是一种特征变换,多个过滤器多种变换,最终是多种组合

          深度学习 第四章 卷积神经网络

         深度学习 第四章 卷积神经网络

 

2.卷积计算流程

    下面的例子输入图片是7*7*3, 注意图片输入的高度3是固定的,图片采用RGB通道存储,这里采用两个过滤器w0和w1,每个过滤器都是3*3*3的,注意过滤器w0和w1三维矩阵中对应的各位是不同的。由于采用2个过滤器,卷积之后输出的图片的高度也是2,注意高度的对应关系。

    深度学习 第四章 卷积神经网络

    首先对于过滤器w0来说,输入图片被划分成不同的区域,过滤器的长和宽就是我们划分输入图片的标准,这里可以看到图片第一块是蓝色表格圈住的3*3*3的矩阵,图片对应三个通道,分别和过滤器对应三维矩阵对应相乘,图片第一个通道的3*3矩阵和过滤器w0第一个通道的3*3矩阵,对应位置相乘再相加得到一个值s1=0*1+0*1+0*1+0*-1+1*-1+1*0+0*-1+1*1+1*0=0,也就是矩阵的点乘,然后再计算图片对应第二个通道也就是第二个矩阵和过滤器w0的第二个矩阵点乘,得到值s2=2;同样图片第三个通道对应的第三个矩阵和过滤器w0对应的第三个矩阵点乘,得到值s3=0,注意每个过滤器都会有一个偏置项b0,将得到的三个值和偏置项相加,得到最终结果s=0+2+0+1=3,这就是图片这块区域经过过滤器w0提取到的特征值。

     仍然是采用过滤器w0, 这里设定的步长是2,图片移动一次会移动两个格,所以这次采集图片的区域从上图变成了下图,注意区别,还是相同的计算方式,该小块经过矩阵的点乘得到结果和偏置项之和,结果为-5。图片是5*5*3大小,步长是2,那么对于每一行来说,图片可以移动两次,可以提取三个小块,对于每一个列来说,图片步长是2,仍然是可以移动两次,提取三个小块,一共会划分成9个3*3的小块,每个小块计算一个特征数值,这个9个小块是由行3列3组成的,加上采用了两个过滤器w0和w1,最终输出的结构是3*3*2。

      过滤器w1和过滤器w0计算方式一样,将图片划分成同样的小块,图片输入大小是3*3,也是9个小块,只是过滤器w1对应的三维矩阵值不同,注意区分。

   深度学习 第四章 卷积神经网络

  • 过滤器有两个w0和w1,是提取不同的特征,所以输出的高是2;
  • 图片计算是点乘,是节选的图片矩阵和过滤器矩阵相同位置相乘,结果相加,再加上偏置项得到。
  • 过滤器会沿着一定的长度移动,移动一次截取新的图片区域,重新计算该区域提取出来的结果,注意每一个区域会分别和过滤器点乘,有多少个过滤器,输出多少个结果,每个过滤器输出的都是一个数值。
  • 过滤器w0得到的数值: 图片第一个通道* w0第一个通道 + 图片第二个通道*w0的第二个通道+ 图片第三个通道 * w0第三个通道+w0的偏置项
  • 过滤器w1得到的数值:图片第一个通道* w1第一个通道 + 图片第二个通道*w1的第二个通道+ 图片第三个通道 * w1第三个通道+w1的偏置项

3.卷积层计算参数

       上图可以看到图片矩阵是7*7*3的矩阵,怎么图片输入说成是5*5*3的矩阵,不知道你是否注意到图片外层一圈灰色部分都是0,其实这是采用了外层0填充,真正输入图片的大小就是5*5*3。为什么采用外层用0填充,原因在于图片会切分成不同的小块,分别和过滤器计算数值,对于边界的像素点的值来说,如果不填充0,该点只能出现在一个区域中或者几个少量的区域中,而中间位置的像素,可以出现在多个小块中,这样会人为对中间的像素进行了加权,中间位置像素出现在多个小块中,程序会默认中间位置的像素更加重要,和我们期望的所有像素点输入公平是不符合的,所以需要外层填充数值,让所有像素点出现的次数是公平的。

      那么为什么采用0来填充,0和任何数相乘都等于0,不会引入额外的信息,所以采用0来填充。这里还有个默认的技巧就是前冲多少层,像上图填充一圈0视为1层,一般过滤器采用3*3的长和宽,图片外层填充1圈;过滤器采用5*5的长和宽,图片外层填充2圈;过滤器采用7*7的长和宽,图片外层填充3圈。    

  • 方法:外层0填充
    • 如果不填充,图片按照一个区域一个区域的提取特征,对于边界的像素点来说,只能出现在一个区域中,而中间的像素点可以出现在多个区域中,对边界像素点不公平
    • 像素点被计算多次,默认会觉得这个像素点比较重要,那么相当于人为的给边缘的像素点做了一些降权的处理,但是正确的应该是所有位置的像素点是公平输入的,至于哪个点重要是模型学习出来的。
  • 过滤器切分图片

       深度学习 第四章 卷积神经网络

      输入图片应该切分成多少小块,和输入图片大小,过滤器大小,步长,以及边缘填充几层都有关系,比如输入图片是32*32*3, 如果过滤器是5*5*3,步长是1,边界填充是2,根据公式输出的长为 (32+2*2-5)/1 + 1 =32 ,一般我们默认输入的图片长和宽是相等的,过滤器也采用长和宽相等的格式,虽然上面的输出虽然是32,但是经过卷积之后得到输出层的图片矩阵,规格相同,但是矩阵中的数值是不同的。

      这也说明卷积神经网络经过过滤器过滤,不仅可以将图片的矩阵压缩提取主要特征,也可以输出相同大小的图片,甚至可以输出为更长更宽的图片矩阵,也叫反卷积。

    • 输入图片大小是 W1 * H1 * D1
    • 需要指定参数:
      • 过滤器filter个数K,
      • 过滤器filter大小 F,
      • 过滤器的步长S(下一步走几个格),
      • 边界填充P(外层填充几圈)
    • 输出:
      • W2= (W1-F+2P)/ S+1 
      • H2 = (H1-F+2P) / S +1
      • D2 = K 
    • 注意:一般过滤器器都是正方形,即长和宽相等,图片一般也是正方形,长和宽相等。
    • 步长越大,能提取到的特征越少,计算量越少
  • 参数的数量:

          神经网络和卷积神经网络最大的区别,就是卷积层使用的过滤器,对于同一个图片,采用同一个卷积对同一个图片进行处理,不管图片是32*32*3,还是64*64*3,过滤器的参数不变,假如过滤器是5*5*3,那么这个三维矩阵值的个数是5*5*3=75,每个过滤器还要加上一个偏置项,该过滤器的参数就为76个,也就是这层变化的参数个数;而神经网络是全连接,上层神经元和下层神经元是两两连接,参数个数和上层大小和下层大小相关,数据量非常大。这就是为什么卷积神经网络采用过滤器,而不是采用传统的全连接方式。

     卷积神经网络虽然采用小小的过滤器,但是多层卷积的效果很好,所以卷积神经网络多用于处理图片视觉方面,参数少

  •  
    • 正常神经网络是全连接,每一层的连接上一层神经元个数*下一层神经元个数,总参数为所有层间参数之和
      • 300*300*128
    • 卷积神经网络,过滤器filter作为公共工具,是参数共享的,总参数数量和输入图片无关
      • 过滤器:5*5*3 + 1 = 76  每个过滤器参数+对应偏置项
      • 过滤器:76*10 =760 10种过滤器,10组参数

4.池化层

       一般卷积之后还会对图片进行压缩,也就是池化,这层主要是对图片再进行一次压缩,因为图片往往很大,图片大需要大量的存储空间和大量的计算,所以对图片进行压缩,提高整体训练的速度。一般会对长和宽进行同样的压缩,下图就是长压缩一半,宽压缩一半,整体存储压缩为原来的1/4。

    一般池化采用两种方式,一个是取最大值,一个是取区域的平均值。池化也是采用过滤器将输入的图片划分区域,和卷积的划分类似。从池化层划分的每一个区域,提取一个数值来代表该区域,最大值策略则取该区域的最大值,平均值策略则取该区域的平均值,现在普遍采用最大值策略,最大值更能代表该区域的特征,而且计算量也少。

  • 作用:压缩,这一层没有参数,下采样操作,提速

深度学习 第四章 卷积神经网络

  • 方法:
    • MaxPooling ,每个块区域选择一个最具代表性的值,这里用最大值,现在基本上都使用该方法
    • AvgPooling, 每一块区域选择一个最具代表性的值,这里用平均值

深度学习 第四章 卷积神经网络

5.卷积网络整体架构

       下图是一个卷积神经网络的例子,给定一个图片,预测图片表示的是什么。卷积神经网络比较常用的套路是卷积层一定要接**函数relu,多层卷积后接一个池化层压缩数据,对于卷积+**函数+....+池化层,视为一个循环,一般都会采用多个循环,每个循环内的结构和参数一样的(比如这里的是卷积relu+卷积relu+池化),最后会接入全连接层,通过softmax分类器预测输入图片是多分类中的哪一类。注意的是接入全连接层之前,图片是三维的,需要拉平拉成一维,再接入全连接层。

  • 先进行多层的卷积+Relu去线性,然后再进行池化,作为一个循环
  • 卷积在输入和输出的全连接层之间,一般会接多个循环,每个循环中的结构一样的,参数也相同

深度学习 第四章 卷积神经网络

6.经典网络

    卷积神经网络有两个比较经典的模型,一个是AlexNet,一个是VGGNet。一般对于深度学习的模型,通常会采用已经发表的验证效果比较好的模型,很少自己定义模型,比如自己指定多少层,每层大小多少,因为神经网络本身就很难解释,如果自己定义的话更难确定定义的大小层数是否合适,一般公开发表而且业界常用的模型是人家经过实验调整到合适的参数,站在巨人的肩膀上,直接拿来用。

    AlexNet是最早出现的卷积神经网络,一般池化层不计入层数,层数只计算卷积层和全连接层,所以AlexNet用的是8层网络,5层卷积+3层全连接。AlexNet最大的问题在于,第一层卷积提取特征的时候,采用的过滤器是11*11,步长是4,过滤器和步长都太大,这种方式会在最初提取时导致很多特征数据的丢失,不管后面再多层计算会降低准确率。

  • AlexNet

深度学习 第四章 卷积神经网络

   VGGNet的最大优点是,卷积层的过滤器只采用3*3,步长为1,填充为1,池化层只采用最大值策略,大小为2*2,步长为2。卷积层采用该大小过滤器的好处是输入和输出的长和宽相同,卷积层大小不变,池化层大小减半,作为补偿,每次卷积池化后,采用翻倍的过滤器个数翻倍,提取更多的特征。

  • VGGNet

深度学习 第四章 卷积神经网络