一种深度神经网络压缩方法
发明领域
本发明涉及一种深度神经网络的压缩方法及装置。
背景技术
人工神经网络
人工神经网络(Artificial Neural Networks,ANNs),又称神经网络(NNs),是一种模仿动物神经网络的行为特征,进行分布式并行信息处理的数学计算模型。近年来,神经网络得到快速发展,被广泛应用于诸多领域,如图像识别、语音识别、自然语言处理、基因表达、内容推送等等。
在神经网络模型,存在大量彼此连接的节点(也称“神经元”)。每个神经元,通过某种特定的输出函数(也称“激活函数”(Activation Function))计算处理来自其它相邻神经元的加权输入值,并且神经元之间的信息传递强度用“权值”来定义。算法通过自我学习,调整该权值。
早期的神经网络只有输入和输出层两层,无法处理复杂的逻辑,限制了其实用性。深度神经网络(Deep Neural Network,DNNs)通过在输入和输出层之间添加隐藏的中间层,有效提升了网络在处理复杂问题时的表现。图1示出了深度神经网络的示意图。
为了适应不同的应用场景,深度神经网络进而衍生出多种不同的结构。例如,循环神经网络(Recurrent Neural Networks,RNNs)是一种常用的深度神经网络模型。不同于传统前向神经网络(Feed-forward Neural Networks),循环神经网络本身具有记忆性,神经元既可以从上一层神经元获取信息,又可以从自身所在的隐层获取信息,这使其能够广泛应用于与时序相关的问题处理上。例如,在语音识别中,信号的前后关联很强,即,识别句子中的单词和该单词前面的单词序列关系十分紧密。因此,循环神经网络在语音识别领域有着非常广泛的应用。
深度神经网络的应用包括“训练”(training)、“推断”(inference)两个过程。训练神经网络旨在提升网络的学习能力。输入特征通过前向传播过程计算预测结果,该计算结果与标准答案比较后将残差通过反向传播回传,并将比较结果用于更新网络权值参数,从而达到修正网络的目的。神经网络训练完成后,可以将训练好的神经网络应用到实际场景中,即推断,在该过程中,根据输入特征通过前向传播过程计算得到合理的预测结果。
人工神经网络的压缩
通过近几年的迅速发展,神经网络的规模不断增长,已公开的比较先进的神经网络可达数百层、数亿个连接,属于计算和访存密集型应用。在神经网络逐渐变大的情况下,模型压缩变得极为重要。
在深度神经网络中,神经元的连接关系在数学上可以表示为一系列矩阵。经过训练后的网络虽然能够准确地进行预测,但是神经网络的矩阵是稠密的,即,矩阵中充满了非零元素。这会导致大量的存储和计算资源被消耗,因而计算速度降低,同时成本增加,使其难以在移动端推广应用,进而制约神经网络的发展。因此,通常对稠密的神经网络进行压缩。
图2是示出了神经网络的训练和压缩的示意图。
如图2所示,通常首先对神经网络进行训练,得到具有所需精度的训练好的神经网络。然后,利用剪枝、重训的方法对训练好的神经网络进行压缩,得到最终稀疏化的神经网络。
近年来,广泛的研究表明,通过训练得到的神经网络模型矩阵中,仅有部分权值较大的元素代表着重要连接,而其他权值较小的元素可以被移除(置为零)。将权值较小的元素置为零的操作被称为剪枝(pruning)。剪枝后的神经网络精度会下降,但是可以通过重训(fine tune),对仍然保留在模型矩阵中权值的大小进行调整,从而减小精度损失。
图3示出了神经网络稀疏化的示意图。
模型压缩可以将神经网络中的稠密矩阵稀疏化,能够有效地降低存储量、减少计算量,从而在保持精度的同时实现加速。神经网络模型压缩对于专用的稀疏神经网络加速器而言,显得尤为重要。
语音识别Speech Recognition
语音识别是将语言的模拟信号顺序映射到一个具体的单词集合上。近年来,深度神经网络在语音识别领域有着非常广泛的应用。
图4示出了一种使用神经网络的语音识别引擎的例子。在图4的模型中,利用深度学习模型来计算语音输出概率,即输入语音串与各匹配候选之间得相似度预测。此外,可以利用例如FPGA来加速实现图4的DNN部分。
图5a和图5b进一步示出了应用于图4的语音识别引擎的深度学习模型。其中,图5a的深度学习模型显示了包含CNN(卷积神经网络)、LSTM(长短时记忆模型)、DNN(深度神经网络)、Softmax等模块。图5b的深度学习模型使用了多层长短时记忆(LSTM)模型。
LSTM(长短时记忆)模型
在语音识别领域,为了解决对长期信息的记忆问题,Hochreiter&Schmidhuber于1997年提出了长短时记忆(Long Short-Term Memory,LSTM)模型。
LSTM神经网络是RNN的一种。与DNN不同,RNN是时间依赖型的。具体而言,时刻T的输入依赖于时刻T-1的输出,即,当前帧的计算需要前一帧的计算结果。进一步地,LSTM神经网络将普通RNN当中简单的重复神经网络模块改变为复杂的连接交互关系。LSTM神经网络在语音识别中取得了非常好的应用效果。
关于LSTM的更多信息,可以参见如下文章:Sak H,Senior A W,Beaufays F.Longshort-term memory recurrent neural network architectures for large scaleacoustic modeling[C]//INTERSPEECH.2014:338-342,Sak H,Senior A,Beaufays F.Longshort-term memory based recurrent neural network architectures for largevocabulary speech recognition[J].arXiv preprint arXiv:1402.1128,2014.
图6示出了在语音识别领域中使用的一种LSTM网络模型。在图6所示的LSTM的结构中,各个参数的意义如下:
-i、f、o分别代表三个门,即输入门(input gate)、遗忘门(forget gate)以及输出门(output gate),状态变量单元(cell)对信息进行长时间记忆,g为单元的特征输入;
-实线代表上一帧的输出;
-每个门有一个权值矩阵,T时刻输入与T-1的输出经过门时的计算量较大;
-虚线代表peephole,peephole以及三个叉乘符号对应的操作均为向量与对角矩阵的乘法,计算量较小。
图7示出了在语音识别领域中使用的一种改进的LSTM网络模型。如图7所示,为了减小LSTM层的计算量,额外引入一个投影层用于降维。
图7对应的计算公式为:
it=σ(Wixxt+Wiryt-1+Wicct-1+bi)
ft=σ(Wfxxt+Wrfyt-1+Wcfct-1+bf)
ct=ft⊙ct-1+it⊙g(Wcxxt+Wcryt-1+bc)
ot=σ(Woxxt+Woryt-1+Wocct+bo)
mt=ot⊙h(ct)
yt=Wyrmt
其中,σ()表示sigmoid激活函数,而个g()与h()则表示tanh激活函数,Wic,Wcf,Woc为peephole,对应图6中的三条虚线。在实际计算中,cell作为操作数的运算均为向量与对角矩阵的乘法,此时权值矩阵是对角矩阵。另外,公式中的最后一步在LSTM模型中并不是必须的,对应于图7中的投影层中的计算。
在设计和训练深度神经网络时,大的网络规模具有更强的表达能力,能够表示网络输入特征与输出之间的较强的非线性关系。但是,这种规模较大的网络在学习实际所需的有用模式时,更容易受到训练集中噪声的影响,使得学习到的模式与实际期望有所偏差。
因此,希望能够提供一种用于神经网络(例如,LSTM神经网络)的压缩方法,在保证深度神经网络准确率不下降的基础上实现神经网络的压缩。更具体地,希望提供一种神经网络(例如,LSTM神经网络)的压缩方法,其能够缩短神经网络的训练周期或重训周期,同时保证深度神经网络准确率不下降。
发明内容
本申请提出一种改进的神经网络压缩方法,该方法可以用于将神经网络剪枝技术融入神经网络的原始训练过程中以减少训练迭代次数,从而缩短稀疏化神经网络的训练周期。该方法还可以用于将剪枝技术融入对训练好的模型的重训过程中,从而在保证模型精度的前提下实现神经网络的压缩。
具体地,根据本发明的一方面,提出一种稠密神经网络的压缩方法,该稠密神经网络的神经元之间的连接关系由多个权重矩阵表示。该压缩方法包括:初始训练步骤,用于对初始稠密神经网络进行初始训练,使原始稠密神经网络收敛到中间稠密神经网络;压缩策略确定步骤,用于确定一个压缩周期的压缩策略,该压缩策略至少包括:该压缩周期内每次剪枝操作的压缩率、剪枝操作的次数和该压缩周期的目标压缩率;和剪枝及重训步骤,用于基于压缩策略对中间稠密神经网络进行剪枝和重训操作,直到中间稠密神经网络被压缩为具有该压缩周期的目标压缩率的稀疏神经网络。
根据本发明的另一方面,提出一种稠密神经网络的压缩装置,一种稠密神经网络的压缩装置,该稠密神经网络的神经元之间的连接关系由多个权重矩阵表示。该压缩装置包括:初始训练模块,用于对初始稠密神经网络进行初始训练,使原始稠密神经网络收敛到中间稠密神经网络;压缩策略确定模块,用于确定一个压缩周期的压缩策略,该压缩策略至少包括:该压缩周期内每次剪枝操作的压缩率、剪枝操作的次数和该压缩周期的目标压缩率;和剪枝及重训模块,用于基于压缩策略对中间稠密神经网络进行剪枝和重训操作,直到中间稠密神经网络被压缩为具有该压缩周期的目标压缩率的稀疏神经网络。
为使本申请的上述目的、特征和优点更清楚易懂,在下文中结合附图例举若干实施例,对本申请进行更详细的说明。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中使用的附图作简要介绍。应理解,仅以示例的方式示出以下附图,并且以下附图不应认为是对本申请范围的限定。附图中:
图1示出了深度神经网络的简化示意图。
图2是示出了神经网络的训练和压缩的示意图。
图3示出了剪枝后的神经网络,其中一部分神经元被剪枝。
图4示出了一种使用神经网络的语音识别引擎的示意图。
图5a和图5b示出了应用于语音识别引擎的深度学习模型。
图6示出了应用于语音识别领域的一种LSTM神经网络模型。
图7示出了应用于语音识别领域的一种改进的LSTM神经网络模型。
图8示出了根据第一实施例的用于LSTM神经网络的压缩流程。
图9示出了基于图8的流程图,敏感度测试的具体步骤。
图10显示了基于图9的流程,对LSTM神经网络应用敏感度测试的得到的相应曲线。
图11示出了基于图8的流程,确定最终稠密度序列并进行剪枝的具体步骤。
图12示出了基于图11的流程,通过“压缩试验-稠密度序列调整”迭代调整初始稠密度序列的具体子步骤。
图13a示出了基于图8的流程图,对神经网络进行重训的具体步骤。
图13b示出了利用梯度下降法对神经网络进行训练/重训的示意图。
图14示出了基于图13的流程,使用掩码矩阵进行重训的过程。
图15示出了根据第二实施例的压缩方法的一轮压缩的具体步骤。
图16示出了根据第二实施例的示例2.1中的稠密度变化曲线。
图17示出了根据第二实施例的示例2.1中的神经网络权值变化。
图18示出了在使用掩码矩阵进行压缩的情况下神经网络的权值变化。
图19示出了根据本申请的示例2.2中的稠密度变化曲线。
图20示出了根据本申请的示例2.2中的神经网络权值变化。
图21示出了根据本申请的示例2.2中对应的词错误率变化。
图22示出了应用第二实施例的边训练边压缩方法和未应用第二实施例的压缩方法的稠密度变化曲线。
具体实施方式
下面将结合附图,对本申请的技术方案进行清楚、完整的描述。
实施例1
图8示出了根据本申请的第一实施例的适用于LSTM神经网络的压缩方法,其中通过多次迭代操作来实现神经网络的压缩。每次迭代操作具体包括敏感度分析、剪枝、重训三个步骤。下面对每个步骤进行具体说明。
步骤8100,敏感度测试(Sensitivity analysis)
在该步骤中,例如,针对LSTM网络中所有矩阵进行敏感度分析,以确定不同矩阵的初始稠密度(或者初始压缩率)。
图9示出了敏感度测试的具体步骤。
如图9所示,在步骤8110,例如,对LSTM网络中的各个矩阵尝试按照不同稠密度进行压缩(所选择的稠密度例如是0.1,0.2,…,0.9,对矩阵的具体压缩方法参考步骤8200)。然后,测量以不同稠密度压缩的神经网络的词错误率(Word Error Rate,WER)。
在识别一段单词序列时,可能存在一些单词被错误地***、删除或替换。例如,对于包含N个单词的一段初始识别文字而言,如果有I个单词被***、D个单词被删除以及S个文字被替换,那么WER为:
WER=(I+D+S)/N,
其中,WER通常由百分比表示。通常而言,压缩后网络的WER会变大,这意味着压缩后神经网络的精度会变差。
在步骤8120,对于一个矩阵,以稠密度为横坐标,WER为纵坐标,绘制神经网络中该矩阵在不同压缩率下的WER曲线。针对每个矩阵都绘制所述WER曲线。
在步骤8130,对于一个矩阵,从曲线中寻找WER剧烈变化的点所对应的稠密度为该矩阵的初始稠密度。针对每个矩阵都获得所述初始稠密度。
在本实施例中,选取稠密度-WER曲线的拐点所对应的稠密度作为该矩阵的初始稠密度。具体而言,在一次迭代中拐点以如下方法确定:
已知压缩前(即,稠密度为1)的初始网络WER为:WER(initial);
针对不同稠密度得到相应的压缩后的网络WER为:WER(0.1)、WER(0.2)···WER(0.9);
计算ΔWER,即:WER(0.1)与WER(initial)进行比较、WER(0.2)与WER(initial)进行比较···WER(0.9)与WER(initial)进行比较;
基于计算得到的ΔWER,拐点指的是ΔWER小于一定阈值的所有点当中具有最小稠密度的那个点。应当理解,可以基于其他策略选取曲线中WER剧烈变化的点。
对于一个3层LSTM网络,其中每层有9个稠密矩阵需要压缩:Wix、Wfx、Wcx、Wox、Wir、Wfr、Wcr、Wor、Wrm,这样一共有27个稠密矩阵需要压缩。
首先,对每个矩阵,按照稠密度从0.1到0.9,以步长0.1做9次试验,测试整个网络在9次试验中的WER,并绘制相应稠密度-WER曲线。这样,针对27个矩阵,一共会获得27条曲线。
然后,针对每个矩阵,从该矩阵对应的WER曲线中(例如,针对第一层LSTM中的Wix矩阵绘制的曲线),找到WER剧烈变化的点。
这里,认为相比于本轮迭代的初始网络的WER,ΔWER变化小于1%的所有点当中具有最小稠密度的那个点为拐点。
例如,假设初始网络的WER为24%,则选取曲线中WER小于25%的所有点当中具有最小稠密度的那个点作为拐点。取拐点对应的稠密度作为该Wix的初始稠密度。
这样,可以得到一个长度为27的初始稠密度序列,分别对应每个矩阵的初始稠密度。因此可以以该初始稠密度序列指导压缩。
一个初始稠密度序列的例子如下(矩阵排列顺序为Wcx、Wix、Wfx、Wox、Wcr、Wir、Wfr、Wor、Wrm):
densityList=[0.2,0.1,0.1,0.1,0.3,0.3,0.1,0.1,0.3,
0.5,0.1,0.1,0.1,0.2,0.1,0.1,0.1,0.3,
0.4,0.3,0.1,0.2,0.3,0.3,0.1,0.2,0.5]
图10示出了一个单层LSTM网络中9个矩阵的相应稠密度-WER曲线。可以看到,不同矩阵对于压缩的敏感度大相径庭,其中,w_g_x,w_r_m,w_g_r相对于其他矩阵而言较为敏感,即在稠密度-WER曲线中存在max(ΔWER)>1的点。
步骤8200,确定最终稠密度序列(Density determination)并进行剪枝(Pruning)
图11示出了确定最终稠密度序列并进行剪枝的具体步骤。
如图11所示,图8的步骤8200可以包括若干子步骤。
首先,在步骤8210,基于步骤8100中确定的初始稠密度序列,指导每一个对应的矩阵进行初次压缩试验。
然后,在步骤8215,基于初次压缩试验的结果,测试压缩后网络的WER。如果压缩前后网络的ΔWER超过某一阈值ε(例如,4%),则进行到下一步骤8220。如果ΔWER未超过该阈值ε,则直接进行到步骤8225,初始稠密度序列即为最终稠密度序列。
在步骤8220,通过“压缩试验-稠密度序列调整”迭代来调整初始稠密度序列。在步骤8225,获得最终稠密度序列。
最后,在步骤8230,基于最终稠密度序列指导LSTM网络进行剪枝。
下面,对图11的各子步骤进行详细说明。
步骤8210,进行初次压缩试验
根据研究中获得的经验,矩阵中绝对值比较大的权值对应着比较强的神经元连接关系。因此,在该示例中,基于矩阵中元素的绝对值进行矩阵压缩。
具体地,对每个矩阵中的所有元素按照绝对值从小到大进行排序。然后,基于步骤8100中确定的该矩阵的初始稠密度对该矩阵进行压缩,只保留指定的稠密度所对应比例的绝对值较大的元素,并且将其余元素置零。例如,如果该矩阵的初始稠密度为0.4,那么,保留该矩阵中绝对值较大的前40%的元素,将剩余60%元素置零。
步骤8215,判断压缩前后网络的ΔWER是否超过某一阈值ε(例如,4%)。
步骤8220,如果压缩前后网络的ΔWER超过某一阈值ε(例如,4%),则通过“压缩试验-稠密度序列调整”迭代。如果没有,则从步骤8215直接转到步骤8225。
步骤8225,通过在步骤8220调整初始稠密度序列,获得最终稠密度序列。
图12示出了步骤8220的“压缩试验-稠密度序列调整”迭代调整初始稠密度序列的具体步骤。
如图12所示,在步骤8221,对相对敏感的矩阵的稠密度进行调整。即,上浮相对敏感的矩阵的稠密度,例如,上浮0.05。基于该稠密度,对相应矩阵进行压缩试验。
然后,计算压缩后的网络的WER,若WER仍不满足目标,则继续上浮相对敏感的矩阵的稠密度,例如上浮0.1。基于该稠密度,对相应矩阵进行压缩试验。以此类推,直到压缩前后网络的ΔWER在所述阈值ε(例如,4%)以下。
可选地或依次地,在步骤8222,可以继续对相对不敏感的矩阵的稠密度进行微调,从而使压缩前后网络的ΔWER在某一阈值ε’(例如,3.5%)以下。这样,可以进一步提高压缩后的网络的准确度。
如图12所示,对相对不敏感的矩阵的稠密度的微调过程类似于前述对相对敏感的矩阵的稠密度的微调过程。
例如,神经网络的原始WER为24.2%,步骤8100中获得的初始稠密度序列为:
densityList=[0.2,0.1,0.1,0.1,0.3,0.3,0.1,0.1,0.3,
0.5,0.1,0.1,0.1,0.2,0.1,0.1,0.1,0.3,
0.4,0.3,0.1,0.2,0.3,0.3,0.1,0.2,0.5]
按照初始稠密度序列对网络进行剪枝,压缩后的网络的WER恶化为32%,此时需要调整初始稠密度序列。具体步骤如下:
根据步骤8100的结果得知,第一层LSTM中的矩阵Wcx,Wcr,Wir,Wrm、第二层中矩阵的Wcx,Wcr,Wrm、和第三层中矩阵的Wcx,Wix,Wox,Wcr,Wir,Wor,Wrm相对敏感,其余矩阵相对不敏感。
首先,对上述相对敏感的矩阵,按0.05的步长增大其对应的初始稠密度。
然后,基于上浮的稠密度对神经网络阵进行压缩试验。通过计算得到压缩后网络的WER为27.7%。此时,满足压缩前后网络ΔWER<4的要求,停止调整相对敏感的矩阵的稠密度。
可选地,可以对相对不敏感的矩阵的初始稠密度进行微调,使压缩前后网络ΔWER<3.5。
因此,通过“压缩试验-稠密度序列调整”迭代调整得到的最终稠密度序列为:
densityList=[0.25,0.1,0.1,0.1,0.35,0.35,0.1,0.1,0.35,
0.55,0.1,0.1,0.1,0.25,0.1,0.1,0.1,0.35,
0.45,0.35,0.1,0.25,0.35,0.35,0.1,0.25,0.55]
此时,压缩后的神经网络的整体稠密度约为24%。
8230,基于最终稠密度进行剪枝。
具体地,对每个矩阵中的所有元素按照绝对值从小到大进行排序;然后,基于最终稠密度序列对各矩阵进行压缩,对于每个矩阵,只保留相应稠密度对应的绝对值较大的元素,并且将其余元素置零。
步骤8300,重训(Fine tuning)
对神经网络的训练和重训是对损失函数进行优化的过程。损失函数指的是在给定输入下,神经网络模型预测的结果与真实结果之间的差别。希望损失函数的值尽可能小。
对神经网络的训练的本质在于寻找最优解。重训则是指在已有的一个可能离最优解很近的次优解的情况下搜索最优解,即,在一定的基础上继续训练。
例如,对于经过训练的LSTM深度神经网络,我们认为其为最优解。在步骤8200剪枝操作以后,在保留下来的权值的基础上继续训练并寻找最优解的过程即为重训的过程。
图13a、13b示出了对神经网络进行重训的具体步骤。
如图13a所示,输入是在步骤8200剪枝操作之后的神经网络。
在步骤8310中,首先用训练集训练步骤8200得到的稀疏神经网络并进行权值矩阵更新。
在步骤8320中,判断该矩阵是否收敛到局部最优解。
如果未收敛到局部最优解,则返回步骤8310,重复训练集训练和权值矩阵更新的步骤。
如果收敛到最优解,则进行到步骤8330,获得达到要求的神经网络并输出。
在该实施例中,重训时采用梯度下降法来更新权值矩阵。具体地,梯度下降法基于这样的观察:
如果实值函数F(x)在点a处可微且有定义,那么函数F(x)在a点沿着梯度相反的方向-下降最快。因而,如果:
对于γ>0为一个够小数值时成立,那么F(a)≥F(b),其中a是向量。
考虑到这一点,我们可以从函数F的局部极小值的初始估计x0出发,并考虑如下序列x0,x1,x2,…使得:
因此可得到:
F(x0)≥F(x1)≥F(x2)≥···
如果顺利的话,序列(xn)收敛到期望的极值。注意每次迭代步长γ可以改变。
这里,将F(x)理解为损失函数,就可以理解梯度下降法使得模型预测损失减小的原理。
在一个示例中,参考论文DSD:Regularizing Deep Neural Networks withDense-Sparse-Dense Training Flow in NIPS 2016,对LSTM深度神经网络的重训方法如下:
这里,W是权值矩阵,η代表学习率,也就是随机梯度下降法的步长,f是损失函数,是对损失函数求梯度,x是训练数据,t+1代表更新权值。
上式的含义是:用权值矩阵减去学习率与损失函数梯度的乘积,来更新权值矩阵。
参见图13b,显示了利用梯度函数来更新权值矩阵的简要流程图。
在步骤8300中,可以采用各种方式来执行所述稀疏神经网络的重训及相应的权值矩阵更新。
在该示例中,使用掩码(mask)矩阵保持网络中各个矩阵压缩后非零元素的分布,该掩码矩阵仅包括0和1元素,用于记录压缩后矩阵非零元素的分布信息。其中,值为1的元素表示相应权值矩阵对应位置的元素被保留,而值为0的元素表示相应权值矩阵对应位置的元素被置零。
图14示出了使用掩码矩阵进行重训的过程。
如图14所示,在步骤1410中,对待压缩的网络nnet0剪枝,得到记录压缩后矩阵非零元素的分布信息的掩码矩阵M:
nnet0→M
在步骤1420中,将待压缩的网络与步骤1410中得到的掩码矩M点乘,完成剪枝操作,得到剪枝后的网络nneti:
nneti=M⊙nnet0
在步骤1430中,对剪枝后的网络nneti带掩码重训,得到最终输出网络nnet0。
nneto=Rmask(nneti,M)
其带掩码的重训过程具体可以表达为:
Mask=(W(0)≠0)
即,对计算出来的梯度乘以掩码矩阵,保证梯度矩阵变成与掩码矩阵相同的形状,用来更新权值矩阵。
通过重训,网络的WER下降,从而减少了压缩带来的精度损失。例如,通过重训,一个稠密度为0.24的LSTM网络的WER可以从27.7%下降到25.8%。
迭代步骤
返回参照图8,如上文所述,该压缩方法通过多次迭代操作、即重复上述步骤8100、8200、8300而将神经网络压缩至期望稠密度。
例如,在一个示例中,希望最终网络稠密度为0.14。
在第一轮迭代中,通过步骤8300得到稠密度为0.24,WER为25.8%的网络。
重复上述步骤8100、8200、8300对该网络继续进行多轮压缩。
例如,在第二轮压缩后,网络的稠密度为0.18,WER为24.7%。
继续第三轮压缩后,网络稠密度为0.14,WER为24.6%,达到目标。
实施例2
在上文实施例1中,提出了一种对训练好的稠密神经网络基于固定形状的掩码矩阵进行压缩处理从而得到稀疏化的神经网络的方法。
在本实施例2中,申请人提出一种新的神经网络压缩方法,在每轮压缩中,该方法使用用户设计的动态压缩策略对神经网络进行压缩。
具体地,动态压缩策略包括:每次剪枝操作的当前剪枝次数、最大剪枝次数以及针对该次剪枝的稠密度,以这三个参数确定本次需要剪枝的权值的比例(即,本次剪枝操作的压缩率),并基于此进行剪枝。
因此,在根据实施例2的方法的神经网络压缩过程中,每次剪枝的力度是剪枝次数(也可以理解为时间t)的函数。换言之,在神经网络的压缩过程中,神经网络的稠密度可以是随着每次剪枝操作而变化的可变参数,即神经网络的稠密度精确到每次剪枝处理,而非每轮压缩结束。
图15示出了根据实施例2的压缩方法的一轮压缩过程,其具体包括初始稠密神经网络训练、压缩策略确定、和剪枝及重训三个步骤。下面对每个步骤进行具体说明。
步骤1510:训练初始稠密神经网络
在步骤1510中,对初始稠密神经网络进行常规训练,以得到一个经过训练的稠密神经网络。
这里,经过训练的稠密神经网络可以是如实施例1所述的具有期望精度的训练好的稠密神经网络。
然而,不同于实施例1,在实施例2中,由于省略了实施例1的步骤8100,经过训练的稠密神经网络还可以是一个已经收敛但尚未达到期望精度的中间神经网络nnethalf。
步骤1520:确定压缩策略
在实施例2中,压缩策略包括本轮压缩的目标稠密度Dfinal和压缩函数fD(t,Dfinal),其中压缩函数fD(t,Dfinal)决定本轮压缩的剪枝次数,以及每次剪枝操作的稠密度Dt。
具体地,假设第t次剪枝操作前网络的权值矩阵为Wt,第t次剪枝操作的稠密度为Dt,那么剪枝操作后的权值矩阵为:
Wt+1=fW(Wt,Dt)
其中,fW(Wt,Dt)表示根据第t次剪枝操作的稠密度Dt对网络的权值矩阵Wt进行剪枝操作。这样,在神经网络的压缩过程中,神经网络的稠密度变化可以表示为剪枝次数(或时间t)的函数。
由于在整个压缩过程中,权值矩阵是通过训练/重训初始神经网络训练直接得到的,而不是自由参数,因此每次剪枝操作的稠密度只由稠密度随时间变化的参数决定,即:
Dt=fD(t,Dfinal)
其中,fD(t,Dfinal)是计算时刻t的稠密度Dt的函数(在下文中,也称为“压缩函数”),Dfinal为本轮压缩神经网络的目标稠密度。
因此,为了实现更好的压缩效果,在实际应用中,可以从两方面设计压缩策略:压缩函数fD(t,Dfinal),和目标稠密度Dfinal,以获得精度较高的稀疏化神经网络。
压缩函数fD(t,Dfinal)的设计
对压缩函数的不同设计可以产生不同的压缩效果。下面,以两个示例对其进行说明。
示例2.1:神经网络的稠密度恒定
在该示例中,在神经网络的一轮压缩中,保持每次剪枝操作的目标稠密度不变。相应地,压缩函数为:
fD(t)=Dfinal
即,在本轮压缩中,神经网络的稠密度始终保持为常数,但是权值大小和分布可以改变。
图16示出了示例2.1中的神经网络稠密度变化曲线。
图17示出了与图16对应的压缩过程中对应的神经网络权值分布变化。
图17的左侧示出了神经网络中各矩阵在每次剪枝操作中权值参数分布的变化,其中沿横轴示出了每个LSTM层中的9个矩阵,沿纵轴示出了剪枝操作的次数。可见,对应于图17,在该轮压缩中,一共进行了5次剪枝操作。
图17的右侧示出了与每次剪枝操作对应的简化的权值分布示意图,其中颜色(灰度)深浅表示权值大小(即,对应位置的权值被保留),白色则表示权值为0(即,对应位置的权值被置零)。
如图17所示,在5次剪枝操作中,有颜色的格子总数未发生改变(即,神经网络的稠密度保持不变),但是颜色深浅和分布都在变化(即,神经网络的权值大小和分布发生变化)。
实际上,实施例1提出的利用固定掩码矩阵进行重训的过程可以理解为该示例2.1的特例,其对应的压缩函数亦为:
fD(t)=Dfinal
并且通过固定掩码对神经网络的权值分布进行限制。
图18示出了利用固定掩码矩阵进行剪枝操作时,对应的神经网络权值分布变化。
如图18所示,其与图17的区别在于,尽管格子的颜色(灰度)发生变化,但有颜色的格子始终有颜色,即对应位置处的权值大小发生变化,但不会被置零。
可见,在实施例1中,神经网络的权值大小可以变化,但其分布受到限制,即失去了部分(形状变化)的自由度。
示例2.2:神经网络稠密度线性下降
在该示例中,在神经网络的一轮压缩中,每次剪枝操作的稠密度逐渐减小。压缩函数为:
Dt=1-(tcurrent-tstart)/(tend-tstart)×(1-Dfinal)
即,神经网络的稠密度在指定剪枝操作次数内,线性减少到目标稠密度Dfinal。
图19示出了示例2.2中的稠密度变化曲线。
图20示出了与图19对应的压缩过程中对应的神经网络权值分布变化。
图20的左侧示出了神经网络中各矩阵在每次剪枝操作中权值参数分布的改变。可见,对应于图20,在该轮压缩中,一共进行了10次剪枝操作。
图20的右侧示出了对应的简化的权值分布示意图。从图20右侧的变化可以看出,在10次剪枝操作过程中,有颜色的格子数量逐渐减少(即,稠密度逐渐下降),同时各个格子颜色的深浅和分布也在变化(即,权值的大小和分布也在变化)。
图21示出了示例2.2对应的词错误率(WER)变化。
如图21所示,经过10次剪枝操作,神经网络的词错误率逐渐下降,即,神经网络的精度不断升高
当然,应理解,对于压缩函数fD(t,Dfinal)的设计,可以选择如上文所述的两种函数,也可以选择其他高次函数。本申请不对压缩函数的种类进行限制。
此外,还可以通过深度学习来确定压缩函数fD(t,Dfinal)。
例如,使用带有时效的神经网络(例如,循环神经网络RNN)学习网络参数。即:
Dt+1=WtDt+bt
Wt+1=WuwWt
bt+1=Wubbt
因此,只需要通过训练得到相应的初始矩阵Wt和转移矩阵Wuw、Wub,就可以基于第t-1时刻的稠密度来确定第t时刻的稠密度。这样,压缩函数本身也可以经过训练得到。
目标稠密度Dfinal的设计
对于目标稠密度Dfinal的设计,可以根据经验预先设定某一目标稠密度。
此外,还可以根据实施例1的步骤8100所述的方法,确定一轮压缩的目标稠密度Dfinal。
具体地,对步骤1510获得的稠密神经网络进行敏感度测试,然后将获得的可接受稠密度作为本轮压缩的目标稠密度。
应理解,本申请不对目标稠密度的设计方法进行限制。
步骤1530:剪枝及重训
在步骤1530中,基于步骤1520确定的压缩策略,对步骤1510获得的稠密神经网络进行剪枝及重训操作,直到神经网络达到本轮压缩的最终稠密度Dfinal。
如上文所述,根据压缩策略,可以确定剪枝操作的次数以及本次剪枝操作的稠密度Dt。针对每一次剪枝操作,由于神经网络的压缩会导致精度下降,在每次剪枝操作后需要进行一次重训,用于恢复神经网络的精度。
因此,步骤1530进一步包括:剪枝步骤1531和重训步骤1532。
在本实施例中,剪枝步骤1531的操作方法可以例如参照实施例1的步骤8230。
具体地,在剪枝步骤1531中,对每个矩阵中的所有元素按照绝对值从小到大进行排序;然后,基于本次剪枝操作的稠密度Dt对各矩阵进行压缩,对于每个矩阵,只保留相应稠密度对应的绝对值较大的元素,并且将其余元素置零。
在本实施例中,重训步骤1532的操作方法可以例如参照实施例1的步骤8300,即,使用掩码矩阵对剪枝操作后的压缩神经网络进行重训。
具体地,首先,获得记录本次剪枝操作后矩阵非零元素的分布信息的掩码矩阵;然后,对剪枝后的神经网络带掩码重训,以恢复因本次剪枝操作造成的精度损失。
应理解,还可以通过其他方式进行剪枝步骤1531和重训步骤1532。本申请不对剪枝步骤和重训步骤的具体操作方法进行限制。
最后,根据压缩策略确定的剪枝操作次数迭代执行剪枝步骤1531和重训步骤1532,直到神经网络达到本轮压缩的目标稠密度Dfinal。
压缩迭代步骤
继续参照图15,根据实施例2的压缩方法可以包括多轮压缩过程。
具体地,可以分别设定每轮(或每个周期)压缩过程的目标稠密度Dfinal1、Dfinal2、…、Dfinaln,以及相应的压缩函数fD(t,Dfinal1)、fD(t,Dfinal2)、…、fD(t,Dfinaln),迭代执行上述步骤1520和1530,最终将神经网络压缩至最终期望稠密度。
例如,对一个待压缩的稠密神经网络,假设最终的目标压缩率为Doutput=0.2,可以例如进行三轮压缩(即,存在3个压缩周期),每轮压缩周期的目标压缩率Dfinal分别为0.6,0.4,0.2。
首先,进行第一轮压缩,该轮压缩过程的目标压缩率为Dfinal1=0.6。
具体地,参照上文所述的步骤1520,设定该轮压缩的压缩策略,例如,压缩策略可以设定为上文示例2.2中的压缩率线性递减并且剪枝次数为4次。相应地,每次剪枝操作的压缩率分别为D1=0.9,D2=0.8,D3=0.7,D4=0.6。随后,基于每次剪枝操作的压缩率进行四次剪枝及重训操作,以将稠密神经网络压缩到该压缩周期的目标压缩率。
然后,以相同的方式进行第二轮压缩和第三轮压缩,在每个压缩周期中可以分别设定相应的压缩策略,直到将稠密神经网络被压缩到最终的目标压缩率0.2。
图22示出了应用根据实施例2的边训练边压缩方法和未应用实施例2的压缩方法的稠密度变化曲线。
如图22所示,在目标稠密度相同情况下,根据实施例2的压缩方法可以自由设计稠密度下降的路径,所以可以在训练过程中在初始稠密网络尚未完全收敛到所需精度时就开始压缩,并逐渐提高压缩程度(即逐渐降低稠密度),从而更快地达到目标稠密度。
有益效果
综上,根据实施例2的压缩方法可以从神经网络初始状态开始进行渐进式的稀疏化训练,最终得到符合精度要求的稀疏网络,而不必须在训练好的稠密神经网络基础上再进行稀疏化压缩。
因此,根据实施例2的压缩方法可以在保证最终神经网络的精度的同时,有效地缩短训练和压缩时间。
以上实施例仅以LSTM神经网络作为说明本发明的例子。应当理解,本发明可以不限于LSTM神经网络,而是可以应用到其他各种神经网络。
还应理解,上文示例仅为本申请的具体实施方式,而不旨在限制本申请的保护范围,本申请的保护范围应以权利要求的保护范围为准。