神经网络的压缩装置及方法与流程

文档序号:16359294发布日期:2018-12-22 08:04阅读:141来源:国知局
神经网络的压缩装置及方法与流程

本发明涉及神经网络领域,尤其涉及一种神经网络的压缩装置及方法。

背景技术

近些年,深度神经网络(dnn)在计算机视觉领域取得了显著的成绩,而这突破性的进展则是因为人们拥有了大量的训练数据和强有力的计算资源。同时深度神经网络所需的存储空间和计算量也在不断增加。例如,被广泛使用的vgg-16网络需要500兆字节(mb)的存储空间,并且识别一张分辨率为224×224的图片需要15吉(g)次的浮点运算(flops)。最近深度神经网络在嵌入式或者移动设备上的应用在渐渐发展,比如自动驾驶、智能手机和智能摄像头等。这些移动设备的特点是较少的存储空间、有限的计算资源和较短的电池使用时间,这就成了深度神经网络更好地部署在移动设备中的瓶颈。因此,深度神经网络压缩与加速作为一种解决办法变得越来越热门,其目的是设计一种方法在保证网络性能没有明显降低的条件下减少网络的存储空间并加快网络的识别速度。

在众多的深度神经网络压缩与加速方法中,基于网络剪枝方法的研究最为热门。剪枝方法通常先在一个计算资源充足的设备上将大网络采用一种剪枝策略训练或者微调出一个稀疏的小网络模型,之后把小模型的参数部署在资源受限的移动设备上就可以运行了。较早的剪枝方法是一种不规则的剪枝,将深度神经网络中的一些权重置为零从而实现减少网络存储空间的目的。但是这种不规则的网络模型不利于网络的加速,除非要设计特别的硬件来实现。后来的剪枝方法则变成一种网络结构层面的剪枝,即剪枝网络的滤波器(filters)、通道(channels)或者滤波器形状(filtershapes)等。这类剪枝方法可以分成两类:(1)先在已经训练好的大模型上应用剪枝方法,然后通过微调步骤来恢复性能。但是这种方法需要先有一个训练好的网络模型,而对于一个新的识别任务往往没有训练好的模型,这就要额外花费不少时间来训练好一个性能可观的大网络;(2)直接在网络训练过程中加入稀疏约束得到一个结构稀疏的模型,然后应用剪枝方法再通过微调步骤以恢复性能。这类剪枝方法由于在训练时加入了稀疏性的约束条件,会使得网络训练变得困难。

以下为现有技术缺点:

1、基于已经训练好的大模型的剪枝方法通常需要一个细致的微调步骤,而且已有训练好的模型这个条件有时满足不了,比如我们应用在一个新的识别任务上。

2、在网络训练过程中加入稀疏约束的剪枝方法不仅由于稀疏约束惩罚项的加入使得网络的训练变得困难,而且在网络训练结束实施剪枝方法后还需要一个精细的微调步骤,这也导致结构精简的小模型得来变得费时。



技术实现要素:

(一)要解决的技术问题

本发明的目的在于提供一种神经网络的压缩装置及方法,以解决上述的至少一项技术问题。

(二)技术方案

本发明的一方面,提供了一种神经网络的压缩装置,包括:

因子矢量确定单元,分别确定用于对神经网络中每一层的滤波器和滤波器形状进行衰减的第一因子矢量和第二因子矢量,其中,第一因子矢量包括衰减因子c=1和第一衰减因子α,第二因子矢量包括衰减因子c和第一衰减因子β,其中α和β均大于0且小于1;

衰减单元,用于根据所述第一因子矢量与第二因子矢量分别对所述滤波器和滤波器形状进行衰减;

剪枝单元,用于对衰减后的滤波器和滤波器形状进行剪枝,确定压缩后的神经网络。

在本发明的一些实施例中,还包括:更新单元,用于通过反向传播算法更新所述滤波器的权重,并将第层第i个更新后的滤波器记作将第层更新后的滤波器形状记作其中,i≥0,l为滤波器的层数。

在本发明的一些实施例中,所述衰减单元根据所述第一因子矢量与第二因子矢量分别对所述滤波器和滤波器形状进行衰减,具体包括:

与第一因子矢量中的第i个衰减因子相乘,确定一次衰减后的滤波器其中,n为每一层的滤波器的个数;

重复滤波器的更新和衰减,以实现多次迭代,每次迭代包括一次更新和一次衰减,直至神经网络收敛;

与第二因子矢量进行运算,确定一次衰减后的滤波器形状其中,tile是tensorflow中的一个函数,⊙表示对应元素间的相乘操作;

重复滤波器形状的更新和衰减,以实现多次迭代,每次迭代包括一次更新和一次衰减,直至神经网络收敛。

在本发明的一些实施例中,剪枝单元对衰减后的滤波器和滤波器形状进行剪枝,具体包括:

将该神经网络的衰减后的滤波器在变形成二维矩阵形式的卷积核中以列的形式进行剪枝;

将该神经网络的衰减后的滤波器形状在变形成二维矩阵形式的卷积核中以行的形式进行剪枝。

本发明的另一方面,还提供了一种神经网络的压缩方法,包括:

分别确定用于对神经网络中每一层的滤波器和滤波器形状进行衰减的第一因子矢量和第二因子矢量,其中,第一因子矢量包括衰减因子c=1和第一衰减因子α,第二因子矢量包括衰减因子c和第一衰减因子β,其中α和β均大于0且小于1;

根据所述第一因子矢量与第二因子矢量分别对所述滤波器和滤波器形状进行衰减;

对衰减后的滤波器和滤波器形状进行剪枝,确定压缩后的神经网络。

在本发明的一些实施例中,还包括:

通过反向传播算法更新所述滤波器的权重,并将第层第i个更新后的滤波器记作将第层更新后的滤波器形状记作其中,i≥0,l为滤波器的层数。

在本发明的一些实施例中,根据所述第一因子矢量与第二因子矢量分别对所述滤波器和滤波器形状进行衰减,具体包括:

与第一因子矢量中的第i个衰减因子相乘,确定一次衰减后的滤波器其中,n为每一层滤波器的个数;

重复滤波器的更新和衰减,以实现多次迭代,每次迭代包括一次更新和一次衰减,直至神经网络收敛;

与第二因子矢量进行运算,确定一次衰减后的滤波器形状其中,tile是tensorflow中的一个函数,⊙表示对应元素间的相乘操作;

重复滤波器形状的更新和衰减,以实现多次迭代,每次迭代包括一次更新和一次衰减,直至神经网络收敛。

在本发明的一些实施例中,对衰减后的滤波器和滤波器形状进行剪枝,具体包括:

将该神经网络的衰减后的滤波器在变形成二维矩阵形式的卷积核中以列的形式进行剪枝;

将该神经网络的衰减后的滤波器形状在变形成二维矩阵形式的卷积核中以行的形式进行剪枝。

(三)有益效果

本发明的神经网络的压缩装置及方法,相较于现有技术,至少具有以下优点:

1、本发明基于渐进抑制学习,对神经网络进行压缩,在网络训练过程中加入削弱权值的第一和第二衰减因子,将权值衰减为零从而可将其剪枝,从而快速得到结构精简的神经网络模型,可以被部署在需要的移动设备上。

2、本发明的一次迭代包括一次衰减和一次更新,更新权重之后再将所有权重与其对应的缩放因子矢量相乘,能够快速地对神经网络进行精简,且能够大幅提高其压缩率和加速率。

3、本发明在每一步更新权值之后再对所有权值进行衰减,没有在训练目标函数上加入任何惩罚项,不会增加网络训练难度。而且本发明从头训练一个神经网络,不需要预训练好的网络模型,故可以应用到一个新的任务中。

附图说明

图1为本发明实施例的神经网络的压缩装置的结构示意图;

图2为本发明中在滤波器层次的剪枝方法在神经网络某一层上的示意图;

图3为本发明实施例的可剪枝神经网络卷积核的位置示意图;

图4为本发明实施例的神经网络的压缩方法的步骤示意图。

具体实施方式

现有技术中,基于已经训练好的大模型的剪枝方法通常需要一个细致的微调步骤,而且已有训练好的模型这个条件有时满足不了;在网络训练过程中加入稀疏约束的剪枝方法不仅由于稀疏约束惩罚项的加入使得网络的训练变得困难,而且在网络训练结束实施剪枝方法后还需要一个精细的微调步骤,这也导致结构精简的小模型得来变得费时。

有鉴于此,本发明提供了一种神经网络的压缩装置及方法,不需训练好的大模型,也不需加入稀疏惩罚项从头训练一个网络,只需基于渐进抑制学习,对神经网络进行压缩,在网络训练过程中加入削弱权值的第一和第二衰减因子,将权值衰减为零从而可将其剪枝,从而能够快速得到结构精简的神经网络模型。

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。

本发明实施例的一方面,提供了一种神经网络的压缩装置,如图1所示,该装置包括:

因子矢量确定单元1,分别确定用于对给定的神经网络中每一层的滤波器和滤波器形状进行衰减的第一因子矢量和第二因子矢量,其中,第一因子矢量包括衰减因子c=1和第一衰减因子α,第二因子矢量包括衰减因子c和第一衰减因子β,其中α和β均大于0且小于1;衰减单元2,用于根据所述第一因子矢量与第二因子矢量分别对所述滤波器和滤波器形状进行衰减;剪枝单元3,用于对衰减后的滤波器和滤波器形状进行剪枝,确定压缩后的神经网络。其中α和β就对应着要被削弱和剪枝的滤波器或者滤波器形状。

此外,该装置还包括更新单元,这样能够得到性能较好的压缩的神经网络,本发明实施例在每一次衰减前都进行更新步骤,更具体地为:通过反向传播算法更新所述滤波器的权重,并将第层第i个更新后的滤波器记作将第层更新后的滤波器形状记作其中,i≥0,l为滤波器的层数。

其中,衰减单元2用于根据所述第一因子矢量与第二因子矢量分别对所述滤波器和滤波器形状,具体包括:衰减单元2将与第一因子矢量中的第i个衰减因子相乘,确定一次衰减后的滤波器其中,n为每一层的滤波器的个数;重复滤波器的更新和衰减,以实现多次迭代,每次迭代包括一次更新和一次衰减,直至神经网络收敛;将与第二因子矢量进行运算,确定一次衰减后的滤波器形状其中,tile是tensorflow中的一个函数,⊙表示对应元素间的相乘操作;

重复滤波器形状的更新和衰减,以实现多次迭代,每次迭代包括一次更新和一次衰减,直至神经网络收敛。

剪枝单元3用于对衰减后的滤波器和滤波器形状进行剪枝,确定压缩后的神经网络,具体指:

将该神经网络的衰减后的滤波器在变形成二维矩阵形式的卷积核中以列的形式进行剪枝;

将该神经网络的衰减后的滤波器形状在变形成二维矩阵形式的卷积核中以行的形式进行剪枝。

接着,介绍滤波器层次(filter-level)的剪枝。

深度神经网络通常包含一些卷积层后跟一些全连接层。卷积操作是将一个大小为h×w×m输入特征图x通过一个大小为d×d×m×n的卷积核张量k映射为大小为h′×w′×n的输出特征图y。卷积核张量的前两维是空间维度,第三维是输入特征图的通道(channel)维,第四维是输出特征图的channel维。其中卷积核张量k可理解为是n个大小是d×d×m的滤波器。类似地,全连接操作是将大小为m的输入特征向量u通过大小为m×n的权重矩阵w映射为大小为n的输出向量v。全连接可看成是1×1的卷积操作,其中的卷积核张量是1×1×m×n。神经网络任一层的第i个输出特征通道yi可以由下式计算:

其中,表示卷积操作,ki是这一层的第i个滤波器并且bi∈r是相应的第i个偏置。由于偏置对于网络训练没有影响而且可以在实际训练中舍弃偏置,因此此后我们不再提及偏置项。

为简单清楚起见,我们在某一层中介绍我们的方法。设是第层的卷积核,每个元素对应一个滤波器(filter),在卷积层中而在全连接层中我们定义一个filter-wise缩放因子矢量其中参数α用来在网络训练过程中削弱权重并且指示了那些将被剪枝的filters。因此α在缩放因子中的比例直接决定了之后网络滤波器的剪枝比例,也间接可以得到剪枝后的网络压缩倍数和加速倍数。反过来说,缩放因子中α的比例可根据我们预先设置的剪枝比例确定,α具体的位置可以随机设置,这是因为神经网络训练前每个滤波器对网络的重要性是等同的,而α相对应的滤波器的重要性才会在网络训练过程中渐渐减小,另外一部分滤波器将会学习到更紧凑的特征。

如图2所示,通过反向传播(bp)算法一步一步更新权重,且在每步bp更新后加入一个削弱步骤,特别地,令是一次bp更新后的第层的第i个滤波器,我们使用下式来削弱滤波器:

即将所有filters中的权值乘于对应的缩放因子,如果该缩放因子小于1,则这些滤波器里的权值将在每一步减小一点点。而且由于小于1的因子α很接近于1,因此每步这种很小的改变对网络的训练几乎没有任何影响。而像这样训练足够步数之后,跟我们预期的一致,那些乘于缩放因子α的滤波器里的权值将会变成0。我们可安全地删除这些滤波器而不影响神经网络性能。

因为我们的缩放因子是对每一个滤波器做约束,这可大大减少网络参数。更重要的是,当第i个滤波器(filter)被移除时,下一层的所有滤波器对应的第i个通道(channel)也会被剪枝。因此在我们的方法中,没有引入通道层次(channel-wise)的缩放因子来剪枝卷积核的channels。

图2为本发明中在滤波器层次的剪枝方法在神经网络某一层上的示例。此图包含两个部分,左边实线框里的是网络渐进抑制训练过程,右边实线框里的是通过剪枝训练结束后的滤波器得到的精简网络。图中的scalingfactors即为滤波器层次的缩放因子α,每一个长方体表示该层的一个滤波器。网络训练时,在每一步反向传播更新权值之后,将所有滤波器乘于对应的缩放因子,最后,那些乘于缩放因子小于1的滤波器里的权值则衰减至0(如图中的虚线长方体表示),即可将它们剪枝然后得到可部署在移动设备上的小网络。

然后,介绍滤波器形状层次(filtershape-level)的剪枝。

在很多深度学习框架中(例如caffe和tensorflow),卷积计算通常被转换为矩阵相乘运算,即将输入特征图和卷积核变形成二维矩阵形式。输入特征图被分成许多小块,每一块都变形为大小为d×d×m的行向量,同时卷积核可变形为大小为d2m×n的矩阵,矩阵的每一列对应卷积核的每个滤波器(filter),而每一行就对应着卷积核的滤波器形状(filtershape)。

如图3所示,除了剪枝网络的filters,对应着图3(a)中用实粗线标记的那些列,我们的方法也可以移除卷积核的filtershapes,对应着图3(b)中那些标记的行。由于只有卷积层的卷积核才有滤波器形状,所以我们方法中滤波器形状层次的剪枝只应用在卷积层中。

对于第卷积层来说,我们可以定义filtershape-wise缩放因子矢量每个元素对应该层n个filter的d2m个filtershape。与剪枝滤波器方法中介绍的训练网络过程一样,我们在每一次反向传播(bp)步骤之后将所有权重乘于所在filtershape对应的缩放因子。设是一次bp更新后的第层的滤波器,我们通过下式来削弱滤波器形状:

其中,⊙表示对应元素间(element-wise)的相乘操作,“tile”是tensorflow中的一个函数,它可以使输入的张量重复λ次(其中λ也是一个张量)得到新的张量。在网络训练足够多的步数后,那些乘于缩放因子α的滤波器里的权值将会变成0,从而可被安全地剪枝。

图3表示本发明可剪枝神经网络卷积核的位置。该图含有3个子图,每一个子图的大矩形表示卷积核变形后的矩阵,大矩形中的每个小方形代表矩阵中的一个元素值。矩阵的每一列代表卷积核的一个滤波器(filter)而每一行表示卷积核的一个滤波器形状(filtershape)。图中用实粗线标记的行或列对应我们的方法选择要剪枝的部分。子图(a)中有两列被标记,表示滤波器层次的剪枝;子图(b)中有四行被标记,代表滤波器形状层次的剪枝;子图(c)中则有两列和四行被标记,表示卷积核的两列和四行都会被剪枝,即结合了滤波器层次的剪枝和滤波器形状层次的剪枝。

由于filter-level剪枝和filtershape-level的剪枝是相互独立且互补的,故而我们可以结合两者即同时移除卷积核矩阵的行和列(如图3(c))以获得更高的网络压缩与加速倍数。

本发明在网络训练过程中进行并且针对网络的滤波器(filters)和滤波器形状(filtershapes)两个层面进行渐进抑制。由于神经网络通过反向传播算法训练,在训练过程中对网络权值一点很小的扰动不会对训练造成明显的影响。因此,在网络训练过程中加入一个削弱权值的步骤来一步一步地将权值衰减为零从而可将其剪枝。

由于训练前网络的每个滤波器的重要性等同,所以缩放因子中1的位置可以随机设置。然后,利用反向传播算法训练,且在每一步更新权重之后再将所有权重与其对应的缩放因子矢量相乘。由于网络训练一般需要成千上万次迭代,举例来说,α取0.99,而0.9910000≈2.25×10-44,所以那些每步都乘数值小于1的缩放因子的滤波器里的权值将在训练中间衰减至0。当训练到收敛时,由于那些缩放因子小于1(α和β)对应的滤波器或者滤波器形状的权值已经衰减为0,即已经确定冗余的滤波器和滤波器形状的具体位置,因此我们可以直接将这些位置上的所有权值剪枝移除得到一个结构精简的小模型,从而可以被部署在需要的移动设备上使用。

最后,结合网络压缩和加速性能分析,说明本发明的效果。

深度神经网络不能很好地应用在移动设备的原因是其所需的存储空间大、运行时消耗的能量大和运算速度慢。而我们的滤波器剪枝的方法可以很好地解决这些问题:(1)网络的存储空间主要反映在网络的参数数量,剪枝滤波器有效地减少了网络的卷积核的参数;(2)网络运行时消耗的能量主要反映在网络运行时中间的特征图的大小,而剪枝滤波器则很好地将每层卷积输出的特征图的通道数降低从而降低了神经网络运行时消耗的能量;(3)网络的运算速度主要取决于网络的浮点运算次数(flops),而剪枝滤波器可以减小卷积操作中矩阵的大小从而使得浮点计算次数大大降低。下面我们具体分析我们的方法的理论网络压缩与加速性能。

给定缩放因子矢量,我们通过下式来计算缩放因子中常数1所占的比例,即:

其中i(·)代表指示函数,令的倒数。另外令分别对应第层的滤波器层次的缩放因子和滤波器形状层次的缩放因子通过上述公式计算得到的参数。深度神经网络的参数主要由卷积层和全连接层的卷积核构成,我们知道在原始网络中第卷积层和全连接层的参数数目分别为包含的浮点运算次数分别为表1为第层理论上的压缩率和加速率,如表1所示,我们可以很容易地得到每一层的网络参数减少倍数和浮点运算减少倍数。另外,网络每层的输出特征图的大小也将减少倍。

表1

本发明实施例的另一方面,还提供了一种神经网络的压缩方法,如图4所示,该方法包括:

s1、分别确定用于对神经网络中每一层的滤波器和滤波器形状进行衰减的第一因子矢量和第二因子矢量,其中,第一因子矢量包括衰减因子c=1和第一衰减因子α,第二因子矢量包括衰减因子c和第一衰减因子β,其中α和β均大于0且小于1;

s2、根据所述第一因子矢量与第二因子矢量分别对所述滤波器和滤波器形状进行衰减;

s3、对衰减后的滤波器和滤波器形状进行剪枝,确定压缩后的神经网络。

在本发明的一些实施例中,还包括更新步骤:通过反向传播算法更新所述滤波器的权重,并将第层第i个更新后的滤波器记作将第层更新后的滤波器形状记作其中,i≥0,l为滤波器的层数。

根据本发明的一种实施例,步骤s2可以包括以下子步骤:

s21、将与第一因子矢量中的第i个衰减因子相乘,确定一次衰减后的滤波器其中,n为每一层滤波器的个数;

s22、重复滤波器的更新和衰减,以实现多次迭代,每次迭代包括一次更新和一次衰减,直至神经网络收敛

s23、将与第二因子矢量进行运算,确定一次衰减后的滤波器形状其中,tile是tensorflow中的一个函数,⊙表示对应元素间的相乘操作;

s24、重复滤波器形状的更新和衰减,以实现多次迭代,每次迭代包括一次更新和一次衰减,直至神经网络收敛。

在本发明的一些实施例中,步骤s3可以包括以下子步骤:

s31、将该神经网络的衰减后的滤波器在变形成二维矩阵形式的卷积核中以列的形式进行剪枝;

s32、将该神经网络的衰减后的滤波器形状在变形成二维矩阵形式的卷积核中以行的形式进行剪枝。

综上,本发明的神经网络的压缩装置及方法,对神经网络进行压缩,在网络训练过程中加入削弱权值的第一和第二衰减因子,将权值衰减为零从而可将其剪枝,从而得到结构精简的神经网络模型。

除非有所知名为相反之意,本说明书及所附权利要求中的数值参数是近似值,能够根据通过本发明的内容所得的所需特性改变。具体而言,所有使用于说明书及权利要求中表示组成的含量、反应条件等等的数字,应理解为在所有情况中是受到“约”的用语所修饰。一般情况下,其表达的含义是指包含由特定数量在一些实施例中±10%的变化、在一些实施例中±5%的变化、在一些实施例中±1%的变化、在一些实施例中±0.5%的变化。

再者,“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的“一”或“一个”不排除存在多个这样的元件。

说明书与权利要求中所使用的序数例如“第一”、“第二”、“第三”等的用词,以修饰相应的元件,其本身并不意味着该元件有任何的序数,也不代表某一元件与另一元件的顺序、或是制造方法上的顺序,该序数的使用仅用来使具有某命名的一元件得以和另一具有相同命名的元件能做出清楚区分。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1