合理使用掩码的深度神经网络压缩方法与流程

文档序号:13675529阅读:393来源:国知局

本申请要求于2016年8月22日提交的美国专利申请no.15/242,622、和于2016年8月22日提交的美国专利申请no.15/242,624的优先权。

发明领域

本发明涉及合理使用掩码的深度神经网络压缩方法及装置。



背景技术:

人工神经网络的压缩

人工神经网络(artificialneuralnetworks,anns),也简称神经网络(nns),是一种模仿动物神经网络的行为特征,进行分布式并行信息处理的数学计算模型。近年来,神经网络发展很快,被广泛应用于诸多领域,如图像识别、语音识别、自然语言处理、天气预报、基因表达、内容推送等等。

神经网络中,有大量彼此连接的节点(也称“神经元”)。神经网络具备两个特性:1)每个神经元,通过某种特定的输出函数(也叫激活函数activationfunction),计算处理来自其它相邻神经元的加权输入值;2)神经元之间的信息传递强度用所谓的权值来定义,算法会不断自我学习,调整这个权值。

早期的神经网络只有输入和输出层两层,无法处理复杂的逻辑,因此限制了其实用性。

如图1所示,深度神经网络(deepneuralnetworks,dnns)通过在输入层和输出层之间添加隐藏的中间层,革命性地改变了这一点。

循环神经网络(recurrentneuralnetworks,rnns)是一种常用的深度神经网络模型。不同于传统前向神经网络(feed-forwardneuralnetworks),循环神经网络引入了定向循环,能够处理输入之间前后关联的问题。在语音识别中,信号的前后关联很强,例如识别句子中的单词和该单词前面的单词序列关系十分紧密。因此,循环神经网络在语音识别领域有着非常广泛的应用。

然而,通过近几年的迅速发展,神经网络的规模不断增长,已公开的比较先进的神经网络可达数百层、数亿个连接,属于计算和访存密集型应用。在神经网络逐渐变大的情况下,模型压缩就变得极为重要。

深度神经网络中,神经元的连接关系在数学上可以表示为一系列矩阵。经过训练后的网络虽然预测准确,但其矩阵都是稠密的,即“矩阵中充满了非零元素”,从而导致大量的存储和计算资源被消耗。这不但降低了速度,而且增加了成本。这样一来,在移动端推广应用就面临着巨大的困难,极大的制约了神经网络的发展。

图2示出了一种利用剪切、重训的压缩神经网络的示意图。

近年来,广泛的研究表明,在通过训练得到的神经网络模型矩阵中,仅有部分权值较大的元素代表着重要连接,而其他权值较小的元素可以被移除(置为零),

图3示出了对应的神经元被剪枝(pruning)。剪枝后的神经网络精度会下降,但是可以通过重训(finetune),对仍然保留在模型矩阵中的权值大小进行调整,从而减小精度损失。

模型压缩可以将神经网络中的稠密矩阵稀疏化,能够有效的降低存储量、减少计算量,在保持精度的同时实现加速。模型压缩对于专用的稀疏神经网络加速器而言,显得极为重要。

语音识别speechrecognition

语音识别(speechrecognition),是将语言的模拟信号顺序映射到一个具体的单词集合上。近年来,人工神经网络的方法在语音识别领域取得的效果已经远远超出了所有传统方法,正在成为全行业的主流。其中,深度神经网络有着极为广泛的应用。

图4示出了一种使用神经网络的语音识别引擎的例子。在图4的模型中,涉及利用深度学习模型来计算语音输出概率,即输入语音串与各种匹配候选之间相似度预测。通过本发明的方案,可以利用例如fpga来加速实现图4的dnn部分。

图5进一步示出了应用于图4的语音识别引擎的深度学习模型。

图5a中显示了包含cnn(卷积神经网络)、lstm(长短时记忆模型)、dnn(深度神经网络)、softmax等模块的深度学习模型。

图5b是本发明所旨在应用的学习模型,使用了多层lstm。

图5b的网络模型中,输入是一段语音片段。例如,约1秒的语音,被依次切割为100帧,每帧的特性可以由浮动型向量表示。

lstm(长短时记忆)

在语音识别领域,为了解决对长期信息的记忆问题,hochreiter&schmidhuber于1997年提出了长短时记忆(longshort-termmemory,lstm)模型。

图6示出了在语音识别领域所的使用一种lstm网络模型。lstm神经网络是rnn的一种,将普通rnn当中简单的重复神经网络模块改变为复杂的连接交互关系。lstm神经网络在语音识别中也取得了非常好的应用效果。

关于lstm的更多信息,可以参见如下文章:sakh,senioraw,beaufaysf.longshort-termmemoryrecurrentneuralnetworkarchitecturesforlargescaleacousticmodeling[c]//interspeech.2014:338-342,sakh,seniora,beaufaysf.longshort-termmemorybasedrecurrentneuralnetworkarchitecturesforlargevocabularyspeechrecognition[j].arxivpreprintarxiv:1402.1128,2014.

如上所述,lstm是一种类型的rnn。rnn与dnn的区别在于,rnn是时间依赖型的。具体而言,时刻t的输入依赖于时刻t-1的输出,即,当前帧的计算需要前一帧的计算结果。

图6所示的lstm的结构中,各个参数的意义如下:

-i、f、o分别代表三个gate,g为cell的特征输入;

-粗线代表上一帧的输出;

-每个gate有一个权值矩阵,t时刻输入与t-1的输出经过gate时的计算量较大;

-虚线代表peephole,peephole以及三个叉乘符号对应的操作均为element-wiseoperation,计算量较小。

如图7所示,为了减小lstm层的计算量,需要再额外引入一个投影层进行降维。

图7对应的计算公式为:

it=σ(wixxt+wiryt-1+wicct-1+bi)

ft=σ(wfxxt+wrfyt-1+wcfct-1+bf)

ot=σ(woxxt+woryt-1+wocct+bo)

yt=wyrmt

wic,wcf,woc即是peephole,对应示意图中的三条虚线。计算中单元(cell)作为操作数的运算均为向量间的element-wiseoperation。也可以将其理解成向量和对角矩阵的乘法,此时权值矩阵是对角矩阵。

然而,在设计和训练深度神经网络时,大的网络规模有着更强的表达能力,能够表示网络输入特征与输出之间的较强的非线性关系。但是,这种规模较大的网络在学习实际想要的有用模式时,更容易受到训练集中噪声的影响,使得学习到的模式与实际期望有所偏差。因为这些训练集上的噪声是普遍且因数据集而异的,所以在数据集上训练得到的网络有可能在噪声影响下过拟合。

因此,希望能够提供一种优化的用于神经网络(例如lstm)的压缩方法,该方法将剪枝结果存储为矩阵形状掩码(mask)并且在重训(fine-tune)阶段合理使用矩阵形状掩码,从而实现在保持压缩率不变的基础上保证深度神经网络准确率不下降、甚至反而提高的目的。



技术实现要素:

在一方面,本发明提出一种使用掩码矩阵对神经网络进行重训的方法,所述神经网络的神经元之间的连接关系由多个矩阵表示,所述方法包括:获得掩码矩阵步骤,获得对应于所述神经网络的掩码矩阵m,所述掩码矩阵m记录所述神经网络的矩阵的非零元素的分布信息;第一次剪枝操作步骤,利用所述掩码矩阵m对待压缩的神经网络nnet0进行剪枝;不带掩码重训步骤,对剪枝后的网络不带掩码矩阵m进行重训,得到稠密网络第二次剪枝操作步骤,利用所述掩码矩阵m对稠密网络进行第二次剪枝,得到稀疏网络和带掩码重训步骤,对稀疏网络带掩码矩阵m进行重训,得到最终输出网络

在另一方面,本发明提出一种使用掩码矩阵对神经网络进行重训的装置,所述神经网络的神经元之间的连接关系由多个矩阵表示,所述装置包括:获得掩码矩阵单元,用于获得对应于所述神经网络的掩码矩阵m,所述掩码矩阵m记录所述神经网络的矩阵的非零元素的分布信息;第一次剪枝操作单元,用于利用所述掩码矩阵m对待压缩的神经网络nnet0进行剪枝;不带掩码重训单元,用于对剪枝后的网络不带掩码矩阵m进行重训,得到稠密网络第二次剪枝操作单元,用于利用所述掩码矩阵m对稠密网络进行第二次剪枝,得到稀疏网络和带掩码重训单元,用于对稀疏网络带掩码矩阵m进行重训,得到最终输出网络

附图说明

图1示出了一种深度神经网络(deepneuralnetworks,dnns)的模型。

图2示出了一种利用剪切、重训的压缩神经网络的示意图。

图3示出了剪枝后的神经网络,其中一部分神经元被剪枝。

图4示出了一种使用神经网络的语音识别引擎的例子。

图5示出了应用于语音识别引擎的深度学习模型。

图6示出了应用于语音识别领域的一种lstm网络模型。

图7示出了一种改进的lstm网络模型。

图8示出了一种lstm神经网络的压缩方法。

图9示出了敏感度测试的具体步骤。

图10显示了对lstm网络应用敏感度测试的得到的相应曲线。

图11示出了确定最终稠密度序列并进行剪枝的具体步骤。

图12示出了通过“压缩试验-稠密度序列调整”迭代调整初始稠密度序列的具体子步骤。

图13示出了对神经网络进行重训的具体步骤。

图14示出了现有技术的使用掩码进行重训的过程。

图15示出了根据本发明的合理使用掩码进行重训的过程。

图16示出了根据本发明的重训过程对lstm神经网络进行压缩的流程和结果的示例。

具体实施方式

发明人过去的研究成果

如发明人之前的文章“learningbothweightsandconnectionsforefficientneuralnetworks”中,已经提出了一种通过修剪来压缩神经网络(例如,cnn)的方法。所述方法包括如下步骤。

初始化步骤,把卷积层、fc层的权重初始化为随机值,其中生成了具有完全连接的ann,所述连接具有权重参数,

训练步骤,训练所述ann,根据ann的精度,来调整ann的权重,直到所述精度达到预定标准。所述训练步骤基于随机梯度下降算法来调整所述ann的权重,即随机调整权重值,基于ann的精度变化来进行选择。关于随机梯度算法的介绍,可以参见上述“learningbothweightsandconnectionsforefficientneuralnetworks”。此外,所述精度可以量化为,针对训练数据集,ann的预测结果和正确结果之间的差异。

修剪步骤,基于预定的条件,发现ann中的不重要的连接,修剪所述不重要的连接。具体而言,被修剪的连接的权重参数不再被保存。例如,所述预定条件包括以下任意之一:连接的权重参数为0;或连接的权重参数小于预定值。

微调步骤,将被修剪的连接重新设置为权重参数值为零的连接,即,恢复所述被修剪的连接,并分配权重值为0。

迭代步骤,判断ann的精度达到预定标准。如果没有,重复上述训练、修剪、微调步骤。

本发明提出的改进

本发明提供了一种多次迭代的深度神经网络的压缩方法。

图8示出了根据本发明的一个实施例的一种适用于lstm神经网络的压缩方法,其中通过多次迭代操作来实现神经网络的压缩。

根据图8的实施例,每次迭代操作具体包括敏感度分析、剪枝、重训三个步骤。下面对每个步骤进行具体说明。

步骤8100,敏感度测试(sensitivityanalysis)。

在该步骤中,例如,针对lstm网络中所有矩阵进行敏感度分析,以确定不同矩阵的初始稠密度(或者初始压缩比)。

图9示出了敏感度测试的具体步骤。

如图9所示,在步骤8110,例如,对lstm网络中的各个矩阵尝试按照不同稠密度进行压缩(所选择的稠密度例如是0.1,0.2,…,0.9,对矩阵的具体压缩方法参考步骤8200)。然后,测量以不同稠密度压缩的网络的词错误率(worderrorrate,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,确定最终稠密度序列(densitydetermination)并进行剪枝(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,重训(finetuning)

对神经网络的训练是对损失函数进行优化的过程。损失函数指的是在给定输入下,神经网络模型预测的结果与真实结果之间的差别。希望损失函数的值尽可能小。

对神经网络的训练的本质在于寻找最优解。重训即指在已有的一个可能的离最优解很近的次优解的情况下,搜索最优解,也就是在一定的基础上继续训练。

例如,对于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:regularizingdeepneuralnetworkswithdense-sparse-densetrainingflowinnips2016,对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、对待训练的初始模型采用交叉验证数据集测试平均损失(crossloss,后面简称“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)

具体地,上式为对网络进行带掩码重训优化每帧交叉熵(optimizeper-framecross-entropy)的过程。其中,rmask表示一种带掩码训练过程,在该过程中只对没有剪去的权值进行更新。通过这一过程,调整仍然被保留在网络权值矩阵中的权值,使深度神经网络收敛到新的局部最优解。

带掩码重训步骤具体包括训练步骤和判断步骤。基于判断步骤中矩阵是否收敛到局部最优解,决定返回继续训练或终止训练。

更具体地,训练步骤如下所述:

1.输入训练集数据,采用反向传播(backpropagation,简称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.输入训练集数据,采用反向传播(backpropagation,简称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神经网络,而是可以应用到其他各种神经网络。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1