CN115222012A - 用于压缩神经网络的方法和装置 - Google Patents
用于压缩神经网络的方法和装置 Download PDFInfo
- Publication number
- CN115222012A CN115222012A CN202110425076.9A CN202110425076A CN115222012A CN 115222012 A CN115222012 A CN 115222012A CN 202110425076 A CN202110425076 A CN 202110425076A CN 115222012 A CN115222012 A CN 115222012A
- Authority
- CN
- China
- Prior art keywords
- compressed
- neural network
- values
- jth block
- block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请公开了一种用于压缩神经网络的方法和装置,其中该方法包括:获取包括多个待压缩参数值的待压缩神经网络;将多个待压缩参数值划分为J个待压缩块;对第j个待压缩块使用Kj个不同的压缩率进行压缩,生成Kj个运算支路;获取与Kj个运算支路对应的Kj个权重因子;使用Kj个运算支路替换待压缩块,产生替换后的神经网络;对替换后神经网络进行前向传播,将Kj个运算支路的Kj个运算结果与Kj个权重因子加权求和作为第j个待压缩块的输出;对替换后的神经网络进行反向传播,基于替换后的神经网络相对于待压缩神经网络的模型损失计算Kj个权重因子的更新值;和对第j个待压缩块,将Kj个权重因子的更新值中最大者对应的运算支路确定为压缩后的第j个块。
Description
技术领域
本申请涉及神经网络技术,更具体地,涉及一种用于压缩神经网络的方法和装置。
背景技术
近年来,神经网络技术已经应用于许多技术领域,例如,图像识别、语音识别、自动驾驶和医学成像等等。例如,卷积神经网络(CNN:Convolutional Neural Network)作为神经网络技术中具有代表性的一种网络结构和算法,在图像处理应用中取得了很大的成功。但是,由于神经网络的层数深、参数多、以及计算量大,限制了其应用范围。
发明内容
本申请的一个目的在于提供一种用于压缩神经网络的方法,能够以较低的准确率损失为代价换取较高的压缩效果。
根据本申请的一些方面,提供了一种用于压缩神经网络的方法。该方法包括:获取待压缩神经网络,所述待压缩神经网络包括一个或多个待压缩运算层,每个待压缩运算层包括一个或多个待压缩运算通道,每个待压缩运算通道包括一个或多个待压缩运算核,每个待压缩运算核包括一个或多个待压缩参数值;将所述多个待压缩参数值划分为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个块。
根据本申请的另一些方面,提供了用于压缩神经网络的装置。该装置包括:获取单元,用于获取待压缩神经网络,所述待压缩神经网络包括一个或多个待压缩运算层,每个待压缩运算层包括一个或多个待压缩运算通道,每个待压缩运算通道包括一个或多个待压缩运算核,每个待压缩运算核包括一个或多个待压缩参数值;划块单元,用于将所述多个待压缩参数值划分为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个块。
根据本申请的又一些方面,提供了一种电子设备,该电子设备包括:处理器;和存储装置,用于存储能够在所述处理器上运行的计算机程序;其中,当所述计算机程序被所述处理器执行时,使得所述处理器执行上述的用于压缩神经网络的方法。
根据本申请的又一些方面,提供了一种非易失性计算机可读存储介质,所述非易失性计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的用于压缩神经网络的方法。
本申请的技术方案在对神经网络进行压缩时,通过引入权重因子,将具有多种不同压缩率的待压缩块在预设数据集上进行再训练,并基于模型损失对权重因子更新,选择每个待压缩块中最大的权重因子对应的运算支路作为压缩后的块,从而能够为多个待压缩块选择兼顾准确率的适宜压缩率,并大大降低了运算量。
另外,本申请的技术方案在对神经网络进行压缩时,能够对预设的不同的压缩率进行更新,扩大了可选择的压缩率的范围,从而能够为待压缩块选择更优的压缩率。
以上为本申请的概述,可能有简化、概括和省略细节的情况,因此本领域的技术人员应该认识到,该部分仅是示例说明性的,而不旨在以任何方式限定本申请范围。本概述部分既非旨在确定所要求保护主题的关键特征或必要特征,也非旨在用作为确定所要求保护主题的范围的辅助手段。
附图说明
通过下面说明书和所附的权利要求书并与附图结合,将会更加充分地清楚理解本申请内容的上述和其他特征。可以理解,这些附图仅描绘了本申请内容的若干实施方式,因此不应认为是对本申请内容范围的限定。通过采用附图,本申请内容将会得到更加明确和详细地说明。
图1示出了根据本申请实施例的用于压缩神经网络的方法的流程图;
图2示出了一种示例性的神经网络结构示意图;
图3示出了一种示例性的卷积层结构示意图;
图4示出了采用不同压缩率对卷积核进行剪枝的示意图;
图5(a)和图5(b)示出了根据本申请实施例的对神经网络进行前向传播的逻辑框图;
图6示出了根据本申请实施例的用于更新压缩率的方法的流程图;
图7示出了根据本申请的神经网络压缩方法与传统的基于敏感性分析的压缩方法的性能比较图;
图8(a)、8(b)、8(c)、8(d)和8(e)分别示出了在不同剪枝率下各运算层的实际剪枝率的分布图,图8(f)示出了压缩前神经网络模型各运算层参数值占模型总参数值的比例;
图9示出了本申请的神经网络压缩方法在不同剪枝率下的等错误率的分布图;以及
图10示出了根据本申请实施例的用于压缩神经网络的装置的框图。
具体实施方式
在下面的详细描述中,参考了构成其一部分的附图。在附图中,类似的符号通常表示类似的组成部分,除非上下文另有说明。详细描述、附图和权利要求书中描述的说明性实施方式并非旨在限定。在不偏离本申请的主题的精神或范围的情况下,可以采用其他实施方式,并且可以做出其他变化。可以理解,可以对本申请中一般性描述的、在附图中图解说明的本申请内容的各个方面进行多种不同构成的配置、替换、组合,设计,而所有这些都明确地构成本申请内容的一部分。
为了便于神经网络在硬件上的部署,现有技术中通常会对神经网络进行压缩,例如剪枝和量化。其中,剪枝是指将神经网络中对输出准确度没有贡献或者贡献较小的单元执行剪除操作(例如,设置为零),从而达到压缩神经网络的目的。结构化剪枝作为剪枝的一种特殊形式,由于被剪枝单元在运算空间上具备一定规律性,因而能够进一步提升剪枝后神经网络在硬件上运行速率。以卷积层为例,在结构化剪枝方法中常见的操作是对整个卷积核(kernel)级或整个滤波器(filter)进行剪枝。在剪枝操作之前,通常需要进行敏感性分析来决定每个卷积层的压缩率,对于对神经网络的输出准确度影响较大的卷积层设置较高的压缩率,剪除较少的权重值;而对于对神经网络的输出准确度影响较小的卷积层设置较低的压缩率,剪除较多的权重值。本申请中,压缩率指压缩后数据大小与压缩前数据大小的比率。接着,基于每个卷积层各自的压缩率,对该卷积层中的若干个卷积核或若干个滤波器进行剪枝操作。
但是,本申请的发明人发现,现有技术的结构化剪枝方法具有多种缺陷。首先,敏感性分析需要遍历神经网络的各个运算层,每个运算层需要遍历不同的压缩率,在每个运算层的每个压缩率下需要在测试数据集上评估神经网络的输出准确度,从而导致运算量过大。虽然为了减少运算量可以减少每个运算层需要遍历的压缩率的数量,但是压缩率数量的减小会降低对该运算层敏感性分析的准确度。其次,现有技术的敏感性分析在各个运算层之间是独立进行的,但是神经网络各个运算层之间通常具有耦合效应,现有技术没有考虑该耦合效应对各运算层敏感性的影响。再次,通常运算层的压缩率与敏感性之间具有正相关性,但是如何在压缩率与敏感性之间建立定量的关系非常困难,实际操作中需要基于技术人员的经验设置,具有较大的局限性。
基于上述研究,本申请提供一种用于压缩神经网络的方法。该方法中,在获取待压缩神经网络后,将待压缩神经网络中的多个参数值划分为多个待压缩块,使用一个或多个不同的压缩率压缩每个待压缩块,以对应于每个待压缩块生成一个或多个运算支路;并且对于每个待压缩块,产生与一个或多个运算支路分别对应的一个或多个权重因子;然后,在预设数据集上对神经网络进行再训练,再训练包括前向传播和反向传播,其中,对于每个待压缩块,在前向传播过程中用所述一个或多个运算支路替换所述待压缩块,并且将一个或多个运算支路的一个或多个运算结果与一个或多个权重因子进行加权求和作为该待压缩块的输出;在反向传播过程中,基于与神经网络的性能相关的模型损失计算一个或多个权重因子的更新值;然后对每个待压缩块,将一个或多个权重因子的更新值中最大者对应的运算支路确定为压缩后的块,从而形成压缩后的神经网络。该方法通过引入权重因子,可以在小样本的预设数据集上对神经网络再训练,并基于模型损失对权重因子更新,选择每个块中最大的权重因子对应的运算支路作为压缩后的块,从而为多个块选择了能够兼顾准确率的合适的压缩率。与现有技术中通过遍历压缩率来确定各运算层的敏感性的方法相比,本申请的方法大大降低了运算量,这主要是因为可以同时对多个待压缩块的权重因子进行更新,考虑了多个待压缩块之间的耦合效应;进一步地,在本申请的方法中,由于权重因子更新基于模型损失更新,而不是技术人员的经验,无需人工参与,因此其适用性更广。
下面结合附图对本申请的用于压缩神经网络的方法进行详细说明。图1示出了根据本申请一些实施例的用于压缩神经网络的方法100的流程图,具体包括如下的步骤110-190。
步骤110,获取待压缩神经网络,该待压缩神经网络包括多个待压缩参数值。
在一些实施例中,待压缩神经网络可以是利用训练样本数据集训练之后得到的深度神经网络(DNN),其例如为卷积神经网络(CNN)、循环神经网络(RNN)、深度信念网络(DBN)、受限玻尔兹曼机(RBM)、全连接网络(FCN)、深度卷积网络(DCN)、长短期记忆(LSTM)网络或门控循环单元(GRU)等。
图2示出了一个示例性的待压缩神经网络结构图,其包括能够顺序地对神经网络接收的输入数据210进行处理的多个运算层220-1、220-2、……、220-L,以在经处理后输出输出数据230。在一些实施例中,该待压缩神经网络可以为卷积神经网络,例如LeNet、AlexNet、VGGNet、GoogLeNet、ResNet或其他类型的卷积神经网络,多个运算层可以包括卷积层(Conv)、批归一化层(BN:Batch Normalization)、激活层(例如,ReLU层)、池化层(Pooling)、全连接层和/或者其他类型的运算层。每个运算层可以包括一个或多个运算通道,每个运算通道可以包括一个或多个运算核,每个运算核中可以包括或配置有一个或多个参数值;各个运算层中类型或数量可能不同的参数值用于参与待压缩神经网络的运算。以卷积层为例,一个卷积层可以包括多个滤波器(即运算通道),每个滤波器可以包括多个卷积核(即运算核),每个卷积核可以包括多个呈行列排布的权重值(即参数值),例如,呈3×3、5×5或7×7矩阵形式排列的权重值,这些权重值作为卷积层的参数值参与待压缩神经网络的运算。对于图像处理类的卷积神经网络,输入数据210可以为图像,该图像可以以像素矩阵的形式表示,并且可以包括多个不同的颜色通道(例如,R、G、B颜色通道)。运算层220-1可以是卷积层,其包括一个或多个滤波器,以在输入数据210上执行卷积操作生成多个特征图1作为该运算层220-1的输出;接着,特征图1被提供给下一个运算层220-2(例如,批归一化层、激活层、池化层或全连接层)并作为其输入数据被继续进行处理,以生成多个特征图2。以此类推,直至由运算层220-L处理后生成输出数据230,其中L可以是大于1的整数。根据卷积神经网络的应用类型不同,输出数据230也会不同,例如,对于图像分类网络,输出数据230可以是将输入图像中的目标划分到多种不同的分类类型中;对于图像检测网络,输出数据230可以是输入图像中的目标的检测结果。在另一些实施例中,输入数据210和输出数据230也可以为声音数据、文字数据等,这取决于卷积神经网络的具体应用场景。需要说明的是,虽然上面的实施例以卷积神经网络为例进行了说明,但是本领域技术人员可以理解本申请的压缩神经网络的方法适用于任何包含待压缩运算层的神经网络。
在一些实施例中,待压缩神经网络包括一个或多个待压缩运算层,每个待压缩运算层包括一个或多个待压缩运算通道,每个待压缩运算通道包括一个或多个待压缩运算核,每个待压缩运算核包括一个或多个待压缩参数值。在一些实施例中,待压缩神经网络中的所有运算层中的参数值均为待压缩参数值。在一些实施例中,仅部分运算层、部分运算通道或部分运算核中的参数值作为待压缩参数值。对于是否对待压缩神经网络中的所有参数值进行压缩、或者选择哪些运算层、运算通道或运算核中的参数值进行压缩可以基于待压缩神经网络的特性或者具体应用需求而变化。
步骤120,将多个待压缩参数值划分为J个待压缩块,其中J为大于1的整数。
在一些实施例中,将多个待压缩参数值划分为J个待压缩块是指将同一运算层中的待压缩参数值划分入单独一个待压缩块。例如,如果待压缩神经网络包括了L个待压缩层,则J个待压缩块为J个待压缩运算通道。
以图2为例,若所有运算层220-1、220-2、……、220-L中的参数值均为待压缩参数值,则将运算层220-1中待压缩参数值作为单独一个待压缩块,将运算层220-2中待压缩参数值作为单独一个待压缩块,……,以此类推,直至生成L个待压缩块,此时J=L。
在另一些实施例中,将多个待压缩参数值划分为J个待压缩块是指将同一运算通道中的待压缩参数值划分入单独一个待压缩块。例如,如果待压缩神经网络包括L个待压缩层,每个待压缩层包括C个待压缩运算通道,则J个待压缩块为L×C个待压缩运算通道。
参考图3,其以卷积层320为例,对图2中所示的运算层进行了说明。卷积层320可以是图2所示的某个运算层。
如图3所示,卷积层320位于输入特征图310和输出特征图330之间,用于对输入特征图310输入的数据进行卷积运算之后产生运算结构,并由输出特征图330输出。在图3所示的示例中,卷积层320可包括5个运算通道,即滤波器320-1、320-2、320-3、320-4和320-5,其分别与输入特征图310的数据进行卷积运算,并且运算结果表示为输出特征图330的5个输出通道330-1、330-2、330-3、330-4和330-5。滤波器320-1、320-2、320-3、320-4和320-5中的每一个都可以包括6个卷积核,这6个卷积核用于分别与输入特征图310的6个输入通道310-1、310-2、310-3、310-4、310-5和310-6进行卷积运算。每个卷积核包括3行3列的权重值。
以图3为例,若卷积层320的滤波器320-1、320-2、320-3、320-4和320-5中的权重值均为待压缩参数值,则将滤波器320-1中的权重值作为单独一个待压缩块,将滤波器320-2中的权重值作为单独一个待压缩块,……,以此类推,直至生成卷积层320中的5个待压缩块。对于卷积层320之外的其他运算层,可以类似地划分待压缩块。
在另一些实施例中,将多个待压缩参数值划分为J个待压缩块是指将同一运算核中的待压缩参数值划分入单独一个待压缩块。例如,如果待压缩神经网络包括L个待压缩层,每个待压缩层包括C个待压缩运算通道,且每个待压缩运算通道包括Q个待压缩运算核,则J个待压缩块为L×C×Q个待压缩运算核。
继续以图3为例,若卷积层320的滤波器320-1、320-2、320-3、320-4和320-5中的权重值均为待压缩参数值,并且每个滤波器包括6个卷积核,则将每个卷积核中的权重值划分为单独一个待压缩块后,会产生对应于卷积层320的5×6=30个待压缩块。对于卷积层320之外的其他运算层,可以类似地划分待压缩块。
在另一些实施例中,将多个待压缩参数值划分为J个待压缩块包括将相邻的两个或更多个的运算层、运算通道或运算核中的待压缩参数值划分入单独的一个待压缩块。在又一些实施例中,将多个待压缩参数值划分为J个待压缩块包括将虽不相邻但类型相同的两个或更多个的运算层、运算通道或运算核中的待压缩参数值划分入单独的一个待压缩块,例如,将两个或更多个卷积层中的待压缩参数值划分入单独一个待压缩块。通过将两个或更多个的运算层、运算通道或运算核中的待压缩参数值划分入单独一个待压缩块进行处理,可以减少不必要的中间输出,提升运算效率。
上述不同实施例中,基于不同的“颗粒度”(即,运算层、运算通道和运算核的维度)将待压缩参数值划分为不同数量的待压缩块。较细的颗粒度有助于获得较低的压缩率,但是会增加运算量;因此,在实际应用中,对待压缩块的划分颗粒度的选择可以基于待压缩神经网络的特性或者具体应用需求而调整。另外,上述不同实施例中结合图2和图3对本申请将多个待压缩参数值划分为多个待压缩块的方法进行了说明,但是,图2、图3以及其他相关附图中关于输入特征图、输出特征图、卷积层、滤波器、卷积核或特征值等的具体数量的描述仅作为示例,本领域技术人员可以理解在其他实施例中它们也可以具有其它不同数量。
步骤130,对于J个待压缩块中的第j个待压缩块使用Kj个不同的压缩率进行压缩,以生成Kj个运算支路,其中j和Kj均为整数,且1≤j≤J,Kj≥1。
对第j个待压缩块使用Kj个不同的压缩率进行压缩需要事先设置不同的压缩率的数量和数值。压缩率的数量(即Kj)可以为2、3、4、5、6、7或其他合适的数值。压缩率数量的选择会影响后续形成的运算支路的数量,数量过多不仅会增加运算负担还会增加内存负担;而数量过少则可能无法筛选出适用于该待压缩块的最佳压缩率。压缩率的数值可以为0.05、0.1、0.15、0.2、0.25、0.3、0.35、0.4、0.45、0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95或其他合适的数值。压缩率的数值若设置过大可能达不到所需的压缩效果,而压缩率的数值设置过小则会影响整个神经网络的输出准确性。因此,在不同实施例中,需要针对不同待压缩块的特性或者具体应用需求来选择压缩率的数量和数值。不同待压缩块的压缩率的数量和/或数值可以相等或者不等。
在一些实施例中,对应于第j个待压缩块的Kj个压缩率具有分别的初始值Rj、Rj+Δ、Rj+2Δ、……、Rj+(Kj-1)Δ,其中0<Rj<1,0<Δ<1,并且0<(Rj+(Kj-1)Δ)<1。即,同一待压缩块的多个不同的压缩率呈等差数列。在一个示例中,Kj=3,Rj=0.2,并且Δ=0.15,则对应的3个不同的压缩率为0.2、0.35和0.5。
如果将Kj个压缩率设置为等差数列形式,则可以通过设置Rj和Δ的数值来控制或调整每个压缩率的数值,而无需逐一处理;这在压缩率数量较多的情形中尤其方便。需要指出的是,Δ是待压缩块中相邻两个运算支路的压缩率的差值,可以看作是为该待压缩块寻找适宜压缩率过程中的扫描步长,虽然该扫描步长越小,越有利于寻找到更适宜的压缩率,但相应地会增加运算量;因此,在不同实施例中,也可针对不同待压缩块的特性或者具体应用需求来确定Δ的值。
需要说明的是,等差数列形式的多个压缩率仅作为示例,在其他实施例中,也可以使用不同的方法从0至1之间选择Kj个不同的压缩率用于第j个待压缩块,本申请对具体选择方法不做限制。
在确定了第j个待压缩块的Kj个不同的压缩率之后,使用该Kj个不同的压缩率对第j个待压缩块进行压缩,以生成Kj个运算支路。对应于步骤120的不同实施例中基于不同的“颗粒度”将待压缩参数值划分为J个待压缩块(例如,L个待压缩运算层、L×C个待压缩运算通道或L×C×Q个待压缩运算核),对这J=L个待压缩运算层、J=L×C个待压缩运算通道或J=L×C×Q个待压缩运算核的压缩方式也不相同。
在基于运算层划分待压缩块的实施例中,首先,通过计算第j个待压缩运算层的所有运算通道的L1范数;接着,基于第j个待压缩运算层的Kj个压缩率分别确定L1范数最小的P1、P2、……、PKj个运算通道,具体地,可以基于Kj个压缩率确定Kj个需要保留的运算通道的数量,再从总的运算通道数量中分别减去该Kj个需要保留的运算通道的数量,从而产生需要被压缩的Kj个运算通道的数量P1、P2、……和PKj;再接着,将第j个待压缩运算层中该P1、P2、……、PKj个运算通道中的所有权重值置零后分别产生Kj个运算支路。具体地,以第j个待压缩运算层为图3所示的卷积层320为例,计算所有滤波器320-1、320-2、320-3、320-4和320-5各自的L1范数。例如,将滤波器320-1的6个卷积核中所有权重值的绝对值相加作为滤波器320-1的L1范数;以此类推,获得滤波器320-2、320-3、320-4和320-5各自的L1范数。假设Kj=3,对应于卷积层320的3个不同的压缩率为0.2、0.35和0.5;使用该3个不同的压缩率0.2、0.35和0.5对卷积层320进行压缩,并基于这3个不同的压缩率0.2、0.35和0.5确定后续生成的3个运算支路需要保留的滤波器的个数分别为(5×0.2)、(5×0.35)和(5×0.5),四舍五入后分别为1、2和3;则可以确定3个运算支路需要被剪枝的滤波器的数量分别为4、3和2。接着,确定5个滤波器320-1、320-2、320-3、320-4和320-5中L1范数最小的4、3和2个滤波器,即P1=4、P2=3且P3=2。假设5个滤波器的L1范数从小至大依次亦为滤波器320-1、滤波器320-2、滤波器320-3、滤波器320-4和滤波器320-5,则将L1范数最小的4个滤波器(320-1、320-2、320-3和320-4)中的所有权重值置零后形成第一运算支路;将L1范数最小的3个滤波器(320-1、320-2和320-3)中的所有权重值置零后形成第二运算支路;将L1范数最小的2个滤波器(320-1和320-2)中的所有权重值置零后形成第三运算支路。
在基于运算通道划分待压缩块的实施例中,首先,计算第j个待压缩运算通道的所有运算核的L1范数;接着,基于第j个待压缩运算通道的Kj个压缩率分别确定L1范数最小的P1、P2、……、PKj个运算核,具体地,可以基于Kj个压缩率确定Kj个需要保留的运算核的数量,再从总的运算核数量中分别减去该Kj个需要保留的运算核的数量,从而产生需要被压缩的Kj个运算核的数量P1、P2、……和PKj;再接着,将第j个待压缩运算通道中该P1、P2、……、PKj个运算核中的所有权重值置零后分别产生Kj个运算支路。具体地,以第j个待压缩运算通道为图3所示的滤波器320-1为例,计算所有6个卷积核(即,卷积核320-1-1至卷积核320-1-6)各自的L1范数。例如,将每个卷积核的9个权重值的绝对值相加作为该卷积核的L1范数。假设Kj=3,对应于滤波器320-1的3个不同的压缩率为0.2、0.35和0.5;使用该3个不同的压缩率为0.2、0.35和0.5对滤波器320-1进行压缩,并基于这3个不同的压缩率0.2、0.35和0.5确定后续生成的3个运算支路需要保留的卷积核的个数分别为(6×0.2)、(6×0.35)和(6×0.5),四舍五入后分别为1、2和3;则可以确定3个运算支路需要被剪枝的卷积核的数量分别为5、4和3。接着,确定6个卷积核中L1范数最小的5、4和3个卷积核,即P1=5、P2=4且P3=3。将L1范数最小的5个卷积核中的所有权重值置零后形成第一运算支路;将L1范数最小的4个卷积核中的所有权重值置零后形成第二运算支路;将L1范数最小的3个卷积核中的所有权重值置零后形成第三运算支路。
在基于运算核划分待压缩块的实施例中,首先,计算第j个待压缩运算核的所有待压缩参数值的绝对值;接着,基于第j个待压缩运算核的Kj个压缩率分别确定绝对值最小的P1、P2、……、PKj个待压缩参数值,具体地,可以基于Kj个压缩率确定Kj个需要保留的参数值的数量,再从总的参数值数量中分别减去该Kj个需要保留的参数值的数量从而产生需要被压缩的Kj个参数值的数量P1、P2、……和PKj;再接着,将第j个待压缩运算核中该P1、P2、……、PKj个待压缩参数值置零后分别产生Kj个运算支路。具体地,同时参考图3和图4,以第j个待压缩运算核为图3所示的滤波器320-1中的第一个卷积核320-1-1为例,计算卷积核320-1-1中所有9个权重值的绝对值。假设Kj=3,对应于卷积核320-1-1的3个不同的压缩率为0.2、0.35和0.5;使用该3个不同的压缩率为0.2、0.35和0.5对卷积核320-1-1进行压缩,并基于这3个不同的压缩率0.2、0.35和0.5确定后续生成的3个运算支路需要保留的权重值的个数分别为(9×0.2)、(9×0.35)和(9×0.5),四舍五入后分别为2、3和5;则可以确定3个运算支路需要被剪枝的权重值的数量分别为7、6和4。接着,确定9个权重值中绝对值最小的7、6和4个权重值,即P1=7、P2=6且P3=4。假设卷积核320-1-1中的9个权重值中绝对值最小的7个权重值从小至大依次为位于矩阵的位置(0,1)、(0,2)、(1,0)、(1,1)、(1,2)、(2,0)和(2,2)处;则将这7个绝对值最小的权重值置零后形成第一运算支路320-1-1a;将绝对值最小的6个权重值(位于(0,1)、(0,2)、(1,0)、(1,1)、(1,2)和(2,0)处的权重值)置零后形成第二运算支路320-1-1b;将绝对值最小的4个权重值(位于(0,1)、(0,2)、(1,0)和(1,1)处的权重值)置零后形成第三运算支路320-1-1c。
需要说明的是,在上述实施例中,基于第j个待压缩运算层、待压缩运算通道或待压缩运算核的Kj个压缩率分别确定L1范数最小的P1、P2、……、PKj个运算通道、运算核或参数值时,采用了四舍五入法进行了取整。在另一些实施例中,还可以采用向上取整或向下取整的近似方法。
步骤140,对于第j个待压缩块,获取分别与Kj个运算支路对应的一组Kj个权重因子,其中Kj个权重因子具有分别的初始值。
在一些实施例中,权重因子的初始值可以由软件自动生成。在另外一些实施例中,权重因子的初始值可以由用户定义并提供。由于在对神经网络再训练之前,并不知晓各个运算层、运算通道或运算核对压缩率的敏感度,因此在优选的实施例中,代表了不同压缩率的Kj个运算支路对应的Kj个权重因子的初始值通常设置为相等。
继续以Kj=3,且使用3个不同的压缩率0.2、0.35和0.5分别对3个运算支路进行压缩为例,可以对这3个运算支路设置3个权重因子,分别表示为β1、β2、和β3。在一个实施例中,可以将这3个权重因子的初始值均设置为0。可以理解,在其他例子中,权重因子的初始值也可以设置为其他相等或不相等的数值。
步骤150,对于第j个待压缩块,使用经该组Kj个权重因子加权的Kj个运算支路替换该待压缩块,产生替换后的神经网络。
参考图5(a)和5(b),以待压缩神经网络的第j个待压缩块为卷积通道convj为例,假设使用3种不同的压缩率(例如,Rj、Rj+Δ和Rj+2Δ)对第j个待压缩块进行了压缩,生成了3个运算支路convj1、convj2和convj3,则使用3个权重因子β1、β2和β3加权的3个运算支路convj1、convj2和convj3替换待压缩卷积通道convj。对所有J个待压缩块完成上述替换操作后,产生替换后的神经网络。
尽管上述以待压缩块为卷积通道为例进行了说明,但是可以理解,对于卷积层或者卷积核,以及对于批归一化层、激活层或全连接层的相应运算层、运算通道或者运算核等,也可以实现类似的替换操作。
仍参考图1,步骤160,在预设数据集上对替换后的神经网络进行前向传播,其中,对于第j个待压缩块,将Kj个运算支路的Kj个运算结果与Kj个权重因子进行加权求和作为第j个待压缩块的输出。
预设数据集可以是不同于用于训练深度神经网络的训练样本数据集的一个数据集。预设数据集可以包括多个训练示例,每个示例由一个输入对象和一个期望的输出值组成。在预设数据集上对神经网络进行前向传播可以对每个示例的输入对象产生一个输出值,通过比较该输出值与期望的输出值,可以评估神经网络的准确率。例如,对于图像分类网络,其输入对象为图像,前向传播的输出为将输入图像中的目标划分入多种不同的分类类型中,通过将该输出所属的分类与预期的分类结果比较,可以用于调节该图像分类网络的参数值或者评估其性能。类似地,如果神经网络用于语音识别系统,则输入对象为语音样本,而预期输出为对应的文本。在一些示例中,前述预设数据集可以为ImageNet数据集、或CIFAR10数据集等。可以理解,本领域技术人员将能够根据具体应用来选择合适的数据集进行神经网络的再训练,此处不再列举示例。
继续参考图5(a)和图5(b),继续以将待压缩块convj替换为使用3个权重因子β1、β2和β3加权的3个运算支路convj1、convj2和convj3为例对替换后的神经网络的前向传播进行说明。图5(a)示出了第j个待压缩块convj的正常的前向传播过程,图5(b)示出了当Kj=3时使用3个权重因子β1、β2和β3加权的3个运算支路convj1、convj2和convj3替换第j个待压缩块convj后的前向传播过程。
在图5(a)和图5(b)中,inputj表示第j个待压缩块的输入数据。首先,将替换后的Kj个运算支路与输入数据inputj进行运算,产生对应于Kj个运算支路的运算结果。这Kj个运算结果再与对应的Kj个权重因子进行加权运算产生加权和,该加权和可以被作为该待压缩块的输出结果。以第j个待压缩块为卷积通道convj为例,上述运算和加权的步骤可以采用公式(1)表示:
其中,表示第j个运算层中的第k个运算支路convjk与输入数据inputj进行卷积运算,αjk为权重因子βjk的归一化表示形式,表示第j个待压缩块中的第k个归一化后权重因子。在一些示例中,将权重因子βjk进行归一化可以采用下方的softmax函数,即公式(2)进行:
可以理解将权重因子βjk进行归一化还可以根据具体应用选择其他函数进行。
继续以图5(b)为例,当Kj=3时,上面的公式(1)可以表示为下面的公式(3):
具体运算过程不再赘述。
需要说明的是,在图5(a)和5(b)的示例中,以待压缩块为卷积通道进行了说明,但可以理解,对于卷积层或者卷积核,以及对于激活层或全连接层的相应运算层、运算通道或者运算核等的前向传播可以采用类似的方法进行。
步骤170,在预设数据集上对替换后的神经网络进行反向传播,其中,对于第j个待压缩块,基于替换后的神经网络相对于待压缩神经网络的模型损失计算Kj个权重因子的更新值。
在对待压缩神经网络的参数值进行剪枝后,会在节省计算及存储资源的同时导致待压缩神经网络的准确率损失。因此,可以对替换后的神经网络进行反向传播以对替换后的神经网络的各项参数进行调整,降低准确率损失。需要注意的是,本申请技术方案在对替换后的神经网络进行反向传播时,仅调整更新各个待压缩块的权重因子,而不会对神经网络的其他参数(例如,卷积层权重值)进行调整。
在一些实施例中,对替换后的神经网络进行反向传播,对第j个待压缩块的Kj个权重因子进行更新的过程可以采用下方的公式(4)进行:
其中,βjk表示第j个待压缩块的第k个权重因子的初始值,β′jk表示第j个待压缩块的第k个权重因子的更新值,Loss表示替换后的神经网络相对于原待压缩神经网络的模型损失的函数,λ表示学习率参数并可以由用户定义。
在一些实施例中,模型损失函数Loss包括损失函数项和性能指标项。其中,损失函数项与神经网络的应用类型相关,例如,分类、定位、检测或分割。性能指标项与神经网络待部署的硬件平台的硬件指标相关,例如,存储空间、浮点运算次数、延迟或能量消耗等。
下面以压缩分类神经网络在硬件平台上的存储空间为例对模型损失函数Loss进行说明。具体地,模型损失函数Loss可以由下方的公式(5)表示:
Loss=loss 1+loss 2 (5)
其中,loss1表示损失函数项,loss2表示性能指标项。
对于分类神经网络,损失函数项loss1可以进一步使用公式(6)所示的交叉熵函数表示:
其中,label为分类标签,通常使用独热码(one-hot)表示;I表示分类标签的总维数,例如,对于ImageNet数据集来说,分类标签的总维数I为1000;label(i)表示所有I个分类标签中的第i个分类,如果第i个分类成立,label(i)为1,否则label(i)为0;相应地,pred(i)表示识别到第i个分类的概率。
性能指标项loss2可以进一步使用公式(7)所示的模型大小函数表示:
loss2=(model_size/model_ref)γ (7)
其中,model_size表示训练中神经网络的模型大小,单位为“位”(bit);model_ref表示期望的压缩后神经网络的模型大小;γ为超参,用于平衡神经网络模型准确率损失和模型大小。当希望得到准确率更高的神经网络模型时可以设置较小的γ值,当希望得到更小的神经网络模型时可以设置较大的γ值。因此,γ的取值可以根据具体需求进行选择。在一些示例中,γ的取值为0.05~5。更具体地,在一些示例中,γ的取值为2~3,其能够较好地平衡神经网络模型准确率损失和模型大小。
在一些实施例中,上述公式(7)中的训练中神经网络的模型大小model_size可以采用下方的公式(8)表示:
其中,J表示神经网络中待压缩块的总数,j表示各个待压缩块的编号,则1≤j≤J;Kj表示第j个待压缩块中运算支路的总数,k表示该压缩块中的运算支路的编号,则1≤k≤Kj;convjk表示第j个待压缩块中第k个运算支路的卷积层;size(convjk)表示卷积层convjk的位数,对于图5(b)中的示例,对应于第j层的3个运算支路,size(convj1)、size(convj2)和size(convj3)的值分别等于这3个运算支路中非零权重值数量乘以非零权重值对应的位宽(例如,32位、16位、8位或4位等);另外,αjk为对应于第j个运算层中第k个运算支路的归一化权重因子,可以通过前述的公式(2)获得。
上面的示例以压缩分类神经网络在硬件平台上的存储空间为例对模型损失函数Loss进行了说明。本领域技术人员可以理解,根据具体应用场景,模型损失函数Loss可以做出相应的修改。在一些实施例中,模型损失函数Loss中的损失函数项loss1可以根据神经网络的应用类型(例如,分类、定位、检测或分割等)进行调整。以图像处理为例,分类神经网络可以用于判断给定的图像所属的类别;定位神经网络可以用于确定目标在给定的图像中的具体位置;检测神经网络可以在目标种类和数目都不确定的情况下,用于在给定的图像中对目标进行识别和定位;分割神经网络可以将给定的图像分割为多个组成部分,用于定位图像中目标的边界。类似于上述分类神经网络的损失函数项loss1与分类标签及识别到的各分类的概率相关,在调整损失函数项loss1时,定位神经网络需要考虑目标在图像上的位置参数;检测神经网络不仅需要考虑目标的种类和数目,还需要考虑这些目标在图像上的位置;以及,分割神经网络需要考虑目标在图像上的位置参数和形状参数。在一些实施例中,根据神经网络的具体应用类型,损失函数项loss1可以选自于交叉熵函数、绝对值损失函数、对数损失函数、平方损失函数、指数损失函数、铰链(Hinge)损失函数、感知(perceptron)函数或其他适宜的损失函数中的一种或多种,此处不再一一列举。相应地,模型损失函数Loss中的性能指标项loss2可以根据待部署的硬件平台的硬件指标(例如,存储空间、浮点运算次数、延迟或能量消耗等)进行调整。例如,如果针对待部署的硬件平台设置了与压缩后的神经网络的浮点运算次数、延迟或能量消耗相关的指标,可以将公式(7)中与存储空间相关的model_size项和model_ref项替换为与浮点运算次数、延迟或能量消耗相关的参数,从而形成调整后的性能指标项loss2。
在一些实施例中,步骤170结束后,就可以将获得的Kj个权重因子的更新值中最大者对应的运算支路确定为压缩后的第j个块,用压缩后的J个块替换压缩前的J个块,从而获得压缩后的神经网络。这可以减少压缩神经网络所需的计算量。
而在图1所示的实施例中,在步骤170之后,还可以继续在预设数据集上对替换后的神经网络进行一次或多次再训练,以获得性能更优的压缩后的神经网络。
步骤180,在预设数据集上对替换后的神经网络的前向传播和反向传播多次迭代执行,在迭代执行过程中,基于Kj个权重因子的更新值中最大者对应的运算支路来计算替换后神经网络模型大小,并判断前后两次迭代执行过程中计算获得的替换后神经网络模型大小的差值是否在预设数值范围内;若是,则执行步骤190;若否,则返回步骤160,继续迭代执行替换后神经网络的前向传播和反向传播步骤。
在预设数据集上对替换后神经网络进行包括前向传播和反向传播的再训练,目的在于更新分配到多个运算支路的多个权重因子,以平衡替换后神经网络的准确率损失和模型大小,得到优化的混合压缩方案。在迭代执行的过程中,对于第j个待压缩块,将前一次反向传播产生的Kj个权重因子的更新值赋值给后一次前向传播中的Kj个权重因子使用。多次迭代执行前述替换后神经网络的前向传播和反向传播后,若后一次迭代中替换后神经网络模型大小与前一次迭代中替换后神经网络模型大小的差值在预设数值范围内,则说明训练趋于收敛,可以结束训练;若否,则需要继续对替换后神经网络进行训练,继续执行前向传播和反向传播步骤以更新权重因子。
需要说明的是,对于第一次执行前向传播和反向传播,由于不存在前一次迭代过程,此时,可以将初始的待压缩神经网络模型大小作为前一次迭代过程的替换后神经网络模型大小,用于计算前后两次迭代执行过程中计算获得的替换后神经网络模型大小的差值。
还需要说明的是,在一些情况下,可能存在计算不收敛的情形,即在多次迭代后前述差值一直不能收敛至小于预设数值范围内,因此,可以预先设置最大迭代次数,当迭代次数达到该最大迭代次数后,强制退出迭代循环,结束对替换后神经网络的再训练。
在一些实施例中,可以使用公式(9)来计算替换后的神经网络的模型大小:
公式(9)中与公式(8)相同的符号表示相同的含义,model_size′表示替换后的神经网络的模型大小,αjk′通过下方公式(10)确定。
其中,运算符arg max表示取Kj个权重因子βjk中的最大值。也就是说,在计算替换后神经网络的模型大小时,仅将每个待压缩块中所有运算支路中权重因子最大者对应的运算支路的大小计入替换后神经网络的模型大小,而舍弃其他项。通过以上公式(9)和(10)可以在每次迭代过程中计算获得替换后神经网络模型大小。将前后两次迭代中的替换后神经网络模型大小相减后的差值与用户设置的预设数值范围比较,若该差值在预设数值范围内,则说明替换后神经网络的模型大小在迭代前后已无变化或者变化较小,可以结束训练;若否,继续在预设数据集上对替换后神经网络进行训练。
步骤190,对第j个待压缩块,将Kj个权重因子的更新值中最大者对应的运算支路确定为压缩后的第j个块。
如上所述,当在预设数据集上对替换后神经网络进行再训练并达到收敛条件后,说明替换后神经网络的准确率损失和模型大小已经相对平衡,对第j个待压缩块,可以直接将Kj个更新的权重因子中最大者对应的运算支路确定为压缩后的第j个块,使用所有的J个压缩后块替换压缩前的块构成压缩后的神经网络。
在结合图1描述的实施例中,虽然可以对各个待压缩块使用多个不同的压缩率进行压缩,并且可以通过后续的神经网络再训练从该多个不同的压缩率中选择较优的压缩率来对该待压缩块进行压缩,但是由于该多个不同的压缩率为预先设定,也有可能在该多种不同的压缩率之外存在更优的压缩率。因此,有必要对该多种不同的压缩率适时地进行更新,以寻求适用于该待压缩块的更优压缩率。
基于以上的考虑,本发明一些实施例中,参考图6,在步骤170和步骤180之间还执行了步骤172至178以用于对各个待压缩块的多个不同的压缩率进行更新。
为简洁起见,图6中未示出步骤110至150,且步骤160、170、180和190与图1的相应步骤类似,此处不再赘述。
步骤172,在预设数据集上对替换后的神经网络的前向传播和反向传播多次迭代执行,在迭代执行过程中,将前一次反向传播产生的Kj个权重因子的更新值赋值给后一次前向传播中的Kj个权重因子使用;并在每次迭代执行完成后,判断迭代执行次数是否达到预设次数M,若是,则选择执行步骤174、176或178中的一项;若否,则返回步骤160,继续迭代执行替换后神经网络的前向传播和反向传播步骤。其中,预设次数M为大于1的整数,例如,其可以介于3~20之间。更具体地,在一些示例中,M的取值为3、5、或10。
在对替换后的神经网络的前向传播和反向传播迭代执行M次之后,替换后的神经网络中各个运算支路对应的权重因子更新值的趋于稳定,则可以基于这些权重因子的更新值来判断是否需要对相应压缩率进行更新以及如何更新。具体地,在一些实施例中,对于第j个待压缩块,可以基于Kj个权重因子的更新值与预设权重因子阈值的比较,来判断是否需要对Kj个压缩率进行更新或如何更新。该预设权重因子阈值可以基于待压缩块的权重因子的数量Kj来设置,其大于1/Kj且小于1。以下以Kj个压缩率具有分别的初始值Rj、Rj+Δ、Rj+2Δ、……、Rj+(Kj-1)Δ为例对步骤174至178进行说明。可以理解,当这Kj个压缩率为非等差数列的其它数值时,也可以对该Kj个压缩率进行由小至大的排序后使用步骤174至178的方法进行更新。
步骤174,当Kj个运算支路中的第一个运算支路对应的权重因子的更新值大于等于预设权重因子阈值时,设置Kj个压缩率的更新值分别小于初始值。若Kj个运算支路中的第一个运算支路(即最小压缩率Rj对应的运算支路)的权重因子的更新值大于等于预设权重因子阈值,则说明第j个待压缩块倾向于使用所有Kj个压缩率中的最小值进行压缩,因此,有必要为第j个待压缩块提供更小的压缩率,以判断对于第j个待压缩块是否存在更优的小于Rj的压缩率。具体地,可以对所有Kj个压缩率的初始值减去一预定量(例如,Δ),若最小压缩率Rj与该预定量的差值大于0,则将Kj个初始值与该预定量的差值作为Kj个压缩率的更新值。在另一些情况下,若最小压缩率Rj与该预定量的差值小于等于0,则说明当前的Kj个压缩率已为允许范围内的最小的压缩率取值,可以设置Kj个压缩率的更新值分别等于初始值,或者说保持初始值不变。步骤174之后,返回步骤130,使用Kj个压缩率的更新值对J个待压缩块中进行压缩以生成更新后的Kj个运算支路,在步骤140中,Kj个权重因子重新设置为初始值,并在后续的再训练过程中对这些权重因子进行更新,此处不再赘述。
步骤176,当Kj个运算支路中的第Kj个运算支路对应的权重因子的更新值大于等于预设权重因子阈值时,设置Kj个压缩率的更新值分别大于初始值。若Kj个运算支路中的第Kj个运算支路(即最大压缩率Rj+(Kj-1)Δ对应的运算支路)的权重因子的更新值大于等于预设权重因子阈值,则说明第j个待压缩块倾向于使用所有Kj个压缩率中的最大值进行压缩,因此,有必要为第j个待压缩块提供更大的压缩率,以判断对于第j个待压缩块是否存在更优的大于Rj+(Kj-1)Δ的压缩率。具体地,可以对所有Kj个压缩率的初始值加上一预定量(例如,Δ),若最大压缩率Rj+(Kj-1)Δ与该预定量的和小于1,则将Kj个初始值与该预定量的和作为Kj个压缩率的更新值。在另一些情况下,若最大压缩率Rj+(Kj-1)Δ与该预定量的和大于等于1,则说明当前的Kj个压缩率已为允许范围内的最大的压缩率取值,可以设置Kj个压缩率的更新值分别等于初始值,或者说保持初始值不变。步骤176之后,返回步骤130并执行后续步骤。
步骤178,当Kj个运算支路中的第一个运算支路和第Kj个运算支路对应的权重因子的更新值均小于预设权重因子阈值时,设置Kj个压缩率的更新值分别等于初始值。若Kj个运算支路中的第一个运算支路和第Kj个运算支路的权重因子的更新值均没有大于等于预设权重因子阈值,则说明第j个待压缩块对所有Kj个压缩率中的最小值或者最大值没有明显倾向。这时,适合于第j个待压缩块的压缩率在该最小值和最大值之间,可以设置Kj个压缩率的更新值分别等于初始值,或者说保持初始值不变。步骤178之后,继续执行后续的步骤180和190,具体可以参考结合图1进行的描述,此处不再赘述。
在一个具体的实施例中,以图5(b)为例,Kj=3,3个运算支路的压缩率的初始值分别为Rj、Rj+Δ和Rj+2Δ。设预设权重因子阈值为0.5,在对替换后的神经网络的前向传播和反向传播迭代执行M次之后,若第一运算支路的权重因子的更新值大于等于0.5时,说明第一运算支路的权重因子显著大于第二和第三运算支路,可以对3个压缩率初始值分别减去预定量Δ以产生新的值Rj-Δ、Rj和Rj+Δ;若Rj-Δ大于0,则将这三个值Rj-Δ、Rj和Rj+Δ设置为压缩率的更新值。若第三运算支路的权重因子的更新值大于等于0.5时,说明第三运算支路的权重因子显著大于第一和第二运算支路,可以对3个压缩率初始值分别加上预定量Δ以产生新的值Rj+Δ、Rj+2Δ和Rj+3Δ;若Rj+3Δ小于1,则将这三个值Rj+Δ、Rj+2Δ和Rj+3Δ设置为压缩率的更新值。若第二运算支路的权重因子的更新值大于等于0.5时,或者所有三个运算支路的权重因子的更新值均小于0.5时,则设置3个压缩率的更新值分别等于初始值,即保持初始值不变。
参考图7,其示出了使用本申请的用于压缩神经网络的方法以及传统的基于敏感性分析的压缩方法对基于resnet34的声纹识别神经网络进行压缩的结果比较图。图7中横轴表示剪枝率(剪枝率=1-压缩率),纵轴表示等错误率(eer:equal error rate),其为声纹识别中最常见的性能指标,等错误率越低表示神经网络性能越好。从图7中可以看出,在不同的剪枝率下,本申请的压缩神经网络的方法的性能均好于传统的基于敏感性分析的压缩方法,且随着剪枝率越高,性能差距越大。
为了研究不同的剪枝率下神经网络模型的压缩效果,本申请还对表1所列出的不同剪枝率及相应的压缩率扫描步长Δ进行了模拟研究。参考图8(a)至8(e),其中图8(a)、8(b)、8(c)、8(d)和8(e)分别示出了在剪枝率为30%、52%、70%、82%和85%时,使用本申请的方法压缩神经网络模型后,各运算层的剪枝率的分布图;图8(f)示出了压缩前神经网络模型各运算层参数值占模型总参数值的比例。可以看出,随着剪枝率的增加,压缩后神经网络模型的各层剪枝率大体上也相应地增加。
表1
参考表2,其示出了将本申请的方法用于对声纹识别模型进行压缩后,在不同剪枝率下的等错误率的数值;图9对表2的等错误率数值进行了图形化表示,其中横轴为压缩后的模型大小,纵轴为等错误率数值。具体地,选择voxceleb数据集、voxceleb2数据集或从互联网上截取的开源语音样本,这些语音样本被预处理到5s、8s或10s长度,或者保持原有长度;将原模型、以及剪枝率分别为30%、52.5%、70.16%、81.84%和84.98%的压缩后模型在上述语音样本上进行测试,可以获得相应的等错误率的数值。从表2和图9中可以看出,即使对于剪枝率达84.98%的压缩后模型,其与原始模型相比,性能损失(即,等错误率的差值)也在0.45%以内。可以看出,本申请的用于压缩神经网络的方法能够在较高剪枝率下对压缩后神经网络模型的性能影响较小。
表2
本申请实施例还提供了一种用于压缩神经网络的装置1000。如图10所示,该用于压缩神经网络的装置1000包括获取单元1010、划块单元1020、压缩单元1030、权重因子获取单元1040、替换单元1050、前向传播单元1060、反向传播单元1070和确定单元1080。获取单元1010用于获取待压缩神经网络,待压缩神经网络包括一个或多个待压缩运算层,每个待压缩运算层包括一个或多个待压缩运算通道,每个待压缩运算通道包括一个或多个待压缩运算核,每个待压缩运算核包括一个或多个待压缩参数值;划块单元1020用于将多个待压缩参数值划分为J个待压缩块,其中J为大于1的整数;压缩单元1030用于对于J个待压缩块中的第j个待压缩块使用Kj个不同的压缩率进行压缩,以生成Kj个运算支路,其中j和Kj均为整数,且1≤j≤J,Kj≥1;权重因子获取单元1040用于对于第j个待压缩块,获取分别与Kj个运算支路对应的一组Kj个权重因子,Kj个权重因子具有分别的初始值;替换单元1050用于对于第j个待压缩块,使用经该组Kj个权重因子加权的Kj个运算支路替换待压缩块,产生替换后的神经网络;前向传播单元1060用于在预设数据集上对替换后的神经网络进行前向传播,其中,对于第j个待压缩块,将Kj个运算支路的Kj个运算结果与Kj个权重因子进行加权求和作为第j个待压缩块的输出;反向传播单元1070用于在预设数据集上对替换后的神经网络进行反向传播,其中,对于第j个待压缩块,基于替换后的神经网络相对于待压缩神经网络的模型损失计算Kj个权重因子的更新值;确定单元1080用于对第j个待压缩块,将Kj个权重因子的更新值中最大者对应的运算支路确定为压缩后的第j个块。关于装置1000的详细介绍可以参考上文结合附图1至9对相应方法的描述,此处不再赘述。
在一些实施例中,用于压缩神经网络的装置可以被实现为一个或多个专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件。另外,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
在另一些实施例中,用于压缩神经网络的装置也可以采用软件功能单元的形式实现。所述功能单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中,并可以被计算机装置执行。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、移动终端、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
本申请实施例还提供一种电子设备,该电子装置包括:处理器和存储装置,存储装置用于存储能够在处理器上运行的计算机程序。当计算机程序被处理器执行时,使得处理器执行上述实施例中用于压缩神经网络方法。在一些实施例中,该电子设备可以是移动终端、个人计算机、平板电脑、服务器等。
本申请实施例还提供一种非易失性计算机可读存储介质,该非易失性计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时执行上述实施例中用于对神经网络中卷积层进行剪枝的方法。在一些实施例中,该非易失性计算机可读存储介质可以是闪存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或本技术领域内所公知的任意其它形式非易失性计算机可读存储介质。
本技术领域的一般技术人员可以通过研究说明书、公开的内容及附图和所附的权利要求书,理解和实施对披露的实施方式的其他改变。在权利要求中,措词“包括”不排除其他的元素和步骤,并且措辞“一”、“一个”不排除复数。在本申请的实际应用中,一个零件可能执行权利要求中所引用的多个技术特征的功能。权利要求中的任何附图标记不应理解为对范围的限制。
Claims (20)
1.一种用于压缩神经网络的方法,其特征在于,所述方法包括:
获取待压缩神经网络,所述待压缩神经网络包括一个或多个待压缩运算层,每个待压缩运算层包括一个或多个待压缩运算通道,每个待压缩运算通道包括一个或多个待压缩运算核,每个待压缩运算核包括一个或多个待压缩参数值;
将所述待压缩神经网络的所有待压缩参数值划分为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个块。
2.根据权利要求1所述的方法,其特征在于,将所述待压缩神经网络的所有待压缩参数值划分为J个待压缩块包括将同一运算层中的待压缩参数值划分入单独一个待压缩块。
3.根据权利要求2所述的方法,其特征在于,对于所述J个待压缩块中的第j个待压缩块使用Kj个不同的压缩率进行压缩包括:
计算所述第j个待压缩块的所有运算通道各自的L1范数;
基于所述第j个待压缩块的Kj个压缩率分别确定L1范数最小的P1、P2、……、PKj个运算通道,其中P1、P2、……、PKj为分别为大于等于1且小于J的整数;以及
将所述第j个待压缩块中所述P1、P2、……、PKj个运算通道中的所有待压缩参数值置零后分别产生所述Kj个运算支路。
4.根据权利要求1所述的方法,其特征在于,将所述待压缩神经网络的所有待压缩参数值划分为J个待压缩块包括将同一运算通道中的待压缩参数值划分入单独一个待压缩块。
5.根据权利要求4所述的方法,其特征在于,对于所述J个待压缩块中的第j个待压缩块使用Kj个不同的压缩率进行压缩包括:
计算所述第j个待压缩块的所有运算核各自的L1范数;
基于所述第j个待压缩块的Kj个压缩率分别确定L1范数最小的P1、P2、……、PKj个运算核,其中P1、P2、……、PKj为分别为大于等于1且小于J的整数;以及
将所述第j个待压缩块中所述P1、P2、……、PKj个运算核中的所有待压缩参数值置零后分别产生所述Kj个运算支路。
6.根据权利要求1所述的方法,其特征在于,将所述待压缩神经网络的所有待压缩参数值划分为J个待压缩块包括将同一运算核中的待压缩参数值划分入单独一个待压缩块。
7.根据权利要求6所述的方法,其特征在于,对于所述J个待压缩块中的第j个待压缩块使用Kj个不同的压缩率进行压缩包括:
计算所述第j个待压缩块的所有待压缩参数值的绝对值;
基于所述第j个待压缩块的Kj个压缩率分别确定绝对值最小的P1、P2、……、PKj个待压缩参数值,其中P1、P2、……、PKj为分别为大于等于1且小于J的整数;以及
将所述第j个待压缩块中所述P1、P2、……、PKj个待压缩参数值置零后分别产生所述Kj个运算支路。
8.根据权利要求1所述的方法,其特征在于,所述第j个待压缩块的Kj个压缩率具有分别的初始值Rj、Rj+Δ、Rj+2Δ、……、Rj+(Kj-1)Δ,其中0<Rj<1,0<Δ<1,并且0<(Rj+(Kj-1)Δ)<1。
9.根据权利要求8所述的方法,其特征在于,还包括:
在所述预设数据集上对所述替换后的神经网络的前向传播和反向传播多次迭代执行,在所述迭代执行的过程中,将前一次反向传播产生的所述Kj个权重因子的更新值赋值给后一次前向传播中的所述Kj个权重因子使用。
10.根据权利要求9所述的方法,其特征在于,还包括:
在所述预设数据集上对所述替换后的神经网络的前向传播和反向传播迭代执行M次后,对于所述第j个待压缩块,基于所述Kj个权重因子的更新值获得所述Kj个压缩率的更新值,其中M为大于1的整数。
11.根据权利要求10所述的方法,其特征在于,基于所述Kj个权重因子的更新值获得所述Kj个压缩率的更新值包括:
当所述Kj个运算支路中的第一个运算支路对应的权重因子的更新值大于等于预设权重因子阈值时,设置所述Kj个压缩率的更新值分别小于初始值;
当所述Kj个运算支路中的第Kj个运算支路对应的权重因子的更新值大于等于所述预设权重因子阈值时,设置所述Kj个压缩率的更新值分别大于初始值;并且
当所述Kj个运算支路中的第一个运算支路和第Kj个运算支路对应的权重因子的更新值均小于所述预设权重因子阈值时,设置所述Kj个压缩率的更新值分别等于初始值。
12.根据权利要求9所述的方法,其特征在于,还包括:
在所述迭代执行过程中,基于所述Kj个权重因子的更新值中最大者对应的运算支路计算所述替换后的神经网络的模型大小;
比较前后两次迭代执行过程中计算获得的所述替换后的神经网络的模型大小的差值;
当所述差值在预设数值范围内时,停止所述迭代执行过程。
13.根据权利要求1所述的方法,其特征在于,所述模型损失包括损失函数项和性能指标项,所述损失函数项与所述待压缩神经网络的应用类型相关,所述性能指标项与所述待压缩神经网络待部署的硬件平台的硬件指标相关。
14.根据权利要求13所述的方法,其特征在于,所述待压缩神经网络的应用类型包括:分类、定位、检测或分割。
15.根据权利要求13所述的方法,其特征在于,所述待压缩神经网络待部署的硬件平台的硬件指标包括:存储空间、浮点运算次数、延迟或能量消耗。
16.根据权利要求1所述的方法,其特征在于,所述待压缩运算层包括卷积层、激活层、批归一化层、池化层或全连接层。
17.根据权利要求1所述的方法,其特征在于,还包括:
在将所述Kj个运算支路的Kj个运算结果与所述Kj个权重因子进行加权求和之前,对所述Kj个权重因子的值进行归一化处理。
18.一种用于压缩神经网络的装置,其特征在于,所述装置包括:
获取单元,用于获取待压缩神经网络,所述待压缩神经网络包括一个或多个待压缩运算层,每个待压缩运算层包括一个或多个待压缩运算通道,每个待压缩运算通道包括一个或多个待压缩运算核,每个待压缩运算核包括一个或多个待压缩参数值;
划块单元,用于将所述多个待压缩参数值划分为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个块。
19.一种电子设备,其特征在于,包括:
处理器;和
存储装置,用于存储能够在所述处理器上运行的计算机程序;
其中,当所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1-17中任一项所述的用于压缩神经网络的方法。
20.一种非易失性计算机可读存储介质,其特征在于,所述非易失性计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-17中任一项所述的用于压缩神经网络的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110425076.9A CN115222012A (zh) | 2021-04-20 | 2021-04-20 | 用于压缩神经网络的方法和装置 |
US17/533,082 US20220164671A1 (en) | 2020-11-20 | 2021-11-22 | Method and device for compressing neural network |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110425076.9A CN115222012A (zh) | 2021-04-20 | 2021-04-20 | 用于压缩神经网络的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115222012A true CN115222012A (zh) | 2022-10-21 |
Family
ID=83604297
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110425076.9A Pending CN115222012A (zh) | 2020-11-20 | 2021-04-20 | 用于压缩神经网络的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115222012A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117973485A (zh) * | 2024-03-29 | 2024-05-03 | 苏州元脑智能科技有限公司 | 模型轻量化方法、装置、计算机设备、存储介质及程序产品 |
-
2021
- 2021-04-20 CN CN202110425076.9A patent/CN115222012A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117973485A (zh) * | 2024-03-29 | 2024-05-03 | 苏州元脑智能科技有限公司 | 模型轻量化方法、装置、计算机设备、存储介质及程序产品 |
CN117973485B (zh) * | 2024-03-29 | 2024-06-21 | 苏州元脑智能科技有限公司 | 模型轻量化方法、装置、计算机设备、存储介质及程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10552737B2 (en) | Artificial neural network class-based pruning | |
CN110503192B (zh) | 资源有效的神经架构 | |
CN110799994B (zh) | 神经网络的自适应位宽缩减 | |
US20210089922A1 (en) | Joint pruning and quantization scheme for deep neural networks | |
Wang et al. | Differentiable joint pruning and quantization for hardware efficiency | |
US11295208B2 (en) | Robust gradient weight compression schemes for deep learning applications | |
US20220283820A1 (en) | Data parallelism in distributed training of artificial intelligence models | |
US11586909B2 (en) | Information processing method, information processing apparatus, and computer readable storage medium | |
US20230196202A1 (en) | System and method for automatic building of learning machines using learning machines | |
US11520592B2 (en) | Executing large artificial intelligence models on memory-constrained devices | |
WO2021011119A1 (en) | Dynamic multi-layer execution for artificial intelligence modeling | |
JP2021022050A (ja) | ニューラルネットワークの圧縮方法、ニューラルネットワーク圧縮装置、コンピュータプログラム、及び圧縮されたニューラルネットワークデータの製造方法 | |
JPWO2019146189A1 (ja) | ニューラルネットワークのランク最適化装置および最適化方法 | |
CN114245910A (zh) | 一种自动机器学习AutoML系统、方法及设备 | |
CN113011532A (zh) | 分类模型训练方法、装置、计算设备及存储介质 | |
CN116188878A (zh) | 基于神经网络结构微调的图像分类方法、装置和存储介质 | |
CN114580517A (zh) | 一种图像识别模型的确定方法及装置 | |
CN115222012A (zh) | 用于压缩神经网络的方法和装置 | |
KR20210111677A (ko) | 뉴럴 네트워크의 클리핑 방법, 뉴럴 네트워크의 컨벌루션 계산 방법 및 그 방법을 수행하기 위한 전자 장치 | |
CN116384471A (zh) | 模型剪枝方法、装置、计算机设备、存储介质和程序产品 | |
CN115908909A (zh) | 基于贝叶斯卷积神经网络的进化神经架构搜索方法及系统 | |
CN114519423A (zh) | 用于压缩神经网络的方法和装置 | |
Xu et al. | Research on YOLOv3 model compression strategy for UAV deployment | |
Kruglov | Channel-wise pruning of neural networks with tapering resource constraint | |
US11847567B1 (en) | Loss-aware replication of neural network layers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |