APP下载

学习长短时记忆网络的紧密结构

2018-11-14戴礼荣张仕良

小型微型计算机系统 2018年11期
关键词:隐层剪枝投影

陈 皇,戴礼荣,张仕良,黄 俊

(中国科学技术大学 语音与语言信息处理国家工程实验室,合肥 230022)

1 引 言

深度学习(deep learning)在语音识别[1-3](speech recognition)领域发展迅速,特别是在音素识别(phoneme recognition)[1,2]与大词汇连续语音识别(Large Vocabulary Continuous Speech Recognition,LVCSR)[3-7]任务上,深度神经网络(Deep Neural Networks,DNN)和长短时记忆(Long Short Term Memory,LSTM)网络取得了重大的突破. 尽管这些模型取得了优异的识别性能,如何设计一个更加合理的网络模型结构却没有得到深入的研究.例如网络模型的深度以及宽度,决定了网络模型的参数量与计算复杂度.目前来看,这些超参数通常依靠谨慎的手动设置来完成.

为了实现突出的性能,在语音识别任务上,LSTM通常具有深且宽的模型结构,但是这也不可避免会带来了巨大的参数量与计算量.例如,在基于Switchboard数据集的语音识别任务上,一个典型的LSTM网络包括3个隐层(hidden layer)以及1个全连接(Full Connected,FC)层,每个隐层包括1024个记忆单元(memory cell),这带来超过30M的模型参数量.在测试应用中,巨大的参数量带来了显著的内存占用与计算复杂度.这给在本地移动设备运行这些网络模型造成了巨大的困难,因此目前通常是利用云端强大的服务器来进行计算.

如何决定网络模型的结构,例如每个隐层的节点数或者记忆单元数量等,这一问题至今没有得到广泛的研究.目前,模型结构主要通过验证实验或者研究者的经验来进行设定,这在很多场景下被证明是有效的,但是却十分耗时.神经网络模型存在极大程度上的参数冗余[8-11],这促使我们去压缩网络模型.在过去几年,如何训练得到合适的网络结构取得了一定程度上的研究进展,这其中主要有两种思路:建设性方法与破坏性方法.

从一个浅层网络开始,建设性方法逐渐在网络中增加额外的参数.一个早期的方法[12]在预先训练好的网络上增加节点.最近,Simonyan等[13]提出了一种建设性方法,通过在一个初始的浅层网络上增加新的隐层来构造深层网络.但是,相比于深层网络,浅层网络的表征性更弱一些,可能容易陷入局部最优点,因而浅层网络可能会提供一个差的网络初始化模型.

相比于建设性方法,破坏性方法从一个大的初始网络开始训练,其目标是在保证网络输出尽可能不变的前提下减小网络模型规模.这一想法[14]由LeCun等提出,基于这一想法的主要方法[15-17]包括分析单个参数或者神经元的特性,然后移除那些对网络输出影响较小的参数或者神经元.然而,分析一个大网络模型中参数或者神经元特性具有极高的计算代价.

其它破坏性方法[18,19]通过模拟一个已经训练好的深层网络的输出来训练一个浅层或者窄网络,这可以在一定程度上减少初始大规模网络的参数量.然而,这些方法要求我们预先训练好一个大规模网络.结合建设性方法与破坏性方法,Philipp等[20]提出一种自适应网络大小的框架以便自动确定合适的网络规模,其通过在训练过程中连续增加新单元的同时移除作用很小的单元来实现.

以上工作的目的是寻找更加紧密的网络结构.本文提出一种自动学习LSTM每个隐层中记忆单元数量以及投影层节点数的方法.特别是,我们的方法不需要一个已经预先训练好的网络.而是在训练过程中,为隐层中的每个记忆单元或者节点学习移动门(moving gate)信息,每个移动门的值显示相对应记忆单元或者节点对于网络的重要性,当该值小于一个预设的门限值(例如0.42)时,我们将忽略相对应记忆单元或者节点的影响,并且从网络中移除该记忆单元或者节点.值得注意的是,我们在训练每过完一遍数据后移除不重要的记忆单元或者投影层节点,这充分考虑整个数据集的特性,降低错误裁剪的可能性.而不是在完全训练好一个网络之后进行裁剪与再训练,这减少了训练过程所需消耗的时间.该方法的主要优点是不用谨慎地设置LSTM中每个隐层的记忆单元数量.利用我们提出的方法,只需要从一个合适的大规模网络开始训练,在训练过程中可以逐渐学习到一个紧密的网络结构,从而减少模型参数量以及计算复杂度.

2 带移动门的LSTM

2.1 LSTM

传统的递归神经网络(Recurrent Neural Network,RNN)可以利用上下文信息对当前时刻的输入进行建模,并得到相应的输出.然而在实际中发现,RNN很难学习到长时依赖信息,这一现象被称为梯度消失(vanishing gradient)问题.LSTM是目前为止解决这一问题最成功的方法[21,22].

图1 LSTM记忆单元

如图1所示为一个LSTM单元,该单元在扮演传统RNN中隐层神经元的角色.LSTM具有一个记忆单元(memory cell),用来存储信息,与之相连的常数错误传送结构(Constant Error Carousel,CEC)控制错误信号在时域后向传播(Back-Propagation Through Time,BPTT)时无衰减传播.每个LSTM单元具有三个门:输入门(input gate)、遗忘门(forget gate)与输出门(output gate),通过输入门与输出门控制信息的流入与流出,通过遗忘门决定是否重置网络,这些门行为通过前一层的输出、上一时刻的隐层输出以及记忆单元信息共同控制.记忆单元与三个门之间的连接称为窥孔连接(peephole connection),如图虚线所示.

下面以单层单向的LSTM为例,对其计算机制进行简要说明.LSTM网络映射一个输入序列x=(x1,x2,…,xT)到一个输出序列y=(y1,y2,…,yT),利用下列等式计算从t=1时刻到T时刻网络单元激活值:

表1 不同移动门的WER

it=σ(Wixxt+Wirrt-1+Wicct-1+bi)

(1)

ft=σ(Wfxxt+Wfrrt-1+Wfcct-1+bf)

(2)

gt=g(Wcxxt+Wcrrt-1+bc)

(3)

ct=ft⊙ct-1+it⊙gt

(4)

ot=σ(Woxxt+Worrt-1+Wocct+bo)

(5)

mt=ot⊙h(ct)

(6)

rt=wrmmt

(7)

yt=φ(Wyrrt+by)

(8)

其中,输入到LSTM层记忆单元、输入门、遗忘门和输出门的权值矩阵分别为Wcx,Wix,Wfx,Wox,上一时刻投影层[6]的输出到这些单元的权值矩阵分别为Wcr,Wir,Wfr,Wor,这些单元的偏置向量分别为bc,bi,bf,bo.而Wic,Wfc,Woc为peephole权值连接矩阵,不过值得注意的是它们是对角矩阵.σ是激活函数,i,f,o与c分别表示输入门、遗忘门、输出门以及记忆单元,m与r分别是隐层输出和投影层输出,Wrm是投影层转换矩阵.⊙表示矢量间逐元素相乘,g与f都是激活函数,通常是tanh,φ是网络输出层激活函数,通常是softmax.

2.2 移动门

对于LSTM来说,每个记忆单元或者节点对网络模型的重要性有所不同,为了对网络模型规模进行压缩,我们考虑将对网络输出贡献较小的记忆单元或者节点移除,包括移除相对应的权值连接.为了评价每个记忆单元的重要性,我们提出了移动门,移动门定义如下:

mui=α·mii+β·it,mii=mui

(9)

muf=α·mif+β·ft,mif=muf

(10)

muo=α·mio+β·ot,mio=muo

(11)

其中,mui,muf,muo分别表示输入门、遗忘门以及输出门对应的移动门更新信息,mii,mif,mio表示移动门初始化信息,初始化值设置为0,α与β都是超参数,在我们的实验中,分别设置为0.9与0.1.

表2 遗忘门WER

如果同时利用两个或者三个门来评价记忆单元的重要性,将结合公式(9,10,11),例如利用输入门与输出门时,对应的移动门更新公式如下:

muio=α·miio+β·(it+ot)/2,miio=muio

(12)

此外,为了评价投影层节点的重要性,类似评价记忆单元,引入对应的移动门信息mur,定义如下:

mur=α·mir+β·|rt|,mir=mur

(13)

移动门数值mu的大小表示对应的记忆单元或者节点的重要性. 当移动门数值小于一个给定的门限值时, 该移动门对应的记忆单元或者节点对网络输出的贡献将被忽略, 且该记忆单元或者节点将从网络中移除. 在训练过程中, 重复这一步骤将实现每个隐层中记忆单元数量与投影层节点数的自动学习.

在网络训练时,前向过程中,我们计算网络输出以及按照公式(9,10,11,12,13)更新移动门信息.例如,当我们利用输入门的移动门信息来评价记忆单元的重要性时,前向过程中,每一时刻计算得到it,就用利用公式(9)来更新对应的mui.当训练过完一遍数据后,此时若mui小于给定的门限,将移除对应的记忆单元以及对应的权值连接.而在每遍数据训练结束之前,只更新模型参数以及移动门信息,不进行记忆单元或者投影层节点剪枝.

3 实 验

3.1 数据和基线

在我们的实验中使用的是Switchboard数据集, 包括309小时的数据.按照Kaldi[23]的设置, 将整个训练集划分为训练集与验证集. 以词错误率(Word Error Rate, WER)作为模型性能评价指标, 测试数据是标准的NIST 2000 Hub5e00测试集中的Switchboard部分, 其中包括1831个句子. 用于训练LSTM网络模型的状态对齐由混合高斯模型与隐马尔可夫模型(Gaussian Mixture Model Hidden Markov Model, GMM-HMM)产生[3-5]. 在解码过程中, 使用的三阶语言模型(Language Model, LM)是由Switchboard数据中300万个单词以及Fisher数据第一部分中的1100万个单词生成.

表3 移动门性能

关于基线系统,我们使用随机梯度下降(Stochastic Gradient Descent,SGD)算法来训练,30句话并行训练.基线网络结构包括3个LSTM层、1个全连接层以及1个softmax输出层,每个LSTM层包括1024个记忆单元,每个LSTM层对应的投影层[6]节点数为512,记为3lstm1024r512,这是一种在语音识别任务中常用的LSTM结构.网络输入的语音帧长为25ms,帧移为10ms,提取的特征为36维filter-bank (FBank)特征.LSTM网络的输入为108维Filter-Bank(FBank)特征,包括一阶差分与二阶差分.LSTM网络随机初始化,在训练过程中使用小批量随机梯度下降法来优化帧级交叉熵(Cross Entropy,CE)准则.基线结果如表1所示,表中基线分别表示论文[4]中实验结果与我们基于Kaldi平台搭建的基线系统.

3.2 实验结果与分析

在所有的实验设置中,LSTM随机初始化,然后使用后向传播(Back Propagation, BP)算法来训练.在网络训练过程中,引入移动门来学习每个隐层中记忆单元的数量以及投影层节点个数.

首先,为了验证方法的可行性,在训练过程中,我们保持给定的门限不变.例如,利用遗忘门的移动门信息时,我们选取设定的门限为0.42.在每过完一遍数据后,此时若记忆单元对应的移动门信息小于给定的门限,将对该记忆单元进行剪枝,实验结果如表1所示.表1中的移动门表示分别依据LSTM中不同门的移动门信息来进行记忆单元的剪枝,例如i表示依据输入门的移动门信息来剪枝,而i,o表示依据输入门以及输出门的信息来进行剪枝;网络结构表示LSTM训练结束时最终学习到的每个隐层的记忆单元数量,比如3lstm[874-856-575]r512表示LSTM中3个隐层的记忆单元数目分别为874,856,575,由于此处没有对投影层进行节点剪枝,每个投影层的节点数均为512.此外,为了对比依据不同移动门信息进行剪枝的性能表现,我们通过适当调整对应的门限,以便最终学习到的网络结构拥有几乎相同的记忆单元数量.

从表1中的实验结果看,依据输入门或者遗忘门的移动门信息来进行剪枝,可以有效的学习更加紧密的网络结构,而且基本没有带来语音识别性能损失.此外,对比分别依据输入门、遗忘门与输出门来进行剪枝的识别结果,可以发现,依据遗忘门的信息有利于保证语音识别率,其次是输入门,最后才是输出门,这显示LSTM三个门中遗忘门最重要[24],其次是输入门,相比于遗忘门与输入门,输出门的重要性更低一些.

为了更加有效的进行记忆单元的剪枝,在网络训练过程中,由零门限开始逐渐增加门限直至给定门限为止.例如,我们利用遗忘门的移动门信息时,初始门限为0,训练每过完一遍数据后门限增大0.084,当增大到预设门限0.42后,保持门限值不变.这样便于逐步剪枝,移除对网络输出贡献可忽略的记忆单元,避免一次裁剪掉大量的记忆单元造成网络训练不稳定,有利于在训练中得到更加合理的网络结构.从表1的实验结果看,依据遗忘门可以更加有效的确保语音识别率,此处就通过遗忘门的移动门信息来进行记忆单元的裁剪,相应的实验结果如表2所示.

从表2中实验结果看,单独依据遗忘门的移动门信息,总共可以移除40.5%的记忆单元,且没有带来性能损失,反而有一些性能提升.依据输入门与遗忘门,移除了43.3%的记忆单元,仅仅带了相对1.4%的性能下降.此外,依据输入门、遗忘门与输出门,移除了46.5%的记忆单元,性能下降仅0.7%.这表明了在训练过程中通过移动门信息来进行记忆单元数目的学习是有效的,不仅可以优化网络模型规模,而且有效地保证了语音识别性能.

为了进一步优化网络规模,在对每个隐层记忆单元剪枝的基础上,再对投影层节点进行剪枝,类似评价记忆单元的重要性,采用公式(12)来评价投影层每个节点的重要性,移除对网络输出贡献较小的节点.实验结果如表3所示,其中f_fixed表示依据遗忘门来剪枝,前面训练过程中裁剪掉的记忆单元或者节点将被直接移除,不参与后续训练过程;f_dynamic表示依据遗忘门来剪枝,但当前面训练过程中剪掉的记忆单元或者节点的移动门信息在后续训练过程中大于给定门限时,将被激活且重新使用;f_init表示依据f_dynamic最终训练得到的网络结构来随机初始化一个网络,然后训练;网络结构c1024r512表示该隐层中记忆单元数目为1024,对应的投影层节点个数为512;参数量表示网络中权值矩阵的参数个数;乘法数表示网络处理一个输入帧所需的浮点数乘法次数;训练时间表示每过一遍训练数据所需消耗的时间.

从表3中结果,f_dynamic表明我们提出的移动门不仅可以移除41.3%的模型参数,而且相对应的减少了41.3%的浮点数乘法计算次数.更重要的是,没有造成任何识别性能损失,反而带来一些性能提升,而且训练时间仅仅多消耗了11.1%.对比f_fixed与f_dynamic的结果,在最终训练得到网络模型参数相当的前提下,动态(f_dynamic)剪枝更加有利于保证语音识别性能无损,这主要因为训练过程中降低了错误剪枝的概率.为了验证我们提出的方法可以得到更加合理的网络结构,我们按照f_dynamic最终训练得到的模型,与基线一样随机初始化网络,再进行SGD训练,得到f_init,实验结果表明我们提出的移动门可以得到更好的识别性能,带来相对2.1%的性能提升.

4 结 语

本文提出一种基于移动门的方法来自动学习长短时记忆网络中记忆单元数量以及投影层节点数.此方法移除了大量的记忆单元以及投影层节点,压缩了网络规模,减少了浮点数乘法计算次数,同时保证了网络的性能基本不损失.这表明利用该方法来训练长短时记忆网络可以得到更加合理且紧密的网络结构.实验结果表明,我们提出的方法在保证性能无损的情况下移除了超过40%的参数量.在未来的工作中,我们计划将提出的网络模型压缩方法应用于卷积神经网络(Convolutional Neural Networks,CNN).

猜你喜欢

隐层剪枝投影
基于RTD可编程逻辑门的n变量函数实现算法
一种自适应确定隐层节点数的增量半监督超限学习机算法
人到晚年宜“剪枝”
全息? 全息投影? 傻傻分不清楚
基于YOLOv4-Tiny模型剪枝算法
一种深度梯度提升回归预测模型
基于最大相关熵的簇稀疏仿射投影算法
基于激活-熵的分层迭代剪枝策略的CNN模型压缩
找投影
找投影