陳 皇,戴禮榮,張仕良,黃 俊
(中國科學技術大學 語音與語言信息處理國家工程實驗室,合肥 230022)
深度學習(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中每個隱層的記憶單元數量.利用我們提出的方法,只需要從一個合適的大規模網絡開始訓練,在訓練過程中可以逐漸學習到一個緊密的網絡結構,從而減少模型參數量以及計算復雜度.
傳統的遞歸神經網絡(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.
對于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小于給定的門限,將移除對應的記憶單元以及對應的權值連接.而在每遍數據訓練結束之前,只更新模型參數以及移動門信息,不進行記憶單元或者投影層節點剪枝.
在我們的實驗中使用的是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平臺搭建的基線系統.
在所有的實驗設置中,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%的性能提升.
本文提出一種基于移動門的方法來自動學習長短時記憶網絡中記憶單元數量以及投影層節點數.此方法移除了大量的記憶單元以及投影層節點,壓縮了網絡規模,減少了浮點數乘法計算次數,同時保證了網絡的性能基本不損失.這表明利用該方法來訓練長短時記憶網絡可以得到更加合理且緊密的網絡結構.實驗結果表明,我們提出的方法在保證性能無損的情況下移除了超過40%的參數量.在未來的工作中,我們計劃將提出的網絡模型壓縮方法應用于卷積神經網絡(Convolutional Neural Networks,CNN).