具体实施方式
发明人过去的研究成果
如发明人之前的文章“Learning both weights and connections forefficient neural networks”中,已经提出了一种通过修剪来压缩神经网络(例如,CNN)的方法。所述方法包括如下步骤。
初始化步骤,把卷积层、FC层的权重初始化为随机值,其中生成了具有完全连接的ANN,所述连接具有权重参数,
训练步骤,训练所述ANN,根据ANN的精度,来调整ANN的权重,直到所述精度达到预定标准。所述训练步骤基于随机梯度下降算法来调整所述ANN的权重,即随机调整权重值,基于ANN的精度变化来进行选择。关于随机梯度算法的介绍,可以参见上述“Learning bothweights and connections for efficient neural networks”。此外,所述精度可以量化为,针对训练数据集,ANN的预测结果和正确结果之间的差异。
修剪步骤,基于预定的条件,发现ANN中的不重要的连接,修剪所述不重要的连接。具体而言,被修剪的连接的权重参数不再被保存。例如,所述预定条件包括以下任意之一:连接的权重参数为0;或连接的权重参数小于预定值。
微调步骤,将被修剪的连接重新设置为权重参数值为零的连接,即,恢复所述被修剪的连接,并分配权重值为0。
迭代步骤,判断ANN的精度达到预定标准。如果没有,重复上述训练、修剪、微调步骤。
本发明提出的改进
本发明提供了一种多次迭代的深度神经网络的压缩方法。
图8示出了根据本发明的一个实施例的一种适用于LSTM神经网络的压缩方法,其中通过多次迭代操作来实现神经网络的压缩。
根据图8的实施例,每次迭代操作具体包括敏感度分析、剪枝、重训三个步骤。下面对每个步骤进行具体说明。
步骤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。
在步骤8220,通过“压缩试验-稠密度序列调整”迭代来调整初始稠密度序列。在步骤8225,获得最终稠密度序列。
如果ΔWER未超过该阈值ε,则直接进行到步骤8225,初始稠密度序列即为最终稠密度序列。
最后,在步骤8230,基于最终稠密度序列指导LSTM网络进行剪枝。
下面,对图11的各子步骤进行详细说明。
步骤8210,进行初次压缩试验
根据研究中获得的经验,矩阵中绝对值比较大的权值对应着比较强的神经元连接关系。因此,在本实施例中,基于矩阵中元素的绝对值进行矩阵压缩。应当理解,可以基于其他策略对矩阵进行压缩,这些策略也包含在本发明的范围中。
根据本发明的一个实施例,对每个矩阵中的所有元素按照绝对值从小到大进行排序。然后,基于步骤8100中确定的该矩阵的初始稠密度对该矩阵进行压缩,只保留对应的稠密度所对应比例的绝对值较大的元素,并且将其余元素置零。例如,如果该矩阵的初始稠密度为0.4,那么,保留该矩阵中绝对值较大的前40%的元素,将剩余60%元素置零。
步骤8215,判断压缩前后网络的ΔWER超过某一阈值ε(例如,4%)。
步骤8220,如果压缩前后网络的ΔWER超过所述阈值ε(例如,4%),则通过“压缩试验-稠密度序列调整”迭代。
步骤8225,通过在步骤8220调整初始稠密度序列,获得最终稠密度序列。
图12示出了通过“压缩试验-稠密度序列调整”迭代调整初始稠密度序列的具体步骤。
如图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]
此时,压缩后的神经网络的整体稠密度约为0.24。
步骤8230,基于最终稠密度进行剪枝(Pruning)。
例如,在本实施例中,同样基于矩阵中元素的绝对值对矩阵进行剪枝。
具体地,对每个矩阵中的所有元素按照绝对值从小到大进行排序;然后,基于最终稠密度序列对各矩阵进行压缩,对于每个矩阵,只保留相应稠密度对应的绝对值较大的元素,并且将其余元素置零。
在步骤8300,重训(fine tuning)
对神经网络的训练是对损失函数进行优化的过程。损失函数指的是在给定输入下,神经网络模型预测的结果与真实结果之间的差别。希望损失函数的值尽可能小。
对神经网络的训练的本质在于寻找最优解。重训即指在已有的一个可能的离最优解很近的次优解的情况下,搜索最优解,也就是在一定的基础上继续训练。
例如,对于LSTM深度神经网络,在步骤8200剪枝操作以后,在保留下来的权值的基础上继续训练,寻找最优解,就是一个重训的过程。
图13示出了对神经网络进行重训的具体步骤。
如图13所示,输入是在步骤8200剪枝操作之后的神经网络。
在步骤8310中,首先,用训练集训练步骤8200得到的稀疏神经网络并进行权值矩阵更新。
然后,在步骤8320,判断该矩阵是否收敛到局部最优解。
如果未收敛到局部最优解,则返回步骤8310,重复训练集训练和权值矩阵更新的步骤。
如果收敛到最优解,则进行到步骤8330,获得最终神经网络。
在本发明一个实施例中,重训时采用梯度下降法来更新权值矩阵。
具体地,梯度下降法基于这样的观察:
如果实值函数F(x)在点a处可微且有定义,那么函数F(x)在a点沿着梯度相反的方向-▽F(a)下降最快。因而,如果:
b=a-γ▽F(a)
对于γ>0为一个够小数值时成立,那么F(a)≥F(b),其中a是向量。
考虑到这一点,我们可以从函数F的局部极小值的初始估计x0出发,并考虑如下序列x0,x1,x2,…使得:
xn+1=xn-γn▽F(xn),n≥0
因此可得到:
,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是损失函数,▽F是对损失函数求梯度,x是训练数据,t+1代表更新权值。
上式的含义是:用权值矩阵减去学习率与损失函数梯度的乘积,来更新权值矩阵。
在另一个示例中,保持网络中各个矩阵压缩后非零元素的分布的方法是使用掩码(mask)矩阵,该掩码矩阵仅包括0和1元素,用于记录压缩后矩阵非零元素的分布信息。
通常带掩码的重训方法如下:
Mask=(W(0)≠0)
也就是,对计算出来的梯度乘以掩码矩阵,保证梯度矩阵变成与掩码矩阵相同的形状,用来更新权值矩阵。
下面,详细说明重训过程和收敛判断准则的一个具体示例。
在该示例中,重训的输入为:待训练的网络、学习率、最大训练轮数、keep_lr_iters(保持原学习率的轮数)、start_halving_impr(用于确定改变学习率的时机,例如0.01)、end_halving_impr(用于终止训练,例如0.001)、halving_factor(例如0.5)、数据集(训练集、交叉验证集、测试集)等。
此外,重训的输入还包括学习动量、num-stream、batch-size等参数,这里暂时省略这些参数。重训的输出为:训练后的网络。
重训的具体过程如下:
1、对待训练的初始模型采用交叉验证数据集测试平均损失(cross loss,后面简称“loss”),作为衡量网络训练好坏的初始标准;
2、迭代训练:
·迭代训练分为多个“epoch”进行(这里,训练集中所有数据运行一遍称为一个epoch,后面简称“一轮”),迭代的总轮数不会超过最大训练轮数max_iters;
·在每一轮中,采用训练数据集,利用梯度下降法,更新网络中矩阵的权值;
·每轮训练结束后,保存训练出的网络,并对其采用交叉验证数据集测试平均损失loss,如果此时的loss比上一轮有效训练的loss(记为loss_prev)大,则拒绝本次训练(下一轮的训练还是基于上一轮训练结果),否则接受本次训练(下一轮训练基于本轮训练结果),并存储本轮的loss;
·学习率的动态改变及训练终止的条件:涉及到输入参数start_halving_impr、end_halving_impr、halving_factor等,每轮训练结束后,根据(loss_prev-loss)/loss_prev计算improvement并记为real_impr,其表示本轮被接受的训练结果的loss相比于上一轮被接受的训练结果的loss相对提升的大小,然后根据real_impr进行处理:
1)如果迭代轮数小于keep_lr_iters,则不改变学习率;
2)如果real_impr小于start_halving_impr(例如0.01),即本轮训练相比于上一轮提升已经到某个较小的限度内,说明接近局部最优解了,则使得学习率减小(乘以halving_factor,通常是折半),从而减小梯度下降法的步长,以更小的步子接近局部最优解;
3)如果real_impr小于end_halving_impr(例如0.001),即本轮训练相比于上一轮相对提升比较小了,认为训练已经达到终点并终止训练(但是如果训练轮数小于min_iters,则会继续训练至min_iters轮)。
因此,训练结束的情况可能包括以下四种:
1、训满min_iters轮,中间未出现real_impr小于end_halving_impr,则取第min_iters轮的结果;
2、训满min_iters轮,中间出现了real_impr小于end_halving_impr,则取前min_iters轮中loss最小的那一轮训练结果;
3、正常训练超过min_iters轮,但是小于max_iters轮,出现real_impr小于end_halving_impr,则取最后一轮,也就是loss最小的那一轮的训练结果;
4、正常训练到max_iters轮,未出现real_impr小于end_halving_impr,取第max_iters轮的结果。
应注意,上述示例描述了一种重训过程以及用于确定矩阵是否收敛到局部最优解的判断准则。然而,在实际操作中,为了提高压缩效率,不必须等到收敛结果,可以取中间结果,然后进行下一轮压缩。
此外,判断准则还包括判断经过训练后的网络的WER是否满足一定标准等,这些判断准则也包含在本发明的范围中。
通过重训,网络的WER下降,从而减少了压缩带来的精度损失。例如,通过重训,一个稠密度为0.24的LSTM网络的WER可以从27.7%下降到25.8%。
迭代步骤(iteration)
返回参照图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%,达到目标。
本发明提出的进一步改进
压缩深度神经网络实质上是对深度神经网络中权值矩阵的稀疏化。稀疏化后权值矩阵会有许多零值元素。在进行运算的过程中,这些零值元素可以不参与运算,从而减少需要的运算次数,提升运算速度。此外,如果一个网络稀疏化程度较高(如稠密度0.15),那么可以只存储非零的权值,从而减少存储空间。
然而,由于压缩过程去除了相当一部分权值使得整个深度神经网络的准确度会有较大程度的下降,因此,需要通过重训调整仍然保留在网络权值矩阵中的权值的大小,重新提高深度神经网络的模型准确度。
但是,通常而言,由于在剪枝过程中对某些权值置零相当于在解空间增加了新的约束,所以经过重训使神经网络重新收敛到新的局部最优点后,网络的精度虽然有所提升,但是相比剪枝前的深度神经网络,精度仍有所下降。
如上文所述,在现有的重训方式中,保持网络中各个矩阵压缩后非零元素的分布的方法是使用掩码(mask)矩阵。该掩码矩阵在剪枝时生成并且仅包括0和1元素,用于记录压缩后矩阵非零元素的分布信息。其中,值为1的元素表示相应权值矩阵对应位置的元素被保留,而值为0的元素表示相应权值矩阵对应位置的元素被置零。
图14示出了现有技术的使用掩码进行重训的过程。
如图14所示,在步骤1410中,对待压缩的网络nnet0剪枝,得到记录压缩后矩阵非零元素的分布信息的掩码矩阵M:
nnet0→M
具体而言,对待压缩的网络进行剪枝,得到含有零元素和非零元素的稀疏矩阵,然后使用掩码矩阵M,用1代表稀疏矩阵中非零元素的权值,以记录压缩后矩阵非零元素的分布信息。
在步骤1420中,将待压缩的网络与步骤1410中得到的掩码矩阵M点乘,完成剪枝操作,得到剪枝后的网络nneti:
在步骤1430中,对剪枝后的网络nneti带掩码重训,得到最终输出网络nneto。
nneto=Rmask(nneti,M)
具体地,上式为对网络进行带掩码重训优化每帧交叉熵(optimize per-framecross-entropy)的过程。其中,Rmask表示一种带掩码训练过程,在该过程中只对没有剪去的权值进行更新。通过这一过程,调整仍然被保留在网络权值矩阵中的权值,使深度神经网络收敛到新的局部最优解。
带掩码重训步骤具体包括训练步骤和判断步骤。基于判断步骤中矩阵是否收敛到局部最优解,决定返回继续训练或终止训练。
更具体地,训练步骤如下所述:
1.输入训练集数据,采用反向传播(back propagation,简称BP)法,计算损失函数对网络参数的导数,进而求得梯度矩阵;
2.结合学习率,采用随机梯度下降法,更新网络中的权值矩阵(即:更新后的权值矩阵=更新前的权值矩阵-学习率*梯度矩阵*掩码矩阵),这里,由于对计算出来的梯度乘以掩码矩阵,保证梯度矩阵变成与掩码矩阵相同的形状;
3.采用交叉验证集,计算网络的平均损失loss,如果loss比上一轮有效训练的loss大,则本轮训练无效(下一轮训练依然是基于上一轮有效训练的结果),如果loss比上一轮有效训练的loss小,则本轮训练有效(下一轮训练将基于本轮训练);
4.如果本轮训练无效,且没有达到最大训练轮数,则调整学习率,在上一轮有效训练的基础上继续训练。如果本轮训练有效,则判断网络是否收敛。
判断收敛的步骤如下所述:
A:以WER为判断准则:
采用测试集对本轮有效训练的网络测试WER,如果WER满足某种条件(比如小于20),则可以认为网络已经收敛到局部最优解,并终止训练
B:以loss的相对提升作为判断准则:
根据(loss_prev-loss)/loss_prev计算improvement并记为real_impr,含义是本轮有效训练出的网络的loss相比于上一轮有效训练的网络的loss的相对提升大小,如果real_impr小于end_halving_impr(例如0.001),说明本轮有效训练相比于上一轮有效训练相对提升比较小了,可以认为网络已经收敛到局部最优解并终止训练。
如上文所述,由于重训过程容易受到训练集中噪声的影响,因此在数据集上训练得到的网络可能在噪声影响下过拟合,影响输出网络的精度。
为此,本发明提出一种合理使用掩码的重训过程,旨在降低噪声对网络的干扰。
根据本发明的一种实现方式可以是,将剪枝后的网络权值作为重训时输入网络的初始值,那些已被剪去的权值相当于输入初始值为0。目前,学术界存在普遍接受并经实验验证的观点:在权值均值中绝对值较小的那些权值代表的连接是相对不重要的。因此,将剪枝后的网络权值作为重训的输入网络初始值相当于让网络从一个较优的出发点开始迭代,让相对重要的权重有相对更大的初始权值,从而使网络更少受到噪声带来的干扰。
具体而言,相比现有技术的重训过程,本发明的重训过程在获得剪枝后的网络与对该网络带掩码重训之间,增加不带掩码重训的步骤。所谓不带掩码重训是指在重训过程中去除剪枝形状的约束,允许已被剪枝的权值重新生长。
但是因为不带掩码重训后生成的网络实际是稠密网络,无法达到压缩神经网络的目的,所以需要再次将那些原本应剪去的权值置零。但剪枝操作会使得网络准确度重新下降。为了恢复准确度,需要再次进行带掩码训练,使得网络在加剪枝约束后的解空间中收敛到一个局部最优点,保证剪枝后的深度神经网络准确度。
图15示出了根据本发明的合理使用掩码进行重训的过程。
如图15所示,在步骤1510中,对待压缩的网络nnet0剪枝,得到记录压缩后矩阵非零元素的分布信息的掩码矩阵M:
nnet0→M
在步骤1520中,将待压缩的网络与步骤1510中得到的掩码矩阵M点乘,完成剪枝操作,得到剪枝后的网络
在步骤1530中,对剪枝后的网络不带掩码重训,得到稠密网络
类似于上文所述的带掩码重训步骤,不带掩码重训步骤也包括训练步骤和判断步骤。基于判断步骤中矩阵是否收敛到局部最优解,决定返回继续训练或终止训练。
与带掩码重训步骤不同地,在不带掩码重训步骤中,训练步骤如下所述:
1.输入训练集数据,采用反向传播(back propagation,简称BP)法,计算损失函数对网络参数的导数,进而求得梯度矩阵;
2.结合学习率,采用随机梯度下降法,更新网络中的权值矩阵(即:更新后的权值矩阵=更新前的权值矩阵-学习率*梯度矩阵),这里,更新权值矩阵不对计算出来的梯度乘以掩码矩阵,从而去除剪枝形状的约束,允许已被剪枝的权值重新生长;
3.采用交叉验证集,计算网络的平均损失loss,如果loss比上一轮有效训练的loss大,则本轮训练无效(下一轮训练依然是基于上一轮有效训练的结果),如果loss比上一轮有效训练的loss小,则本轮训练有效(下一轮训练将基于本轮训练);
4.如果本轮训练无效,且没有达到最大训练轮数,则调整学习率,在上一轮有效训练的基础上继续训练。如果本轮训练有效,则判断网络是否收敛。
在不带掩码重训步骤中,判断收敛的步骤与带掩码重训步骤类似。
在步骤1540中,将稠密网络与步骤1510中得到的掩码矩阵M再次点乘,去除已剪枝处重新生长出的权值,得到稀疏网络
在步骤1550中,对稀疏网络带掩码重训,得到最终输出网络
通过本发明的不带掩码重训的步骤1530,对网络的准确度先进行了一次提升,从而在较大程度上解决了压缩网络后准确度普遍下降的现象。
从工程实践结果来看,使用图15所示的优化后的方法使得压缩后网络的精度不但没有下降,反而有所提高。
图16示出了使用本发明对某一数千小时中文语音数据集上训练出的LSTM深度神经网络进行压缩的整个流程和相关结果。
在图16中,横坐标代表操作步骤,纵坐标代表深度神经网络的词错误率WER,词错误率WER越低说明网络准确度越高。实线代表待压缩网络的初始词错误率,箭头代表经过多次迭代压缩的过程。
在一个迭代过程(例如,步骤0-4)中:
·步骤0代表剪枝之前,步骤1代表对神经网络进行第一次剪枝,虚线代表每轮迭代压缩过程中对神经网络进行第一次剪枝的结果。可见,在每轮迭代压缩过程中,经过一次剪枝后,网络的词错误率上升;
·步骤2代表剪枝后对压缩网络进行不带掩码的重训,可见,重训后网络的词错误率有所下降;
·步骤3代表对经过不带掩码重训后的稠密网络再次剪枝,以获得符合稠密度要求的稀疏网络,可见,再次剪枝后网络的词错误率再次上升;
·步骤4代表对步骤3的网络带掩码重训,可见,重训后网络的词错误率再次下降。
在图16中,步骤4、8、12分别对应三轮迭代的最终压缩结果,可见,在每轮迭代中,神经网络的最终WER都比每轮的初始WER有较多降低,因而神经网络的精度得到提高。
技术效果
基于上述技术方案可知,本发明提出一种合理使用掩码的深度神经网络压缩方法。该压缩方法通过额外地执行不带掩码重训的步骤,对网络的准确度先进行了一次提升,从而在较大程度上解决了压缩网络后准确度普遍下降的现象,使得压缩后网络的精度不但没有下降,反而有所提高。
以上实施例仅仅以LSTM网络作为说明本发明的例子。应当理解,本发明可以不限于LSTM神经网络,而是可以应用到其他各种神经网络。