用于压缩神经网络的方法和装置与流程

文档序号:30137418发布日期:2022-05-21 02:12阅读:88来源:国知局
用于压缩神经网络的方法和装置与流程

1.本技术涉及神经网络技术,更具体地,涉及一种用于压缩神经网络的方法和装置。


背景技术:

2.近年来,神经网络技术已经应用于许多技术领域,例如,图像识别、语音识别、自动驾驶和医学成像等等。例如,卷积神经网络(cnn:convolutional neural network)作为神经网络技术中具有代表性的一种网络结构和算法,在图像处理技术中取得了很大的成功。但是,由于神经网络的层数深、参数多、以及计算量大,使得神经网络在资源有限的硬件平台(例如,嵌入式终端)上的部署上受到限制。


技术实现要素:

3.本技术的一个目的在于提供一种用于压缩神经网络的方法,能够以较低的准确率损失为代价换取较高的压缩率。
4.根据本技术的一些方面,提供了一种用于压缩神经网络的方法。该方法包括:获取待压缩神经网络,所述待压缩神经网络包括j个待压缩运算层,其中j为大于1的整数;对于所述j个待压缩运算层中的第j个待压缩运算层使用kj种不同的压缩率进行压缩,以生成kj个运算支路,其中j和kj均为整数,且1≤j≤j,kj≥1;对于所述第j个待压缩运算层,获取分别与kj个运算支路对应的一组kj个权重因子,所述kj个权重因子具有分别的初始值;对于所述第j个待压缩运算层,使用经该组所述kj个权重因子加权的所述kj个运算支路替换所述待压缩运算层,产生替换后的神经网络;在预设数据集上对所述替换后的神经网络进行前向传播,其中,对于所述第j个待压缩运算层,将所述kj个运算支路的kj个运算结果与所述kj个权重因子进行加权求和作为所述第j个待压缩运算层的输出;在所述预设数据集上对所述替换后的神经网络进行反向传播,其中,对于所述第j个待压缩运算层,基于所述替换后的神经网络相对于所述待压缩神经网络的模型损失计算所述kj个权重因子的更新值;以及,对所述第j个待压缩运算层,将所述kj个权重因子的更新值中最大者对应的运算支路确定为压缩后的第j个运算层。
5.根据本技术的另一些方面,提供了用于压缩神经网络的装置。该装置包括:获取单元,用于获取待压缩神经网络,所述待压缩神经网络包括j个待压缩运算层,其中j为大于1的整数;压缩单元,用于对于所述j个待压缩运算层中的第j个待压缩运算层使用kj种不同的压缩率进行压缩,以生成kj个运算支路,其中j和kj均为整数,且1≤j≤j,kj≥1;权重因子获取单元,用于对于所述第j个待压缩运算层,获取分别与kj个运算支路对应的一组kj个权重因子,所述kj个权重因子具有分别的初始值;替换单元,用于对于所述第j个待压缩运算层,使用经该组所述kj个权重因子加权的所述kj个运算支路替换所述待压缩运算层,产生替换后的神经网络;前向传播单元,用于在预设数据集上对所述替换后的神经网络进行前向传播,其中,对于所述第j个待压缩运算层,将所述kj个运算支路的kj个运算结果与所述kj个权重因子进行加权求和作为所述第j个待压缩运算层的输出;反向传播单元,用于在所述预
设数据集上对所述替换后的神经网络进行反向传播,其中,对于所述第j个待压缩运算层,基于所述替换后的神经网络相对于所述待压缩神经网络的模型损失计算所述kj个权重因子的更新值;和确定单元,用于对所述第j个待压缩运算层,将所述kj个权重因子的更新值中最大者对应的运算支路确定为压缩后的第j个运算层。
6.根据本技术的又一些方面,提供了一种电子设备,该电子设备包括:处理器;和存储装置,用于存储能够在所述处理器上运行的计算机程序;其中,当所述计算机程序被所述处理器执行时,使得所述处理器执行上述的用于压缩神经网络的方法。
7.根据本技术的又一些方面,提供了一种非易失性计算机可读存储介质,所述非易失性计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的用于压缩神经网络的方法。
8.以上为本技术的概述,可能有简化、概括和省略细节的情况,因此本领域的技术人员应该认识到,该部分仅是示例说明性的,而不旨在以任何方式限定本技术范围。本概述部分既非旨在确定所要求保护主题的关键特征或必要特征,也非旨在用作为确定所要求保护主题的范围的辅助手段。
附图说明
9.通过下面说明书和所附的权利要求书并与附图结合,将会更加充分地清楚理解本技术内容的上述和其他特征。可以理解,这些附图仅描绘了本技术内容的若干实施方式,因此不应认为是对本技术内容范围的限定。通过采用附图,本技术内容将会得到更加明确和详细地说明。
10.图1(a)和图1(b)示出了统一量化方案和混合量化方案的示意图;
11.图2示出了根据本技术实施例的用于压缩神经网络的方法的流程图;
12.图3示出了一种示例性的神经网络结构图;
13.图4(a)和图4(b)示出了根据本技术实施例的对神经网络的运算层进行前向传播的逻辑框图;
14.图5(a)、图5(b)和图5(c)示出了根据本技术实施例压缩神经网络的方法中超参γ、网络模型准确率和模型大小之间的关系图;
15.图6示出了根据本技术实施例的神经网络模型的压缩结果示意图;以及
16.图7示出了根据本技术实施例的用于压缩神经网络的装置的框图。
具体实施方式
17.在下面的详细描述中,参考了构成其一部分的附图。在附图中,类似的符号通常表示类似的组成部分,除非上下文另有说明。详细描述、附图和权利要求书中描述的说明性实施方式并非旨在限定。在不偏离本技术的主题的精神或范围的情况下,可以采用其他实施方式,并且可以做出其他变化。可以理解,可以对本技术中一般性描述的、在附图中图解说明的本技术内容的各个方面进行多种不同构成的配置、替换、组合,设计,而所有这些都明确地构成本技术内容的一部分。
18.为了便于神经网络在硬件上的部署,现有技术中通常会对神经网络进行压缩,例如剪枝和量化。其中,量化是指使用低位宽的二进制数来代替高位宽的二进制数表示神经
网络中的参数值,从而压缩神经网络。在典型的神经网络量化方法中,会将神经网络中各个运算层所使用的参数值量化到统一的位宽。例如,如图1(a)所示,量化前的神经网络100中的卷积层(conv1、conv2等)和全连接层(fc)的参数值均采用32位浮点数(fp 32)表示;在量化之后,可以统一使用8位定点数来表示这些参数值。在另外一些例子中,也可以使用更多或更少的位数(或者说,更高或更低的精度)来对神经网络各个运算层所使用的参数值进行量化。需要注意的是,对神经网络的参数值进行量化带来的准确率损失通常与量化精度有关。例如,如果将神经网络所使用的参数值由32位浮点数分别统一量化为8位定点数或4位定点数,则量化到4位的准确率损失会显著高于量化到8位的准确率损失。
19.本技术的发明人发现,现有技术通常对神经网络中各个运算层进行相同精度的量化处理,然而不同运算层对量化精度的敏感度却并不相同。例如,一些运算层被量化到8位就会造成神经网络准确率的大幅度损失,而另一些运算层即使被量化到4位所造成的准确率损失也在可接受范围内。基于此,本技术提出了一种混合量化方案,针对不同的运算层使用不同的量化精度。例如,如图1(b)所示,量化前的神经网络100中的卷积层和全连接层均采用32位浮点数来表示参数值,在量化之后,对量化敏感的第二卷积层conv2使用精度较高的8位定点数来表示参数值;而对量化不敏感的全连接层fc则使用精度较低的4位定点数来表示参数值;对量化敏感度处于中间程度的第一卷积层conv1使用6位定点数来表示参数值。这种基于量化敏感度来适应性调整量化精度的方式可以以较小的准确率损失为代价取得较高的压缩率。进一步地,在兼顾神经网络的压缩率和准确率的前提下,发明人创造性地解决了如何在多个运算层之间合理地分配不同的量化精度的问题。例如,对于具有50个运算层的神经网络,如果对每层都存在4种不同量化精度,则对该神经网络就存在着4
50
种不同的量化方案,通过暴力搜索来寻找最佳的量化方案明显由于运算量过大而不可行。
20.基于上述研究和构思,本技术提供一种用于压缩神经网络的方法。该方法中,在获取待压缩神经网络后,使用多种不同的压缩率压缩神经网络中的多个待压缩运算层,以对应于每个待压缩运算层生成一个或多个运算支路;并且对于每个待压缩运算层,产生与一个或多个运算支路分别对应的一个或多个权重因子;然后,在预设数据集上对神经网络进行再训练,再训练包括前向传播和反向传播,其中,对于每个待压缩运算层,在前向传播过程中用所述一个或多个运算支路替换所述待压缩运算层,并且将一个或多个运算支路的一个或多个运算结果与一个或多个权重因子进行加权求和作为该待压缩运算层的输出;在反向传播过程中,基于神经网络的模型损失计算一个或多个权重因子的更新值;然后对每个待压缩运算层,将一个或多个权重因子的更新值中最大者对应的运算支路确定为压缩后的运算层,从而形成压缩后的神经网络。该方法通过引入权重因子,可以在小样本的预设数据集上对神经网络再训练,并基于模型损失对权重因子更新,选择每个运算层中最大的权重因子对应的运算支路作为压缩后的运算层,从而为多个运算层选择了能够兼顾准确率的适宜压缩率(或者,量化精度);与前述的暴力搜索方法相比,大大降低了运算量。
21.下面结合附图对本技术的用于压缩神经网络的方法进行详细说明。图2示出了根据本技术一些实施例的用于压缩神经网络的方法200的流程图,具体包括如下的步骤210-280。
22.步骤210,获取待压缩神经网络,待压缩神经网络包括j个待压缩运算层,其中j为大于1的整数。
23.待压缩神经网络可以是利用训练样本数据集训练之后得到的深度神经网络(dnn),其例如为卷积神经网络(cnn)、循环神经网络(rnn)、深度信念网络(dbn),受限玻尔兹曼机(rbm)、全连接网络(fcn)、深度卷积网络(dcn)、长短期记忆(lstm)网络或门控循环单元(gru)等。
24.图3示出了一个示例性的待压缩神经网络结构图,其包括能够顺序地对神经网络接收的输入数据310进行处理的多个运算层320-1、320-2、
……
、320-l,以输出输出数据330。在一些实施例中,该待压缩神经网络可以为卷积神经网络,例如lenet、alexnet、vggnet、googlenet、resnet或其他类型的卷积神经网络,多个运算层可以包括卷积层(conv)、批归一化层(bn:batch normalization)、激活层(例如,relu层)、池化层(pooling)或全连接层等。不同运算层可以包括不同类型或数量的参数值以用于参与待压缩神经网络的运算,例如,卷积层可以包括多个滤波器,每个滤波器可以包括多个卷积核,每个卷积核可以包括多个呈行列排布的权重值(例如,3
×
3、5
×
5或7
×
7尺寸的权重值矩阵),这些权重值作为卷积层的参数值参与待压缩神经网络的运算。对于图像处理类的卷积神经网络,输入数据310可以为图像,该图形可以以像素矩阵的形式表示,并且可以包括多个不同的颜色通道(例如,r、g、b颜色通道)。运算层320-1可以是卷积层,其包括一个或多个滤波器,以在输入数据310上执行卷积操作生成多个特征图1;接着,特征图1作为下一个运算层320-2(例如,批归一化层、激活层、池化层或全连接层)的输入数据继续进行处理生成多个特征图2,以此类推,直至由运算层320-l处理后生成输出数据330,其中l可以是大于1的整数。根据卷积神经网络的应用类型不同,输出数据330也会不同,例如,对于图像分类网络,输出数据330可以是将输入图像中的目标划分到多种不同的分类类型中;对于图像检测网络,输出数据330可以是输入图像中的目标的检测结果。在另一些实施例中,输入数据310和输出数据330也可以为声音数据、文字数据等,这取决于卷积神经网络的具体应用场景。需要说明的是,虽然上面的实施例以卷积神经网络为例进行了说明,但是本领域技术人员可以理解本技术的压缩神经网络的方法适用于任何包含待压缩运算层的神经网络。
25.在一些实施例中,待压缩神经网络中的所有运算层为待压缩运算层,即待压缩运算层的数量j等于运算层的总数量(例如,对于图3,j=l)。在一些实施例中,待压缩神经网络也可以包括不需要压缩的运算层,换言之,待压缩运算层的数量j可以小于运算层的总数量(例如,对于图3,j<l)。对于是否对待压缩神经网络中的所有运算层进行压缩、或者选择哪些运算层进行压缩可以基于待压缩神经网络的特性或者具体应用需求而变化。
26.步骤220,对于j个待压缩运算层中的第j个待压缩运算层使用kj种不同的压缩率进行压缩,以生成kj个运算支路,其中j和kj均为整数,且1≤j≤j,kj≥1。
27.为了提高计算的准确性,在步骤210中获得的待压缩神经网络的待压缩运算层的参数值通常使用较高精度的数值表示,例如以高位宽的浮点数表示。在一些例子中,可以使用32位的浮点数表示待压缩运算层的参数值。以具有5
×
5尺寸卷积核的待压缩卷积层为例,其每个卷积核中的25个权重值(即,参数值)均使用32位的浮点数表示。因此,对待压缩神经网络进行压缩的一种有效方法就是将该神经网络中各个待压缩运算层中的参数值由高位宽数值替换为低位宽数值表示。
28.在一些实施例中,对于待压缩神经网络中的j个待压缩运算层均使用相同数量的压缩率分别进行压缩,也就是说,j个待压缩运算层分别使用的压缩率数量k1、k2、
……
、kj均
相等。在一些实施例中,j个待压缩运算层分别使用的压缩率数量k1、k2、
……
、kj可以互不相等或者部分相等。各个待压缩运算层所使用的压缩率数量可以基于该待压缩运算层对压缩率的敏感度或者该神经网络的目标压缩率等进行设置。
29.在一些实施例中,待压缩神经网络的第j个待压缩运算层的参数值使用n
0j
位二进制数表示,分别使用kj种不同的压缩率压缩该待压缩运算层后生成kj个运算支路,这kj个运算支路的参数值分别使用位二进制数表示,其中kj为大于等于1的整数,为大于等于1的整数,并且小于等于n
0j
。其中,每个待压缩运算层对应的不同的运算支路可以具有与该待压缩运算层相同的大小和构造,但其每个参数值与待压缩运算层中对应的参数值具有不同的精度。需要说明的是,运算支路的数量kj还可以基于待压缩神经网络待部署的硬件平台来确定;如果硬件平台支持kj种不同位二进制数的运算,则对应于每个待压缩运算层至多生成kj个运算支路。
30.在一个示例中,待压缩神经网络的第j个待压缩运算层的参数值使用32位浮点数(fp 32)来表示,使用4种(即,kj=4)不同压缩率压缩待压缩运算层后生成的4个运算支路,其参数值分别使用半精度16位浮点数(fp 16)、8位定点数(int 8)、6位定点数(int 6)和4位定点数(int 4)来表示。经压缩后,各个运算支路的参数值的数据量分别降低到原始数据量的50%、25%、18.75%和12.5%。需要说明的是,以上参数值的位宽和运算支路的数量仅作为示例,在其他示例中,待压缩运算层及压缩后形成的运算支路的参数值可以使用更高或更低位宽的数来表示,例如,八精度浮点数(fp 256)、四精度浮点数(fp 128)、双精度浮点数(fp 64)、2位定点数(int 2)、1位定点数(int 1)等格式来表示,而运算支路的数量也可以大于或者小于4。
31.在一些实施例中,对待压缩运算层的各个参数值的压缩采用以下的公式(1)进行:
32.r=s(q-z)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)
33.其中,r表示待压缩运算层的参数值,q表示压缩后的参数值,常数s表示压缩比例(scale),常数z表示零点值(zeropoint)。例如,如果某个待压缩运算层中所有参数值中的最小参数值为a、最大参数值为b,且压缩后的参数值使用范围为[-127,128]的8位定点数表示,则z=(b-a)/2,而s=(b-a)/256。也就是说,对于特定待压缩运算层和特定的压缩精度,常数s和z是确定的。例如,经过公式(1)的运算后,待压缩运算层中由32位的浮点数表示的参数值r就可以被映射到由8位定点数表示的[-127,128]的范围内的参数值q。
[0034]
步骤230,对于第j个待压缩运算层,获取分别与kj个运算支路对应的一组kj个权重因子,其中kj个权重因子具有分别的初始值。
[0035]
在一些实施例中,权重因子的初始值可以由软件自动生成。在另外一些实施例中,权重因子的初始值可以由用户定义并提供。由于在对神经网络再训练之前,并不知晓各个运算层对压缩率的敏感度,因此在优选的实施例中,代表了不同压缩率的kj个运算支路对应的kj个权重因子的初始值通常设置为相等。
[0036]
对于前述32位浮点数参数值的示例,可以分别使用16位浮点数、8位定点数、6位定点数和4位定点数来表示4个被压缩的运算支路的参数值,则对应的4个权重因子可以分别表示为β1、β2、β3和β4。在一个实施例中,可以将这4个权重因子的初始值均设置为0。本领域技术人员可以理解,在其他例子中,权重因子的初始值也可以设置为其他相等或不相等的
数值。
[0037]
步骤240,对于第j个待压缩运算层,使用经该组所述kj个权重因子加权的kj个运算支路替换待压缩运算层,产生替换后的神经网络。
[0038]
参考图4(a)和4(b),以待压缩神经网络的第j个待压缩运算层,即卷积层convj为例,假设使用4种不同的压缩率对第j个待压缩运算层进行了压缩,生成了4个运算支路conv
j1
、conv
j2
、conv
j3
和conv
j4
,则使用4个权重因子β1、β2、β3和β4加权的4个运算支路β1conv
j1
、β2conv
j2
、β3conv
j3
和β4conv
j4
替换待压缩卷积层convj。对所有j个待压缩运算层完成上述替换操作后,产生替换后的神经网络。
[0039]
尽管上述以待压缩运算层为卷积层为例进行了说明,但是本领域技术人员可以理解,对于批归一化层、激活层或全连接层等,也可以实现类似的替换操作。
[0040]
步骤250,在预设数据集上对替换后的神经网络进行前向传播,其中,对于第j个待压缩运算层,将kj个运算支路的kj个运算结果与kj个权重因子进行加权求和作为第j个待压缩运算层的输出。
[0041]
预设数据集可以是不同于用于训练深度神经网络的训练样本数据集的一个数据集。预设数据集可以包括多个训练示例,每个示例由一个输入对象和一个期望的输出值组成。在预设数据集上对神经网络进行前向传播可以对每个示例的输入对象产生一个输出值,通过比较该输出值与期望的输出值,可以评估神经网络的准确率。例如,对于图像分类网络,其输入对象为图像,前向传播的输出为将输入图像中的目标划分入多种不同的分类类型中,通过将该输出所属的分类与预期的分类结果比较,可以用于调节该图像分类网络的参数值或者评估其性能。类似地,如果神经网络用于语音识别系统,则输入对象为语音样本,而预期输出为对应的文本。在一些示例中,前述预设数据集可以为imagenet数据集、或cifar10数据集等。可以理解,本领域技术人员将能够根据具体应用来选择合适的数据集进行神经网络的再训练,此处不再列举示例。
[0042]
继续参考图4(a)和图4(b),继续以将待压缩运算层convj替换为4个运算支路conv
j1
、conv
j2
、conv
j3
和conv
j4
为例对替换后的神经网络的前向传播进行说明。图4(a)示出了第j个待压缩运算层convj的正常的前向传播过程,图4(b)示出了当kj=4时使用4个运算支路conv
j1
、conv
j2
、conv
j3
和conv
j4
替换第j个待压缩运算层convj后的前向传播过程。
[0043]
首先,对于待压缩运算层convj,在所述前向传播前,可以对输入数据进行压缩以生成分别与所述kj个运算支路对应的kj个压缩后输入数据,该kj个压缩后输入数据与kj个运算支路参数值的精度分别对应。例如,可以对输入数据进行量化操作以产生kj个压缩后输入数据,并且该kj个压缩后输入数据的位宽分别与kj个运算支路支路的参数值的位宽相等或相近。
[0044]
在一些实施例中,对输入数据的压缩可以采用公式(2)表示:
[0045]
q_input
jk
=quantizek(inputj)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
[0046]
其中,inputj表示第j个待压缩运算层的输入数据,运算符quantizek表示对应于kj个运算支路中的第k个运算支路的量化器(k=1,2,
……
,kj),q_input
jk
表示第j个运算层的对应于第k个运算支路的量化后输入数据。当kj=4时,如图4(b)所示,对第j个待压缩运算层convj的输入数据inputj进行量化,生成分别与4个运算支路conv
j1
、conv
j2
、conv
j3
和conv
j4
对应的4个量化后输入数据q_input
j1
、q_input
j2
、q_input
j3
、和q_input
j4
,该4个量化
后输入数据分别使用16位浮点数(fp 16)、8位定点数(int 8)、8位定点数(int 8)和8位定点数(int 8)来表示。通过对输入数据的量化,不仅可以节省神经网络模型的存储空间,而且还可以加速量化后输入数据与运算支路之间的计算过程,例如,可以将量化后输入数据与运算支路之间的卷积运算从浮点数的相乘相加变为整数的相乘相加。需要说明的是,量化后输入数据的位数不限于上述的示例,还可以基于具体应用中的计算精度需求进行调整。参考图3,可以理解,当第j个待压缩运算层convj为第一个待压缩运算层,输入数据inputj即为图3所示的输入数据310,当第j个待压缩运算层为第一个待压缩运算层之外的其他层时,输入数据inputj为第j-1个待压缩运算层的输出的数据。
[0047]
接着,将替换后的kj个运算支路与kj个量化后的输入数据进行运算,产生对应于kj个运算支路的运算结果。这kj个运算结果再与对应的kj个权重因子进行加权运算产生加权和,该加权和可以被作为该运算层的输出结果。以第j个待压缩运算层为卷积层convj为例,上述运算和加权的步骤可以采用公式(3)表示:
[0048][0049]
其中,conv
jk

q_input
jk
表示第j个运算层中的第k个卷积支路conv
jk
与第k个量化后的输入数据q_input
jk
进行卷积运算,运算符quantizek表示对第k个卷积支路的卷积运算结果进行量化操作,α
jk
为对权重因子β
jk
的归一化表示形式,表示第j个运算层中的第k个归一化后权重因子。在一些示例中,将权重因子β
jk
进行归一化可以采用下方的softmax函数,即公式(4)进行:
[0050][0051]
本领域技术人员可以理解将权重因子β
jk
进行归一化还可以根据具体应用选择其他函数进行。继续以图4(b)为例,即kj=4时,上面的公式(3)可以表示为下面的公式(5):
[0052]
具体运算过程不再赘述。
[0053]
需要说明的是,在图4的示例中,以待压缩运算层为卷积层进行了说明,但可以理解,对于激活层、全连接层等的前向传播可以采用类似的方法进行。另外,在一些实施例中,还可以将待压缩神经网络的多个待压缩运算层进行优化组合形成网络块,然后可以以网络块为单位进行压缩和前向传播。例如,可以参考神经网络中各个待压缩运算层的运算关系和数据,提取相邻待压缩运算层之间的关系,从而将两个或多个待压缩运算层进行融合形成网络块进行处理,以减少不必要的中间输出,提升运算效率。例如,卷积层和激活层在卷积神经网络中非常普遍且成对出现,则可以将卷积层和激活层融合(conv+relu)形成网络块,将该网络块整体作为一个待压缩运算层参与运算。在另外一些例子中,还可以将卷积层与池化层融合(conv+pooling)、将卷积层与批归一化层和激活层融合(conv+bn+relu)等等。
[0054]
还需要说明的是,虽然在上文以对输入数据进行压缩为例对前向传播的过程进行了描述,但在另一些实施例中,也可以不对输入数据进行压缩,而是直接将原始的输入数据用于与运算支路的计算。
[0055]
步骤260,在预设数据集上对替换后的神经网络进行反向传播,其中,对于第j个待压缩运算层,基于替换后的神经网络相对于待压缩神经网络的模型损失计算kj个权重因子的更新值。
[0056]
如前所述,对待压缩神经网络的参数值进行压缩,以低位宽的数值替代高位宽的数值,会在节省计算资源的同时导致待压缩神经网络的准确率损失。因此,可以对替换后的神经网络进行反向传播以对替换后的神经网络的各项参数进行调整,降低准确率损失。需要注意的是,本技术技术方案在对替换后的神经网络进行反向传播时,仅调整更新各个待压缩运算层的权重因子,而不会对神经网络的其他参数(例如,卷积层权重)进行调整。
[0057]
在一些实施例中,对替换后的神经网络进行反向传播,对第j个待压缩运算层的kj个权重因子进行更新的过程可以采用下方的公式(6)进行:
[0058][0059]
其中,β
jk
表示第j个待压缩运算层的第k个权重因子的初始值,β

jk
表示第j个待压缩运算层的第k个权重因子的更新值,loss表示替换后的神经网络相对于原待压缩神经网络的模型损失函数,λ表示学习率参数并可以由用户定义。
[0060]
在一些实施例中,模型损失函数loss包括损失函数项和性能指标项。其中,损失函数项与神经网络的应用类型相关,例如,分类、定位、检测或分割。性能指标项与神经网络待部署的硬件平台的硬件指标相关,例如,存储空间、浮点运算次数、延迟或能量消耗等。
[0061]
下面以压缩分类神经网络在硬件平台上的存储空间为例对模型损失函数loss进行说明。具体地,模型损失函数loss可以由下方的公式(7)表示:
[0062]
loss=loss1*loss2
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(7)
[0063]
其中,loss1表示损失函数项,loss2表示性能指标项。
[0064]
对于分类神经网络,损失函数项loss1可以进一步使用公式(8)所示的交叉熵函数表示:
[0065][0066]
其中,label为分类标签,通常使用独热码(one-hot)表示;i表示分类标签的总维数,例如,对于imagenet数据集来说,分类标签的总维数i为1000;label(i)表示所有i个分类标签中的第i个分类,如果第i个分类成立,label(i)为1,否则label(i)为0;相应地,pred(i)表示识别到第i个分类的概率。
[0067]
性能指标项loss2可以进一步使用公式(9)所示的模型大小函数表示:
[0068]
loss2=(model_size/model_ref)
γ
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(9)
[0069]
其中,model_size表示训练中神经网络的模型大小,单位为“位”(bit);model_ref是与神经网络模型相关的常数,设定为使用统一量化精度进行量化后神经网络模型大小的
位数,例如,使用8位定点数统一量化待压缩神经网络后,model_ref为待压缩神经网络总参数值个数乘以8位;γ为超参,用于平衡神经网络模型准确率损失和模型大小。当希望得到准确率更高的神经网络模型时可以设置较小的γ值,当希望得到更小的神经网络模型时可以设置较大的γ值。因此,γ的取值可以根据具体需求进行选择。在一些示例中,γ的取值为0.05~5。更具体地,在一些示例中,γ的取值为0.25~0.5,并且能够较好地平衡神经网络模型准确率损失和模型大小。
[0070]
在一些实施例中,上述公式(9)中的训练中神经网络的模型大小model_size表可以采用下方的公式(10)表示:
[0071][0072]
其中,j表示神经网络中待压缩运算层的总数,j表示各个待压缩运算层的编号,则1≤j≤j;kj表示第j个待压缩运算层中运算支路的总数,k表示该运算层中的运算支路的编号,则1≤k≤kj;conv
jk
表示第j个待压缩运算层中第k个运算支路的卷积层;size(conv
jk
)表示卷积层conv
jk
的位数,对应于图4(b)中的示例,对应于第j层的4个运算支路,size(conv
j1
)、size(conv
j2
)、size(conv
j3
)和size(conv
j4
)的值分别等于该4个运算支路的权重值数量分别乘以16、8、6和4;另外,α
jk
为对应于第j个运算层中第k个运算支路的归一化权重因子,可以通过前述的公式(4)获得。
[0073]
上面的示例以压缩分类神经网络在硬件平台上的存储空间为例对模型损失函数loss进行了说明。本领域技术人员可以理解,根据具体应用场景,模型损失函数loss可以做出相应的修改。在一些实施例中,模型损失函数loss中的损失函数项loss1可以根据神经网络的应用类型(例如,分类、定位、检测或分割等)进行调整。以图像处理为例,分类神经网络可以用于判断给定的图像所属的类别;定位神经网络可以用于确定目标在给定的图像中的具体位置;检测神经网络可以在目标种类和数目都不确定的情况下,用于在给定的图像中对目标进行识别和定位;分割神经网络可以将给定的图像分割为多个组成部分,用于定位图像中目标的边界。类似于上述分类神经网络的损失函数项loss1与分类标签及识别到的各分类的概率相关,在调整损失函数项loss1时,定位神经网络需要考虑目标在图像上的位置参数;检测神经网络不仅需要考虑目标的种类和数目,还需要考虑这些目标在图像上的位置;以及,分割神经网络需要考虑目标在图像上的位置参数和形状参数。在一些实施例中,根据神经网络的具体应用类型,损失函数项loss1可以选自于交叉熵函数、绝对值损失函数、对数损失函数、平方损失函数、指数损失函数、铰链(hinge)损失函数、感知(perceptron)函数或其他适宜的损失函数中的一种或多种,此处不再一一列举。相应地,模型损失函数loss中的性能指标项loss2可以根据待部署的硬件平台的硬件指标(例如,存储空间、浮点运算次数、延迟或能量消耗等)进行调整。例如,如果针对待部署的硬件平台设置了与压缩后的神经网络的浮点运算次数、延迟或能量消耗相关的指标,可以将公式(9)中与存储空间相关的model_size项和model_ref项替换为与浮点运算次数、延迟或能量消耗相关的参数,从而形成调整后的性能指标项loss2。
[0074]
在一些实施例中,步骤260结束后,就可以将获得的kj个权重因子的更新值中最大者对应的运算支路确定为压缩后的第j个运算层,从而获得压缩后的神经网络。这可以减少
压缩神经网络所需的计算量。
[0075]
而在图2所示的实施例中,在步骤260之后,还可以继续在预设数据集上对替换后的神经网络进行一次或多次再训练,以获得性能更优的压缩后的神经网络。
[0076]
步骤270,在预设数据集上对替换后的神经网络的前向传播和反向传播多次迭代执行,在迭代执行过程中,基于kj个权重因子的更新值中最大者对应的运算支路来计算替换后神经网络模型大小,并判断前后两次迭代执行过程中计算获得的替换后神经网络模型大小的差值是否在预设数值范围内;若是,则执行步骤280;若否,则返回步骤250,继续迭代执行替换后神经网络的前向传播和反向传播步骤。
[0077]
在预设数据集上对替换后神经网络进行包括前向传播和反向传播的再训练,目的在于更新分配到每个待压缩运算层的kj个权重因子,以平衡替换后神经网络的准确率损失和模型大小,得到优化的混合量化方案。在迭代执行的过程中,对于第j个待压缩运算层,将前一次反向传播产生的kj个权重因子的更新值赋值给后一次前向传播中的kj个权重因子使用。多次迭代执行所述替换后神经网络的前向传播和反向传播后,若后一次迭代中替换后神经网络模型大小与前一次迭代中替换后神经网络模型大小的差值在预设数值范围内,则说明训练趋于收敛,可以结束训练;若否,则需要继续对替换后神经网络进行训练,继续执行前向传播和反向传播步骤以更新权重因子。
[0078]
需要说明的是,对于第一次执行前向传播和反向传播,由于不存在前一次迭代过程,此时,可以将初始的待压缩神经网络模型大小作为前一次迭代过程的替换后神经网络模型大小,用于计算前后两次迭代执行过程中计算获得的替换后神经网络模型大小的差值。
[0079]
还需要说明的是,在一些情况下,可能存在计算不收敛的情形,即在多次迭代后前述差值一直不能收敛至小于预设数值范围内,因此,可以预先设置最大迭代次数,当迭代次数达到该最大迭代次数后,强制退出迭代循环,结束对替换后神经网络的再训练。
[0080]
在一些实施例中,可以使用公式(11)来计算替换后的神经网络的模型大小:
[0081][0082]
公式(11)中与公式(10)相同的符号表示相同的含义,model_size

表示替换后的神经网络的模型大小,α
jk

通过下方公式(12)确定。
[0083][0084]
其中,运算符arg max表示取kj个权重因子β
jk
中的最大值。也就是说,在计算替换后神经网络的模型大小时,仅将每个待压缩运算层中所有运算支路中权重因子最大者对应的运算支路的卷积层的大小计入替换后神经网络的模型大小,而舍弃其他项。通过以上公式(11)和(12)可以在每次迭代过程中计算获得替换后神经网络模型大小。将前后两次迭代中的替换后神经网络模型大小相减后的差值与用户设置的预设数值范围比较,若该差值在预设数值范围内,则说明替换后神经网络的模型大小在迭代前后已无变化或者变化较小,
可以结束训练;若否,继续在预设数据集上对替换后神经网络进行训练。
[0085]
步骤280,对第j个待压缩运算层,将kj个权重因子的更新值中最大者对应的运算支路确定为压缩后的第j个运算层。
[0086]
如上所述,当在预设数据集上对替换后神经网络进行再训练并达到收敛条件后,说明替换后神经网络的准确率损失和模型大小已经相对平衡,对第j个待压缩运算层,可以直接将kj个更新的权重因子中最大者对应的运算支路确定为压缩后的第j个运算层,从而获得压缩后的神经网络。
[0087]
由于压缩后的神经网络的参数使用了比原始神经网络位宽更低的数值来表示,使得压缩后神经网络对存储空间和运算量的要求更低,可以更容易地部署到资源有限的硬件平台。
[0088]
参考图5(a)、图5(b)和图5(c),其示出了将本技术的用于压缩神经网络的方法应用于efficientnet-b0网络模型上时的不同实验结果。例如,图5(a)示出了选择不同超参γ值时压缩后神经网络模型准确率的变化,图5(b)示出了选择不同超参γ值时压缩后神经网络模型大小的变化,图5(c)示出了压缩后神经网络的模型大小与准确率之间的相互关系。上述的实验结果可以用于指导不同准确率和模型大小要求下对超参γ的选择。可以看出随着超参γ值的增大,模型越来越小,但是准确率也越来越低。这是因为超参γ值的增加,意味着模型大小在模型损失函数loss中占的比重更大,极限情况下损失函数项loss1会被忽略,压缩后模型会收敛到选择硬件最省的配置上。不过实际应用中,对神经网络模型压缩的同时希望准确率损失较小,因此超参γ值设定不宜过大。经过发明人的多次仿真研究,γ值设定在0.25到0.5之间为宜。图6示出了超参γ值设置为0.36时,使用本技术的压缩神经网络的方法进行混合量化后不同运算层的参数值所使用的位数,图中斜线示出的柱体对应于深度方向的卷积(dwc:depthwise convolution)层,而其他柱体表示dwc之外的运算层。从图6中可以看出,神经网络中前端的运算层大多用较高的位数量化,后端的运算层用较低位数量化,这是因为前端的运算层参数更少且对网络性能影响更大。另外,计算复杂度更高且对网络性能影响更大的dwc层也普遍地比相邻运算层使用更高的位数量化。下方的表1示出了原始神经网络(fp 32)、统一8位量化方案和使用本技术的压缩神经网络的方法进行混合量化方案的模型大小和准确率的比较。从表1可以看出使用本技术方法的混合量化方案可以在模型压缩率超过86%时,还可以获得较好的分类性能(准确率76.228%)。
[0089]
表1
[0090] 模型大小(kb)准确率(%)fp3220454(平均个权重值32bit)76.840统一8bit量化5114(平均个权重值8bit)69.33混合量化2780(平均个权重值4.35bit)76.228
[0091]
本技术实施例还提供了一种用于压缩神经网络的装置700。如图7所示,该用于压缩神经网络的装置700包括获取单元710、压缩单元720、权重因子获取单元730、替换单元740、前向传播单元750、反向传播单元760和确定单元770。获取单元710用于获取待压缩神经网络,待压缩神经网络包括j个待压缩运算层,其中j为大于1的整数;压缩单元720用于对于j个待压缩运算层中的第j个待压缩运算层使用kj种不同的压缩率进行压缩,以生成kj个运算支路,其中j和kj均为整数,且1≤j≤j,kj≥1;权重因子获取单元730用于对于第j个待
压缩运算层,获取分别与kj个运算支路对应的kj个权重因子,kj个权重因子具有初始值;替换单元740用于对于第j个待压缩运算层,使用kj个运算支路替换待压缩运算层,产生替换后的神经网络;前向传播单元750用于在预设数据集上对替换后的神经网络进行前向传播,其中,对于第j个待压缩运算层,将kj个运算支路的kj个运算结果与kj个权重因子进行加权求和作为第j个待压缩运算层的输出;反向传播单元760用于在预设数据集上对替换后的神经网络进行反向传播,其中,对于第j个待压缩运算层,基于替换后的神经网络相对于待压缩神经网络的模型损失计算kj个权重因子的更新值;确定单元770,用于对第j个待压缩运算层,将kj个权重因子的更新值中最大者对应的运算支路确定为压缩后的第j个运算层。关于装置700的详细介绍可以参考上文结合附图1至6对相应方法的描述,此处不再赘述。
[0092]
在一些实施例中,用于压缩神经网络的装置可以被实现为一个或多个专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件。另外,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0093]
在另一些实施例中,用于压缩神经网络的装置也可以采用软件功能单元的形式实现。所述功能单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中,并可以被计算机装置执行。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、移动终端、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
[0094]
本技术实施例还提供一种电子设备,该电子装置包括:处理器和存储装置,存储装置用于存储能够在处理器上运行的计算机程序。当计算机程序被处理器执行时,使得处理器执行上述实施例中用于压缩神经网络方法。在一些实施例中,该电子设备可以是移动终端、个人计算机、平板电脑、服务器等。
[0095]
本技术实施例还提供一种非易失性计算机可读存储介质,该非易失性计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时执行上述实施例中用于对神经网络中卷积层进行剪枝的方法。在一些实施例中,该非易失性计算机可读存储介质可以是闪存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或本技术领域内所公知的任意其它形式非易失性计算机可读存储介质。
[0096]
本技术领域的一般技术人员可以通过研究说明书、公开的内容及附图和所附的权利要求书,理解和实施对披露的实施方式的其他改变。在权利要求中,措词“包括”不排除其他的元素和步骤,并且措辞“一”、“一个”不排除复数。在本技术的实际应用中,一个零件可能执行权利要求中所引用的多个技术特征的功能。权利要求中的任何附图标记不应理解为
对范围的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1