陳 皇,戴禮榮,張仕良,黃 俊
(中國科學(xué)技術(shù)大學(xué) 語音與語言信息處理國家工程實驗室,合肥 230022)
深度學(xué)習(xí)(deep learning)在語音識別[1-3](speech recognition)領(lǐng)域發(fā)展迅速,特別是在音素識別(phoneme recognition)[1,2]與大詞匯連續(xù)語音識別(Large Vocabulary Continuous Speech Recognition,LVCSR)[3-7]任務(wù)上,深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks,DNN)和長短時記憶(Long Short Term Memory,LSTM)網(wǎng)絡(luò)取得了重大的突破. 盡管這些模型取得了優(yōu)異的識別性能,如何設(shè)計一個更加合理的網(wǎng)絡(luò)模型結(jié)構(gòu)卻沒有得到深入的研究.例如網(wǎng)絡(luò)模型的深度以及寬度,決定了網(wǎng)絡(luò)模型的參數(shù)量與計算復(fù)雜度.目前來看,這些超參數(shù)通常依靠謹慎的手動設(shè)置來完成.
為了實現(xiàn)突出的性能,在語音識別任務(wù)上,LSTM通常具有深且寬的模型結(jié)構(gòu),但是這也不可避免會帶來了巨大的參數(shù)量與計算量.例如,在基于Switchboard數(shù)據(jù)集的語音識別任務(wù)上,一個典型的LSTM網(wǎng)絡(luò)包括3個隱層(hidden layer)以及1個全連接(Full Connected,F(xiàn)C)層,每個隱層包括1024個記憶單元(memory cell),這帶來超過30M的模型參數(shù)量.在測試應(yīng)用中,巨大的參數(shù)量帶來了顯著的內(nèi)存占用與計算復(fù)雜度.這給在本地移動設(shè)備運行這些網(wǎng)絡(luò)模型造成了巨大的困難,因此目前通常是利用云端強大的服務(wù)器來進行計算.
如何決定網(wǎng)絡(luò)模型的結(jié)構(gòu),例如每個隱層的節(jié)點數(shù)或者記憶單元數(shù)量等,這一問題至今沒有得到廣泛的研究.目前,模型結(jié)構(gòu)主要通過驗證實驗或者研究者的經(jīng)驗來進行設(shè)定,這在很多場景下被證明是有效的,但是卻十分耗時.神經(jīng)網(wǎng)絡(luò)模型存在極大程度上的參數(shù)冗余[8-11],這促使我們?nèi)嚎s網(wǎng)絡(luò)模型.在過去幾年,如何訓(xùn)練得到合適的網(wǎng)絡(luò)結(jié)構(gòu)取得了一定程度上的研究進展,這其中主要有兩種思路:建設(shè)性方法與破壞性方法.
從一個淺層網(wǎng)絡(luò)開始,建設(shè)性方法逐漸在網(wǎng)絡(luò)中增加額外的參數(shù).一個早期的方法[12]在預(yù)先訓(xùn)練好的網(wǎng)絡(luò)上增加節(jié)點.最近,Simonyan等[13]提出了一種建設(shè)性方法,通過在一個初始的淺層網(wǎng)絡(luò)上增加新的隱層來構(gòu)造深層網(wǎng)絡(luò).但是,相比于深層網(wǎng)絡(luò),淺層網(wǎng)絡(luò)的表征性更弱一些,可能容易陷入局部最優(yōu)點,因而淺層網(wǎng)絡(luò)可能會提供一個差的網(wǎng)絡(luò)初始化模型.
相比于建設(shè)性方法,破壞性方法從一個大的初始網(wǎng)絡(luò)開始訓(xùn)練,其目標是在保證網(wǎng)絡(luò)輸出盡可能不變的前提下減小網(wǎng)絡(luò)模型規(guī)模.這一想法[14]由LeCun等提出,基于這一想法的主要方法[15-17]包括分析單個參數(shù)或者神經(jīng)元的特性,然后移除那些對網(wǎng)絡(luò)輸出影響較小的參數(shù)或者神經(jīng)元.然而,分析一個大網(wǎng)絡(luò)模型中參數(shù)或者神經(jīng)元特性具有極高的計算代價.
其它破壞性方法[18,19]通過模擬一個已經(jīng)訓(xùn)練好的深層網(wǎng)絡(luò)的輸出來訓(xùn)練一個淺層或者窄網(wǎng)絡(luò),這可以在一定程度上減少初始大規(guī)模網(wǎng)絡(luò)的參數(shù)量.然而,這些方法要求我們預(yù)先訓(xùn)練好一個大規(guī)模網(wǎng)絡(luò).結(jié)合建設(shè)性方法與破壞性方法,Philipp等[20]提出一種自適應(yīng)網(wǎng)絡(luò)大小的框架以便自動確定合適的網(wǎng)絡(luò)規(guī)模,其通過在訓(xùn)練過程中連續(xù)增加新單元的同時移除作用很小的單元來實現(xiàn).
以上工作的目的是尋找更加緊密的網(wǎng)絡(luò)結(jié)構(gòu).本文提出一種自動學(xué)習(xí)LSTM每個隱層中記憶單元數(shù)量以及投影層節(jié)點數(shù)的方法.特別是,我們的方法不需要一個已經(jīng)預(yù)先訓(xùn)練好的網(wǎng)絡(luò).而是在訓(xùn)練過程中,為隱層中的每個記憶單元或者節(jié)點學(xué)習(xí)移動門(moving gate)信息,每個移動門的值顯示相對應(yīng)記憶單元或者節(jié)點對于網(wǎng)絡(luò)的重要性,當該值小于一個預(yù)設(shè)的門限值(例如0.42)時,我們將忽略相對應(yīng)記憶單元或者節(jié)點的影響,并且從網(wǎng)絡(luò)中移除該記憶單元或者節(jié)點.值得注意的是,我們在訓(xùn)練每過完一遍數(shù)據(jù)后移除不重要的記憶單元或者投影層節(jié)點,這充分考慮整個數(shù)據(jù)集的特性,降低錯誤裁剪的可能性.而不是在完全訓(xùn)練好一個網(wǎng)絡(luò)之后進行裁剪與再訓(xùn)練,這減少了訓(xùn)練過程所需消耗的時間.該方法的主要優(yōu)點是不用謹慎地設(shè)置LSTM中每個隱層的記憶單元數(shù)量.利用我們提出的方法,只需要從一個合適的大規(guī)模網(wǎng)絡(luò)開始訓(xùn)練,在訓(xùn)練過程中可以逐漸學(xué)習(xí)到一個緊密的網(wǎng)絡(luò)結(jié)構(gòu),從而減少模型參數(shù)量以及計算復(fù)雜度.
傳統(tǒng)的遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)可以利用上下文信息對當前時刻的輸入進行建模,并得到相應(yīng)的輸出.然而在實際中發(fā)現(xiàn),RNN很難學(xué)習(xí)到長時依賴信息,這一現(xiàn)象被稱為梯度消失(vanishing gradient)問題.LSTM是目前為止解決這一問題最成功的方法[21,22].
圖1 LSTM記憶單元
如圖1所示為一個LSTM單元,該單元在扮演傳統(tǒng)RNN中隱層神經(jīng)元的角色.LSTM具有一個記憶單元(memory cell),用來存儲信息,與之相連的常數(shù)錯誤傳送結(jié)構(gòu)(Constant Error Carousel,CEC)控制錯誤信號在時域后向傳播(Back-Propagation Through Time,BPTT)時無衰減傳播.每個LSTM單元具有三個門:輸入門(input gate)、遺忘門(forget gate)與輸出門(output gate),通過輸入門與輸出門控制信息的流入與流出,通過遺忘門決定是否重置網(wǎng)絡(luò),這些門行為通過前一層的輸出、上一時刻的隱層輸出以及記憶單元信息共同控制.記憶單元與三個門之間的連接稱為窺孔連接(peephole connection),如圖虛線所示.
下面以單層單向的LSTM為例,對其計算機制進行簡要說明.LSTM網(wǎng)絡(luò)映射一個輸入序列x=(x1,x2,…,xT)到一個輸出序列y=(y1,y2,…,yT),利用下列等式計算從t=1時刻到T時刻網(wǎng)絡(luò)單元激活值:
表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層記憶單元、輸入門、遺忘門和輸出門的權(quán)值矩陣分別為Wcx,Wix,Wfx,Wox,上一時刻投影層[6]的輸出到這些單元的權(quán)值矩陣分別為Wcr,Wir,Wfr,Wor,這些單元的偏置向量分別為bc,bi,bf,bo.而Wic,Wfc,Woc為peephole權(quán)值連接矩陣,不過值得注意的是它們是對角矩陣.σ是激活函數(shù),i,f,o與c分別表示輸入門、遺忘門、輸出門以及記憶單元,m與r分別是隱層輸出和投影層輸出,Wrm是投影層轉(zhuǎn)換矩陣.⊙表示矢量間逐元素相乘,g與f都是激活函數(shù),通常是tanh,φ是網(wǎng)絡(luò)輸出層激活函數(shù),通常是softmax.
對于LSTM來說,每個記憶單元或者節(jié)點對網(wǎng)絡(luò)模型的重要性有所不同,為了對網(wǎng)絡(luò)模型規(guī)模進行壓縮,我們考慮將對網(wǎng)絡(luò)輸出貢獻較小的記憶單元或者節(jié)點移除,包括移除相對應(yīng)的權(quán)值連接.為了評價每個記憶單元的重要性,我們提出了移動門,移動門定義如下:
mui=α·mii+β·it,mii=mui
(9)
muf=α·mif+β·ft,mif=muf
(10)
muo=α·mio+β·ot,mio=muo
(11)
其中,mui,muf,muo分別表示輸入門、遺忘門以及輸出門對應(yīng)的移動門更新信息,mii,mif,mio表示移動門初始化信息,初始化值設(shè)置為0,α與β都是超參數(shù),在我們的實驗中,分別設(shè)置為0.9與0.1.
表2 遺忘門WER
如果同時利用兩個或者三個門來評價記憶單元的重要性,將結(jié)合公式(9,10,11),例如利用輸入門與輸出門時,對應(yīng)的移動門更新公式如下:
muio=α·miio+β·(it+ot)/2,miio=muio
(12)
此外,為了評價投影層節(jié)點的重要性,類似評價記憶單元,引入對應(yīng)的移動門信息mur,定義如下:
mur=α·mir+β·|rt|,mir=mur
(13)
移動門數(shù)值mu的大小表示對應(yīng)的記憶單元或者節(jié)點的重要性. 當移動門數(shù)值小于一個給定的門限值時, 該移動門對應(yīng)的記憶單元或者節(jié)點對網(wǎng)絡(luò)輸出的貢獻將被忽略, 且該記憶單元或者節(jié)點將從網(wǎng)絡(luò)中移除. 在訓(xùn)練過程中, 重復(fù)這一步驟將實現(xiàn)每個隱層中記憶單元數(shù)量與投影層節(jié)點數(shù)的自動學(xué)習(xí).
在網(wǎng)絡(luò)訓(xùn)練時,前向過程中,我們計算網(wǎng)絡(luò)輸出以及按照公式(9,10,11,12,13)更新移動門信息.例如,當我們利用輸入門的移動門信息來評價記憶單元的重要性時,前向過程中,每一時刻計算得到it,就用利用公式(9)來更新對應(yīng)的mui.當訓(xùn)練過完一遍數(shù)據(jù)后,此時若mui小于給定的門限,將移除對應(yīng)的記憶單元以及對應(yīng)的權(quán)值連接.而在每遍數(shù)據(jù)訓(xùn)練結(jié)束之前,只更新模型參數(shù)以及移動門信息,不進行記憶單元或者投影層節(jié)點剪枝.
在我們的實驗中使用的是Switchboard數(shù)據(jù)集, 包括309小時的數(shù)據(jù).按照Kaldi[23]的設(shè)置, 將整個訓(xùn)練集劃分為訓(xùn)練集與驗證集. 以詞錯誤率(Word Error Rate, WER)作為模型性能評價指標, 測試數(shù)據(jù)是標準的NIST 2000 Hub5e00測試集中的Switchboard部分, 其中包括1831個句子. 用于訓(xùn)練LSTM網(wǎng)絡(luò)模型的狀態(tài)對齊由混合高斯模型與隱馬爾可夫模型(Gaussian Mixture Model Hidden Markov Model, GMM-HMM)產(chǎn)生[3-5]. 在解碼過程中, 使用的三階語言模型(Language Model, LM)是由Switchboard數(shù)據(jù)中300萬個單詞以及Fisher數(shù)據(jù)第一部分中的1100萬個單詞生成.
表3 移動門性能
關(guān)于基線系統(tǒng),我們使用隨機梯度下降(Stochastic Gradient Descent,SGD)算法來訓(xùn)練,30句話并行訓(xùn)練.基線網(wǎng)絡(luò)結(jié)構(gòu)包括3個LSTM層、1個全連接層以及1個softmax輸出層,每個LSTM層包括1024個記憶單元,每個LSTM層對應(yīng)的投影層[6]節(jié)點數(shù)為512,記為3lstm1024r512,這是一種在語音識別任務(wù)中常用的LSTM結(jié)構(gòu).網(wǎng)絡(luò)輸入的語音幀長為25ms,幀移為10ms,提取的特征為36維filter-bank (FBank)特征.LSTM網(wǎng)絡(luò)的輸入為108維Filter-Bank(FBank)特征,包括一階差分與二階差分.LSTM網(wǎng)絡(luò)隨機初始化,在訓(xùn)練過程中使用小批量隨機梯度下降法來優(yōu)化幀級交叉熵(Cross Entropy,CE)準則.基線結(jié)果如表1所示,表中基線分別表示論文[4]中實驗結(jié)果與我們基于Kaldi平臺搭建的基線系統(tǒng).
在所有的實驗設(shè)置中,LSTM隨機初始化,然后使用后向傳播(Back Propagation, BP)算法來訓(xùn)練.在網(wǎng)絡(luò)訓(xùn)練過程中,引入移動門來學(xué)習(xí)每個隱層中記憶單元的數(shù)量以及投影層節(jié)點個數(shù).
首先,為了驗證方法的可行性,在訓(xùn)練過程中,我們保持給定的門限不變.例如,利用遺忘門的移動門信息時,我們選取設(shè)定的門限為0.42.在每過完一遍數(shù)據(jù)后,此時若記憶單元對應(yīng)的移動門信息小于給定的門限,將對該記憶單元進行剪枝,實驗結(jié)果如表1所示.表1中的移動門表示分別依據(jù)LSTM中不同門的移動門信息來進行記憶單元的剪枝,例如i表示依據(jù)輸入門的移動門信息來剪枝,而i,o表示依據(jù)輸入門以及輸出門的信息來進行剪枝;網(wǎng)絡(luò)結(jié)構(gòu)表示LSTM訓(xùn)練結(jié)束時最終學(xué)習(xí)到的每個隱層的記憶單元數(shù)量,比如3lstm[874-856-575]r512表示LSTM中3個隱層的記憶單元數(shù)目分別為874,856,575,由于此處沒有對投影層進行節(jié)點剪枝,每個投影層的節(jié)點數(shù)均為512.此外,為了對比依據(jù)不同移動門信息進行剪枝的性能表現(xiàn),我們通過適當調(diào)整對應(yīng)的門限,以便最終學(xué)習(xí)到的網(wǎng)絡(luò)結(jié)構(gòu)擁有幾乎相同的記憶單元數(shù)量.
從表1中的實驗結(jié)果看,依據(jù)輸入門或者遺忘門的移動門信息來進行剪枝,可以有效的學(xué)習(xí)更加緊密的網(wǎng)絡(luò)結(jié)構(gòu),而且基本沒有帶來語音識別性能損失.此外,對比分別依據(jù)輸入門、遺忘門與輸出門來進行剪枝的識別結(jié)果,可以發(fā)現(xiàn),依據(jù)遺忘門的信息有利于保證語音識別率,其次是輸入門,最后才是輸出門,這顯示LSTM三個門中遺忘門最重要[24],其次是輸入門,相比于遺忘門與輸入門,輸出門的重要性更低一些.
為了更加有效的進行記憶單元的剪枝,在網(wǎng)絡(luò)訓(xùn)練過程中,由零門限開始逐漸增加門限直至給定門限為止.例如,我們利用遺忘門的移動門信息時,初始門限為0,訓(xùn)練每過完一遍數(shù)據(jù)后門限增大0.084,當增大到預(yù)設(shè)門限0.42后,保持門限值不變.這樣便于逐步剪枝,移除對網(wǎng)絡(luò)輸出貢獻可忽略的記憶單元,避免一次裁剪掉大量的記憶單元造成網(wǎng)絡(luò)訓(xùn)練不穩(wěn)定,有利于在訓(xùn)練中得到更加合理的網(wǎng)絡(luò)結(jié)構(gòu).從表1的實驗結(jié)果看,依據(jù)遺忘門可以更加有效的確保語音識別率,此處就通過遺忘門的移動門信息來進行記憶單元的裁剪,相應(yīng)的實驗結(jié)果如表2所示.
從表2中實驗結(jié)果看,單獨依據(jù)遺忘門的移動門信息,總共可以移除40.5%的記憶單元,且沒有帶來性能損失,反而有一些性能提升.依據(jù)輸入門與遺忘門,移除了43.3%的記憶單元,僅僅帶了相對1.4%的性能下降.此外,依據(jù)輸入門、遺忘門與輸出門,移除了46.5%的記憶單元,性能下降僅0.7%.這表明了在訓(xùn)練過程中通過移動門信息來進行記憶單元數(shù)目的學(xué)習(xí)是有效的,不僅可以優(yōu)化網(wǎng)絡(luò)模型規(guī)模,而且有效地保證了語音識別性能.
為了進一步優(yōu)化網(wǎng)絡(luò)規(guī)模,在對每個隱層記憶單元剪枝的基礎(chǔ)上,再對投影層節(jié)點進行剪枝,類似評價記憶單元的重要性,采用公式(12)來評價投影層每個節(jié)點的重要性,移除對網(wǎng)絡(luò)輸出貢獻較小的節(jié)點.實驗結(jié)果如表3所示,其中f_fixed表示依據(jù)遺忘門來剪枝,前面訓(xùn)練過程中裁剪掉的記憶單元或者節(jié)點將被直接移除,不參與后續(xù)訓(xùn)練過程;f_dynamic表示依據(jù)遺忘門來剪枝,但當前面訓(xùn)練過程中剪掉的記憶單元或者節(jié)點的移動門信息在后續(xù)訓(xùn)練過程中大于給定門限時,將被激活且重新使用;f_init表示依據(jù)f_dynamic最終訓(xùn)練得到的網(wǎng)絡(luò)結(jié)構(gòu)來隨機初始化一個網(wǎng)絡(luò),然后訓(xùn)練;網(wǎng)絡(luò)結(jié)構(gòu)c1024r512表示該隱層中記憶單元數(shù)目為1024,對應(yīng)的投影層節(jié)點個數(shù)為512;參數(shù)量表示網(wǎng)絡(luò)中權(quán)值矩陣的參數(shù)個數(shù);乘法數(shù)表示網(wǎng)絡(luò)處理一個輸入幀所需的浮點數(shù)乘法次數(shù);訓(xùn)練時間表示每過一遍訓(xùn)練數(shù)據(jù)所需消耗的時間.
從表3中結(jié)果,f_dynamic表明我們提出的移動門不僅可以移除41.3%的模型參數(shù),而且相對應(yīng)的減少了41.3%的浮點數(shù)乘法計算次數(shù).更重要的是,沒有造成任何識別性能損失,反而帶來一些性能提升,而且訓(xùn)練時間僅僅多消耗了11.1%.對比f_fixed與f_dynamic的結(jié)果,在最終訓(xùn)練得到網(wǎng)絡(luò)模型參數(shù)相當?shù)那疤嵯?,動態(tài)(f_dynamic)剪枝更加有利于保證語音識別性能無損,這主要因為訓(xùn)練過程中降低了錯誤剪枝的概率.為了驗證我們提出的方法可以得到更加合理的網(wǎng)絡(luò)結(jié)構(gòu),我們按照f_dynamic最終訓(xùn)練得到的模型,與基線一樣隨機初始化網(wǎng)絡(luò),再進行SGD訓(xùn)練,得到f_init,實驗結(jié)果表明我們提出的移動門可以得到更好的識別性能,帶來相對2.1%的性能提升.
本文提出一種基于移動門的方法來自動學(xué)習(xí)長短時記憶網(wǎng)絡(luò)中記憶單元數(shù)量以及投影層節(jié)點數(shù).此方法移除了大量的記憶單元以及投影層節(jié)點,壓縮了網(wǎng)絡(luò)規(guī)模,減少了浮點數(shù)乘法計算次數(shù),同時保證了網(wǎng)絡(luò)的性能基本不損失.這表明利用該方法來訓(xùn)練長短時記憶網(wǎng)絡(luò)可以得到更加合理且緊密的網(wǎng)絡(luò)結(jié)構(gòu).實驗結(jié)果表明,我們提出的方法在保證性能無損的情況下移除了超過40%的參數(shù)量.在未來的工作中,我們計劃將提出的網(wǎng)絡(luò)模型壓縮方法應(yīng)用于卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN).