本发明公开了一种基于通道l1范数剪枝的神经网络压缩方法,涉及人工智能神经网络技术,属于计算、推算、计数的技术领域。
背景技术:
近年来,随着计算能力的提升、大数据的积累和学习算法的进步,以深度神经网络(deepneuralnetwork,简称dnn)为代表的深度学习已经逐步取代传统机器学习算法,大量的实践应用于自然语言处理、目标检测识别和数据挖掘等诸多领域,成为当今人工智能领域最主要的研究热点。深度学习的成功很大程度上依赖于庞大的数据集和高达数百万的参数,但是无论是推断过程还是训练过程都需要使用庞大的存储空间和计算资源,同时还会消耗大量的能量,因此催生了对神经网络模型剪枝压缩的研究。对庞大的参数模型进行剪枝压缩,以剪枝后精简的权重参数取代冗余的全部参数为深度神经网络在手机等嵌入式终端设备的应用创造了可能。
现有的剪枝压缩方法主要采用的策略是将卷积神经网络中冗余的参数挑选出来,让这些冗余的参数不参与之后的梯度更新或直接置0,实现网络运算计算量的减少和存储空间的节省。其中,传统通道剪枝、中位数卷积核剪枝等方法虽然可以保持剪枝后的较高准确率,但剪枝率过于固定而且压缩率小,使得其无法根据人们对不同硬件压缩率需求的不同来进行调整,不利于嵌入式终端设备的应用。
深度神经网络的训练本身都已耗费大量的运算资源和时间,庞大的参数矩阵的形成及更新更是需要较大的计算资源和时间才能实现,而且庞大的参数模型无法有效地应用于一些小型化的嵌入式终端设备。而普通的剪枝压缩方法虽然可以有效解决计算资源和时间花费较大的问题,但却牺牲了网络模型的分类精度。对卷积核的l1范数进行判断剪枝的优化方案虽然能够实现有效压缩和快速计算,但是没有考虑到通道方向才是可以去除冗余的最佳选择。而采用对通道卷积核权重分布进行调整的剪枝方法虽然能够去除冗余,但是对网络结构缺乏处理,没有对不同层的不同通道状况进行分析比较。此外,上述剪枝方法的压缩率大都在得到预训练模型的时候就已经固定,使得我们无法根据实际的硬件情况调整网络的压缩率,从而限制了这些剪枝方法的应用范围。本申请旨在为了更好地解决在剪枝压缩后的精度下降问题和并实现压缩率的自我调整,提供了一种基于通道l1范数剪枝的神经网络压缩方案。
技术实现要素:
本发明的发明目的是针对上述背景技术的不足,提供了一种基于通道l1范数剪枝的神经网络压缩方法,将预训练的网络模型剪枝成为精简压缩模型,充分减小剪枝对分类准确率下降这一影响的同时加入了压缩率可根据实际硬件需求自行调整的选项,降低了网络模型在硬件上应用的复杂度,解决了现有剪枝压缩方法压缩率固定和神经网络精度下降大且硬件实现难度大的技术问题。
本发明为实现上述发明目的采用如下技术方案:
一种基于通道l1范数剪枝的神经网络压缩方法,包括如下步骤:
步骤1,根据网络资源库公开的数据集和网络模型,自行调整参数并在数据集上对卷积神经网络进行训练,对得到的权值参数进行测试并调整网络模型和参数,使训练出的模型达到目标准确率,获取高精度下的权值参数;
步骤2,对于初始化的权值参数,根据每层剪枝后对准确率下降敏感的程度由大到小来确定剪枝重训练的先后顺序,依此敏感度将卷积层分为互斥的两组,其中,敏感度小的那组卷积层的权值保持不变,对敏感度大的那组卷积层的权值进行基于通道l1范数的分组剪枝;
步骤3,基于预先设定的group,将要剪枝的层的权值按照卷积核通道方向每group个卷积层分为一组,分别计算每个组的l1范数与该层的阈值θ,对l1范数大于值θ的组进行剪枝,保证其在之后的训练中不再更新;
步骤4,将l1范数小于值θ的组所包含的所有权值放回原网络模型和数据集中进行再训练,用再训练过后的权值参数更新原始权值参数;
步骤5,依据步骤2确定的按照各层敏感度大小对卷积层分组的方法将再训练后的权值参数再分为两组,对敏感度大的那组卷积层的权值进行基于通道l1范数的分组剪枝,对敏感度小的那组的卷积层权值进行再训练,保持剪枝过的权值不变,重新训练网络中未被剪枝的权值,再次使得网络收敛;
步骤6,重复步骤2至步骤5,直到所有卷积层权值完成全部剪枝。
上述步骤1中,网络训练的数据库选择ilsvrc-2012数据集。
上述步骤1中,对数据进行训练量化基于学习框架pytorch,在前向传播过程中采用浮点计算测试每一层的数据进而对网络模型和参数进行调整,使该网络模型达到尽可能高的分类准确率,获得这时候的权值参数。
上述步骤2中,分组的具体方法是:计算每个卷积层剪枝后对整个网络准确率下降的影响,依照影响程度的大小确定敏感度的大小,将敏感度较大的分为一组,将敏感度较小的分为一组,从而两组互斥。
上述步骤3中,设定需要的参数group后,按照group将该卷积层的权重每group个分为一组,然后由公式:
上述步骤3中,剪枝后的权值将被直接置0,在之后的网络训练过程中权值的值也不会发生变化,即一直保持为0。
上述步骤4中,保证剪枝过的权值不更新的办法是:每个权值经过剪枝后,跟随其权值的company变量由初始的1变为0,而未剪枝的权值的company变量仍然是1,在更新时将company与梯度相乘,保证剪枝过的权值的梯度为0,从而仅更新未剪枝的权值。
本发明采用上述技术方案,具有以下有益效果:
(1)本申请在减小对最终分类准确率影响的前提下,依据每个卷积层剪之后对准确率下降的敏感度对各卷积层分组剪枝,将初始全网络参数模型大幅度剪枝置0后既减小了神经网络参数模型的规模也减小了剪枝对分类准确率的影响,本发明对权值矩阵的处理可以使得精度下降很小甚至不下降;对各卷积层的分组剪枝则是根据按照卷积核通道方向分组后计算的通道方向l1范数与该层阈值的关系进行,在去除冗余的同时优化网络结构。
(2)本申请公开的循环剪枝方案还可以设置不同的组内权重个数和用于挑选小组的阈值,实现压缩率的自我调整。
(3)本发明通过将初始化参数模型剪枝置0使得神经网络推断和训练过程中涉及的计算量大幅度减少,并且剪枝后的权值可以通过编码来存储位置索引,从而减少模型在嵌入式设备的存储大小,降低了网络参数模型在硬件上实现的复杂度,减少了在网络运行过程中的运算量和参数量,为网络模型在如小型嵌入式终端设备等硬件上的应用提供了便利。
附图说明
图1是本发明的流程图。
图2是通道l1范数剪枝的示意图。
具体实施方式
下面结合附图对发明的技术方案进行详细说明。
本发明公开的基于通道l1范数剪枝的神经网络压缩方法如图1所示,包括如下五个步骤。
步骤一、获取初始化参数模型:获取数据集并调整网络模型,自行设定参数对网络模型进行训练,使得其收敛并达到一定准确率,得到全精度的网络模型权值参数,训练的数据库可以选择ilsvrc-2012数据集。
步骤二、网络敏感度的计算:对于初始化的权值参数,根据每层剪枝后对准确率下降敏感的程度由大到小来确定剪枝重训练的先后顺序,依此敏感度将卷积层分为互斥的两组,其中,敏感度小的那组卷积层权值保持不变,对敏感度大的那组卷积层的权值进行基于通道l1范数的分组剪枝。
步骤三、根据group和l1范数分组:基于预先设定的group,将要剪枝的层的权值按照卷积核通道方向每group个分为一组,分别计算每个组的l1范数,计算该层的阈值θ,按照group分组后的组内l1范数的计算根据公式为:
步骤四、部分再训练:将l1范数小于阈值θ的组权值放回原网络模型和数据集中进行再训练,用再训练过后的权值参数更新原始权值参数。
步骤五、循环分组剪枝:保持已剪枝的权值参数不变,依据神经网络各层的敏感度的不同进行分组,将敏感度大的卷积层先进行通道l1范数剪枝,保持剪枝后的权值参数保持不变,将敏感度小的卷积层权重放回网络进行重新训练,再次使得网络收敛。重复循环分层剪枝的过程,直到所有的网络参数完成量化。
图2给出了本发明基于通道l1范数剪枝的示意图。如样例中所示,得到一个3x3x8的原始权值参数模型后,参数group设置为4,所以根据通道方向每4个权重分为一组计算该组的l1范数wn,得到的每个组的l1范数跟预先计算的阈值θ进行比较,将l1范数大于阈值θ的组进行剪枝,将l1范数小于阈值θ的组进行重新训练。卷积核①中为预训练模型,灰色方块代表每个训练好的权重值,经过通道l1范数剪枝之后,卷积核②中白色方块表示剪枝后的小组,灰色方块表示未被剪枝的小组。
本发明还为不同的压缩率需求提供了可行方案,通过设置不同的组内权重数group和用于挑选小组的阈值θ,可以寻找压缩率与网络准确率下降之间的平衡。不同的压缩率会使得剪枝重训练过后的目标检测准确率也不同,一定程度上压缩率越大,剪枝对于原始准确率的影响会越大。
综合上述,采用本发明公开的技术方案后,可以根据不同的硬件需要改变网络的压缩率,将原始的权值参数模型剪枝成为由许多0值组成的稀疏化的权值参数模型,以适应不同设备对压缩率的不同要求。保证重要的参数不被剪枝,可以在一定程度上减小量化对最终分类准确率的影响。降低了网络参数模型在硬件上实现的复杂度,稀疏化的权值参数模型存在许多的0值,这大大减少了网络运行过程中的运算量和参数量,为一些网络模型在小型嵌入式终端设备上的实现提供了便利。
以上实施例仅为说明本发明的技术构思,不能以此限定本发明的保护范围,凡是按照本发明提出的技术构思做出的等同技术方案均落入本发明保护范围之内。
1.一种基于通道l1范数剪枝的神经网络压缩方法,其特征在于,获取神经网络达到目标准确率时的权值参数初始值,按照神经网络各卷积层剪枝后对准确率下降的敏感度由大到小的顺序将卷积层分为待剪枝卷积层组和权值保持不变的卷积层组,对待剪枝卷积层组中的各卷积层按照敏感度由大到小的顺序依次进行分组剪枝操作,对每层待剪枝的卷积层按照卷积核通道方向分组后进行基于组内通道l1范数的剪枝,再训练剪枝后的网络,获取再训练后到达目标准确率的权重参数,循环分组再剪枝操作直至网络收敛。
2.根据权利要求1所述一种基于通道l1范数剪枝的神经网络压缩方法,其特征在于,对每层待剪枝的卷积层按照卷积核通道方向分组后进行基于组内通道l1范数的剪枝的方法为:对每个待剪枝卷积层中组内通道l1范数超过该层卷积层阈值的权值组进行剪枝操作,每个待剪枝卷积层中组内通道l1范数小于该层卷积层阈值的权值组参与再训练。
3.根据权利要求1所述一种基于通道l1范数剪枝的神经网络压缩方法,其特征在于,训练神经网络的数据库选择ilsvrc-2012数据集。
4.根据权利要求1所述一种基于通道l1范数剪枝的神经网络压缩方法,其特征在于,基于学习框架pytorch对数据进行训练后执行分组再剪枝的循环操作,在前向传播过程中采用浮点计算测试每一层的数据,对网络模型和参数进行调整以获取神经网络达到目标准确率时的权值参数初始值。
5.根据权利要求2所述一种基于通道l1范数剪枝的神经网络压缩方法,其特征在于,每个待剪枝卷积层中各权值组的组内通道l1范数根据表达式
6.根据权利要求5所述一种基于通道l1范数剪枝的神经网络压缩方法,其特征在于,在循环分组再剪枝操作的过程中,为每层待剪枝的卷积层设置不同的阈值及不同的组内权重个数。
7.根据权利要求2所述一种基于通道l1范数剪枝的神经网络压缩方法,其特征在于,在执行分组再剪枝的循环操作的过程中,保证剪枝过的权值参数不更新,具体方法为:经过剪枝的权值参数的company变量由初始的1变为0,而未剪枝的权值参数的company变量仍然是1。
8.根据权利要求7所述一种基于通道l1范数剪枝的神经网络压缩方法,其特征在于,再训练组内通道l1范数小于该层卷积层阈值的权值组时,将经过剪枝的权值参数的company变量与梯度相乘以使剪枝过的权值参数的梯度为0。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1所述的压缩方法。
10.小型化嵌入式终端设备,其特征在于,包括:存储器、处理器及存储在存储器上并可以在处理器上运行的计算机程序,其特征在于,所述处理器根据所压缩率述程序时实现权利要求1所述压缩方法。
技术总结