神经网络模型压缩方法、装置、电子设备及可读存储介质转让专利

申请号 : CN202110210314.4

文献号 : CN113011581B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘俊杰柴振华李圣喜

申请人 : 北京三快在线科技有限公司

摘要 :

本发明公开了一种神经网络模型压缩方法、装置、电子设备及可读存储介质。其中,该方法包括:将待压缩神经网络输入至预先训练完成的压缩模型,其中,压缩模型包括通道剪枝模块以及自蒸馏量化模块;通过通道剪枝模块对待压缩神经网络进行通道剪枝操作,以得到第一输出;通过自蒸馏量化模块对第一输出进行自蒸馏量化操作,以得到目标神经网络。本发明解决了相关技术中压缩后的神经网络模型产生较大的精度损失的技术问题。

权利要求 :

1.一种神经网络压缩方法,其特征在于,包括:

将待压缩神经网络输入至预先训练完成的压缩模型,其中,所述压缩模型包括通道剪枝模块以及自蒸馏量化模块;

通过所述通道剪枝模块对所述待压缩神经网络进行通道剪枝操作,以得到第一输出;

通过所述自蒸馏量化模块对所述第一输出进行自蒸馏量化操作,以得到目标神经网络;

所述第一输出包括第一神经网络,其中,通过所述自蒸馏量化模块对所述第一输出进行自蒸馏量化操作,以得到目标神经网络,包括:在所述第一神经网络中插入伪量化算子,以及,对所述第一神经网络进行量化模拟,以得到第二神经网络;

对所述第二神经网络进行迭代训练,以得到量化误差函数以及自蒸馏损失函数;

根据所述量化误差函数以及所述自蒸馏损失函数,对所述待压缩神经网络进行压缩,以得到所述目标神经网络;

其中,根据所述量化误差函数以及所述自蒸馏损失函数,对所述待压缩神经网络进行压缩,包括:获取目标部署设备的设备参数;所述目标部署设备为服务器、移动设备或AIoT芯片之一;

根据所述设备参数、所述量化误差函数以及所述自蒸馏损失函数对所述待压缩神经网络进行压缩,具体包括:基于所述目标部署设备的类型,对所述待压缩神经网络,进行对应的层融合操作;获取所述压缩模型输出的压缩参数,同步至所述目标部署设备完成对应的参数设置;根据所述参数设置,完成对所述待压缩神经网络的算子编译优化。

2.根据权利要求1所述的方法,其特征在于,在所述第一神经网络中插入伪量化算子,以及,对所述第一神经网络进行量化模拟,以得到第二神经网络,包括:对所述待压缩神经网络中的权重参数以及所述待压缩神经网络输出的网络特征,分别进行阈值截断以及分布规则化处理;

对所述权重参数以及所述网络特征进行量化处理,以得到所述第二神经网络。

3.根据权利要求2所述的方法,其特征在于,根据所述待压缩神经网络的量化模拟结果确定量化误差函数以及自蒸馏损失函数,包括:根据所述第二神经网络当前训练次数对应的输出结果以及上一训练次数对应的输出结果,确定所述自蒸馏损失函数;

根据所述输出结果以及预设量化参数确定所述量化误差函数。

4.根据权利要求1所述的方法,其特征在于,将待压缩神经网络输入至预先训练完成的压缩模型之后,还包括执行以下步骤:(1)根据预设初始化参数初始化所述通道剪枝模块的剪枝参数;

(2)根据所述剪枝参数对所述待压缩神经网络进行通道剪枝操作,确定与所述通道剪枝操作对应的第一信息损失;

(3)根据所述第一信息损失对所述待压缩神经网络进行自蒸馏量化操作,根据所述蒸馏量化操作对应的量化结果以及预设信息损失期望确定期望差值,根据所述期望差值更新所述剪枝参数;

(4)重复执行步骤(2)‑(3),以使所述压缩模型收敛至所述预设信息损失期望。

5.一种神经网络模型压缩装置,其特征在于,包括:

输入单元,用于将待压缩神经网络输入至预先训练完成的压缩模型,其中,所述压缩模型包括通道剪枝模块以及自蒸馏量化模块;

第一处理单元,用于通过所述通道剪枝模块对所述待压缩神经网络进行通道剪枝操作,以得到第一输出;

第二处理单元,用于通过所述自蒸馏量化模块对所述第一输出进行自蒸馏量化操作,以得到目标神经网络;

所述第一输出包括第一神经网络,其中,

所述第二处理单元,包括:

量化模块,用于在所述第一神经网络中插入伪量化算子,以及,对所述第一神经网络进行量化模拟,以得到第二神经网络;

训练模块,用于对所述第二神经网络进行迭代训练,以得到量化误差函数以及自蒸馏损失函数;

压缩模块,用于根据所述量化误差函数以及所述自蒸馏损失函数,对所述待压缩神经网络进行压缩,以得到所述目标神经网络;

其中,所述压缩模块,包括:

获取子模块,用于获取目标部署设备的设备参数;所述目标部署设备为服务器、移动设备或AIoT芯片之一;

压缩子模块,用于根据所述设备参数、所述量化误差函数以及所述自蒸馏损失函数对所述待压缩神经网络进行压缩,具体包括:层融合单元,用于基于所述目标部署设备的类型,对所述待压缩神经网络,进行对应的层融合操作;参数设置单元,用于获取所述压缩模型输出的压缩参数,同步至所述目标部署设备完成对应的参数设置;编译优化单元,用于根据所述参数设置,完成对所述待压缩神经网络的算子编译优化。

6.一种电子设备,其特征在于,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如权利要求1‑4任一项所述的神经网络压缩方法的步骤。

7.一种可读存储介质,其特征在于,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如权利要求1‑4任一项所述的神经网络压缩方法的步骤。

说明书 :

神经网络模型压缩方法、装置、电子设备及可读存储介质

技术领域

[0001] 本发明涉及神经网络压缩技术领域,具体而言,涉及一种神经网络模型压缩方法、装置、电子设备及可读存储介质。

背景技术

[0002] 神经网络模型压缩框架作为一种用于减少网络存储大小,提高推理速度的基础深度学习组件,在业界中已经被广泛的应用,如Tensorflow Lite、MNN(深度神经网络推理引擎)和百度飞桨等。当前公开的神经网络模型压缩方法,通常的做法是设计一个压缩模块或者一套串行的模型压缩流程,并实施单个或者逐级进行迭代压缩(如图1所示,虚线框表示可选项)。第一步,通过知识蒸馏提升待压缩网络的性能;第二步,对网络执行剪枝算法以获取更紧凑的网络结构(数据类型float32),最后用量化感知训练算法或者训练后量化算法进行权重量化,从而得到所述压缩后的目标网络。
[0003] 申请人在实现本申请的技术方案之前,发现目前相关技术中的神经网络模型压缩方法,在实际生产环境使用时仍有以下缺点:
[0004] 1.各压缩策略单独设计,缺乏较好的关联组合优化:一方面,神经网络模型的压缩过程中包括常见的权重量化和知识蒸馏两个独立策略,由于不同策略优化目标函数的不一致,将上述两种策略串行组合后的输出反而没有达到单个策略能达到的最佳性能。另一方面,由于通道剪枝和量化感知训练存在一定的关联影响,对于剪枝+量化感知训练的简单串行组合,往往会造成输出的压缩后的神经网络模型产生较大的精度损失。
[0005] 2.基于量化感知训练的传统压缩策略,需要较长的再训练时间:对于传统神经网络压缩框架的量化感知训练步骤,当待量化网络的权重分布为非典型正态分布,或者激活特征分布存在明显的长尾分布时,往往需要大量重复迭代训练集,用于重新规则化权重和激活特征的分布,以达到无损量化的目的,但是同时也降低了量化算法的时效,需要更多的训练时间和计算资源。
[0006] 3.使用校准集和标定表的方法,量化后的模型精度无法保证,在一些对精度要求高的场景会有较大的影响,如安全审核。
[0007] 可见,相关技术中针对上述的问题,目前尚未提出有效的解决方案。

发明内容

[0008] 本发明实施例提供了一种神经网络模型压缩方法、装置、电子设备及可读存储介质,以至少解决相关技术中压缩后的神经网络模型产生较大的精度损失的技术问题。
[0009] 根据本发明实施例的一个方面,提供了一种神经网络压缩方法,包括:将待压缩神经网络输入至预先训练完成的压缩模型,其中,所述压缩模型包括通道剪枝模块以及自蒸馏量化模块;通过所述通道剪枝模块对所述待压缩神经网络进行通道剪枝操作,以得到第一输出;通过所述自蒸馏量化模块对所述第一输出进行自蒸馏量化操作,以得到目标神经网络。
[0010] 进一步地,所述第一输出包括第一神经网络,其中,通过所述自蒸馏量化模块对所述第一输出进行自蒸馏量化操作,以得到目标神经网络,包括:在所述第一神经网络中插入伪量化算子,以及,对所述第一神经网络进行量化模拟,以得到第二神经网络;对所述第二神经网络进行迭代训练,以得到量化误差函数以及自蒸馏损失函数;根据所述量化误差函数以及所述自蒸馏损失函数,对所述待压缩神经网络进行压缩,以得到所述目标神经网络。
[0011] 进一步地,在所述第一神经网络中插入伪量化算子,以及,对所述第一神经网络进行量化模拟,以得到第二神经网络,包括:对所述待压缩神经网络中的权重参数以及所述待压缩神经网络输出的网络特征,分别进行阈值截断以及分布规则化处理;对所述权重参数以及所述网络特征进行量化处理,以得到所述第二神经网络。
[0012] 进一步地,根据所述待压缩神经网络的量化模拟结果确定量化误差函数以及自蒸馏损失函数,包括:根据所述第二神经网络当前训练次数对应的输出结果以及上一训练次数对应的输出结果,确定所述自蒸馏损失函数;根据所述输出结果以及预设量化参数确定所述量化误差函数。
[0013] 进一步地,根据所述量化误差函数以及所述自蒸馏损失函数,对所述待压缩神经网络进行压缩,包括:获取目标部署设备的设备参数;根据所述设备参数、所述量化误差函数以及所述自蒸馏损失函数对所述待压缩神经网络进行压缩。
[0014] 进一步地,将待压缩神经网络输入至预先训练完成的压缩模型之前,还包括执行以下收敛步骤:(1)根据预设初始化参数初始化所述通道剪枝模块的剪枝参数;(2)根据所述剪枝参数对所述待压缩神经网络进行通道剪枝操作,确定与所述通道剪枝操作对应的第一信息损失;(3)根据所述第一信息损失对所述待压缩神经网络进行自蒸馏量化操作,根据所述蒸馏量化操作对应的量化结果以及预设信息损失期望确定期望差值,根据所述期望差值更新所述剪枝参数;(4)重复执行步骤(2)‑(3),以使所述压缩模型收敛至所述预设信息损失期望。
[0015] 根据本发明实施例的另一方面,还提供了一种神经网络模型压缩装置,包括:输入单元,用于将待压缩神经网络输入至预先训练完成的压缩模型,其中,所述压缩模型包括通道剪枝模块以及自蒸馏量化模块;第一处理单元,用于通过所述通道剪枝模块对所述待压缩神经网络进行通道剪枝操作,以得到第一输出;第二处理单元,用于通过所述自蒸馏量化模块对所述第一输出进行自蒸馏量化操作,以得到目标神经网络。
[0016] 进一步地,所述第一输出包括第一神经网络,其中,所述第二处理单元,包括:量化模块,用于在所述第一神经网络中插入伪量化算子,以及,对所述第一神经网络进行量化模拟,以得到第二神经网络;训练模块,用于对所述第二神经网络进行迭代训练,以得到量化误差函数以及自蒸馏损失函数;压缩模块,用于根据所述量化误差函数以及所述自蒸馏损失函数,对所述待压缩神经网络进行压缩,以得到所述目标神经网络。
[0017] 根据本发明实施例的另一方面,还提供了一种电子设备,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如上所述的神经网络压缩方法的步骤。
[0018] 根据本发明实施例的另一方面,还提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如上所述的神经网络压缩方法的步骤。
[0019] 在本发明实施例中,通过将待压缩神经网络输入至预先训练完成的压缩模型,其中,压缩模型包括通道剪枝模块以及自蒸馏量化模块;通过通道剪枝模块对待压缩神经网络进行通道剪枝操作,以得到第一输出;通过自蒸馏量化模块对第一输出进行自蒸馏量化操作,以得到目标神经网络。通过压缩模型中的自蒸馏量化模块降低了显存使用率以及减少了计算资源开销,保证了待压缩神经网络压缩后的精度的技术效果,通过压缩模型中进而解决了相关技术中压缩后的神经网络模型产生较大的精度损失的技术问题。

附图说明

[0020] 此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0021] 图1是根据现有技术的一种神经网络压缩流程的示意图;
[0022] 图2是根据本发明实施例的一种可选的神经网络压缩方法的流程示意图;
[0023] 图3是根据本发明实施例的一种可选的压缩模型的示意图;
[0024] 图4a是根据本发明实施例的一种可选的阈值截断前的原始权重分布示意图;
[0025] 图4b是根据本发明实施例的一种可选的阈值截断后的权重分布示意图;
[0026] 图5是根据本发明实施例的一种可选的分布规则化前后的权重分布示意图;
[0027] 图6是根据本发明实施例的一种可选的压缩模型的模型压缩示意图;
[0028] 图7是根据本发明实施例的又一种可选的压缩模型的模型压缩示意图;
[0029] 图8是根据本发明实施例的一种可选的神经网络压缩装置的结构示意图。

具体实施方式

[0030] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0031] 需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0032] 实施例1
[0033] 根据本发明实施例,提供了一种神经网络压缩方法,如图2所示的一种神经网络压缩方法的流程示意图,该方法具体可以包括以下步骤:
[0034] S202,将待压缩神经网络输入至预先训练完成的压缩模型,其中,压缩模型包括通道剪枝模块以及自蒸馏量化模块;
[0035] S204,通过通道剪枝模块对待压缩神经网络进行通道剪枝操作,以得到第一输出;
[0036] S206,通过自蒸馏量化模块对第一输出进行自蒸馏量化操作,以得到目标神经网络。
[0037] 具体地,在本实施例中,待压缩神经网络是指预先训练完成的算法模型,待压缩神经网络为收敛的算法模型,其网络参数在经过训练数据集训练后确定最优参数。需要说明的是,在本实施例中,不对待压缩神经网络的网络结构、输入特征、输出结果以及网络参数进行限定。
[0038] 在本实施例中,在将待压缩神经网络输入至预先训练完成的压缩模型之前,还包括但不限于:对待压缩神经网络进行预处理,包括但不限于将待压缩模型的模型框架转换成预设的或与压缩模型适配的训练框架,以提升压缩模型对待压缩模型的模型处理效率。
[0039] 通过将训练完成后的待压缩神经网络输入至预先训练完成的压缩模型,然后得到压缩模型输出的目标神经网络。目标神经网络占用的显存资源小于待压缩神经网络,且计算资源开销也小于待压缩神经网络,而数据处理能力并没有衰减。
[0040] 在本实施例中,压缩模型包括通道剪枝模块以及自蒸馏量化模块,如图3所示的压缩模型示意图,通道剪枝模块30用于接收待压缩神经网络的输入,通道剪枝模块30的输出端与自蒸馏量化模块32的输入端连接,自蒸馏量化模块32用于输出目标神经网络,即压缩完成的目标神经网络。。
[0041] 本实施例在具体实施时,首先需要训练点击搜索模型。
[0042] 本发明的一些实施例中,根据样本神经网络、样本神经网络在进行网络压缩前的输出精度以及样本神经网络在压缩后的输出精度,构建训练样本集,训练样本集中的每条训练样本包括:样本神经网络的模型参数、压缩前输出精度。
[0043] 首先,获取样本神经网络的模型参数以及模型精度。通常,获取已经训练完成的算法模型的模型参数(即模型中的权重),然后将对应的样本神经网络数据输入至训练完成的算法模型,以得到输出结果,然后根据目标结果或对照结果进行对比,确定样本神经网络的压缩前输出精度,根据样本神经网络的压缩前后的数据进行训练样本的构建。
[0044] 然后,根据样本神经网络的数据构建训练样本。本发明的一些实施例中,通过上述样本神经网络的数据进行处理,可以得到训练样本。每条训练样本包括:模型参数、压缩前输出精度、压缩后输出精度、损失期望(压缩前输出精度与压缩后输出精度的差值期望)。本发明的一些实施例中,将每一个训练样本表示为一个三元组,包括<模型参数、压缩前输出精度、压缩后输出精度>。或,在另一些实施例中,将每一个训练样本表示为一个二元组,包括<模型参数、损失期望>。
[0045] 接下来,基于构建的训练样本集训练所述压缩模型。以样本神经网络、样本神经网络的模型参数为模型输入,以损失期望为模型目标,训练压缩模型。
[0046] 在本发明的一些实施例中,通过压缩模型的通道剪枝模块对待压缩神经网络进行通道剪枝操作,以得到第一输出;通过自蒸馏量化模块对第一输出进行自蒸馏量化操作,以得到目标神经网络,具体可以包括:通过压缩模型的通道剪枝模块对待压缩神经网络的模型参数进行通道剪枝操作,然后根据经过通道剪枝操作后的待压缩神经网络的模型参数进行自蒸馏量化操作,其中,自蒸馏量化操作包括但不限于量化操作以及知识蒸馏操作,最终的,得到待压缩神经网络对应的目标神经网络。
[0047] 需要说明的是,通过本实施例,将待压缩神经网络输入至预先训练完成的压缩模型,通过通道剪枝模块对待压缩神经网络进行通道剪枝操作,以得到第一输出;通过自蒸馏量化模块对第一输出进行自蒸馏量化操作,以得到目标神经网络。通过压缩模型中的自蒸馏量化模块降低了显存使用率以及减少了计算资源开销,保证了待压缩神经网络压缩后的精度的技术效果,通过压缩模型中进而解决了相关技术中压缩后的神经网络模型产生较大的精度损失的技术问题。
[0048] 可选地,在本实施例中,第一输出包括第一神经网络,其中,通过自蒸馏量化模块对第一输出进行自蒸馏量化操作,以得到目标神经网络,包括但不限于:在第一神经网络中插入伪量化算子,以及,对第一神经网络进行量化模拟,以得到第二神经网络;对第二神经网络进行迭代训练,以得到量化误差函数以及自蒸馏损失函数;根据量化误差函数以及自蒸馏损失函数,对待压缩神经网络进行压缩,以得到目标神经网络。
[0049] 具体地,在本实施例中,将待压缩神经网络输入至压缩模型的通道剪枝模块中,通过通道剪枝模块对待压缩神经网络进行通道剪枝操作,以得到第一神经网络。在自蒸馏量化模块中,在第一神经网络中插入伪量化算子,伪量化算子为预设量化函数或预设量化算法,通过伪量化算子对待压缩神经网络的模型参数以及输出特征等进行量化处理,得到第二神经网络。根据待压缩网络对应的样本训练集对第二神经网络进行迭代训练。根据多次迭代训练的输出特征的平均值以及预设量化期望得到量化误差函数,根据相邻次数的训练过程得到的输出特征来确定自蒸馏损失函数。然后根据量化误差函数以及自蒸馏损失函数,对待压缩神经网络进行压缩,以得到目标神经网络。
[0050] 在上述实施例中,在第一神经网络中插入伪量化算子对第一神经网络进行量化模拟,并进行迭代训练,根据得到的量化误差函数以及自蒸馏损失函数,对待压缩神经网络进行压缩,以得到目标神经网络。在自蒸馏量化的过程中不需要借助辅助神经网络进行知识蒸馏,降低了硬件显存的占用率,减少了资源占用率,同时避免了传统方法(先蒸馏后量化)中量化经过知识蒸馏后的模型会带来较大精度损失的问题。
[0051] 可选地,在本实施例中,在第一神经网络中插入伪量化算子,以及,对第一神经网络进行量化模拟,以得到第二神经网络,包括但不限于:对待压缩神经网络中的模型参数以及待压缩神经网络输出的网络特征,分别进行阈值截断以及分布规则化处理;对模型参数以及网络特征进行量化处理,以得到第二神经网络。然后根据待压缩神经网络对应的训练样本集对第二神经网络进行迭代训练。
[0052] 在具体的应用场景中,通过对待压缩神经网络中的模型参数以及待压缩神经网络输出的网络特征分别进行阈值截断以及分布规则化处理。约束待量化网络的权重分布为典型正态分布,并且避免在量化训练过程中激活特征分布出现明显的长尾分布。
[0053] 其中,阈值阶段是根据预先设定的特定阈值区间,将待压缩神经网络的原始权重分布中超出特定阈值区间外的离散变量剔除。如图4a所示,阈值截断的特定阈值区间为(a,b),对于图4a中原始权重分布进行阈值截断后,可以得到图4b中所示的阈值截断后的权重分布。
[0054] 分布规则化是将第一神经网络中的权重分布,对第一神经网络中的权重分布进行分布规则化处理,以约束第一神经网络中的权重的分布至近似正则化分布的形态。具体地,如图5中(a)所示的原始权重分布进行分布规则化处理后,得到图5中(b)所示的分布规则化后的权重分布。
[0055] 综上,在对第一神经网络的量化操作进行量化模拟,然后对量化操作进行的处理包括但不限于分布规则化、阈值截断以及低通过滤等。然后对模型参数以及网络特征进行量化处理,以得到第二神经网络,接着,根据量化模拟的结果分别计算量化误差函数以及自蒸馏损失函数,根据量化误差函数以及自蒸馏损失函数的计算结果进行带权融合并进行反向梯度传播。
[0056] 可选地,在本实施例中,根据待压缩神经网络的量化模拟结果确定量化误差函数以及自蒸馏损失函数,包括但不限于:根据第二神经网络当前训练次数对应的输出结果以及上一训练次数对应的输出结果,确定自蒸馏损失函数;根据输出结果以及预设量化参数确定量化误差函数。
[0057] 在具体地应用场景中,设置一个批次预设数量的数据,并同等拷贝成N份(N为大于或等于1的自然数)。然后对N份拷贝数据进行随机数据增强,即,在数据中引入随机噪声,提高待压缩神经网络的模型泛化性能。接着,依次输入至第二神经网络并进行前向传播,在计算前向传播的过程中,对每一层输出的N份输出特征进行元素的平均操作,用于扩大目标函数求解过程中的搜索域,从而避免过早陷入局部最优解。最后,使用于当前训练次数t的第二神经网络的末层平均输出特征与该输出特征在上一次训练次数t‑1的输出结果进行求解自蒸馏损失函数,并使用自蒸馏损失函数进行反向传播。
[0058] 在上述实施例中,第一、通过计算自蒸馏损失函数,得到对应的计算结果,并用于约束交叉熵的权重大小。第二、通过自蒸馏损失函数来实现阈值约束(超参数),用于限制自蒸馏损失函数的输出结果在一定的阈值范围内,目标在于约束反向传播过程中不正常(过大或过小)的梯度量级。
[0059] 在本实施例的一个具体实施场景中,参见图6,为压缩模型的模型压缩示意图,具体的待压缩神经网络的压缩过程具体可以包括以下步骤:
[0060] S61,将训练数据进行随机数据增强;
[0061] S62,将进行随机数据增强后的训练数据输入至压缩模型中;
[0062] S63,对待压缩神经网络的输出特征中插入伪量化算子,对待压缩网络进行量化模拟;
[0063] S64,获取各组训练数据对应的待压缩神经网络的输出特征的平均值t;
[0064] S65,根据平均值以及预设量化期望得到量化误差函数;
[0065] S66,根据上一次训练过程中待压缩神经网络的输出特征的平均值t‑1以及当前训练次数对应的平均值t获取自蒸馏损失函数;
[0066] S67,根据量化误差函数以及自蒸馏损失函数确定交叉熵,以得到待压缩神经网络对应的目标神经网络。
[0067] 通过上述实施例,根据第二神经网络当前训练次数对应的输出结果以及上一训练次数对应的输出结果,确定自蒸馏损失函数;根据输出结果以及预设量化参数确定量化误差函数。通过对第二神经网络迭代训练过程中输出结果确定自蒸馏损失函数,避免了对辅助训练网络的依赖,降低了硬件设备显存的占用率,节约了计算资源。
[0068] 可选地,在本实施例中,根据量化误差函数以及自蒸馏损失函数,对待压缩神经网络进行压缩,包括但不限于:获取目标部署设备的设备参数;根据设备参数、量化误差函数以及自蒸馏损失函数对待压缩神经网络进行压缩。
[0069] 具体地,在本实施例中,给定待压缩神经网络,当通过将给定的待压缩神网络输入至预先训练完成的压缩模型之后,所得到的目标神经网络,将会根据具体的部署设备(服务器、移动设备或AIoT芯片等)进行优化部署。首先,基于部署设备的类型,对待压缩神经网络,进行对应的层融合操作。然后,获取压缩模型SKDQAT框架输出的压缩参数,同步至部署设备完成对应的参数设置。最后,根据所述的参数设置,完成对待压缩网络的算子编译优化,以得到最佳的部署性能。
[0070] 可选地,在本实施例中,将待压缩神经网络输入至预先训练完成的压缩模型,还包括执行以下步骤:
[0071] (1)根据预设初始化参数初始化通道剪枝模块的剪枝参数;
[0072] (2)根据剪枝参数对待压缩神经网络进行通道剪枝操作,确定与通道剪枝操作对应的第一信息损失;
[0073] (3)根据第一信息损失对待压缩神经网络进行自蒸馏量化操作,根据蒸馏量化操作对应的量化结果以及预设信息损失期望确定期望差值,根据期望差值更新剪枝参数;
[0074] (4)重复执行步骤(2)‑(3),以使压缩模型收敛至预设信息损失期望。
[0075] 具体地,在压缩模型中,参照图7,预先设定一个预设信息损失期望,在步骤(1)中根据预设初始化参数初始化通道剪枝模块的剪枝参数,在步骤(2)中根据初始化后的剪枝参数执行通道剪枝操作,根据剪枝结果估计实际信息损失;在步骤(3)中基于实际信息损失,进一步执行自蒸馏量化模块,得到输出目标神经网络。接着,评估经过压缩后的目标神经网络与信息损失期望的差异,具体的,根据蒸馏量化操作对应的量化结果以及预设信息损失期望确定期望差值,根据期望差值更新剪枝参数;在步骤(4)中回朔剪枝参数初始化阶段,根据所述差异进行初始化参数的修正。重复执行上述步骤(2)‑(3),以达到待压缩神经网络最终可以收敛至信息损失期望。
[0076] 通过本实施例,将待压缩神经网络输入至预先训练完成的压缩模型,通过通道剪枝模块对待压缩神经网络进行通道剪枝操作,以得到第一输出;通过自蒸馏量化模块对第一输出进行自蒸馏量化操作,以得到目标神经网络。通过压缩模型中的自蒸馏量化模块降低了显存使用率以及减少了计算资源开销,保证了待压缩神经网络压缩后的精度的技术效果,通过压缩模型中进而解决了相关技术中压缩后的神经网络模型产生较大的精度损失的技术问题。
[0077] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
[0078] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0079] 实施例2
[0080] 根据本发明实施例,还提供了一种用于实施上述神经网络压缩方法的神经网络压缩装置,如图8所示,该装置包括:
[0081] 1)输入单元80,用于将待压缩神经网络输入至预先训练完成的压缩模型,其中,所述压缩模型包括通道剪枝模块以及自蒸馏量化模块;
[0082] 2)第一处理单元82,用于通过所述通道剪枝模块对所述待压缩神经网络进行通道剪枝操作,以得到第一输出;
[0083] 3)第二处理单元84,用于通过所述自蒸馏量化模块对所述第一输出进行自蒸馏量化操作,以得到目标神经网络。
[0084] 可选地,在本实施例中,所述第一输出包括第一神经网络,其中,所述第二处理单元84,包括:
[0085] 1)量化模块,用于在所述第一神经网络中插入伪量化算子,以及,对所述第一神经网络进行量化模拟,以得到第二神经网络;
[0086] 2)训练模块,用于对所述第二神经网络进行迭代训练,以得到量化误差函数以及自蒸馏损失函数;
[0087] 3)压缩模块,用于根据所述量化误差函数以及所述自蒸馏损失函数,对所述待压缩神经网络进行压缩,以得到所述目标神经网络。
[0088] 可选地,本实施例中的具体示例可以参考上述实施例1中所描述的示例,本实施例在此不做赘述。
[0089] 通过本实施例提出的神经网络压缩装置,将待压缩神经网络输入至预先训练完成的压缩模型,通过通道剪枝模块对待压缩神经网络进行通道剪枝操作,以得到第一输出;通过自蒸馏量化模块对第一输出进行自蒸馏量化操作,以得到目标神经网络。通过压缩模型中的自蒸馏量化模块降低了显存使用率以及减少了计算资源开销,保证了待压缩神经网络压缩后的精度的技术效果,通过压缩模型中进而解决了相关技术中压缩后的神经网络模型产生较大的精度损失的技术问题。
[0090] 实施例3
[0091] 根据本发明实施例,还提供了一种电子设备,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如实施例1所述的神经网络压缩方法的步骤。
[0092] 可选地,在本实施例中,存储器被设置为存储用于执行以下步骤的程序代码:
[0093] S1,将待压缩神经网络输入至预先训练完成的压缩模型,其中,所述压缩模型包括通道剪枝模块以及自蒸馏量化模块;
[0094] S2,通过所述通道剪枝模块对所述待压缩神经网络进行通道剪枝操作,以得到第一输出;
[0095] S3,通过所述自蒸馏量化模块对所述第一输出进行自蒸馏量化操作,以得到目标神经网络。
[0096] 可选地,本实施例中的具体示例可以参考上述实施例1中所描述的示例,本实施例在此不再赘述。
[0097] 实施例4
[0098] 本发明的实施例还提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如实施例1所述的神经网络压缩方法的步骤。
[0099] 可选地,在本实施例中,可读存储介质被设置为存储用于执行以下步骤的程序代码:
[0100] S1,将待压缩神经网络输入至预先训练完成的压缩模型,其中,所述压缩模型包括通道剪枝模块以及自蒸馏量化模块;
[0101] S2,通过所述通道剪枝模块对所述待压缩神经网络进行通道剪枝操作,以得到第一输出;
[0102] S3,通过所述自蒸馏量化模块对所述第一输出进行自蒸馏量化操作,以得到目标神经网络。
[0103] 可选地,存储介质还被设置为存储用于执行上述实施例1中的方法中所包括的步骤的程序代码,本实施例中对此不再赘述。
[0104] 可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0105] 可选地,本实施例中的具体示例可以参考上述实施例1中所描述的示例,本实施例在此不再赘述。
[0106] 上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0107] 上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
[0108] 在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0109] 在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
[0110] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0111] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0112] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。