CNN官方文档解读——深入学习卷积算法的指南(一)
1 Introduction
1.1离散卷积
1.2 池化
2 Convolution arithmetic
2.1 无填充,单位步长
2.2 零填充,单位步长
2.2.1 半填充
2.2.2 全填充
2.3 无填充、无单位迈步
2.4 零填充,无单位迈步
3 池化方法
4 转置卷积运算
4.1 作为矩阵运算的卷积
4.2 转置卷积
4.3 无填充,单位步长,转置
4.4 无零填充,单位步长,转置
4.4.1 一半(相同)填充,转置
4.4.2 全填充,转置
4.5 无零填充,非单位步长,转置
4.6 零填充,非单位步长,转置
Chapter 1
1 Introduction(介绍)
深度卷积神经网络(CNNs)一直是深度学习领域引人注目的进步的核心。虽然CNN年代最早使用解决字符识别任务((Le Cun et al., 1997),目前广泛的应用是由于更多的最近的工作,当一个很深的CNN在ImageNet用来战胜先进的图像分类的挑战(Krizhevsky et al ., 2012)。
因此,卷积神经网络对于机器学习从业者来说是一个非常有用的工具。然而,第一次学习使用CNNs通常是一种令人生畏的经历。卷积层的输出形状受其输入的形状以及内核形状、零填充和步长选择的影响,这些属性之间的关系不容忽视。这与完全连接的层形成了对比,后者的输出大小与输入大小无关。此外,CNNs通常还具有池化阶段,这又增加了全连接网络的复杂性。最后,所谓的转置卷积层(也称为分数阶卷积层)在最近越来越多的工作中得到应用(Zeiler等人,2011;Zeiler和Fergus, 2014;Long et al., 2015;Radford et al., 2015;Visin et al., 2015;以及它们与卷积层的关系已经用不同程度的清晰度进行了解释。
本指南的目标有两个:
- 解释卷积层和转置卷积层之间的关系。
- 给出了卷积层、池化层和置换层中inputshape、kernel shape、zero padding、steps和output shape之间关系的直观理解。
为了保持广泛的适用性,本指南中显示的结果独立于实现细节,并适用于所有常用的机器学习框架suchasTheano(Bergstraet al.,2010;Bastienet al.,2012),Torch (Collobert et al., 2011)、Tensorflow (Abadi et al., 2015)和Caffe (Jia et al., 2014)。本章简要回顾了CNNs的主要构建模块,即离散卷积和池。有关本课题的深入研究,请参见《深度学习教材》(Goodfellow et al., 2016)第9章。
1.1 Discrete convolutions(离散卷积)
神经网络的关键是仿射变换:接收一个向量作为输入,然后与一个矩阵相乘以产生输出(在将结果通过非线性传递之前,通常会向其添加一个偏置向量)。这适用于任何类型的输入,无论是图像、声音剪辑还是无序的特性集合:无论它们的维数如何,它们的表示总是可以在转换之前被压平成向量。
图像、声音剪辑和许多其他类似的数据都有一个固有的结构。更正式地说,它们共享这些重要的属性:
•它们被存储为多维数组。
•它们有一个或多个轴,用于排序(例如,图像的宽度和高度轴,声音剪辑的时间轴)。
•一个轴,称为通道轴,用于访问数据的不同视图(例如,彩色图像的红、绿、蓝通道,或立体声音轨的左、右通道)。
当应用仿射变换时,不利用这些性质;事实上,所有的轴都是用同样的方法处理的,拓扑信息没有被考虑进去。尽管如此,利用数据的隐式结构在解决某些任务时还是非常方便的,比如计算机视觉和语音识别,在这些情况下最好还是保留它。这就是离散卷积发挥作用的地方。
离散卷积是一个线性变换它保留了这个有序的概念。它是稀疏的(只有几个输入单元贡献给给定的输出单元)和重用参数(相同的权重应用于输入中的多个位置)。图1.1提供了一个离散卷积的例子。浅蓝色网格称为输入特征图。为了保持绘图的简单性,只表示一个输入特征图,但是将多个特征图堆叠在一起的情况并不少见。核(阴影区域)的值在输入特性图上滑动。在每个位置,计算内核的每个元素与它所重叠的输入元素之间的乘积,并对结果进行求和,以获得当前位置的输出。这个过程可以根据需要使用不同的内核格式和输出功能图(图1.3)。这个过程的最终输出称为输出特征图。如果有多个输入的特征映射,那么内核就必须是三维的——或者,等价地,每个特征映射都将与一个不同的内核进行卷积——结果的特征映射将被elementwise求和以生成输出的特征映射。
图1.1所示的卷积是二维卷积的一个实例,但它可以推广到N-D卷积。例如,在一个三维卷积中,内核是一个长方体,它会在输入特征图的高度、宽度和深度之间滑动。
定义离散卷积的内核集合的形状对应于(n,m,k1,…,kN)的某个排列,其中:
n≡输出特征映射数
m≡输入特征图谱数
kj≡沿着j轴的核大小
卷积层沿j轴的输出尺寸oj受以下属性影响:
•ij:沿着j轴输入大小
•kj:沿着j轴内核大小
•sj:沿j轴的步幅(内核的两个连续位置之间的距离)
•pj:沿着j轴的零填充(在一个轴的开始和结束处连接的零的数量)
例如,图1.2显示了一个3×3内核应用于一个5×5输入,使用2×2步填充1×1个0的边界。
注意,跨步构成了一种子抽样形式。作为一种替代解释为内核被翻译多少的度量,跨步也可以被视为保留了多少输出。例如,通过两个跃点移动内核等同于通过一个跃点移动内核,但只保留奇数输出元素(图1.4)。
1.2 Pooling(池化)
除了离散卷积本身之外,池化操作构成了CNNs中的另一个重要构件。池化操作通过使用一些函数来总结子区域,例如取平均值或最大值,从而减少了feature map的大小。池化的工作方式是在输入端滑动一个窗口,并将窗口的内容提供给池化函数。在某种意义上,池化的工作原理非常类似于离散卷积,但它用其他函数替代了由核函数描述的线性组合。图1.5提供了平均池的示例,图1.6提供了最大池的示例。
![图1.5:使用1×1步计算5×5输入的3×3平均池化操作的输出值]
(https://img-blog.****img.cn/2020051011014171.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNTM1MTMz,size_16,color_FFFFFF,t_70)
以下属性会影响池化层沿j轴的输出大小oj:
•ij:沿j轴的输入尺寸
•kj:沿j轴的池化窗口大小
•sj:沿j轴的跨距(池化窗口的两个连续位置之间的距离)
Chapter 2
2 卷积运算
卷积层属性之间不跨轴交互的事实简化了对它们之间关系的分析过程,选择沿j轴的kernel size、stride和零填充只会影响j轴的输出大小,因此本章将重点简化设置如下:
•二维离散卷积(N = 2),
•正方形输入(i1 = i2 = i),
•正方形内核大小(k1 = k2 = k),
•沿两个轴相同的步幅(s1 = s2 = s),
•沿两个轴相同的零填充(p1 = p2 = p)
这有助于分析和可视化,但请记住,这里列出的结果也适用于N-D和非平方情况。
2.1 No zero padding, unit strides(无填充,单位步长)
要分析的最简单的情况是,内核只是在输入的每个位置上滑动(如,s=1与p=0)。图2.1给出了i = 4和k = 3的例子。在这种情况下,定义输出大小的一种方法是通过输入上可能放置内核的数量。让我们考虑一下宽度轴:内核从输入功能映射的最左边开始,一步一步地滑动,直到它接触到输入的右边。输出的大小将等于执行的步骤数,再加上一个步骤,表示内核的初始位置(图2.8a)。同样的逻辑也适用于高度轴。
更正式地说,可以推断出以下关系:
关系1:对于任意i和k,对于s = 1和p = 0, o = (i - k) + 1。
2.2 Zero padding, unit strides(零填充,单位步长)
考虑到零填充(如,只限制为s = 0),让我们考虑它对有效输入大小的影响:p个0的填充将有效输入大小从i更改为i + 2p。在一般情况下,关系1可以用来推断以下关系:
关系2:对于任意i, k和p,对于s = 1, o = (i - k) + 2p + 1。
图2.2给出了i = 5、k = 4和p = 2的例子。
在实践中,由于它们各自的属性,零填充的两个特定实例被广泛地使用。让我们更详细地讨论一下。
2.2.1 半填充
使输出大小与输入大小相同(即, o = i)可以是一个理想的属性:
关系3:对于任意i和k个奇数(k = 2n + 1, n∈N), s = 1, p = [k/2c] = n,
o = i + 2[k/2]−(k−1)= i + 2n−2n = i。
这有时被称为半填充。图2.3给出了i = 5、k = 3和(因此)p = 1的示例。
2.2.2 全填充
虽然对内核进行卷积通常会减少相对于输入大小的输出大小,但有时需要相反的结果。这可以通过适当的补零来实现:
关系4:对于任何i和k,对于p = k−1和s = 1,
o = i + 2(k−1)−(k−1)= i + (k−1)。
这有时被称为全填充,因为在这种设置中,内核在输入特性图上的每一个可能的部分或全部重叠都被考虑进去了。图2.4给出了i = 5, k = 3和(因此)p = 2的例子。
2.3 无零填充,非单位步长
到目前为止,所有派生的关系都只适用于跨单元的卷积。合并非单一步长需要另一个推理跳跃。为了便于分析,让我们暂时忽略补零(例,图2.5给出了i = 5, k = 3, s = 2的例子)。
同样,输出大小可以根据内核在输入上可能的位置数来定义。让我们考虑宽度轴:内核像往常一样从输入的最左边开始,但这一次它以s大小的步长滑动,直到它碰到输入的右边。输出的大小再次等于所做的步骤数,加上1,表示内核的初始位置(图2.8b)。同样的逻辑也适用于高度轴。由此可以推导出以下关系:
关系5:对于任意i k s,对于p = 0,
floor函数解释了这样一个事实,有时最后一个可能的步骤不符合内核到达输入的末端,即。,一些输入单元被省略了(实例参见图2.7)。
2.4 零填充,非单位步长
最常见的情况(使用非单位步长对零填充输入进行卷积)可以通过对大小为i + 2p的有效输入应用关系5来得到,类似于关系2所做的:
关系6:对于任意i k p s,
如前所述,floor函数意味着在某些情况下,对于多个输入大小,卷积将产生相同的输出大小。更具体地说,如果i + 2p−k是s的倍数,那么任何输入长度j = i + a, a∈{0,…, s−1}将产生相同的输出大小。注意,这种歧义只适用于s > 1。
图2.6给出了i = 5, k = 3, s = 2, p = 1的例子,图2.7给出了i = 6, k = 3, s = 2, p = 1的例子。有趣的是,尽管这些卷积具有不同的输入大小,但它们具有相同的输出大小。虽然这并不影响对卷积的分析,但是在转置卷积的情况下,这会使分析变得复杂。