前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >听六小桨讲AI | 第1期:卷积概念及计算

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

作者头像
用户1386409
发布2021-04-20 17:11:25
4070
发布2021-04-20 17:11:25
举报
文章被收录于专栏:PaddlePaddlePaddlePaddle

本栏目由百度飞桨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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PaddlePaddle 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档