听六小桨讲AI | 第1期:卷积概念及计算

2021-04-20 17:11:25 浏览数 (1)

本栏目由百度飞桨RD们联手精心打造,对深度学习的知识点进行由浅入深的剖析和讲解。大家可视它为深度学习百科(面试秘籍也是可以哒),当然也可收藏为深度学习查询手册~

卷积产生的背景

在全连接网络[1]中,一张图像上的所有像素点会被展开成一个1维向量输入网络,如图1所示,28 x 28的输入数据被展开成为784 x 1的数据作为输入。

图1 全连接神经网络结构图

往往会存在如下两个问题:

1. 输入数据的空间信息被丢失。 空间上相邻的像素点往往具有相似的RGB值,RGB的各个通道之间的数据通常密切相关,但是转化成1维向量时,这些信息将会丢失。如图2所示,空间位置相邻的两个点A和B,转化成1维向量后并没有体现出他们之间的空间关联性。

图2 卷积计算过程

2. 模型参数过多,容易发生过拟合。 由于每个像素点都要跟所有输出的神经元相连接。当图片尺寸变大时,输入神经元的个数会按图片尺寸的平方增大,导致模型参数过多,容易发生过拟合。例如:对于一幅1000 x 1000的输入图像而言,如果下一个隐含层的神经元数目为

个,那么将会有

个权重参数,可以想象,如此大规模的参数量使得网络很难训练。

为了解决上述问题,引入卷积(Convolution)来对输入的图像进行特征提取。卷积的计算范围是在像素点的空间邻域内进行的,因此可以利用输入图像的空间信息;此外,由于卷积具有局部连接、权重共享等特性,卷积核参数的数目也远小于全连接层。

卷积基础概念

  • 卷积核(kernel):也被叫做滤波器(filter),假设卷积核的高和宽分别为

,则称其为

卷积。比如某卷积核高为3, 宽为5,则叫做3 x 5卷积。卷积核中数值即进行卷积计算时所采用的权重。

  • 卷积计算(convolution):图像中像素点具有很强的空间依赖性,卷积就是针对像素点的空间依赖性来对图像进行处理的一种技术。
  • 特征图(feature map):卷积滤波结果。

应用示例1

在卷积神经网络中,卷积层的实现方式实际上是数学中定义的互相关 (cross-correlation)运算,具体的计算过程如 图3 所示,每张图的左图表示输入数据是一个维度为3 x 3的二维数组;中间的图表示卷积核是一个维度为2 x 2的二维数组。

‍‍‍

图3 卷积计算过程

  • 如图3(a)所示:先将卷积核的左上角与输入数据的左上角(即:输入数据的(0, 0)位置)对齐,把卷积核的每个元素跟其位置对应的输入数据中的元素相乘,再把所有乘积结果相加,得到卷积输出的第一个结果:
  • 如图3(b)所示:将卷积核向右滑动,同样将卷积核的每个元素跟其位置对应的输入数据中的元素相乘,再把所有乘积结果相加,得到卷积输出的第二个结果:
  • 如图3(c)所示:将卷积核向下滑动,让卷积核左上角与输入数据中的(1, 0)位置对齐,可以计算得到卷积输出的第三个结果:
  • 如图3(d)所示:将卷积核向右滑动,让卷积核左上角与输入数据中的(1, 1)位置对齐,可以计算得到卷积输出的第四个结果:

最终可以得到图3(d)右侧所示的特征图。

说明:

  1. 输入图像的边缘像素因其处于边缘位置,因此无法参与卷积计算;
  2. 图像卷积计算实质上是对图像进行了下采样 (down sampling)操作。对卷积得到的图像结果不断卷积滤波,则原始图像就会被“层层抽象、层层约减”,从而使得蕴涵在图像中的重要信息“显山露水”;
  3. 卷积核中的权重系数是通过数据驱动机制学习得到,用来捕获图像中某像素点及其邻域像素点所构成的特有空间模式。一旦从数据中学习得到权重系数,这些权重系数就刻画了图像中像素点构成的空间分布不同模式。

填充(Padding)

输入图像边缘位置的像素点无法进行卷积滤波,为了使边缘像素也参与卷积滤波,填充技术应运而生。填充是指在边缘像素点周围填充“0”(即0填充),使得输入图像的边缘像素也可以参与卷积计算。注意,在这种填充机制下,卷积后的图像分辨率将与卷积前图像分辨率一致,不存在下采样。

应用示例2

当卷积核尺寸大于1时,输出特征图的尺寸会小于输入图片尺寸。如果经过多次卷积,输出图片尺寸会不断减小。为了避免卷积之后图片尺寸变小,通常会在图片的外围进行填充(padding),如 图4 所示。

图4 图形填充

  • 如图4(a)所示:填充的大小为1,填充值为0。填充之后,输入图片尺寸从4 x 4变成了6 x 6,使用3 x 3的卷积核,输出图片尺寸为4 x 4。
  • 如图4(b)所示:填充的大小为2,填充值为0。填充之后,输入图片尺寸从4 x 4变成了8 x 8,使用3 x 3的卷积核,输出图片尺寸为6 x 6。

如果在输入图片第1行之前和最后1行之后填充

行;在输入图片第1列之前和最后1列之后填充

列;则填充之后的图片尺寸为

。经过大小为

的卷积核操作之后,输出图片的尺寸为:

为了便于padding,卷积核大小通常使用1,3,5,7这样的奇数,这样如果使用的填充大小为

,则可以使得卷积之后图像尺寸不变。例如当卷积核大小为3时,padding大小为1,卷积之后图像尺寸不变;同理,如果卷积核大小为5,padding大小为2,也能保持图像尺寸不变。

步长(Stride)

在卷积操作时,通常希望输出图像分辨率与输入图像分辨率相比会逐渐减少,即图像被约减。因此,可以通过改变卷积核在输入图像中移动步长大小来跳过一些像素,进行卷积滤波。当Stride=1时,卷积核滑动跳过1个像素,这是最基本的单步滑动,也是标准的卷积模式。Stride=k表示卷积核移动跳过的步长是k。

应用示例3

图3 中卷积核每次滑动一个像素点,这是步长为1的特殊情况。图5是步长为2的卷积过程,卷积核在图片上移动时,每次移动大小为2个像素点。

图5 步幅为2的卷积过程

当输入图像尺寸H x W,卷积核大小

,填充

,步长为

时,输出特征图尺寸的计算公式是:

感受野(Receptive Field)

卷积所得结果中,每个特征图像素点取值依赖于输入图像中的某个区域,该区域被称为感受野(receptive field),正所谓“管中窥豹、见微知著”。那么这个区域在哪呢,在卷积神经网络中,感受野是特征图(feature map)上的点对应输入图像上的区域。感受野内每个元素数值的变动,都会影响输出点的数值变化。

应用示例4

比如3 x 3卷积对应的感受野大小就是3 x 3,如 图6 所示。

图6 感受野为3×3的卷积

而当通过两层3 x 3的卷积之后,感受野的大小将会增加到5 x 5,如 图7 所示。

图7 感受野为5×5的卷积

因此,当增加卷积网络深度的同时,感受野将会增大,输出特征图中的一个像素点将会包含更多的图像语义信息。

卷积的优势

  • 保留空间信息

在卷积运算中,计算范围是在像素点的空间邻域内进行的,它代表了对空间邻域内某种特征模式的提取。对比全连接层将输入展开成一维的计算方式,卷积运算可以有效学习到输入数据的空间信息。

  • 局部连接

在上文中,我们介绍了感受野的概念,可以想像,在卷积操作中,每个神经元只与局部的一块区域进行连接。对于二维图像,局部像素关联性较强,这种局部连接保证了训练后的滤波器能够对局部特征有最强的响应,使神经网络可以提取数据的局部特征。全连接与局部连接的对比如图8所示。

图8 全连接与局部连接

同时,由于使用了局部连接,隐含层的每个神经元仅与部分图像相连,考虑本文开篇提到的例子,对于一幅1000 × 1000的输入图像而言,下一个隐含层的神经元数目同样为

个,假设每个神经元只与大小为 的局部区域相连,那么此时的权重参数量仅为

,相较于全连接层,参数量少了4个数量级。

  • 权重共享

卷积计算实际上是使用一组卷积核在图片上进行滑动,计算乘加和。因此,与图像计算的过程中,卷积核的权重是共享的。这就大大降低了网络的训练难度,图9为权重共享的示意图。这里还使用上面的例子,对于一幅1000 × 1000的输入图像,下一个隐含层的神经元数目为

个,隐含层中的每个神经元与大小为10 x 10的局部区域相连,因此有10 x 10个权重参数。将这10 x 10个权重参数共享给其他位置对应的神经元,也就是

个神经元的权重参数保持一致,那么最终需要训练的参数就只有这10 x 10个权重参数了。

图9 权重共享示意图

  • 不同层级卷积提取不同特征

在CNN网络中,通常使用多层卷积进行堆叠,从而达到提取不同类型特征的作用。比如:浅层卷积提取的是图像中的边缘等信息;中层卷积提取的是图像中的局部信息;深层卷积提取的则是图像中的全局信息。这样,通过加深网络层数,CNN就可以有效地学习到图像从细节到全局的所有特征了。对一个简单的5层CNN进行特征图可视化后的结果如图10所示 [2]。

图10 特征图可视化示意图

通过上图可以看到,Layer1和Layer2中,网络学到的基本上是边缘、颜色等底层特征;Layer3开始变的稍微复杂,学习到的是纹理特征;Layer4中,学习到了更高维的特征,比如:狗头、鸡脚等;Layer5则学习到了更加具有辨识性的全局特征。

本期内容详细介绍了深度学习中卷积的相关基础概念以及卷积计算,下一期将继续由见见老师为大家带来卷积的复杂操作以及1*1卷积,感兴趣的记得关注『听六小桨讲AI』系列内容,下期见~~

参考文献

[1] https://www.paddlepaddle.org.cn/tutorials/projectdetail/724126

[2] Visualizing and Understanding Convolutional Networks:

https://arxiv.org/pdf/1311.2901.pdf

如在使用过程中有问题,可加入官方QQ群进行交流:778260830。

如果您想详细了解更多飞桨的相关内容,请参阅以下文档。

·飞桨官网地址·

https://www.paddlepaddle.org.cn/

·飞桨开源框架项目地址·

GitHub: https://github.com/PaddlePaddle/Paddle

Gitee: https://gitee.com/paddlepaddle/Paddle

0 人点赞