首页 今日头条 正文

比特币行情,万字长微博陪你看尽深度学习中的12种卷积互联网,郭顶





文章发布于公号【数智物语】 (ID:decision_engine),重视公号不错失每一篇干货。

转自 | AI科技谈论

作者 | Kunlun Bai

深度学习中的各种卷积网络咱们知多少?关于那些听说过却又对它们没有特别明晰的知道的小伙伴们,Kunlun Bai 这篇文章非常值得一读。Kunlun Bai 是一位人工智能、机器学习、物体学以及工程学范畴的研讨型科学家,在本文中,他详细地介绍了 2D、3D、1x1 、转置 、空泛(扩张)、空间可别离、深度可别离、扁平化、 分组等十二种卷积网络类型。

假如你曾听过深度学习的各种卷积网络(例如 2D/3D/ 1x1 / 转置 /空泛(扩张)/ 空间可别离 / 深度可别离 /扁平化 / 分组 / 混洗分组卷积)并疑问它们究竟都是什么的话,你能够通过这篇文章了解它们实践的作业原理。

在文中,我归纳性地介绍了在深度学习中常见的几种卷积,并选用了咱们都能够理解的办法来解说它们。针对这一主题,这篇文章以外也有其他的一些文章可供咱们参阅,我将这些文章的链接附在了文末参阅部分,咱们可前往阅览。

期望这篇文章能够协助咱们树立起对这几种卷积的认知,并为咱们的学习/研讨带来有用的参阅价值。

本文的内容包含:

1. 卷积 VS 互相关

2. 深度学习中的卷积网络(单通道版,多通道版)

3.3D 卷积

4. 1x1 卷积

5. 卷积算法

6. 转置卷积(反卷积,棋盘效应)

7. 空泛卷积(扩张卷积)

8. 可别离卷积(空间可别离 卷积,深度可别离卷积)

9. 扁平化卷积

10. 分组卷积

11. 混洗分组卷积

12. 逐点分组卷积

01

卷积 VS 互相关

卷积是一项广泛运用于信号处理、图画处理以及其他工程/科学范畴的技能。在深度学习中,卷积神经网络(CNN)这一模型架构就由这项技能命名的。可是,深度学习中的卷积本质上便是信号/图画处理中的互相关(cross-correlation)。二者间只要纤细的不同。

不深化考虑细节的话,二者徐庶的差异在于:在信号/图画处理中,卷积被界说为:



它的界说是:一个函数通过翻转和移动后与另一个函数的乘积的积分。下面的图画形象化地展现了这个思维:



信号处理中的卷积。侧组词过滤函数 g 通过翻转然后沿着横轴滑动。关于该函数在横轴上滑过的每个点的方位,都核算出函数 f 与翻转后的函数 g 的重合区域。这个重合的区域便是函数 g 在横轴上滑过的某个特定方位的卷积值。图画来历:http://fourier.eng.hmc.edu/e161/lectures/convolution/index.html

在这儿,函数 g 是一个过滤函数。这个函数通过翻转然后沿着横轴滑动。关于该函数在横轴上滑过的每个点的方位,都核算出函数 f 与翻转后的函数 g 的重合区域。这个重合的区域便是函数 g 在横轴上滑过的某个特定方位的卷积值。

而另一方面,互相关是这两个函数的滑动的点积(dot product)或滑动的内积(inner-product)。互相关的过滤函数不通过翻转,它直接滑动通过函数 f。函数 f 和函数 g 的重合区域便是互相关。下图展现了卷积和互相关的差异:



在信号处理中,卷积和互相关的差异。图画来历:https://en.wikipedia.org/wiki/Convolution

在深度学习中,卷积中的过滤函数是不通过翻转的。严格来说,它便是互相关。咱们本质上便是在履行 element-wise 乘法和加法。可是,这个「卷积」仅在深度学习中被称为卷积,能够这样做的原因是因为卷积在练习期间就学到了过滤函数的权重,假如上面示例中的经翻转的函数 g 是正确的函数,那么通过练习后,卷积所学到的过滤函数就会找到翻转后的函数 g。因而,在正确的卷积中,就不需求在练习前早早地翻转过滤函数。

02

深度学习中的卷积

履行卷积的意图便是从输入中提取有用的特征。在图画处理中,履行卷积操作有许多不同的过滤函数可供挑选,每一种都有助于从输入图画中提取不同的方面或特征,如水平/笔直/对角边等。相似地,卷积神经网络通过卷积在练习期间运用主动学习权重的函数来提取特征。一切这些提取出来的特征,之后会被「组合」在一同做出决议计划。

进行卷积操作有许多优势,例如权重同享(weights sharing)和平移不变性(translation invariant)。此外,卷积也能够考虑到像素的空间联络。这些优势都非常有协助,尤其是在许多的核算机视觉使命中,因为这些使命往往涉及到对某些组成部分与其他组成部分有某些空间联络的方针进行辨认(例如一只狗的身体一般是跟它的脑袋、四条腿以及尾巴相连的)。

2.1 卷积:单通道版



面向单通道的卷积,图画源自:https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1

在深度学习中,卷积便是元素等级( element-wise) 的乘法和加法。关于一张仅有 1 个通道的图画,卷积进程如上图所示,过滤函数是一个组成部分为 [[0, 1, 2], [2, 2, 0], [0, 1, 2]] 的 3 x 3 矩阵,它滑动穿过整个输入。在每一个方位,它都履行了元素等级的乘法和加法,而每个滑过的方位都得出一个数字,终究的输出便是一个 3 x 3 矩阵。(留意:在这个示例中,卷积步长=1;填充=0。我会鄙人面的算法部分介绍这些概念。)

2.2 卷积:多通道版

在许多运用中,咱们处理的是多通道的图画。一个典型的事例便是 RGB 图画,如下图所示,每一个 RGB 通道都别离着重于原始图画的不同方面。



每一个 RGB 通道都别离着重于原始图画的不同方面,图片拍摄于:我国云南元阳

另一个多通道数据的事例便是卷积神经网络中的层。一个卷积网络层往往都由多个通道(一般为数百个通道)组成,每一个通道描绘出前一个层的不同方面。那咱们怎么完结不同深度的层之间的过渡呢?又怎么将深度为 n 的层转化为后边的深度为 m 的层呢?

在介绍这个进程之前,咱们先搞清楚几个名词:层(layer)、通道(channel)、特征映射(feature map)、过滤器(filter)以及卷积核(kernel)。

从层级视点来说,「层」和「过滤器」的概念归于一个层级,而「通道」和「卷积核」都鄙人一个层级。

「通道」和「特征映射」是指同一个东西。一层能够有多个通道(或特征映射);假如输入的是 RGB 图画,那这个输入层有 3 个通道。

「通道」一般用来描绘「层」的架构。相似地,「卷积核」则用来描绘「过滤器」的架构。



「层」(「过滤器」)和「通道」(「卷积核」)之间的差异

过滤器和卷积核之间的差异非常奇妙,有时候,二者能够替换运用,这无疑就制造了些困惑。但根本上来讲,二者仍是有些纤细差异的:「卷积核」指的是指权重组成的 2D 数组 ;「过滤器」则是由多个卷积核堆叠在一同的 3D 架构概念。

关于一个 2D 过滤器来说,过滤器就适当于卷积核,可是关于一个 3D 过滤器以及深度学习中的大多数卷积而言,一个过滤器由一组卷积核组成。每个卷积核都是绝无仅有的,强调了输入通道的不同方面。

带着对这些概念的了解,下面让咱们一同来看看多通道卷积。生成一个输出通道,就需求将每一个卷积核运用到前一层的输出通道上,这是一个卷积核等级的操作进程。咱们对一切的卷积核都重复这个进程以生成多通道,之后,这些通道组合在一同一同构成一个单输出通道。下图能够让咱们更明晰地看到这个进程。

这儿假定输入层是一个 5 x 5 x 3 矩阵,它有 3 个通道。过滤器则是一个 3 x 3 x 3 矩阵。首要,过滤器中的每个卷积核都运用到输入层的 3 个通道,履行 3 次卷积后得到了尺度为 3 x 3 的 3 个通道。



面向多通道的 2D 卷积的榜首步:过滤器每个卷积核别离运用到输入层的 3 个通道上。图片源自:https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1

之后,这 3 个通道都合并到一同(元素等级的加法)组成了一个巨细为 3 x 3 x 1 的单通道。这个通道是输入层(5 x 5 x 3 矩阵)运用了过滤器(3 x 3 x 3 矩阵)后得到的成果。



面向多通道的 招显聪被打2D 卷积的第二步:3 个通道都合并到一同(元素等级的加法)组成了一个巨细为 3 x 3 x 1 的单通道。图片源自:https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1

相同地,咱们能够将这个进程视作将一个 3D 过滤器矩阵滑动通过输入层。留意,这个输入层和过滤器的深度都是相同的(即通道数=卷积核数)。这个 3D 过滤器仅沿着 2 个方向(图画的高&宽)移动(这也是为什么 3D 过滤器即便一般用于处理 3D 体积数据,但这样的操作仍是被称为 2D 卷积)。在每一个滑过的方位,咱们都履行元素等级的乘法和加法,终究得出一个数值。下面这个比方中,过滤器横向滑过 5 个方位、纵向滑过 5 个方位。悉数完结后,咱们得到了一个单输出通道。



看待 2D 卷积的另一个视点:将这个进程视作将一个 3D 过滤器矩阵滑动通过输入层。留意,这个输入层和过滤器的深度都是相同的(即通道数=卷积核数)。这个 3D 过滤器仅沿着 2 个方向(图画的高&宽)移动(这也是为什么 3D 过滤器即便一般用于处理 3D 体积数据,但这样的操作仍是被称为 2D 卷积)。输出是一个 1 层的矩阵。

现在咱们能够看到怎么在不同深度的层之间完结过渡。假定输入层有 Din 个通道,而想让输出层的通道数量变成 Dout ,咱们需求做的仅仅是将 Dout 个过滤器运用到输入层中。每一个过滤器都有 Din 个卷积核,都供给一个输出通道。在运用 D驭奴out 个过滤器后,Dout 个通道能够一同组成一个输出层。



规范 2D 卷积。通过运用 Dout 个苹果帮手下载过滤器,将深度为 Din 的层映射为另一个深度为 Dout 的层。

03

3D 卷积

在上部分的终究一张图中,咱们看到了将卷积在 3D 体积上的履行状况。可是一般来说,咱们仍旧将这一操作视为深度学习中的 2D 卷积——3D 体积数据上的 2D 卷积:其过滤器和输入层的深度是相同的;3D 过滤器仅沿着 2 个方向(图画的高&宽)移动。这样操作得出的成果便是一个 2D 图画(仅有 1 个通道)。

有 2D 卷积,天然就有 3D 卷积。3D 卷积是 2D 卷积的一般化。在 3D 卷积中,过滤器的深度要比输入层的深度更小(卷积核巨细<通道巨细),成果是,3D 过滤器能够沿着一切 3 个方向移动(高、宽以及图画的通道)。每个方位通过元素等级的乘法和算法都得出一个数值。因为过滤器滑动通过 3D 空间,输出的数值相同也以 3D 空间的办法呈现,终究输出一个 3D 数据。



和对 2D 区域中方针的空间联络进行解码的 2D 卷积相似,3D 卷积也能够描绘 忒3D 空间中方针的空间联络。关于一些运用来说,这种 3D 联络很重要,例如在 CT 和 MRI 等生物医学图画的 3D 切割/重建中,这些图画的方针如血管都是弯曲散布在 3D 空间中的。

04

1x1 卷积

因为咱们在前一个部分——3D 卷积中讨论了深度等级的操作,接下来让咱们了解另一个风趣的操作,1 x 1 卷积。

你或许想知道为什么这个卷积是有协助作用的。咱们刚刚是否让输入层中的每个数值都乘以了一个数值?是,也不是。关于仅有 1 个通道的层来说,这项操作不重要。在上面的示例中,咱们让每一个组成部分都乘以了一个数值。

假如输入层有多个通道,那作业就变得非常风趣了。下图论述了 1 x 1 卷积在一个维度为 H x W x D 的输入层上的操作办法。通过巨细为 1 x 1 x D 的过滤器的 1 x 1 卷积,输出通道的维度为 H x W x 1。假如咱们履行 N 次这样的 1 x 1 卷积,然后将这些成果结合起来,咱们能得到一个维度为 H x W x N 的输出层。



过滤器巨细为 1 x 1 x D 的 1 x 1 卷积

1 x 1 卷积开始是在 Network-in-network 的论文(论文阅览地址:https://arxiv.org/abs/1312.4400)中被提出的,之后在谷歌的 Inception 论文(论文阅览地址:https://arxiv.org/abs/1409.4842)中被很多运用。1 x 1 卷积具有如下几个优势:

1. 削减维度殷金宝割腕身亡以完结更有功率的核算;

2. 进行更有功率的低维度嵌入,或许对特征进行池化;

3. 卷积今后重复运用非线性特征。

前两个优势咱们能够从上面的图画中调查到。履行 1 x 1 卷积后,咱们显着削减了维度的深度等级。假定原始输入有 200 个通道,1 x 1 卷积会将这些通道(特征)嵌入到一个单通道中。第三个优势在 1 x 1 卷积履行后才显现出来,它会将线性整流函数(ReLU)等非线性激活函数添加进模型中。非线性特征让网络学习更杂乱的函数。

谷歌的 Inception 论文中也对这些优势进行了描绘:

上面这个模块(至少在这个朴素的办法中)的一个大问题是,即便是数量适度的 5 x 5 卷积,在有很多过滤器的卷积层之上的核算也会过于贵重。

这就给提出的结构带来了第二个思路:明智地削减维度并进行投影,否则就会过度添加关于核算的要求。这是依据成功完结嵌入上的:即便是低维度的嵌入也能够包容很多关于相对较大的图画块的信息... 也便是说,在履行核算贵重的 3 x 3 卷积和 5 x 5 卷积前,往往会运用 1 x 1 卷积来削减核算量。此外,它们也能够运用调整后的线性激活函数来完结两层用处。

针对 1 x 1 卷积,Yann LeCun 提出了一个非常风趣的视点:「在卷积网络中,不存在像「全衔接层」这样的东西,而只要含有一些 1x1 卷积核和 1 个全衔接表的卷积层」



05

卷积算法

咱们现在知道了怎么处理卷积的深度。接下来评论一下怎样处理在其他两个方向(高&宽)中的卷积,以及重要的卷积算法(convolution arithmetic)。

这儿有一些需求了解的名词:

1. 卷积核巨细(Kernel size):卷积核在前一部分现已评论过了。卷积核巨细承认卷积的视界。

2. 卷积步长(Stride):它承认的是卷积核滑动通过图画的步长。步长为 1 标明卷积核一个像素一个像素地滑动通过图画;步长为 2 则标明卷积核在图画上每滑动一次就移动了 2 个像素(即越过 1 个像素)。关于下面这个事例中的图画,咱们选用大于或等于 2 的步长。

3. 填充(Padding):填充界说怎么处理图画的鸿沟。假如有必要的话,能够通过将输入鸿沟周围的填充设置为 0,这样的话,通过填充后的卷积(Tensorflow 中的「相同」填充)就能够坚持空间输出维度与输入图画的维度相同。另一方面,假如不在输入鸿沟周围添加 0 填充,未填充的卷积(Tensorflow 中的「有用」填充)仅对输入图画的像素履行卷积,输出巨细也会小于输入巨细。

下图标明运用卷积核巨细为 3、步长为 1;填充为 1 的 2D 卷积:



这儿有一篇不错的文章(A guide to convolution arithmetic for deep learning,https://arxiv.org/abs/1603.07285)详细地描绘了算法,咱们可前往阅览。这篇文章对其进行了详细介绍,并针对不同的卷积核巨细、卷积步长以及填充别离进行了事例剖析。这儿我仅仅归纳出了最常用的成果:

关于一个巨细为 i、卷积核巨细为 k、填充为 p 以及卷积步长为 s 的输入图画,通过卷积的输出图画的巨细为 o:



06

转置卷积(反卷积)

关于许多运用以及在许多网络架构中,咱们一般需求朝与规范卷积相反的方向做转化,例如,当咱们想要履行上采样(up-sampling)时。这些事例其间就包含生成高分辨率图画以及在主动编码器或语义切割中将低维度特征映射映射到高维度空间中。(在随后的事例中,语义切割首要在编码器中提取特征映射,然后在解码器中复原原始图画的巨细然后能够在原始图画中对每一个像素进行分类。)

传统上,研讨者能够通过运用插值(interpolation)计划或许手动创立规矩来完结上采样。神经网络等现代架构则反过来趋向于让网络自己主动学习适宜的转化,而不需求人类的干涉。

咱们能够运用转置卷积(Transposed Convolution)来完结这一点。在书面表达上,转置卷积也称作反卷积(deconvolution),或小数步长的卷积(fractionally strided convolution)。不过值得一提的是,将其称作「反卷积」并不是那么适宜,因为转置卷积并不完全是信号/图画处理中所界说的反卷积。从技能上来说,信号处理中的反卷积是卷积的逆向操作,跟这儿所说的转置卷积不相同。正因为此,一些论文作者激烈对立将转置卷积称作反卷积,而群众要这样称号首要是为了简略起见。随后,咱们会讨论为什么将这种操作称作转置卷积才是天然且更适宜的。

咱们能够直接运用卷积来完结转置卷积。例如鄙人图的事例中,咱们 2 x 2 的输入上做转置卷积:其卷积核为 3 x 3,卷积步长为 1,填充为 2 x 2 的空格。上采样的输出巨细为 4 x 4。



将 2 x 2 输入上采样为 4 x 4 输出,图片源自: https://github.com/vdumoulin/conv_arithmetic

非常风趣的是,研讨者能够通过运用花式填充和步长,将相同的 2 x 2 输入图画映射出不同的图画巨细。下图中,在同一个卷积核为 3 x 3,卷积步长为 1,填充为 2 x 2 空格的 2 x 2 的输入(输入之间刺进了一个空格)上做转置卷积,得出的输出巨细为 5 x 5。



将 2 x 2 输入上采样为 5 x 5 输出,图片源自: https://github.com/vdumoulin/conv_arithmetic

通过调查上述事例中的转置卷积,咱们能够开始树立一些认知。可是要想较好地把握它的运用,在电脑上看看它怎样通过矩阵乘法来完结会比较有用。从中,咱们还能够了解到为什么「转置卷积」这个姓名更适宜。

在卷积中,咱们设定卷积核为 C,输入图画为 Large,卷积输出的图画为 Small。在做卷积(矩阵乘法)后,咱们将大图画下采样(down-sample)为小的输出图画。矩阵乘法中的卷积完结遵从 C x Large = Small。

下面事例显现了这项操作怎么完结。它将输入也压平为 16 x 1 矩阵,之后将卷积核转化为一个稀少矩阵 (4 x 16),接着在稀少矩阵和压平的输入间履行矩阵乘法运算,终究得出的矩阵(4 x 1)转化回 2 x 2 的输出。



卷积的矩阵乘法:从巨细 4 x 4 为 Large 输入图画到巨细为 2 x 2 的 Small 输出图画

现在,如下图所示,假如咱们对等式两头的矩阵 CT 进行屡次转置,并运用一个矩阵和其转置矩阵相乘得出一个单元矩阵的特点,咱们能够得出下面的运算公式:CT x Small = Large。



卷积的矩阵乘法:从巨细 2x 2 为 Large 输入图画到巨细为 4 x 4 的 Small 输出图画

正如你在这儿看到的,转置卷积履行的是从小图画到大图画的上采样。这也是咱们所要完结的。而现在,你也能够了解到「转置卷积」这个姓名的由来。

转置卷积的通用算法能够在《深度学习的卷积算法攻略》「A guide to convolution arithmetic for deep learning」这篇文章的「Relationship 13」和「Relationship 14」章节中找到。

6.1 棋盘效应

所谓的「棋盘效应」(Checkerboard artifacts),是研讨人员在运用转置卷积时能够调查到的一种令人不快的现象(古怪的棋盘格状伪影)。



「棋盘效应」的一些事例。图片源自论文「Deconvolution and Checkerboard Artifacts」,https://distill.pub/2016/deconv-checkerboard/

《反卷积和棋盘效应》(Deconvolution and Checkerboard Artifacts,https://distill.pub/2016/deconv-checkerboard)关于这一现象有一个非常好的论述。咱们能够前往阅览这篇文章了解详细内容。这儿我仅仅归纳出要害点。

形成棋盘效应的原因是转置卷积的「不均匀堆叠」(uneven overlap)。这种堆叠会形成图画中某个部位的色彩比其他部位更深。

鄙人图中,顶部这层是输入层,底部这层则是操作转置卷积后的输出层。在转置卷积进程中,小的这层映射到大的那层。

在事例(a)中,其卷积步长为 1,过滤器巨细为 2。正红线所标出的,输入图画上的榜首个像素映射为输出图画上的榜首个和第二个像素。

绿线标出的则是比特币行情,万字长微博陪你看尽深度学习中的12种卷积互联网,郭顶输入图画上的第二个像素映射为输出图画上的第二个和第三个像素。这样的话,输出图画上的第二个像素就收到了输入图画上的榜首个和第二个像素的两层信息,而整个卷积进程中,输出图画中心部分的像素都从输入图画中接纳到了相同多的信息,这样就导致了卷积核堆叠的区域。

而在事例(b)中,当过滤器的巨细添加到 3 时,这个接纳到最多信息的中心部分缩小了。可是这样的话问题不大,因为堆叠部分仍旧是均匀的。在输出图画中心部分的像素从输入图画中接纳到相同多的信息。



图片源自论文「Deconvolution and Checkerboard Artifacts」,https://distill.pub/2016/deconv-checkerboard/

现在针对下面的事例,咱们将卷积步长改为 2。在事例(a)中,过滤器的巨细为 2,输出图画上的一切像素从输入图画中接纳到相同多的信息,它们都从输入图画中接纳到一个像素的信息,这儿就不存在转置卷带来的堆叠区域。



图片源自论文「Deconvolution and Checkerboard Artifacts」,https://distill.pub/2016/deconv-checkerboard/

而在事例(b)中,当咱们将过滤器巨细增至 4 时,均匀的堆叠区域缩小了,可是研讨小兵传奇者仍旧能够将输出图画的中心部分用作有用的输出,其间每个像素从输入图画中接纳到的信息是相同多的。

可是,在事例(c)和(d)中,当过滤器巨细变成 3 或 5 时,状况就变得非常风趣了。在这两个事例中,输出图画上的每个像素与其毗连的像素所接纳到的信息量都不相同。研讨者在输出图画上无法找到一个接连并均匀的堆叠区域。

当过滤器巨细无法被卷积步长整除时,转置卷积就会呈现「不均匀堆叠」。这种「不均匀堆叠」会形成图画中某个部位的色彩比其他部位更深,因而会带来「棋盘效应」。实践上,不均匀堆叠区域会在二维上愈加极点。因为二维上的两个形式会相乘,因而终究的不均匀性是本来的平方。

在运用转置卷积时,能够做两件作业来减轻这种效应。

榜首,承认运用的过滤器的巨细是能够被卷积步长整除的,然后来防止堆叠问题。

第二,能够选用卷积步长为 1 的转置卷积,来减轻「棋盘效应」。

可是,正如在最近许多模型中所看到的,这种效益仍旧或许会显露出来。

这篇论文进一步提出了一个更好的上采样办法:首要调整图画巨细(运用最近邻域内插法(Nearest Neighbor interpolation)和双向性内插法(bilinear interpolation)),然后制造一个卷积层。通过这样做,论文作者成功防止了这一「棋盘效应」。咱们或许也想要在自己的运用中测验一下这个办法吧。

07

空泛卷积(扩张卷积)

下面这两篇论文对空泛卷积(Dilated Convolution)进行了介绍:

1. 《运用深度卷积网络和全衔接 CRF 做语义图画切割》(Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs,https://arxiv.org/abs/1412.7062)

2. 《通过空泛卷积做多规划的上下文聚合》(Multi-scale context aggregation by dilated convolutions,https://arxiv.org/abs/1511.07122)

空泛卷积也称作扩张卷积(Atrous Convolution)。

这是一个规范的离散卷积:





规范卷积

空泛卷积如下:



当 l=1 时,空泛卷积就变成了一个规范卷积。



直观上,空泛卷积通过在卷积核部分之间刺进空间让卷积核「胀大」。这个添加的参数 l(空泛率)标明晰咱们想要将卷积核放宽到多大。尽管各完结是不同的,可是在卷积核部分一般刺进 l-1 空间。下图显现了当 七情六欲l-1,2,4 时的卷积核巨细。



空泛卷积的感触野。本质上是在不添加额定的核算本钱的状况下调查感触野。

在图画中,3 x 3 的红点标明通过卷积后的输出图画的像素是 3 x 3。尽管三次空泛卷积都得出了相同维度的输出图画,可是模型调查到的感触野(receptive field)是大不相同的。

l=1 时,感触野为 3 x 3;l=2 时,感触野是 7 x 7;l=3 时,感触野增至 15x15。风趣的是,随同这些操作的参数数量本质上是相同的,不需求添加参数运算本钱就能「调查」大的感触野。

正因为此,空泛卷积常被用以低本钱地添加输出单元上的感触野,一起还不需求添加卷积核巨细,当多个空泛卷积一个接一个堆叠在一一起,这种办法是非常有用的。

《通过空泛卷积做多规划的上下文聚合》的论文作者在多层空泛卷积以外创立了一个网络,其间的空泛率 l 每层都以指数级的办法添加。成果,当参数数量每层仅有直线式的添加时,有用的感触野完结了指数型的添加。

该论文中,空泛卷积被用于体系地聚合多规划的上下文信息,而不需求丢掉分辨率。该论文标明,其提出的模块进步了其时(2016 年)最先进的语义切割体系的精确率。咱们能够阅览这篇论文取得更多信息。

08

可别离卷积

可别离卷积用于一些神经网络架构,例如 MobileNet(该架构论文地址:https://arxiv.org/abs/1704.04861)。可别离卷积分为空间可别离卷积(spatially separable convolution)和深度可别离卷积(depthwise separable convolution)。

8.1 空间可别离卷积

空间可别离卷积在图画的 2D 空间维度上履行,例如高和宽两个维度。从概念上来看,望文生义,空间可别离卷积将卷积分解为两项独自的操作。下面所展现的事例中,一个卷积核为 3x3 的 Sobel 卷积核拆分成了一个 3x1 卷积核和一个 1x3 卷积核。



一个卷积核为 3x3 的 Sobel 卷积核拆分成了一个 3x1 卷积核和一个 1x3 卷积核

在卷积中,3x3 卷积核能够直接对图画进行卷积操作。在空间可别离卷积中,首要由 3x1 卷积核对图画进行卷积,之后再运用 1x3 卷积核。在履行相同的操作中,这就要求 6 个而不是 9 个参数了。

此外,比起卷积,空间可别离卷积要履行的矩阵乘法运算也更少。举一个详细的事例,在卷积核为 3x3 的 5x5 图画上做卷积,要求横向扫描 3 个方位(以及纵向扫描 3 个方位)上的卷积核,共有 9 个方位,如下图标出的 9 个点所示。在每个方位都进行 9 次元素等级的乘法运算,共履行 9 x 9 = 81 次运算。



针对空间可别离卷积,另一方面,咱们先在 5x5 图画上运用一个 3x1 的过滤器,这样的话就能横向扫描 5 个方位的卷积核以及纵向扫描 3 个方位的卷积核,一共 5 x 3=15 个方位,如下图所标的点所示。这样的话就共要进行 15 x 3 = 45 次乘法运算。现在得到的是一个 3 x 5 的矩阵,这个矩阵通过 1 x 3 卷积核的卷积操作——从横向上的 3 个方位以及纵向上的 5 个方位来扫描该矩阵。

关于这 9 个方位中的每一个,都进行了 3 次元素等级的乘法运算,这个进程一共要求 9 x 3=27 次乘法运算。因而,整体上,该空间可别离卷积共进行了 45 + 27 = 72 次乘法运算,也比规范的卷积所要进行的乘法运算次数要少。



有 1 个通道的空间可别离卷积

让咱们略微归纳一下上面的事例。假定咱们现在在 m x m 卷积核、卷积比特币行情,万字长微博陪你看尽深度学习中的12种卷积互联网,郭顶步长=1 、填充=0 的 N x N 图画上做卷积。传统的卷积需求进行 (N-2) x (N-2) x m x m 次乘法运算,而空间可别离卷积只需求进行 N x (N-2) x m + (N-2) x (N-2) x m = (2N-2) x (N-2) x m 次乘法运算。空间可别离卷积与规范的卷积的核算本钱之比为:



关于图画巨细 N 大于过滤器巨细(N >> m),这个比率就变成了 2 / m,这就意味着在这种渐进状况(N >> m)下,关于一个 3x3 的过滤器,空间可别离卷积与规范的卷积之间的核算本钱比率为 2/3;关于一个 5x5 的过滤器,比率为 2/5;关于一个 7x7 的过滤器,比方为 2/7,以此类推。

尽管空间可别离卷积节约了核算本钱,可是它很少运用于深度学习中。一个首要的原因是,并不是一切的卷积核都能被拆分为 2 个更小的卷积核。假如咱们用这种空间可别离卷积来替代一切传统的卷积,就会捆绑咱们去搜索练习期间一切或许存在的卷积核,因为这个练习成果或许是还仅仅次优的。

8.2 深度可别离卷积

现在,让咱们移步到深度可别离卷积,它在深度学习中的运用要更遍及得多(例如在 MobileNet 和 Xception 中)。深度可别离卷积由两步组成:深度卷积以及 1x1 卷积。

在介绍这些进程前,值得回想一下前面部分所说到的 2D 卷积核 1x1 卷积。让咱们先快速过一下规范的 2D 卷积。举一个详细的事例,假定输入层的巨细为 7 x 7 x 3(高 x 宽 x 通道),过滤器巨细为 3 x 3 x 3,通过一个过滤器的 2D 卷积后,输出层的巨细为 5 x 5 x 1(仅有 1 个通道)。

运用 1 个过滤器做规范的 2D 卷积来创立一个 1 层的输出

一般来说,两个神经网络层间运用了多个过滤器,现在假定过滤器个数为 128。128 次 2D 卷积得到了 128 个 5 x 5 x 1 的输出映射。然后将这些映射堆叠为一个巨细为 5 x 5 x 128 的单个层。空间维度如高和宽缩小了,而深度则扩展了。



运用 128 个过滤器做规范的 2D 卷积来创立一个 128 层的输出

接下来看看运用深度可别离卷积怎么完结相同的转化。

首要,咱们在输入层上运用深度卷积。咱们在 2D 卷积中别离运用 3 个卷积核(每个过滤器的巨细为 3 x 3 x 1),而不运用巨细为 3 x 3 x 3 的单个过滤器。每个卷积核仅对输入层的 1 个通道做卷积,这样的卷积每次都得出巨细为 5 x 5 x 1 的映射,之后再将这些映射堆叠在一同创立一个 5 x 5 x 3 的图画,终究得出一个巨细为 5 x 5 x 3 的输出图画。这样的话,图画的空间维度缩小了,可是深度坚持与本来的相同。



深度可别离卷积—榜首步:在 2D 卷积中别离运用 3 个卷积核(每个过滤器的巨细为 3 x 3 x 1),而不运用巨细为 3 x 3 x 3 的单个过滤器。每个卷积核仅对输入层的 1 个通道做卷积,这样的卷积每次都得出巨细为 5 x 5 x 1 的映射,之后再将这些映射堆叠在一同创立一个 5 x 5 x 3 的图画,终究得出一个巨细为 5 x 5 x 3 的输出图画。

深度可别离卷积的第二步是扩展深度,咱们用巨细为 1x1x3 的卷积核做 1x1 卷积。每个 1x1x比特币行情,万字长微博陪你看尽深度学习中的12种卷积互联网,郭顶3 卷积核对 5 x 5 x 3 输入图画做卷积后都得出一个巨细为 5 x 5 x1 的映射。



这样的话,做 128 次 1x1 卷积后,就能够得出一个巨细为 5 x 5 x 128 的层。



深度可别离卷积完结这两步后,相同能够将一个 7 x 7 x 3 的输入层转化为 5 x 5 x 128 的输出层。

深度可别离卷积的完好进程如下图所示:



深度可别离卷积的完好进程

因而凯恩,做深度可别离卷积的优势是什么?高效!比较于 2D 卷积,深度可别离卷积的履行次数要少得多。

让咱们回想一下 2D 卷积事例中的核算本钱:128 个 3x3x3 的卷积核移动 5x5 次,一共需求进行的乘法运算总数为 128 x 3 x 3 x 3 x 5 x 5 = 86,400 次。

那可别离卷积呢?在深度卷积这一步,有 3 个 3x3x3 的卷积核移动 5x5 次,一共需求进行的乘法运算次数为 3x3x3x1x5x5 =上海社保 675 次;在第二步的 1x1 卷积中,有 128 个 3x3x3 的卷积核移动 5x5 次,一共需求进行的乘法运算次数为 128 x 1 x 1 x 3 x 5 x 5 = 9,600 次。因而,干洗深度可别离卷积共需求进行的乘法运算总数为 675 + 9600 = 10,275 次,花费的核算本钱仅为 2D 卷积的 12%。

因而关于恣意巨细的图画来说,运用深度可别离卷积能节约多少次核算呢?咱们略微归纳一下上面的事例。假定输入图画巨细为 H x W x D,2D 卷积的卷积步长为 1,填充为 0,卷积核巨细为 h x h x D(两个 h 持平)、个数为 Nc。2D 卷积后,巨细为 H x W x D 的输入层终究转比特币行情,万字长微博陪你看尽深度学习中的12种卷积互联网,郭顶换为巨细招聘广告为(H-h+1)x(W-h+1)x Nc 的输出层,一共需求进行的乘法运算次数为:Nc x h x h x D x (H-h+1) x (W-h+1)。

针对相同的转化,深度可别离卷樱井大毛菌积一共需求进行的乘法运算次数为:D x h x h x 1 x (H-h+1) x (W-h+1) + Nc x 1 x 1 x D x (H-h+1) x (W-h+1) = (h x h + Nc) x D x (H-h+1) x (W-h+1)。

深度可别离卷积与 2D 卷积之间的乘法运算次数之比为:



关于大部分现代结构而言,输出层往往都有许多个通道,例如几百乃至几千个通道。关于 Nc >> h 的层,上面的表达式会缩短为 1/h/h,这就意味着关于这个渐进的表达式而言,假如运用的过滤器巨细为 3 x 3,2D 卷积需求进行的乘法运算次数比深度可别离卷积多出 9 次;运用巨细为 5 x5 的过滤器,则要多出 25 次。

运用深度可别离卷积有什么缺陷吗?当然有。深度可别离卷积会削减卷积中的参数个数,这样的话,关于一个小的模型,假如选用深度可别离模型来踢打 2D 模型,该模型的才能就会被大为削弱。成果,该模型也会变成次优的模型。可是,假如恰当运用,深度可别离卷积能够进步功率而不会显着危害模型的功能。

09

扁平化卷积

《将扁平化卷积神经网络运用于前馈加快》(Flattened convolutional neural networks for feedforward acceleration,https://arxiv.org/abs/1412.5474)这篇论文对扁平化卷积(Flattened convolutions)进行了介绍。直观上,这种卷积的思路便是运用过滤器别离,行将规范的别离器拆分为 3 个 1D 别离器,而不是直接运用一个规范的卷积过滤器来将输入层映射为输出层。这个思路相似于前部分所说到的空间可别离卷积,其间的一个空间过滤器近似于两个 rank-1 过滤器。



图片源自:https://arxiv.org/abs/1412.5474

需求留意的一点事,假如规范卷积的过滤器是 rank-1 过滤器,这样的过滤器能够被拆分为 3 个 1D 过滤器的穿插乘积,可是这是一个前提条件而且规范过滤器的固有 rank 往往比实践运用中的更高。正如论文中所指出的:「跟着分类问题的难度添加,处理该问题还需求更多的要害部分... 深度网络中学习过滤搞鸡用具有散布的特征值,而且将别离直接用于过滤器会导致显着的信息丢掉。」

为了减轻这类问题,论文约束了感触野的联络然后让模型能够依据练习学习 1D 别离的过滤器。这篇论文宣称,通过运用由比特币行情,万字长微博陪你看尽深度学习中的12种卷积互联网,郭顶接连的 1D 过滤器组成的扁平化网络在 3D 空间的一切方向上练习模型,能够供给的功能与规范卷积网络适当,不过因为学习参数的显着削减,其核算本钱要更低得多。

10

分组卷积

2012 年的一篇 AlexNet 论文(ImageNet Classification with Deep Convolutional Neural Networks,https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)对分组卷积(Grouped convolution)进行了介绍。选用这种卷积的首要原因是为了让网络用有限的回忆(1.5GB 回忆/GPU)在两个 GPU 上进行练习。下图的 AlexNet 实践了大部分层的两条别离的卷积道路,正在进行两个 GPU 的模型并行化核算。

图片源自:https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

这儿我描绘的是分组卷积是怎么完结的。首要,传统的 2D 卷积进程如下图所示。在这个事例中,通过运用 128 个过滤器(每个过滤器的巨细为 3 x 3 x 3),巨细为 7 x 7 x 3 的输入层被转化为巨细为 5 x 5 x 128 的输出层。针对通用状况,可归纳为:通过运用 Dout 个卷积核(每个卷积核的巨细为 h x w x Din),可将巨细为 Hin x Win x Din 的输入层转化为巨细为 Hout x Wout x Dout 的输出层。



规范 2D 卷积

在分组卷积中,过滤器被拆分为不同的组,每一个组都担任具有必定深度的传统 2D 卷积的作业。下图的事例标明得更明晰一些。



拆分为 2 个过滤组的分组卷积

上图标明的是被拆分为 2 个过滤器组的分组卷积。在每个过滤器组中,其深度仅为名义上的 2D 卷积的一半(Din / 2),而每个过滤器组都包含 Dout /2 个过滤器。榜首个过滤器组(赤色)对输入层的前半部分做卷积([:, :, 0:Din/2]),第二个奈何桥过滤器组(蓝色)对输入层的后半部分做卷积([:, :, Din/2:Din])。终究,每个过滤器组都输出了 Dout/2 个通道。全体上,两个组输出的通道数为 2 x Dout/2 = Dout。之后,咱们再将这些通道堆叠到输出层中,输出层就有了 Dout 个通道。

10.1 分组卷积 VS 深度卷积

你或许现已调查到了分组卷积和深度可别离卷积中用到的深度卷积之间的某些联络和差异。假如过滤器组的数量与输入层的通道数相同,每个过滤器的深度便是 Din / Din = 1,其与深度卷积中的过滤器深度相同。

从另一个视点来说,每个过滤器组现在包含 Dout / Din 个过滤器。整体而言,其输出层的深度便是 Dout,这就与深度卷积的输出层深度不同,深度卷积不改动层的深度,但随后深度可别离卷积中的 1 x 1 卷积会加大层的深度。

履行分组卷积有如下几个优势:

榜首个优势是练习的高效性。因为卷积被拆分到几条道路中,每条道路都由不同的 GPU 别离进行处理。这一进程就答应模型以平行的办法在多个 GPU 上进行练习。比起在一个 GPU 上一个一个地练习模型,这种在多个 GPU 上的模型并行化练习办法每一步都能够给网络喂食更多的图画。模型并行化被以为比数据并行化更佳,后者将数据集进行拆分,然后对每一批数据进行练习。不过,当每批数据的巨细过小时,咱们履行的作业基本上是随机的,而不是批量梯度下降。这就会形成练习速度变慢或聚合作用变差的成果。

关于练习非常深度的神经网络,分组卷积变得很重要,如下图中 ResNeXt 所示。



图片源自:https://arxiv.org/abs/1611.05431

第二个优势是模型愈加高效,例如,当过滤器组数添加时,模型参数就会削减。在前一个事例中,在规范的 2D 卷积中,过滤器有 h x w x Din x Dout 个参数,而在拆分为 2 个过滤器组的分组卷积中,过滤器仅有 (h x w x Din/2 x Dout/2) x 2 个参数:参数数量削减了一半。

第三个优势是给人带来了些惊喜的。分组卷积能供给比规范 2D 卷积更好的模型。另一篇很棒的博客「A Tutorial on Filter Groups (Grouped Convolution)」也论述了这一点。这儿仅提取了文章的部分内容,咱们可前往 https://blog.yani.io/filter-group-tutorial/ 阅览全文。

其原因与稀少的过滤器有关。下面的图画便是相邻层的过滤器之间的相互联络,这个联络是稀少的。



在 CIFAR10 练习的 Network-in-Network 模型中相邻层的过滤器之间的相关性矩阵。高相关的过滤器对更亮,而低相关过滤器对更暗。图片源自:https://blog.yani.io/filter-group-tutorial/

那面向分组卷积的相关性映射是怎么样的呢?



当选用 1、2、4、8 和 16 个过滤器组练习时,在 CIFAR10 练习的 Network-in-Network 模型中相邻层的过滤器之间的相关性。图片源自:https://blog.yani.io/filter-group-tutorial/

上图标明的便是模型选用 1、2、4、8 和 16 个过滤器组练习时,相邻层的过滤器的相互联络。这篇文章提出了一个推论:「过滤器组的作用便是学习通道维度上的块对角结构的稀少性... 在对过滤器进行了分组的网络中,高相关性的过滤器以更结构化的办法学习。成果,不要求学习的过滤器联络也不再需求用参数进行标明,这就显着削减了网络中的参数数量,而且在削减参数的进程中不容易过度拟合,因而这种相似正则化的作用能够让优化器学习更精确、更有用的深度网络。」



过滤器别离:正如论文作者所指出的,过滤器组好像将学习的过滤器拆分成了两个不同的组:是非过滤器和五颜六色过滤器。图片源自:https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

此外,每个过滤器组都学习数据绝无仅有的标明。正如 AlexaNet 这篇论文的作者所说到的,过滤器组好像将学习的过滤器拆分成了两个不同的组:是非滤镜和五颜六色滤镜。

11

混洗分组卷积

旷视研讨院的 ShuffleNet 论文(ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices,https://arxiv.org/abs/1707.01083)对混洗分组卷积(Shuffled grouped convolution)进行了介绍。ShuffleNet 是一种核算高效的卷积架构,专为核算才能非常有限的移动设备(如 10–150 MFLOPs)规划。

混洗分组卷积背面的思路与分组卷积(运用于 MobileNet 、ResNeXt 等网络)以及深度可别离卷积(运用于 Xception)背面的思路相关。

总的来说,混洗分组卷积包含分组卷积和通道混洗(channel shuffling)。

在分组卷积部分,咱们了解到了过滤器被拆分为不同的组,每个组都担任具有必定深度的传统 2D 卷积的作业,显着削减了整个操作进程。鄙人图这个事例中,假定过滤器分成了 3 组。榜首个过滤器组对输入层的赤色部分做卷积;第二个和第三个过滤器组别离对输入层的绿色和蓝色部分做卷积。每个过滤器组中的卷比特币行情,万字长微博陪你看尽深度学习中的12种卷积互联网,郭顶积核深度仅为输入层整个通道的 1/3。

在这个事例中,进行榜首个分组卷积 GConv1 后,输入层被塔防游戏映射到中心的特征映射上,之后特征映射又通过榜首个分组卷积 GConv2 被映射到输出层上。



分组卷积尽管核算高效,但它也存在问题,即每个过滤器分组仅对早年面层的固定部分向后传递的信息进行处理。在上面这个图画的事例中,榜首个过滤器组(赤色)仅处理从输入通道的前 1/3 部分向后传递的信息;蓝色过滤器组仅处理从输入通道的后 1/3 部分向后传递的信息。这样的话,每个过滤器组就仅限于学习一些特定的特征,这种特点就阻止了练习期间信息在通道组之间活动,而且还削弱了特征标明。为了战胜这一问题,咱们能够运用通道混洗。

通道混洗的思路便是混合来自不同过滤器组的信息。下图中,显现了运用有 3 个过滤器组的榜首个分组卷积 GConv1 后所得到的特征映射。在将这些特征映射喂食到第二个分组卷积之前,先将每个组中的通道拆分为几个小组,然后再混合这些小组。



通道混洗

通过这种混洗,咱们再接着如常履行第二个分组卷积 GConv2。可是现在,因为通过混洗的层中的信息现已被混合了,咱们本质上是将特征映射层的不同小组喂食给了 GConv2 中的每个组。成果,不只信息能够在通道组间进行活动,特征标明也得到增强。

12

逐点分组卷积

ShuffleNet 论文(ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices,https://arxiv.org/abs/1707.01083)相同也对逐点分组卷积(Pointwise grouped convolution)进行了介绍。一般针对 MobileNet 或 ResNeXt 中的分组卷积,分组在 3x3 的空间卷积而不是 1x1 卷积上履行。

ShuffleNet 这篇论文以为 1x1 卷积的核算本钱也很高,提议也对 1x1 卷积进行分组。逐点分组卷积,望文生义,便是针对 1x1 卷积进行分组操作,这项操作与分组卷积的相同,仅有一项更改——便是在 1x1 过滤器而非 NxN 过滤器 (N>1) 履行。

在该论文中,作者运用了咱们都有所了解的 3 种卷积: (1) 混洗分组卷积; (2) 逐比特币行情,万字长微博陪你看尽深度学习中的12种卷积互联网,郭极点分组卷积; 以及 (3) 深度可别离卷积。这种架构规划能显着地削减核算量一起还能坚持精确性。在实践的移动设备上,ShuffleNet 的分类过错与 AlexNet 的适当。可是,从运用 AlexNe 的 720 MFLOPs 到运用 ShuffleNet 的 40–140 MFLOPs,核算本钱显着下降。在面向移动设备的卷积神经网络范畴,ShuffleNe 以相对较小的核算本钱以及杰出的模型功能广受欢迎。

参阅文献

参阅博文&文章

1. 「An Introduction to different Types of Convolutions in Deep Learning」:https://towardsdatascience.com/types-of-convolutions-in-deep-learning-717013397f4d

2. 「Review: DilatedNet — Dilated Convolution (Semantic Segmentation)」:https://towardsdatascience.com/review-dilated-convolution-semantic-segmentation-9d5a5bd768f5

3. 「ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Device班主任作业计划s」:https://medium.com/syncedreview/shufflenet-an-extremely-efficient-convolutional-neural-network-for-mobile-devices-72c6f5b01651

4. 「Separable convolutions「A Basic Introduction to Separable Convolutions」:https://towardsdatascience.com/a-basic-introduction-to-separable-convolutions-b99ec3102728

5. Inception network「A Simple Guide to the Versions of the Inception Network」:https://towardsdatascience.com/a-simple-guide-to-the-versions-of-the-inception-network-7fc52b863202

6. 「A Tutorial on Filter Groups (Grouped Convolution)」:https://blog.yani.io/filter-group-tutorial/

7. 「Convolution arithmetic animation」:https://github.com/vdumoulin/conv_arithmetic

8. 「Up-sampling with Transposed Convolution」:https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0

9. 「Intuitively Understanding Convolutions for Deep Learning」:https://towardsdatascience.com/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1

论文

1. Network in Network:https://arxiv.org/abs/1312.4400

2. Multi-Scale Context Aggregation by Dilated Convolutions:https://arxiv.org/abs/1511.07122

3. Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs:https://arxiv.org/abs/1412.7062

4. ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices:https://arxiv.org/abs/1707.01083

5. A guide to convolution arithmetic for deep learning :https://arxiv.org/abs/1603.07285

6. Going deeper with c名车标志图片大全onvolutions:https://arxiv.org/abs/1409.4842

7. Rethinking the Inception Architecture for Computer Vision :https://arxiv.org/pdf/1512.00567v3.pdf

8. Flattened convolutional neural networks for feedforward acceleration :https://arxiv.org/abs/1412.5474

9. Xception: Deep Learning with Depthwise Separable Convolutions:https://arxiv.org/abs/1610.02357

10. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications :https://arxiv.org/abs/1704.04861

11. Deconvolution and Checkerboard Artifacts:https://distill.pub/2016/deconv-checkerboard/

12. ResNeXt: Aggregated Residual Transformations for Deep Neural Networks:https://arxiv.org/abs/1611.05431


引荐阅览:

星标我,每天多一点才智



相关推荐

  • 暂无相关文章