全卷积神经网络_【卷积神经网络】卷积层,池化层,全连接层

1 卷积层


1.1 概述

首先介绍卷积神经网络的参数。这些参数是由一些可学习的滤波器集合构成的, 每个滤波器在空间上( 宽度和高度) 都比较小, 但是深度和输入数据的深度保持一致。举例来说, 卷积神经网络的第一层卷积一个典型的滤波器的尺寸可以是5×5×3( 宽和高都是5) , 或者是3×3×3( 宽和高都是3) , 这里的宽度和高度可以任意定义, 但是深度必须是3, 因为深度要和输入一致, 而输入的图片是3通道的。在前向传播的时候, 让每个滤波器都在输入数据的宽度和高度上滑动( 卷积) , 然后计算整个滤波器和输入数据任意一处的内积。

当滤波器沿着输入数据的宽度和高度滑动时, 会生成一个二维的激活图, 激活图上的每个空间位置表示了原图片对于该滤波器的反应。直观来看, 网络会让滤波器学习到当它看到某些类型的视觉特征的时候就激活, 具体的视觉特征可以是边界、 颜色、 轮廓、 甚至可以是网络更高层上的蜂巢状或者车轮状图案。

在每个卷积层上, 会有一整个集合的滤波器, 比如20个, 这样就会形成20张二维的、 不同的激活图, 将这些激活图在深度方向上层叠起来就形成了卷积层的输出。

如果用大脑和生物神经元做比喻, 那么输出的3D数据中的每个数据都可以看成是神经元的一个输出, 而该神经元只是观察输入数据中的一种特征, 并且和空间上左右两边的所有神经元共享参数( 因为这些输出都是使用同一个滤波器得到的结果) 。下面介绍卷积神经网络中的神经元连接, 它们在空间中的排列, 以及它们参数共享的模式。

501a35d01672f310b01baf4cd99bae72.png

1.2 局部连接

在处理图像这样高维度输入的时候, 让每个神经元都与它那一层中的所有神经元进行全连接是不现实的。相反, 让每个神经元只与输入数据的一个局部区域连接是可行的, 为什么可以这样做呢?其实这是因为图片特征的局部性, 所以只需要通过局部就能提取出相应的特征。

与神经元连接的空间大小叫做神经元的感受野( receptive field) , 它的大小是一个人为设置的超参数, 这其实就是滤波器的宽和高。在深度方向上, 其大小总是和输入的深度相等。最后强调一下, 对待空间维度( 宽和高) 和深度维度是不同的, 连接在空间上是局部的, 但是在深度上总是和输入的数据深度保持一致。

图4.6形象地展示了感受野在空间和深度上的大小, 左边表示输入的数据, 中间是感受野, 右边每个小圆点表示一个神经元。下面举一个具体的例子来说明一下。比如输入的数据尺寸为32×32×3, 如果感受野( 滤波器尺寸) 是5×5, 卷积层中每个神经元会有输入数据中5×5×3区域的权重, 一共5×5×3=75个权重。这里再次强调感受野深度的大小必须是3, 和输入数据保持一致。比如输入数据体尺寸是16×16×20, 感受野是3×3, 卷积层中每个神经元和输入数据体之间就有3×3×20=180个连接, 这里的深度必须是20, 和输入数据一致。

11d40adb0c92daee0c15114bc748bd51.png

1.3 空间排列

前面介绍了每个神经元只需要与输入数据的局部区域相连接, 但是没有介绍卷积层中神经元的数量和它们的排列方式、 输出深度、 滑动步长, 以及边界填充控制着卷积层的空间排布。

首先, 卷积层的输出深度是一个超参数, 它与使用的滤波器数量一致, 每种滤波器所做的就是在输入数据中寻找一种特征。比如说输入一张原始图片, 卷积层输出的深度是20, 这说明有20个滤波器对数据进行处理, 每种滤波器寻找一种特征进行激活。

其次, 在滑动滤波器的时候, 必须指定步长。比如步长为1, 说明滤波器每次移动1个像素点。当步长为2的时候, 滤波器会滑动2个像素点。滑动的操作会使得输出的数据在空间上变得更小。

最后介绍边界填充, 可以将输入数据用0在边界进行填充, 这里将0填充的尺寸作为一个超参数, 有一个好处就是, 可以控制输出数据在空间上的尺寸, 最常用来保证输入和输出在空间上尺寸一致。输出的尺寸到底是多少呢?其实可以用一个公式来计算, 就是, 其中W 表示输入的数据大小, F 表示卷积层中神经元的感受野尺寸, S表示步长, P 表示边界填充0的数量。比如输入是7×7, 滤波器是3×3, 步长是1, 填充的数量是0, 那么根据公式, 就能得到 , 即输出的空间大小是5×5, 如果步长是2,那么 , 输出的空间大小就是3×3。可以用图4.7所示的这个一维的例子来具体说明。

右上角表示神经网络的权重, 其中输入数据的大小为5, 感受野的大小为3;左边表示滑动步长为1, 且填充也为1;右边表示滑动步长为2, 填充为1。

b9e67e43238681d4208d68180752ebca.png

1.4 零填充的使用

从上面的例子中, 我们看到输入的维度是5, 输出的维度也是5。之所以如此, 是因为感受野是3, 并且使用了1的零填充。如果不使用零填充, 那么输出数据的维度也就只有3, 因为 。一般来说, 当步长S=1时, 零填充的值为P= , 这样就能够保证输入的数据和输出的数据具有相同的空间尺寸。

2 池化层

上一部分介绍完卷积神经网络中最核心的内容——卷积层, 下面来介绍一下第二种层结构——池化层。

通常会在卷积层之间周期性插入一个池化层, 其作用是逐渐降低数据体的空间尺寸, 这样就能够减少网络中参数的数量, 减少计算资源耗费, 同时也能够有效地控制过拟合。

下面先来介绍到底什么是池化层。池化层和卷积层一样也有一个空间窗口, 通常采用的是取这些窗口中的最大值作为输出结果,然后不断滑动窗口, 对输入数据体每一个深度切片单独处理, 减少它的空间尺寸, 如图4.8所示。

0962cc4039598d4e2a25501766c8feb6.png

c7b8ddf63a2947e79af9d5c88c904b74.png

be7f29201930ee5c892b195541a804f9.png

从图4.8能够看出池化层能够有效降低数据体空间的大小, 图4.9形象地说明了窗口大小是2, 滑动步长是2的最大值池化是如何计算
的:每次都从2×2的窗口中选择最大的数值, 同时每次滑动2个步长进入新的窗口。

c271f03275e0a87e95661479f61bc546.png

池化层之所以有效, 是因为之前介绍的图片特征具有不变性, 也就是通过下采样不会丢失图片拥有的特征, 由于这种特性, 我们可以将图片缩小再进行卷积处理, 这样能够大大降低卷积运算的时间。最常用的池化层形式是尺寸为2×2的窗口, 滑动步长为2, 对图像进行下采样, 将其中75%的激活信息都丢掉, 选择其中最大的保留下来, 这其实是因为我们希望能够更加激活里面的数值大的特征, 去除一些噪声信息。

池化层有一些和卷积层类似的性质。

( 1) 输入数据体的尺寸是W1 ×H1 ×D1。

( 2) 有两个需要设置的超参数, 空间大小F 和滑动步长S。

( 3) 输出数据体的尺寸是W2×H2×D2, 其中。

( 4) 对输入进行固定函数的计算, 没有参数引入。

( 5) 池化层中很少引入零填充。

在实际中, 有两种方式:一种是F=3, S=2, 这种池化有重叠;另外更常用的一种是F=2, S=2, 一般来说应该谨慎使用比较大的池化窗口, 以免对网络有破坏性。

除了最大值池化之外, 还有一些其他的池化函数, 比如平均池化, 或者L2范数池化。在实际中证明, 在卷积层之间引入最大池化的效果是最好的, 而平均池化一般放在卷积神经网络的最后一层。

3 全连接层

全连接层 每个神经元与前一层所有的神经元全部连接, 而卷积神经网络只和输入数据中的一个局部区域连接, 并且输出的神经元每个深度切片共享参数。一般经过了一系列的卷积层和池化层之后, 提取出图片的特征图, 比如说特征图的大小是3×3×512, 这个时候, 将特征图中的所有神经元变成全连接层的样子, 直观上也就是将一个3D的立方体重新排列, 变成一个全连接层, 里面有3×3×512=4608个神经元, 再经过几个隐藏层, 最后输出结果。在这个过程中为了防止过拟合会引入Dropout。最近的研究表明, 在进入全连接层之前, 使用全局平均池化能够有效地降低过拟合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值