第七章 卷积神经网络1(理论讲解)


本片文章将讲述卷积 神经网络(Convolutional Neural Network,CNN)。CNN被用于图像识别、语音识别等各种场合,在图像识别的比赛中,基于深度学习的方法几乎都以CNN为基础。

7.1架构

CNN和前面介绍神经网络有很多相似的地方,不同的是CNN中新出现了卷积层(Convolution层)和池化层(Pooling层)。

首先了解一下全连接层:相邻层的所有神经元之间都有连接,在前面的文章中使用的是Affine层实现了全连接层如果使用这个Affine层,一个5层的全连接的神经网络就可以通过下图所示的网络结构来实现。

img

那么如果使用CNN,则网络结构图如下:

img

【注】由上图知,CNN中新增了Convolution层和Pooling层。CNN的层的连接顺序是“Convolution - ReLU -(Pooling)” (Pooling层有时会被省略)。这可以理解为之前的“Affi ne - ReLU”连接被替换成了“Convolution -ReLU -(Pooling)”连接。

另外,靠近输出的层中使用了之前的“Affi ne - ReLU”组合。此外,最后的输出层中使用了之前的“Affi ne -Softmax”组合。这些都是一般的CNN中比较常见的结构。

7.2卷积层

CNN中出现了一些特有的术语,比如填充、步幅等。此外,各层中传递的数据是有形状的数据(比如,3维数据),这与之前的全连接网络不同。

7.2.1优点

在前面使用的全连接层(Affine层),在全连接层中,相邻层的神经元全部连接在一起,输出的数量可以任意决定。

7.2.1.1全连接存在的问题:

数据的形状被忽视,比如,输入数据是图像时,图像通常是高、长、通道方向上的3维形状。但是,向全连接层输入时,需要将3维数据拉平为1维数据。

对于3维形状的图像,这个形状中应该含有重要的空间信息。比如,空间上邻近的像素为相似的值、RBG的各个通道之间分别有密切的关联性、相距较远的像素之间没有什么关联等,3维形状中可能隐藏有值得提取的本质模式。但是,因为全连接层会忽视形状,将全部的输入数据作为相同的神经元(同一维度的神经元)处理,所以无法利用与形状相关的信息。

7.2.1.2卷积的优点:

卷积层可以保持形状不变。当输入数据是图像时,卷积层会以3维数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。

在CNN中,有时将卷积层的输入输出数据称为特征图(featuremap)。其中,卷积层的输入数据称为输入特征图(input feature map),输出数据称为输出特征图(output feature map)。

7.2.2卷积运算

卷积层进行的处理就是卷积运算,卷积运算就相当于图像处理中的"滤波器运算",下面举例来说明。

img

【注】img表示卷积运算,

在这个例子中,输入数据是有高长方向的形状的数据,滤波器也一样,有高长方向上的维度。假设用(height, width)表示数据和滤波器的形状,则在本例中,输入大小是(4, 4),滤波器大小是(3, 3),输出大小是(2, 2)。另外,有的文献中也会用“”这个词来表示这里所说的“滤波器”。

下面来说明计算顺序,如下图

img

【注】计算方法:对于输入数据,卷积运算以一定间隔滑动滤波器的窗口并应用。这里所说的窗口是指上图中灰色的3 × 3的部分。如上图所示,将各个位置上滤波器的元素和输入的对应元素相乘,然后再求和(有时将这个计算称为乘积累加运算)。然后,将这个结果保存到输出的对应位置。将这个过程在所有位置都进行一遍,就可以得到卷积运算的输出。

在全连接的神经网络中,除了权重参数,还存在偏置。CNN中,滤波器的参数就对应之前的权重。并且,CNN中也存在偏置。如下图

img

【注】偏置通常只有1个(1 × 1) (本例中,相对于应用了滤波器的4个数据,偏置只有1个),这个值会被加到应用了滤波器的所有元素上。

7.2.3填充

在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据(比如0等),这称为填充(padding),例如下图。

img

【注】卷积运算的填充处理:向输入数据的周围填入0(图中用虚线表示填充,并省略了填充的内容“0”)

通过填充,大小为(4, 4)的输入数据变成了(6, 6)的形状。然后,应用大小为(3, 3)的滤波器,生成了大小为(4, 4)的输出数据。

**使用填充原因:**为了调整输出的大小。因为如果每次进行卷积运算都会缩小空间,那么在某个时刻输出大小就有可能变为1,导致无法再应用卷积运算。为了避免出现这样的情况,就要使用填充。

7.2.4步幅

应用滤波器的位置间隔称为步幅(stride)。前面的例子中步幅都是1,如果将步幅设为2,如下图。

img

【注】对输入大小为(7, 7)的数据,以步幅2应用了滤波器。通过将步幅设为2,输出大小变为(3, 3)。步幅可以指定应用滤波器
的间隔。综上,增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。

**步幅的计算公式:**假设输入大小为(H, W),滤波器大小为(FH, FW),输出大小为(OH, OW),填充为P,步幅为S。则

img

例:输入大小:(4, 4);填充:1;步幅:1;滤波器大小:(3,3)

img

问题:对于上述的公式,当输出大小无法除尽时(结果是小数时),需要采取报错等对策。根据深度学习的框架的不同,当值无法除尽时,有时会向最接近的整数四舍五入,不进行报错而继续运行。

7.2.5三维卷积运算

对于前面的卷积运算的例子都是以有高、长方向的2维形状为对象的,但是,图像是3维数据,除了高、长方向之外,还需要处理通道方向

通过下图来举例说明三维卷积运算:

img

【注】由图可知,对于三通道的图像,在纵深方向(通道方向)上特征图增加了,通道方向上有多个特征图时,会按通道进行输入数据和滤波器的卷积运算,并将结果相加,从而得到输出。

下图为计算过程

img

【注】需要注意的是,在3维数据的卷积运算中,**输入数据和滤波器的*通道数*要设为相同的值

7.2.6结合方块思考

将数据和滤波器结合长方体的方块来考虑,3维数据的卷积运算会很容易理解。

例:通道数为C、高度为H、长度为W的数据的形状可以写成(C, H, W)。

​ 通道数为C、滤波器高度为FH(FilterHeight)、长度为FW(Filter Width)时,可以写成(C, FH, FW)。

img

在上图中,数据输出是1张特征图。所谓1张特征图,换句话说,就是通道数为1的特征图。那么,如果要在通道方向上也拥有多个卷积运算的输出,该怎么做呢?为此,就需要用到多个滤波器(权重),见下图

img

【注】上面还是一张图片,只是加了多次卷积运算

通过应用FN个滤波器,输出特征图也生成了FN个。如果将这FN个特征图汇集在一起,就得到了形状为(FN, OH, OW)的方块。将
这个方块传给下一层,就是CNN的处理流。

CNN也存在偏置,计算如下图。

img

【注】对于1X1的偏置,不同形状的方块相加时,可以基于NumPy的广播功能轻松实现

7.2.7批处理

神经网络的处理中进行了将输入数据打包的批处理。

例:对于网络间传递的4维数据,就是按(batch_num, channel, height, width)的顺序保存的数据,计算见下图

img

7.3池化层

7.3.1计算方式

池化是缩小高、长方向上的空间的运算。如下图

img

上图是按步幅2进行2 × 2的Max池化时的处理顺序。“Max池化”是获取最大值的运算,“2 × 2”表示目标区域的大小。如图所示,从2 × 2的区域中取出最大的元素。此外,这个例子中将步幅设为了2,所以2 × 2的窗口的移动间隔为2个元素。另外,一般来说,池化的窗口大小会和步幅设定成相同的值。比如,3 × 3的窗口的步幅会设为3,4 × 4的窗口的步幅会设为4等。

7.3.2特征

.1、没有要学习的参数

池化层和卷积层不同,没有要学习的参数。池化只是从目标区域中取最大值(或者平均值),所以不存在要学习的参数。

2、通道数不发生变化

经过池化运算,输入数据和输出数据的通道数不会发生变化。

例:计算式通道数是独立的

img

3、对微小的位置变化具有鲁棒性(健壮)

输入数据发生微小偏差时,池化仍会返回相同的结果。因此,池化对输入数据的微小偏差具有鲁棒性。比如,3 × 3的池化的情况下,如下图所示,池化会吸收输入数据的偏差(根据数据的不同,结果有可能不一致)。

img

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追寻远方的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值