深度学习之卷积层补充

作者: 你要好好学习呀 | 来源:发表于2019-04-02 19:34 被阅读3229次

    卷积层的3个核心概念

    承接:深度学习之卷积神经网络

    下面来聊聊卷积层的三个核心概念:局部连接、空间位置排列及权值共享。

    局部连接

    前面我们也提到过,全连接的前馈神经网络有个非常致命的缺点,那就是可扩展性(Scalability)非常差。原因非常简单,网络规模一大,需要调参的个数以神经元数的平方倍增,导致它难以承受参数太多之痛。

    局部连接(Local Connectivity)在能某种程度上缓解这个“参数之痛”。下面以CIFAR-10图像集为输入数据,来探究一下局部连接的工作原理。

    每一幅CIFAR-10图像都是32×32×3的RGB图像。对于隐藏层的某个神经元,如果是在全连接前馈网络中,它不得不和前一层的所有神经元(32×32)都保持连接。

    但现在,对于卷积神经网络而言,隐藏层的这个神经元仅仅需要与前向层的部分区域相连接。这个局部连接区域有个特别的名称叫“感知域(receptive field)”,其大小等同于卷积核的大小(比如说5×5),如图11-4所示。相比于原来的32×32连接个数,变成现在的5×5个连接,连接的数量自然是稀疏得多,因此,局部连接也被称为“稀疏连接(Sparse Connectivity)”。

    局部连接示意图

    但需要注意的是,这里的稀疏连接,仅仅是指卷积核的感知域(5×5)相对于原始图像的高度和宽度(32×32)而言的。卷积核的深度(depth)则需要与原始数据保持一致,不能缩减。对于RGB图像而言,如果我们需要在红色、蓝色和绿色等三个通道提取特征,那么卷积核深度就是3)。所以对于隐藏层的某个神经元,它的前向连接个数是由全连接的32×32×3个,通过卷积操作,减少到局部连接的到5×5×3个。

    为了提取更多特征,如果卷积核的深度不是3个,而是100个,又会发生什么?很显然,这样一来的话,局部连接带来的参数个数减少量,就要大打折扣。

    空间排列

    决定卷积层的空间排列(Spatial arrangement)的有4个参数,它们分别是:卷积核的大小、深度、步幅及补零。其中,卷积核的大小(通常多是3×3或5×5的方矩阵),这里仅仅对另外三个结构进行说明。

    (1)卷积核的深度(depth):每个卷积核只能提取输入数据的部分特征。每一个卷积核与原始输入数据执行卷积操作,会得到一个卷积特征,这样的多个特征汇集在一起,我们称为特征图谱。如果我们使用三个不同的滤波器(即卷积核)对原始图像进行卷积操作,这样就可以生成三个不同的特征图。你可以把这三个特征图看作是堆叠在一起的2D(二维)矩阵。

    事实上,每个卷积核提取的特征都有各自的侧重点。因此,通常说来,多个卷积核的叠加效果要比单个卷积核的分类效果要好得多。例如在2012年的ImageNet竞赛中,Hinton教授和他的学生Krizhevsky等人打造了第一个“大型的深度卷积神经网络”,也即现在众所周知的AlexNet。在这个夺得冠军的深度学习算法中,他们使用的卷积核高达96个!可以说,自那时起,深度卷积神经网络一战成名,才逐渐被世人瞩目。

    (2)步幅(stride):即滤波矩阵在输入矩阵上滑动跨越的单元个数。设步幅大小为S,当S为1时,滤波器每次移动一个像素的位置。当S为2时,每次移动滤波器会跳过2个像素。S越大,卷积得到特征图就越小。以一维数据为例,当卷积核为[1,0,-1],输入矩阵为[0, 1, 2, -1, 1, -3, 0]时,下图显示了步幅分别为1和2卷积层的神经元分布情况。

    当步幅为1和2时,输入层和卷积层的神经元空间分布

    3)补零(zero-padding):补零操作通常用于边界处理。在有些场景下,卷积核的大小并不一定刚好就被输入数据矩阵的维度大小整除。因此,就会出现卷积核不能完全覆盖边界元素的情况。这时,我们就需要在输入矩阵的边缘使用零值进行填充,使得在输入矩阵的边界处的大小刚好和卷积核大小匹配。这样做的结果,相当于对输入图像矩阵的边缘进行了一次滤波。零填充的好处在于,它可以让我们控制特征图的大小。使用零填充的卷积叫做泛卷积(wide convolution),不适用零填充的叫做严格卷积(narrow convolution)。

    下面举例说明这个概念。假设步幅S的大小为2,为了简单起见,我们假设输入数据为一维矩阵 [0, 1, 2, -1, 1, -3],卷积核为[1, 0, -1],在卷积核滑动两次之后,此时输入矩阵边界多余一个“-3”,不够滑动第3次,如下图a所示。此时,便可以在输入矩阵填入额外的0元素,使得输入矩阵变成[0, 1, 2, -1, 1, -3, 0],这样一来,所有数据都能得到处理,如下图b所示。

    综上所述,在构造卷积层时,对于给定的输入数据,如果确定了卷积核的大小,卷积核的深度(个数)、步幅以及补零个数,那么卷积层的空间安排就能确定下来。以一维数据为例,假设数据的大小(数据元素的长度)为W,卷积核的深度为F,步幅大小为S,补零的数目为P,那么对于每个卷积核,在它与输入数据实施卷积操作后得到特征图谱,它包含的神经元个数N可以用以下公式计算得到。

    对于高维数据而言,对每一个维度的数据均按照公式计算即可。

     权值共享

    卷积层设计的第三个核心概念就是权值共享(Shared Weights),由于这些权值实际上就是不同神经元之间的连接参数,所以有时候,也将权值共享称为参数共享(Parameter Sharing)。

    为什么要设置权值共享呢?其实这也是无奈之举。通过局部连接处理后,神经元之间的连接个数已经有所减少。可到底减少多少呢?还以CIFAR-10数据集合为例,一个原始的图像大小为32×32×3,假设我们有100个卷积核,每个卷积核的大小为5×5×3,步幅为1,没有补零。先单独考虑一个卷积核,将上文公式扩展到二维空间,可以很容易计算得到每一个卷积核对应的特征图谱大小是28×28。也就是说,这个特征图谱对应有28×28神经元。而每个神经元以卷积核大小(5×5×3)连接前一层的“感知域(receptive field)”,也就是说,它的连接参数个数为(28×28)×(5×5×3)。如果考虑所有的100个卷积核,(在不考虑偏置参数的情况下)连接的参数个数为(5×5×3)×(28×28)×100 = 5,880,000。

    那么全连接的参数个数又是多少呢?仅仅考虑两层网络的情况下,其连接个数为(32×32×3)×(32×32×3)=9,437,184。对比这二者的数字可以发现,局部连接虽然降低了连接的个数,但整体幅度并不大,需要调节的参数个数依然非常庞大,因此还是无法满足高效训练参数的需求。

    而权值共享就是来解决这个问题的,它能显著降低参数的数量。该如何理解权值共享呢?首先从生物学意义上来看,相邻神经元的活性相似,从而可以它们共享相同的连接权值。

    其次单从数据特征上来看,我们可以把每个卷积核(即过滤核)当作一种特征提取方式,而这种方式与图像等数据的位置无关。这就意味着,对于同一个卷积核,它在一个区域提取到的特征,也能适用于于其他区域。基于权值共享策略,将卷积层神经元与输入数据相连,同属于一个特征图谱的神经元,将共用一个权值参数矩阵,如下图所示。经过权值共享处理后,CIFAR-10的连接参数一下子锐减为5×5×3×1×100 = 7500。

     权值共享策略

    权值共享保证了在卷积时只需要学习一个参数集合即可,而不是对每个位置都再学习一个单独的参数集合。因此参数共享也被称为绑定的权值(tied weights)。

    相关文章

      网友评论

        本文标题:深度学习之卷积层补充

        本文链接:https://www.haomeiwen.com/subject/khrnbqtx.html