掌桥专利:专业的专利平台
掌桥专利
首页

一种神经网络压缩方法、装置、计算机设备及存储介质

文献发布时间:2023-06-19 12:10:19


一种神经网络压缩方法、装置、计算机设备及存储介质

技术领域

本公开涉及神经网络技术领域,具体而言,涉及一种神经网络压缩方法、装置、计算机设备及存储介质。

背景技术

深度学习是一种计算密集型的算法,随着处理任务的多样性及复杂度越来越高,对算法准确性及实时性要求不断增高,因此神经网络的规模越来越大,从而需要更多的计算及存储资源的开销,从而给神经网络的部署带来了压力。

相关技术中,在对神经网络进行压缩时,一般是在训练完成后,再对训练完成的神经网络进行压缩处理,然而在对神经网络进行压缩处理之后,神经网络的网络精度会大幅下降,因此这种方法往往需要大量的训练数据才能对下降的网络精度进行恢复,从而消耗了大量的计算资源,效率较低。

发明内容

本公开实施例至少提供一种神经网络压缩方法、装置、计算机设备及存储介质。

第一方面,本公开实施例提供了一种神经网络压缩方法,包括:

将待压缩神经网络的多个中间层进行分组,确定多个待处理中间层组;

对所述多个待处理中间层组进行压缩处理,并基于压缩处理后的各个所述待处理中间层组和所述待压缩神经网络,分别构建各个所述待处理中间层组对应的子网络;

调整各个所述子网络中待处理中间层组的网络参数,并基于调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络。

上述方法中,通过对待压缩神经网络的多个中间层进行分组,然后对分组后得到的待处理中间层组进行压缩处理,再调整基于压缩处理后的待处理中间层构建的子网络的网络参数,这样,由于调整的是子网络中待处理中间层组的网络参数,网络参数的数量较少,因此仅需要少量的训练数据即可完成对子网络的训练,且训练速度也较快;再通过调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络,这样,可以在保证压缩网络的网络精度的同时,提升了压缩的速度。

一种可能的实施方式中,所述对所述多个待处理中间层组进行压缩处理,包括:

对所述待处理中间层组包含的第一中间层的权重参数进行压缩处理;和/或,对所述待处理中间层组包含的第一中间层的输出数据进行压缩处理。

这样,通过至少一种压缩处理方法对待处理中间层组进行压缩,可以进一步缩小待压缩神经网络的规模。

一种可能的实施方式中,所述基于压缩处理后的各个所述待处理中间层组和所述待压缩神经网络,分别构建各个所述待处理中间层组对应的子网络,包括:

针对压缩处理后的任一待处理中间层组,基于以下方法构建所述任一待处理中间层组对应的子网络:

确定所述待压缩神经网络中,所述压缩处理后的待处理中间层组包含的第一中间层对应的第二中间层;

用所述第一中间层替换所述第二中间层,得到所述任一待处理中间层组对应的子网络。

这样,通过构建多个包含压缩处理后的待处理中间层的子网络,通过各个子网络能够实现对于压缩出处理后的待处理中间层组的单独训练,这样在调整的时候,仅需调整待处理中间层的网络参数,所需要调整的网络参数数量较少,因此训练速度较快,训练所需的样本数据较少。

一种可能的实施方式中,所述基于调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络,包括:

从多个调整后的所述待处理中间层组中,确定目标中间层组;

基于所述目标中间层组和初始神经网络,构建中间压缩网络;

调整所述中间压缩网络中的网络参数,并将调整后的中间压缩网络作为所述初始神经网络,返回执行确定目标中间层组的步骤,直至所述多个调整后的所述待处理中间层组的各个待处理中间层组均被用于构建所述中间压缩网络,得到所述待压缩神经网络对应的压缩网络;

其中,第一次构建中间压缩网络时所使用的初始神经网络为所述待压缩神经网络。

这样,由于每个待处理中间层组的网络参数都是调整过的,因此在构建压缩网络时,每一次调整中间压缩网络的网络参数可以理解为使得目标中间层与中间压缩网络更加融合。

一种可能的实施方式中,所述从多个调整后的所述待处理中间层组中,确定目标中间层组,包括:

确定多个调整后的所述待处理中间层组中,未被用于构建所述中间压缩网络的待筛选中间层组;

按照预设确定规则,从所述待筛选中间层组中确定所述目标中间层组。

这样,可以使得每个待处理中间层组都可以用于构建压缩网络。

一种可能的实施方式中,所述基于所述目标中间层组和初始神经网络,构建中间压缩网络,包括:

确定所述初始神经网络中与所述目标中间层组对应的待替换中间层;

使用所述目标中间层组中的中间层替换所述初始神经网络中的待替换中间层,得到所述中间压缩网络。

这样,可以通过初始神经网络的网络架构,将各个目标中间层进行融合,避免了重新构建神经网络,提升了压缩网络的确定效率。

一种可能的实施方式中,所述调整所述中间压缩网络中的网络参数,包括:

确定所述中间压缩网络中与所述多个调整后的所述待处理中间层组对应的目标中间层;

调整所述目标中间层的网络参数。

这样,由于调整的是目标中间层的网络参数,所以完成训练所需要的训练数据较少,且训练速度也更快。

一种可能的实施方式中,所述压缩处理包括以下至少一种:

稀疏化处理、量化处理、剪枝处理、二进制化处理、权值共享。

第二方面,本公开实施例还提供一种神经网络压缩装置,包括:

确定模块,用于将待压缩神经网络的多个中间层进行分组,确定多个待处理中间层组;

压缩模块,用于对所述多个待处理中间层组进行压缩处理,并基于压缩处理后的各个所述待处理中间层组和所述待压缩神经网络,分别构建各个所述待处理中间层组对应的子网络;

调整模块,用于调整各个所述子网络中待处理中间层组的网络参数,并基于调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络。

一种可能的实施方式中,所述压缩模块,在对所述多个待处理中间层组进行压缩处理时,用于:

对所述待处理中间层组包含的第一中间层的权重参数进行压缩处理;和/或,对所述待处理中间层组包含的第一中间层的输出数据进行压缩处理。

一种可能的实施方式中,所述压缩模块,在基于压缩处理后的各个所述待处理中间层组和所述待压缩神经网络,分别构建各个所述待处理中间层组对应的子网络时,用于:

针对压缩处理后的任一待处理中间层组,基于以下方法构建所述任一待处理中间层组对应的子网络:

确定所述待压缩神经网络中,所述压缩处理后的待处理中间层组包含的第一中间层对应的第二中间层;

用所述第一中间层替换所述第二中间层,得到所述任一待处理中间层组对应的子网络。

一种可能的实施方式中,所述调整模块,在基于调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络时,用于:

从多个调整后的所述待处理中间层组中,确定目标中间层组;

基于所述目标中间层组和初始神经网络,构建中间压缩网络;

调整所述中间压缩网络中的网络参数,并将调整后的中间压缩网络作为所述初始神经网络,返回执行确定目标中间层组的步骤,直至所述多个调整后的所述待处理中间层组的各个待处理中间层组均被用于构建所述中间压缩网络,得到所述待压缩神经网络对应的压缩网络;

其中,第一次构建中间压缩网络时所使用的初始神经网络为所述待压缩神经网络。

一种可能的实施方式中,所述调整模块,在从多个调整后的所述待处理中间层组中,确定目标中间层组时,用于:

确定多个调整后的所述待处理中间层组中,未被用于构建所述中间压缩网络的待筛选中间层组;

按照预设确定规则,从所述待筛选中间层组中确定所述目标中间层组。

一种可能的实施方式中,所述调整模块,在基于所述目标中间层组和初始神经网络,构建中间压缩网络时,用于:

确定所述初始神经网络中与所述目标中间层组对应的待替换中间层;

使用所述目标中间层组中的中间层替换所述初始神经网络中的待替换中间层,得到所述中间压缩网络。

一种可能的实施方式中,所述调整模块,在调整所述中间压缩网络中的网络参数时,用于:

确定所述中间压缩网络中与所述多个调整后的所述待处理中间层组对应的目标中间层;

调整所述目标中间层的网络参数。

一种可能的实施方式中,所述压缩处理包括以下至少一种:

稀疏化处理、量化处理、剪枝处理、二进制化处理、权值共享。

第三方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。

第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。

关于上述神经网络压缩装置、计算机设备、及计算机可读存储介质的效果描述参见上述神经网络压缩方法的说明,这里不再赘述。

为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本公开实施例所提供的一种神经网络压缩方法的流程图;

图2示出了本公开实施例所提供的神经网络压缩方法中,构建所述子网络的示意图;

图3示出了本公开实施例所提供的神经网络压缩方法中,构建所述任一待处理中间层组对应的子网络的具体方法的流程图;

图4示出了本公开实施例所提供的神经网络压缩方法中,构建所述待压缩神经网络对应的压缩网络的具体方法的流程图;

图5示出了本公开实施例所提供的神经网络压缩方法中,确定目标中间层组的具体方法的流程图;

图6示出了本公开实施例所提供的神经网络压缩方法中,构建中间压缩网络的具体方法的流程图;

图7示出了本公开实施例所提供的神经网络压缩方法中,调整所述中间压缩网络中的网络参数的具体方法的流程图;

图8示出了本公开实施例提供的另一种神经网络压缩方法的示意图;

图9示出了本公开实施例所提供的一种神经网络压缩装置的示意图;

图10示出了本公开实施例所提供的一种计算机设备的结构示意图。

具体实施方式

为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。

经研究发现,相关技术中,在对神经网络进行压缩时,一般是在训练完成后,再对训练完成的神经网络进行压缩处理,然而在对神经网络进行压缩处理之后,神经网络的网络精度会大幅下降,因此这种方法往往需要大量的训练数据才能对下降的网络精度进行恢复,从而消耗了大量的计算资源,效率较低。

基于上述研究,本公开提供了一种神经网络压缩方法、装置、计算机设备及存储介质,通过对待压缩神经网络的多个中间层进行分组,然后对分组后得到的待处理中间层组进行压缩处理,再调整基于压缩处理后的待处理中间层构建的子网络的网络参数,这样,由于调整的是子网络中待处理中间层组的网络参数,网络参数的数量较少,因此仅需要少量的训练数据即可完成对子网络的训练,且训练速度也较快;再通过调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络,这样,可以在保证压缩网络的网络精度的同时,提升了压缩的速度。

为便于对本实施例进行理解,首先对本公开实施例所公开的一种神经网络处理方法进行详细介绍,本公开实施例所提供的神经网络处理方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备。在一些可能的实现方式中,该神经网络处理方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。

参见图1所示,为本公开实施例提供的神经网络压缩方法的流程图,所述方法包括步骤S101~S103,其中:

S101:将待压缩神经网络的多个中间层进行分组,确定多个待处理中间层组。

S102:对所述多个待处理中间层组进行压缩处理,并基于压缩处理后的各个所述待处理中间层组和所述待压缩神经网络,分别构建各个所述待处理中间层组对应的子网络。

S103:调整各个所述子网络中待处理中间层组的网络参数,并基于调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络。

针对S101,这里所述待压缩神经网络可以是多层神经网络,所述多层神经网络的网络结构中包括输入层、中间层(隐层)以及输出层。在一种可能的应用场景中,以所述待压缩神经网络为卷积神经网络(Convolutional Neural Networks,CNN)为例,所述中间层包括卷积层、池化层、激活层等多个处理层。

其中,所述待压缩神经网络可以是预先训练好的(此时网络精度最高),而对所述待压缩神经网络进行压缩处理之后,虽然部分性能可以相应得到提升(比如神经网络处理速度得到提升),但神经网络的网络精度会出现下降,尤其是在同时对所述待压缩神经网络的多个中间层进行压缩时,同时进行压缩处理的中间层的个数越多,网络精度发生较大下降的可能性就越大。

当所述网络精度突然下降过大时,会使得在后续进行重新训练时的损失函数难以拟合,也即无法较好的完成重新训练的过程,导致网络精度损失较大,使得最终得到的神经网络的网络精度也较低,其中,所述网络精度用于表征神经网络输出结果的准确性。与之相应的,为了恢复神经网络的网络精度,所需要使用的训练数据也就越多。

实际应用中,出于隐私、版权等多方面考量,所述预先训练好的待压缩神经网络的提供方往往不会提供所有的训练数据,而只是提供小部分的样本数据以供使用者使用,这就导致了可以用于训练神经网络的样本数据较少,使用较少的样本数据对神经网络进行训练,以下简称小样本训练。

在所述小样本训练的场景下,受限于训练时的样本数据数量,使得同时处理过多中间层所导致的网络精度问题显得尤为突出,因此可以对待压缩神经网络的多个中间层进行分组,并对得到的每组待处理中间层进行相应的压缩处理,后续进行的神经网络的网络精度恢复训练则针对各组待处理中间层组进行,从而可以避免一次性压缩过多的中间层导致的神经网络的网络精度突然下降过大的问题。

具体的,在将待压缩神经网络的多个中间层进行分组,确定多个待处理中间层组时,可以使用以下分组策略:

策略一、基于与中间层个数匹配的分组个数进行分组。

这里,可以提前为不同个数的中间层设置不同的分组个数,比如大于/等于50层对应的分组个数为10个,小于50层对应的分组个数为5个。每组待处理中间层组可以分配相同的层数,当无法平均分配时则将多余的中间层分配至任意一个待处理中间层组中。

示例性的,当需要进行压缩处理的中间层有53个时,可以确定其对应的分组个数为10个,则可以确定各待处理中间层组的层数为5、5、5、5、5、5、5、5、5、8。

策略二、基于所述待压缩神经网络的中间层的网络结构进行分组。

这里,神经网络的中间层在实际使用中往往是以一定的结构进行循环设置的,识别出中间层的网络结构的循环结构之后,即可按照所述循环结构进行分组。

示例性的,以所述待压缩神经网络为CNN,所述CNN的中间层的网络结构为卷积层、激活层、卷积层、激活层、池化层、卷积层、激活层、卷积层、激活层、池化层、卷积层、激活层、卷积层、激活层、池化层这15个中间层为例,可以识别出该CNN是以相邻的卷积层、激活层、卷积层、激活层、池化层这5个中间层为一个循环进行数据处理的,从而可以将该CNN的中间层分为3个待处理中间层组,每个待处理中间层组中的中间层均为卷积层、激活层、卷积层、激活层、池化层。

策略三、基于所述待压缩神经网络的中间层的类型进行分组。

这里,可以将所述待压缩神经网络中同一类型的中间层分到同一个待处理中间层中。

示例性的,以所述待压缩神经网络为CNN为例,可以将所述CNN的中间层中,所有的卷积层分到同一个待处理中间层组;将所有的激活层分到同一个待处理中间层组,以次类推,直至对还神经网络全部类型的中间层都分组完毕。

这样,在后续进行压缩处理时,可以基于不同类型的中间层在进行数据处理时的处理特点,进行针对性的压缩处理,从而提高了对所述待压缩神经网络的(压缩)处理效果。

S102:对所述多个待处理中间层组进行压缩处理,并基于压缩处理后的各个所述待处理中间层组和所述待压缩神经网络,分别构建各个所述待处理中间层组对应的子网络。

这里,所述压缩处理包括稀疏化处理、量化处理、剪枝处理、二进制化处理、权值共享中的至少一种。

需要说明的是,在进行压缩处理时,可以根据神经网络的网络类型来确定压缩处理的方式,或者可以根据待压缩的中间层的类型来确定压缩处理的方式,比如可以针对类型为CNN的神经网络的中间层进行量化处理和稀疏化处理,又比如可以对类型为激活层的中间层进行量化处理;或者,针对同一类型的神经网络,也可以对其中相同类型的中间层采取相同或不同的压缩处理方式,比如针对CNN中的激活层,可以对部分进行量化处理,剩余部分则进行稀疏化处理。具体实施时,对压缩处理方式的选择和使用可以根据实际需要来执行,本公开实施例对此不做限定。

一种可能的实施方式中,在对所述多个待处理中间层组进行压缩处理时,包括以下四种方式中的至少一种:

(1)、仅对所述待处理中间层组包含的第一中间层的权重参数进行压缩处理。

(2)、仅对所述待处理中间层组包含的第一中间层的输出数据进行压缩处理。

(3)、对所述第一中间层的权重参数和输出数据都进行压缩处理。

(4)、对部分第一中间层的权重参数进行压缩处理,对剩余部分的第一中间层的输出数据进行压缩处理等组合方式。

这里,所述待处理中间层组中所包含的每一个中间层可以均为所述第一中间层,或者,所述第一中间层是指所述待处理中间层组中的部分中间层;通过至少一种压缩处理方法对待处理中间层组进行压缩,可以进一步缩小待压缩神经网络的规模,具体的组合方式可以根据实际需要来确定,本公开实施例对此不做限定。

实际应用中,在小样本训练的场景下,由于后续可用于进行神经网络的网络精度恢复训练的样本数据有限,因此可以构建出多个子网络,每个子网络中包含一个压缩处理后的所述待处理中间层组,而除此之外的网络层结构都与原始的所述待压缩神经网络相同,由于每个所述子网络中都只有部分中间层被压缩处理,因此下降的网络精度也会较小,所需要用于训练的样本数据也较小,较好的符合了小样本的应用场景。

示例性的,构建所述子网络的示意图,可以如图2所示,图2中的所述待压缩神经网络被划分为2个待处理中间层组,每个所述待处理中间层在经过压缩处理等处理操作后,都可以生成一个对应的子网络,每个所述子网络中的阴影部分表示该部分中间层为经过压缩处理之后的所述待处理中间层组,而无阴影部分则表示该部分中间层为原始的所述待压缩神经网络中的中间层,所述子网络和待压缩神经网络的输入层和输出层由于未被进行压缩处理,因此构建的所述子网络的输入层和输出层可以与原始的所述待压缩神经网络相同。

一种可能的实施方式中,针对压缩处理后的任一待处理中间层组,如图3所示,可以通过以下步骤构建所述任一待处理中间层组对应的子网络:

S301:确定所述待压缩神经网络中,所述压缩处理后的待处理中间层组包含的第一中间层对应的第二中间层。

S302:用所述第一中间层替换所述第二中间层,得到所述任一待处理中间层组对应的子网络。

这里,通过将压缩处理后的第一中间层替换原始的所述待压缩神经网络中对应的第二中间层,即可生成与该待处理中间层对应的子网络。其中,所述压缩处理后的第一中间层可以是被压缩了权重参数的第一中间层;或者,也可以是添加了压缩处理函数(层)的第一中间层,所述压缩处理函数(层)可用于在运算处理时,对中间层输出的中间处理数据进行压缩处理。

这样,通过构建多个包含压缩处理后的待处理中间层的子网络,通过各个子网络能够实现对于压缩出处理后的待处理中间层组的单独训练,这样在调整的时候,仅需调整待处理中间层的网络参数,所需要调整的网络参数数量较少,因此训练速度较快,训练所需的样本数据较少。

S103:调整各个所述子网络中待处理中间层组的网络参数,并基于调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络。

这里,在调整各个所述子网络中待处理中间层组的网络参数时,由于是仅调整了所述待处理中间层组的网络参数,调整的网络参数相较于调整全部中间层的网络参数较少,因此训练时可以是基于所述小样本训练场景下,使用数量较少的样本数据对所述子网络进行训练,使得所述子网络感知到经过压缩处理对所述子网络中网络结构的影响,并进行相应的网络参数调整。

具体的,可以获取与所述样本数据对应的监督数据,并将所述样本数据输入至所述子网络,得到子网络的输出结果;基于所述子网络的输出结果和所述监督数据,对所述子网络中包含的所述第一中间层进行网络参数调整。

实际应用中,虽然各个待处理中间层组中都完成了压缩处理,但是压缩处理之后的各个待处理中间层组分布在不同的子网络中,因此可以将得到的多个子网络进行整合,从而构建出一个包含各个子网络中经过压缩处理后的第一中间层的压缩网络。

一种可能的实施方式中,在基于调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络时,如图4所示,可以通过以下步骤:

S401:从多个调整后的所述待处理中间层组中,确定目标中间层组。

实际应用中,在对所述多个子网络进行整合,构建所述压缩网络时,当一次整合过多的子网络时,可能会导致网络精度发生较大下降,在所述小样本场景下就很难将网络精度恢复到一个较好的水平,因此需要确定目标中间层组,并分步对所述子网络进行整合。

这样,由于每个待处理中间层组的网络参数都是调整过的,因此在构建压缩网络时,每一次调整中间压缩网络的网络参数可以理解为使得目标中间层与中间压缩网络更加融合。

一种可能的实施方式中,如图5所示,可以通过以下步骤确定目标中间层组:

S4011:确定多个调整后的所述待处理中间层组中,未被用于构建所述中间压缩网络的待筛选中间层组。

S4012:按照预设确定规则,从所述待筛选中间层组中确定所述目标中间层组。

这里,在从所述待筛选中间层组中确定所述目标中间层组时,可以按照预设的构建顺序(也即预设确定规则)进行确定。所述构建顺序表征对所述子网络进行整合的先后顺序,其可以是按照与所述待压缩神经网络的输出层的距离进行设置的,比如,距离所述输出层越近,则构建顺序的优先级就越高。

这样,可以使得每个待处理中间层组都可以用于构建压缩网络。

S402:基于所述目标中间层组和初始神经网络,构建中间压缩网络。

这里,所述初始神经网络为本次构建中间压缩网络时的基础,其包含了神经网络正常运行时所需的完整的网络结构。

一种可能的实施方式中,如图6所示,可以通过以下步骤构建中间压缩网络:

S4021:确定所述初始神经网络中与所述目标中间层组对应的待替换中间层。

S4022:使用所述目标中间层组中的中间层替换所述初始神经网络中的待替换中间层,得到所述中间压缩网络。

实际应用中,将所述目标中间层组与所述待替换中间层组进行替换后,得到的所述中间压缩网络中就包含了所述目标中间层组,但由于是直接替换,所述目标中间层的网络参数很有可能不适配此时的所述中间压缩网络,导致此时的所述中间压缩网络的网络精度发生下降,因此可以基于所述样本数据对所述中间压缩网络进行相应的调整。

这样,可以通过初始神经网络的网络架构,将各个目标中间层进行融合,避免了重新构建神经网络,提升了压缩网络的确定效率。

S403:调整所述中间压缩网络中的网络参数,并将调整后的中间压缩网络作为所述初始神经网络,返回执行确定目标中间层组的步骤,直至所述多个调整后的所述待处理中间层组的各个待处理中间层组均被用于构建所述中间压缩网络,得到所述待压缩神经网络对应的压缩网络。

其中,第一次构建中间压缩网络时所使用的初始神经网络为所述待压缩神经网络。

一种可能的实施方式中,如图7所示,可以通过以下步骤调整所述中间压缩网络中的网络参数:

S4031:确定所述中间压缩网络中与所述多个调整后的所述待处理中间层组对应的目标中间层。

S4032:调整所述目标中间层的网络参数。

这里,在调整所述目标中间层的网络参数时,所述与所述多个调整后的所述待处理中间层组对应的目标中间层,除了包括当前确定的目标中间层组中的中间层组的网络参数,还可以同时调整本轮之前确定的所述目标中间层组的中间层的网络参数,以使各个目标中间层之间更适配。

示例性的,以第一次确定的目标中间层组包括第一目标中间层组、第二次确定的目标中间层组为第二目标中间层组为例,在第二次构建所述中间压缩网络并确定第二目标中间层组之后,可以基于样本数据对所述中间压缩网络进行训练,同时对第一目标中间层组和第二目标中间层组的网络参数进行调整。

在小样本场景下,由于样本数据数量有限,为了保证训练效果,无法大规模的进行网络参数的调整,因此可以对所述目标中间层的网络参数进行调整,以使此时的中间压缩网络所包含的各个所述目标中间层之间更适配。

此外,为了加快训练速度,在调整所述目标中间层的网络参数时,还可以使用微调fine-tune操作对所述目标中间层的权重参数进行调整,从而可以充分发挥出所述小样本场景下样本数据较少,训练时间较短的优势。

下面,以对所述CNN进行量化处理为例,对本公开实施例提供的神经网络压缩方法进行描述。

如图8所示,为本公开实施例提供的另一种神经网络压缩方法的示意图。

在图8中,所述CNN的中间层被分为了4组,得到了4个待处理中间层组,在对每一组待处理中间层组进行量化处理的基础上,构建一个对应的子网络,得到了第一子网络、第二子网络、第三子网络以及第四子网络,每个子网络中包含一组待处理中间层组。

这里,在对所述待处理中间层组进行量化处理时,可以是对所述待处理中间层组包含的第一中间层的权重参数和/或中间层输出的中间处理数据(比如激活层的输出值)进行量化处理,在实际应用中可以使用量化公式进行所述量化处理。

示例性的,原始值到量化值的量化公式如下:

其中,R表示原始值,Q表示量化后的量化值,Z表示0原始值对应的量化值,S则为量化后可表示的最小刻度,S和Z的求值公式如下:

Z=Q

其中,R

这样,经过量化函数的处理后,可以将一定范围内的网络参数值,映射到一个较小的范围内,使得神经网络的网络参数在存储时所占的存储空间更小,从而使得神经网络在进行部署时更为便捷。

实际应用中,在进行量化处理后,神经网络的网络精度会发生一定程度的下降,因此包含经过量化处理的待处理中间层组的子网络的网络参数需要进行适应性调整,以降低所述量化处理给神经网络精度带来的影响。

这里,可以对每个子网络采用L2损失函数进行小样本训练,所述L2损失函数可以是指计算将样本数据输入至所述子网络得到的第一输出结果、以及输入至原始的待压缩神经网络得到的第二输出结果之间的L2距离,所述L2距离可用于表征输出结果之间的差异大小。

具体的,在每次训练时只迭代更新子网络中所述第一中间层的网络参数,每个子网络只需迭代一个epoch(也即使用全部的样本数据训练一遍)。

经过上述步骤,即可得到训练好的第一子网络、第二子网络、第三子网络以及第四子网络。

进一步的,可以从训练好的所述第一子网络、第二子网络、第三子网络以及第四子网络中任选一个子网络作为进行子网络整合时的初始神经网络,然后按照预设的所述构建顺序,确定出每次需要进行整合的目标子网络,然后使用目标子网络中所述待处理中间层组对应的第二中间层,对所述初始神经网络相应的中间层进行替换,并在替换后进行一次训练以适应本次替换,然后重复执行确定目标子网络-中间层替换-训练的步骤,直至全部的所述待处理中间层组完成替换和训练,即可得到一个对中间层都被量化处理的量化神经网络。

下面以图8中,将所述第一子网络作为所述初始神经网络为例,对各个子网络的整合过程进行介绍:

步骤一、第一子网络与第二子网络进行整合,得到第一中间量化网络。

步骤二、所述第一中间量化网络与第三子网络进行整合,得到第二中间量化网络。

步骤三、所述第二中间量化网络与第四子网络进行整合,得到所述量化神经网络。

具体的,上述各步骤的具体内容参照上文相关描述,在此不再展开说明。

本公开实施例提供的神经网络压缩方法,通过对待压缩神经网络的多个中间层进行分组,然后对分组后得到的待处理中间层组进行压缩处理,再调整基于压缩处理后的待处理中间层构建的子网络的网络参数,这样,由于调整的是子网络中待处理中间层组的网络参数,网络参数的数量较少,因此仅需要少量的训练数据即可完成对子网络的训练,且训练速度也较快;再通过调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络,这样,可以在保证压缩网络的网络精度的同时,提升了压缩的速度。

本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。

基于同一发明构思,本公开实施例中还提供了与神经网络压缩方法对应的神经网络压缩装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述神经网络压缩方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。

参照图9所示,为本公开实施例提供的一种神经网络压缩装置的架构示意图,所述装置包括:确定模块901、压缩模块902、调整模块903;其中,

确定模块901,用于将待压缩神经网络的多个中间层进行分组,确定多个待处理中间层组;

压缩模块902,用于对所述多个待处理中间层组进行压缩处理,并基于压缩处理后的各个所述待处理中间层组和所述待压缩神经网络,分别构建各个所述待处理中间层组对应的子网络;

调整模块903,用于调整各个所述子网络中待处理中间层组的网络参数,并基于调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络。

一种可能的实施方式中,所述压缩模块902,在对所述多个待处理中间层组进行压缩处理时,用于:

对所述待处理中间层组包含的第一中间层的权重参数进行压缩处理;和/或,对所述待处理中间层组包含的第一中间层的输出数据进行压缩处理。

一种可能的实施方式中,所述压缩模块902,在基于压缩处理后的各个所述待处理中间层组和所述待压缩神经网络,分别构建各个所述待处理中间层组对应的子网络时,用于:

针对压缩处理后的任一待处理中间层组,基于以下方法构建所述任一待处理中间层组对应的子网络:

确定所述待压缩神经网络中,所述压缩处理后的待处理中间层组包含的第一中间层对应的第二中间层;

用所述第一中间层替换所述第二中间层,得到所述任一待处理中间层组对应的子网络。

一种可能的实施方式中,所述调整模块903,在基于调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络时,用于:

从多个调整后的所述待处理中间层组中,确定目标中间层组;

基于所述目标中间层组和初始神经网络,构建中间压缩网络;

调整所述中间压缩网络中的网络参数,并将调整后的中间压缩网络作为所述初始神经网络,返回执行确定目标中间层组的步骤,直至所述多个调整后的所述待处理中间层组的各个待处理中间层组均被用于构建所述中间压缩网络,得到所述待压缩神经网络对应的压缩网络;

其中,第一次构建中间压缩网络时所使用的初始神经网络为所述待压缩神经网络。

一种可能的实施方式中,所述调整模块903,在从多个调整后的所述待处理中间层组中,确定目标中间层组时,用于:

确定多个调整后的所述待处理中间层组中,未被用于构建所述中间压缩网络的待筛选中间层组;

按照预设确定规则,从所述待筛选中间层组中确定所述目标中间层组。

一种可能的实施方式中,所述调整模块903,在基于所述目标中间层组和初始神经网络,构建中间压缩网络时,用于:

确定所述初始神经网络中与所述目标中间层组对应的待替换中间层;

使用所述目标中间层组中的中间层替换所述初始神经网络中的待替换中间层,得到所述中间压缩网络。

一种可能的实施方式中,所述调整模块903,在调整所述中间压缩网络中的网络参数时,用于:

确定所述中间压缩网络中与所述多个调整后的所述待处理中间层组对应的目标中间层;

调整所述目标中间层的网络参数。

一种可能的实施方式中,所述压缩处理包括以下至少一种:

稀疏化处理、量化处理、剪枝处理、二进制化处理、权值共享。

本公开实施例提供的神经网络压缩装置,通过对待压缩神经网络的多个中间层进行分组,然后对分组后得到的待处理中间层组进行压缩处理,再调整基于压缩处理后的待处理中间层构建的子网络的网络参数,这样,由于调整的是子网络中待处理中间层组的网络参数,网络参数的数量较少,因此仅需要少量的训练数据即可完成对子网络的训练,且训练速度也较快;再通过调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络,这样,可以在保证压缩网络的网络精度的同时,提升了压缩的速度。

关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。

基于同一技术构思,本公开实施例还提供了一种计算机设备。参照图10所示,为本公开实施例提供的计算机设备1000的结构示意图,包括处理器1001、存储器1002、和总线1003。其中,存储器1002用于存储执行指令,包括内存10021和外部存储器10022;这里的内存10021也称内存储器,用于暂时存放处理器1001中的运算数据,以及与硬盘等外部存储器10022交换的数据,处理器1001通过内存10021与外部存储器10022进行数据交换,当计算机设备1000运行时,处理器1001与存储器1002之间通过总线1003通信,使得处理器1001在执行以下指令:

将待压缩神经网络的多个中间层进行分组,确定多个待处理中间层组;

对所述多个待处理中间层组进行压缩处理,并基于压缩处理后的各个所述待处理中间层组和所述待压缩神经网络,分别构建各个所述待处理中间层组对应的子网络;

调整各个所述子网络中待处理中间层组的网络参数,并基于调整后的各个待处理中间层组构建所述待压缩神经网络对应的压缩网络。

本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的神经网络压缩方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。

本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的神经网络压缩方法的步骤,具体可参见上述方法实施例,在此不再赘述。

其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。

相关技术
  • 一种神经网络压缩方法、装置、计算机设备及存储介质
  • 神经网络压缩方法、装置、计算机设备及存储介质
技术分类

06120113194487