基于SVD的DNN裁剪方法和重训练
邢安昊 , 张鹏远 , 潘接林 , 颜永红     
中国科学院 声学研究所, 语言声学与内容理解重点实验室, 北京 100190
摘要:深层神经网络(DNN)的参数量巨大,限制了其在一些计算资源受限或是注重速度的应用场景中的应用。为了降低DNN参数量,有学者提出利用奇异值分解(SVD)对DNN进行裁剪,然而其方法缺乏自适应性,因为它会从所有隐层裁减掉同样数量的奇异值。该文提出了一种基于奇异值比率裁剪因子(singular rate pruning factor, SRPF)的DNN裁剪方法。该方法以数据驱动的方式分别为DNN的各个隐层计算出SRPF,然后以不同的裁剪因子对各隐层进行裁剪,这充分利用了各隐层权值矩阵的奇异值分布特性。与固定数量裁剪法相比,该方法具有自适应性。实验表明:在同样裁剪力度下,该方法给DNN造成的性能损失更小。另外,该文还提出了一种适合裁剪后的DNN的重训练方法。
关键词语音识别     深层神经网络(DNN)     奇异值分解(SVD)    
SVD-based DNN pruning and retraining
XING Anhao , ZHANG Pengyuan , PAN Jielin , YAN Yonghong     
Key Laboratory of Speech Acoustics and Content Understanding, Institute of Acoustics, Chinese Academy of Sciences, Beijing 100190, China
Abstract:Deep neural networks (DNN) have many parameters, which restricts the use of DNN in scenarios with limited computing resources or when speed is a priority. Some researchers have proposed to prune the DNN using singular value decomposition (SVD). However, this method lacks adaptivity as it prunes the same number of singular values in all the hidden DNN layers. A singular rate pruning factor (SRPF) based DNN pruning method is given here. This method first separately calculates the SRPFs for each hidden layer based on the data with every layer then pruned using different pruning factors. This method makes full use of the distribution traits of the singular values in each hidden layer. This method is more adaptive than pruning a fixed portion of singular values with experiments showing that a DNN pruned with this method performs better. A retraining method is also given which adapts to the pruned DNN.
Key words: speech recognition     deep neural network (DNN)     singular value decomposition (SVD)    

语音识别作为领先的人机交互方式,在过去的40年里取得了很大的进步。 在传统的隐Markov模型(hidden Markov model,HMM)和Gauss混合模型(Gaussian mixture model,GMM)的框架下,语音识别在多种应用环境中都达到了较高的水平。 近年来,深层神经网络(deep neural network,DNN)得到了很好的发展,开始引起了语音识别领域的关注。 相比GMM,DNN体现出了更强的建模能力,同时在识别和自适应方向上取得了明显的性能提升[1-4]

DNN强大的建模能力主要得益于更深的模型层次,与此同时,DNN的参数量变得十分巨大,在语音识别的解码过程中,利用DNN对似然值进行估计需要消耗很大的计算资源。 这一问题在一些资源受限的应用场景中尤为突出,例如新兴的智能家电领域,智能家电的芯片上预留给智能交互系统的储存和计算资源都是十分有限的,并且对于系统反馈的时效性又有很高的要求,此时应用高计算复杂度的DNN就十分困难了。

为了解决这一问题,多位学者提出了许多方案: Liu等[5]提出利用最优脑损伤(optimal brain damage,OBD)算法[6],计算DNN各个参数对于其训练目标函数的影响,并将影响较小的参数置为0; Li等[7]提出,利用一个较大规模的DNN模型,对其输入大量未标注数据,通过它的输出结合输入数据再来训练一个小规模的DNN; Xue等[8]提出利用奇异值分解(singular value decomposition,SVD)对DNN进行重构,并且裁减掉较小的奇异值,从而降低了计算量。

本文按照文[8]的思路,对裁剪规则进行了改进: 在利用SVD对DNN进行裁剪时,本文并没有像文[8]方法中那样将固定数量的奇异值裁剪,而是以一种数据驱动形式首先为DNN每个隐层单独计算出将要被裁剪的奇异值数量,然后采用不同的裁剪力度对每个隐层进行裁剪。 实验表明,在相同的裁剪力度下,使用本文裁剪方法得到的DNN性能要优于文[8]方法。 另外,在利用SVD对DNN进行裁剪之后,DNN的性能会受到损失,因此本文提出了一种适合裁剪后的DNN的重训练方案,经过重训练之后,大大降低了由裁剪导致的DNN性能损失。

1 深层神经网络

相比浅层神经网络,DNN在输入层和输出层之间有多个隐层。 与浅层神经网络类似,DNN可以对复杂的非线性关系进行建模。 DNN仍然是一个典型的前馈网络(见图 1),而近期的研究已经从DNN衍生出其他结构: 递归神经网络(recursive neural network,RNN)可以应用于语音识别中的语言模型; 卷积神经网络(convolutional neural network,CNN)也已经在计算机视觉领域取得了成功,并在最近被用在语音识别的声学建模当中,体现出很大的潜力。

图 1 DNN结构示意图

在语音识别的解码过程中,DNN被用来进行最小解码单元的似然估计,即输入一组观测矢量,如图 1中X=[x1,…,xi,…,xN],通过DNN的前馈(feed-forward)过程,得到一组后验概率分布,如图 1中的{p(ci|X)}。 DNN的前馈计算主要包括两个部分: 1) 权值矩阵与激活向量相乘,2) 使用非线性函数处理。

$y_{i}^{m}=\sum\limits_{j}^{{}}{{}}w_{i,j}^{m}\alpha _{j}^{m-1},$ (1)
$\alpha _{i}^{m}=f\left( y_{i}^{m} \right).$ (2)

其中: wi,jm为连接第(m-1)层第j个节点到第m层第i个节点的连接权值,f(·)为一非线性函数,αim为第m层第i个节点经过f(·)变换之后的激活值。 从式(1)中可以看出,DNN当中最主要的参数就是由wi,j构成的权值矩阵Wm×n,而主要的计算就是矩阵相乘当中反复的乘加运算。 因此,在不对DNN的基本结构进行改变的前提下,想要提高DNN前馈计算的速度,主要方向是提高乘加计算的速度或者减少乘加运算的次数。

2 基于奇异值分解的DNN重构

为了降低乘加运算的次数,Xue等[8]提出了利用奇异值分解来对DNN进行重构,通过裁剪掉最小的奇异值及其相对应的特征向量,来达到减少乘加运算数量的目标。

2.1 奇异值分解

奇异值分解将任意矩阵Wm×n(不失一般性,假设mn)分解成3个矩阵相乘:

${{W}_{m\times n}}={{U}_{m\times m}}{{\Sigma }_{m\times m}}{{V}_{m\times n}}.$ (3)

其中: Σm×m为对角矩阵,即Σm×m=diag(σ1,σ2,…,σm),它的对角元素即为Wm×n的奇异值; Um×m为单位正交矩阵,其列向量为与奇异值对应的特征向量; Vm×n中的行向量是互相单位正交的,也是与奇异值对应的特征向量。

2.2 基于SVD的DNN重构

SVD还有一个重要的性质: 矩阵Σm×m中的奇异值是按照降序排列,即σ1σ2≥…≥σm,并且较小的奇异值所对应的特征向量在原矩阵中起的作用也小[9]。 根据这一性质,可以将较小的奇异值以及所对应的特征向量裁剪,使得原矩阵变成更小规模的2个矩阵的乘积:

$\eqalign{ & \matrix{ {{w_{m,1}}} & \ldots & {{w_{m,n}}} \cr \vdots & {} & \vdots \cr {{w_{m,1}}} & \cdots & {{w_{m,n}}} \cr } = \cr & \matrix{ {{u_{1,1}}} & \ldots & {{u_{1,m}}} \cr \vdots & {} & \vdots \cr {{u_{m,1}}} & \cdots & {{u_{m,m}}} \cr } \matrix{ {{\sigma _1}} & 0 & \cdots & 0 \cr 0 & {{\sigma _2}} & \cdots & 0 \cr \vdots & \vdots & \cdots & \vdots \cr 0 & 0 & \cdots & {{\sigma _m}} \cr } \matrix{ {{v_{1,1}}} & \ldots & {{v_{1,n}}} \cr \vdots & {} & \vdots \cr {{v_{m,1}}} & \cdots & {{v_{m,m}}} \cr } = \cr & \matrix{ {{u_{1,1}}} & \ldots & {{u_{1,k}}} \cr \vdots & {} & \vdots \cr {{u_{m,1}}} & \cdots & {{u_{m,k}}} \cr } \matrix{ {{\sigma _1}} & 0 & \cdots & 0 \cr 0 & {{\sigma _2}} & \cdots & 0 \cr \vdots & \vdots & \cdots & \vdots \cr 0 & 0 & \cdots & {{\sigma _k}} \cr } \matrix{ {{v_{1,1}}} & \ldots & {{v_{1,n}}} \cr \vdots & {} & \vdots \cr {{v_{k,1}}} & \cdots & {{v_{k,n}}} \cr } = \cr & \matrix{ {{q_{1,1}}} & \ldots & {{q_{1,k}}} \cr \vdots & {} & \vdots \cr {{q_{m,1}}} & \cdots & {{q_{m,k}}} \cr } \matrix{ {{v_{1,1}}} & \ldots & {{v_{1,n}}} \cr \vdots & {} & \vdots \cr {{v_{k,1}}} & \cdots & {{v_{k,n}}} \cr } = {Q_{m \times k}}{V_{k \times n}}. \cr} $ (4)

可以看出,原本总共个奇异值最终只保留了最大的前k个,并且将前两个矩阵Um×kΣk×k相乘得到Qm×k

节1提到DNN前馈计算中最主要的计算是权值矩阵与激活向量相乘:

${{y}_{m\times 1}}={{W}_{m\times n}}{{\alpha }_{n\times 1}}.$ (5)

如果对Wm×n进行如式(4)的变换,则式(5)可改写为

$~{{y}_{m\times 1}}={{Q}_{m\times k}}{{V}_{k\times n}}{{\alpha }_{n\times 1}}={{Q}_{m\times k}}({{V}_{k\times n}}{{\alpha }_{n\times 1}}).$ (6)

原本式(5)中的矩阵乘法需要m×n次乘加运算,变成式(6)的形式后,需要(m+nk次乘加运算。 当k很小时,这种变换就可以减少乘加运算的数量。

3 SVD重构DNN的数据驱动裁剪方法

[8]中提出利用SVD对DNN进行裁剪重构,取得了很好的效果。 文[8]中对于所有权值矩阵都只保留了同样固定数量的奇异值,即式(4)中的k对于所有权值矩阵都取定了一个定值。 这种方法缺乏对于不同权值矩阵的自适应性,而且参数的设置上也缺少启发性。 本文基于数据驱动的裁剪方法,提出了奇异值比率裁剪因子(singular rate pruning factor,SRPF),定义如下: 假定SRPF取值为r,对于所有奇异值σi,如果$\frac{{{\sigma }_{1}}}{{{\sigma }_{2}}}$≤r,则将σi裁剪掉,其中σ1为最大的奇异值。

可以看出SRPF的取值范围应为0到1,即r∈[0,1),当r取0的时候,完全不做裁剪,当r取1的时候,全部奇异值都会被裁剪掉,矩阵完全收缩为0矩阵,无法进行前馈计算,故而此处取了开区间。

应用SRPF对DNN进行裁剪时,会根据网络每层的权值矩阵自身的奇异值分布,裁剪掉相对较小的奇异值,从而压缩矩阵。 当各层奇异值分布状况差别较大时,利用这个方法可以避免由于统一裁剪数量而导致的某些矩阵被过度裁剪的情形。 例如图 2(纵坐标为被裁减奇异值数量占总数的百分比)中,同一个DNN的隐层和输出层的奇异值分布差别很大,隐层(见图 2a)的奇异值绝大多数都分布在SRPF<0.2的区域,比例高达94%; 而输出层(见图 2b)的奇异值则分布比较均匀,分布在 SRPF<0.2 区域中的奇异值只占较小的一部分,比例约29%; 此时如果每层都裁剪掉固定相同数量的奇异值,就会导致输出层的权值矩阵被过度裁剪。

图 2 不同层的奇异值分布情况对比

4 SVD重构DNN后的重训练

[6][8]都提到,当对DNN进行参数裁剪之后,模型的性能都会受损,因此需要对裁剪后的DNN进行重训练。 其中文[6]由于只是将某些权值置为0,DNN的结构并没有变化,因此重训练方法与常规训练的方法完全相同,而利用SVD重构DNN的方法,改变了DNN的结构,重训练的方法会有不同。

SVD重构DNN的重训练,也可以像常规训练那样进行,只需要在重训练的过程当中将式(4)中的Qm×kVk×n相乘,得到新的${\hat{W}}$m×n,再进行常规训练即可。 但是该方法存在缺点是重训练过程中模型收敛很慢。

本文提出适合SVD重构之后的DNN的结构的重训练方法。根据DNN训练的后向传播(back propagation,BP)算法[10],后一层的误差向前一层传播的过程如下:

$\begin{align} & \frac{\partial E}{\partial y_{j}^{m}}=\sum\limits_{k}^{{}}{{}}\frac{\partial E}{\partial y_{k}^{m+1}}\frac{\partial y_{k}^{m+1}}{\partial y_{j}^{m}}= \\ & \sum\limits_{k}^{{}}{{}}\frac{\partial E}{\partial y_{k}^{m+1}}\frac{\partial y_{k}^{m+1}}{\partial f\left( y_{j}^{m} \right)}f'y_{j}^{m}= \\ & f\left( y_{j}^{m} \right)\left( 1-f\left( y_{j}^{m} \right) \right)\sum\limits_{k}^{{}}{{}}\frac{\partial E}{\partial y_{k}^{m+1}}w_{j,k}^{m+1}. \\ \end{align}$ (7)

其中: E为训练时候的目标函数,yjmwj,km的定义见式(1),f(·)为激活函数,一般采用的是sigmoid函数:

$f\left( x \right)=\frac{1}{1+{{e}^{-x}}}\in \left( 0,1 \right).$ (8)

在利用SVD重构DNN的过程当中,Wm×n变成了Qm×kVk×n的乘积,原本的前馈计算变成了2部分:

$~{{z}_{k\times 1}}=g({{V}_{k\times n}}{{\alpha }_{n\times 1}}),$ (9)
${{\alpha }_{m\times 1}}=f({{Q}_{m\times k}}{{z}_{k\times 1}}).$ (10)

根据式(9)和(10)可以看出,Qm×k代替了原来的Wm×n,并且在其之前添加了一层以Vk×n为权值矩阵的隐层,而g(·)可以看作一个线性函数,不妨设:

$g(x)=x.$ (11)

误差从以Qm×k为权值矩阵的隐层回传到以Vk×n为权值矩阵的隐层的过程为

$\frac{\partial E}{\partial y_{j}^{v}}=g\left( y_{j}^{v} \right)\left( 1-g\left( y_{j}^{v} \right) \right)\sum\limits_{k}^{{}}{{}}\frac{\partial E}{\partial y_{k}^{q}}{{q}_{jk}}.$ (12)

其中: yiv=$\sum\limits_{j}^{{}}{{}}$vi,jαjyiq=$\sum\limits_{j}^{{}}{{}}$qi,jzj

利用这种方法将DNN中的1层分解成为2层,这样即可用常规的训练方法对重构后的DNN进行重训练。

但是在实际过程中,这种训练方法出现了模型不收敛,甚至迅速发散的情况。 通过分析式(12)可知,由于Qm×k=Um×kΣk×k,而奇异值动态范围很广,导致Qm×k中的元素普遍较大,并且在回传过程中线性函数g(·)相比sigmoid函数动态范围也很大,就导致从以Qm×k为权值矩阵的隐层回传到以Vk×n为权值矩阵的隐层的误差值很大,而Vk×n中的元素普遍较小,这就导致在根据误差更新权值的过程中,更新方向完全偏离,训练过程无法收敛。

为了解决上面的问题,考虑将式(4)中的对角矩阵Σk×kVk×n相乘,使得以Vk×n为权值矩阵的隐层接收到的回传误差与其本身动态范围接近; 同时在更新权值的过程中采用非常小的学习率,可以避免在回传误差较大时迅速偏离方向的情况。

5 实验结果

本文实验中使用的初始DNN为一个4层网络,包含2个2 048节点的隐层,输入层有3 172个节点,输入观测矢量为前后各做了30帧扩展的52维线性感知预测(perceptual linear prediction,PLP)特征,输出层有221个节点,分别对应了221个音节。

训练和测试语音均为实验室环境下采集的家用电器指令短语如“将空调变为扫风模式”,其中 200 h 数据用于训练,2 h作为测试数据。

采用的解码器为简单的音节解码器,即根据DNN输出的后验分布,将具有最大后验概率的输出节点所对应的音节作为输出音节。

5.1 裁剪方法对比实验

实验中选取了3个SRPF,分别为0.15、 0.2和0.25,对模型进行裁剪; 同时,按照文[8]中的固定数量裁剪法,将模型裁剪到与SRPF方法相同的规模,进行对比实验。 实验结果如表 1所示。 对于利用SVD重构后的DNN,由于每个隐层的权值矩阵W都被分解为矩阵Q和V,其模型规模为各层中Q和V中的元素数量总和。

表 1 两种裁剪方法对比
裁剪方法模型规模/106音节错误率/%
基线(不裁剪)11.1414.4
[8]方法,k=1551.8018.3
本文方法,SRPF=0.151.8017.5
[8]方法,k=1021.1823.3
本文方法,SRPF=0.21.1823.0
[8]方法,k=730.8431.5
本文方法,SRPF=0.250.8431.0

可以看出,在同样的裁剪力度下,本文方法要好于固定数量的裁剪方法,音节错误率的提升更小。

5.2 重训练实验

表 1可以看出,当裁剪力度较大的时候,性能的损失是十分明显的,这时需要对模型进行重训练。 本文对表 1中最后4个裁剪方法得到的模型进行了重训练,每组各进行6次迭代至收敛,每次迭代结束时进行音节错误率的测试,结果如图 3所示。

图 3 重训练过程中的性能变化曲线

可以看出,本文方法在重训练过程中的性能依然比文[8]方法有优势。 重训练并没有使得模型完全恢复到裁剪前的性能,但是当裁剪力度不是很大的情况下,通过重训练可以将模型的性能损失控制在可以接受的范围,例如图 3中SRPF=0.2时,重训练之后的音节错误率为17.2%,比起基线14.4%的音节错误率提高2.8%,而结合表 1可知,该模型的参数量仅为基线模型的10.6%。

6 结 论

本文提出了一种数据驱动的DNN裁剪方法,通过对DNN的各个隐层分别计算SRPF,自适应地决定各层将要被裁剪的奇异值数量,进而使用不同的裁剪力度对各层进行裁剪。 实验表明在同等裁剪力度下,本文方法对DNN造成的性能损失比文[8]方法小。 另外本文提出了适合SVD重构后的DNN的重训练方法,即将重构后的隐层当做以线性函数连接的两个隐层来处理,这样处理之后,在重训练时可以直接使用BP算法。 实验表明在重训练后,本文方法得到的DNN模型的性能仍然优于文[8]方法。

参考文献
[1] Hinton G, Deng L, Yu D, et al. Deep neural networks for acoustic modeling in speech recognition[J]. IEEE Signal Processing Magazine , 2012, 29 (6) : 82–97. DOI:10.1109/MSP.2012.2205597
[2] Mohamed A, Dahl G, Hinton G. Acoustic modeling using deep belief networks[J]. IEEE Trans. on Audio, Speech, and Language Processing , 2012, 20 (1) : 14–22. DOI:10.1109/TASL.2011.2109382
[3] Deng L, Yu D, Platt J. Scalable stacking and learning for building deep architectures[C]//ICASSP. Kyoto, Japan:IEEE Press, 2012:2133-2136.
[4] 张宇, 计哲, 万辛, 等. 基于DNN的声学模型自适应实验研究[J]. 天津大学学报:自然科学与工程技术版 , 2015, 48 (9) : 765–769.
[5] ZHANG Yu, JI Zhe, WAN Xin, et al. Adaptation of Deep Neural Network for Large Vocabulary Continuous Speech Recognition[J]. Journal of Tianjin University (Sci and Tech), 2015, 48(9):765-769. (in Chinese)
[6] LeCun Y, Denker J, Solla S, et al. Optimal brain damage[J]. Advances in Neural Information Processing Systems (NIPS) , 1989, 2 : 598–605.
[7] LeCun Y, Denker J, Solla S, et al. Optimal brain damage[J]. Advances in Neural Information Processing Systems (NIPS), 1989, 2:598-605.
[8] Li J, Zhao R, Huang J, et al. Learning Small-Size DNN with Output-Distribution-Based Criteria[C]//Proc Interspeech. Singapore, 2014.
[9] Shlens J. A Tutorial on Principal Component Analysis[J]. Eprint Arxiv , 2014, 58 (3) : 219–226.
[10] Hecht-Nielsen R. Theory of the backpropagation neural network[J]. Neural Networks , 1988, 1 (1) : 65–93.