劉娟宏 胡 彧 黃鶴宇
(太原理工大學物理與光電工程學院 山西 晉中 030600)
隨著深度學習(Deep Learning,DL)的發展,淺層的隱馬爾科夫-高斯混合模型(Hidden Markov Model-Gaussian Mixture Model,HMM-GMM)無法很好地處理海量的語音數據,性能受到顯著影響,識別精度已經不能滿足人們的要求[1]。深度神經網絡(Deep Neural Networks,DNN)[2]和HMM結合形成DNN-HMM,能夠進一步加強語音幀與幀之間的聯系,在識別過程中取得不錯的效果。但是DNN受限于網絡層數,過多的網絡層數反而會降低識別效果。2014年,IBM的沃森研究中心Sainath通過實驗證明,CNN相比于DNN具有更強的適應能力。
CNN具有數據平移不變性,能夠使網絡復雜程度降低,更便于訓練。CNN被應用于不同的語音識別任務之中。例如,Cai等[3]引入maxout激活函數;梁玉龍等[4]提出將maxout和dropout算法應用在CNN中,均取得不錯的識別效果。CNN結構的改進和優化也受到研究人員的關注[5-6]。
隨著深度卷積神經網絡(Deep Convolution Neural Network,DCNN)的發展,殘差網絡(ResNet)得以提出并在圖像處理領域獲得巨大成功[7-8]。殘差網絡結構可以避免網絡層數加深導致的梯度爆炸現象。但是在語音識別領域,對殘差網絡的研究并不多見。Graves等[9]提出CTC結構,并將其與神經網絡相結合。目前,CTC更多的被應用在RNN以及LSTM[10-12]網絡中。但是RNN的計算代價比較高,會出現難以訓練的情況。
因此,本文將CTC應用在卷積神經網絡中,構建端到端卷積神經網絡(CTC-CNN)模型。此外,引入殘差塊結構,進一步構建一種新的端到端深度卷積神經網絡(CTC-DCNN)模型。通過maxout函數對該模型進行優化,進一步提高CTC-DCNN模型在語音中的識別準確率。在TIMIT和Thchs-30數據庫下,驗證得到本文提出的CTC-DCNN模型能夠獲得更低的詞錯率。
CNN是第一個真正的多層神經網絡結構學習的算法。它由輸入層、卷積層、池化層、全連接層以及輸出層構成[13-14]。
CNN卷積層具有權值共享、局部連接的特性。假設使用Wa(i)c(j)代表輸入第a個特征面上的第i個神經元,輸出第c個特征面上的第j個神經元之間的連接權值,則有:
Wa(i)c(j)=Wa(i+1)c(j+1)=Wa(i+2)c(j+2)
(1)
CNN中,每一卷積層的輸出特征面唯一對應池化層的一個輸出特征面。常用的激活函數為Sigmoid函數。通過池化操作,進一步提取語音特征。常用的池化方法有均值池化和最大池化。經過卷積池化,得到的特征進入全連接層。全連接層內的每一個神經元都與之前層每一個神經元相連,全連接層可以接收到之前層所有的局部信息。
CNN的優勢之一在于能夠通過權值共享有效減少模型的復雜程度,使得模型更容易被訓練。
1.2.1鏈接時序分類技術
在語音識別過程中,語音在訓練時產生一個訓練的真實值,與語音模型中的預測值比對。輸出層中損失函數(Loss function)就是用來估計預測值和真實值之間的不一致的程度。損失函數代表著所建立模型的魯棒性能,損失函數越小,模型的魯棒性能越好。
CTC引入了空節點(blank),不需要完全對齊語音幀。將CTC應用在本文語音識別系統中,作為softmax層的目標函數,CTC對輸入序列和輸出的目標序列之間的似然度進行優化。
CTC采用最大似然函數,公式如下:

(2)
式中:
L(x,z)=-lnp(z|x)
(3)
設:

(4)
因此,可以定義CTC損失函數為:

(5)
式中:p(z|x)代表給定輸入x,輸出序列z的概率;s為訓練集。當給定輸入之后,CTC的作用就是從中找到概率最大的輸出序列。
1.2.2CTC-CNN模型
端到端結構,本質上對語音序列進行分類。CTC作為端到端結構的一種方法,可以解決語音在識別過程中序列不對齊的情況。
圖1為CTC-CNN模型結構圖。輸入特征通過卷積層提取語音特征;池化層均采用最大池化的方法;Softmax層采用CTC損失函數。

圖1 CTC-CNN模型
CNN的卷積層和池化層交替連接,容易導致訓練規模較大,不能夠進行較深層的神經網絡訓練。而且卷積層和全連接層均有卷積結構,因此這兩層的激活函數直接決定了整個CNN網絡的性能。目前,卷積層常用Sigmoid激活函數,全連接層采用ReLU激活函數。但是,Sigmoid收斂速度不夠快,存在梯度消失的現象以及過擬合的現象。ReLU函數會使某些參數得不到激活,產生死機現象。因此,本文提出將殘差結構引入前文構建的CTC-CNN中,設計一種新的6層的CTC-DCNN模型,并通過maxout進行優化,改善模型中的梯度消失現象,提高識別準確率。
本文提出了一個新的6層的CTC-DCNN模型作為語音識別系統的聲學模型,如圖2所示。

圖2 CTC-DCNN模型
2.2.1maxout激活函數
maxout是一種簡單的前饋神經結構,采用的是maxout激活函數,它是一種非線性變換函數:
(6)

(7)
式中:tT是輸入的特征向量;W…im是一個關于輸入和輸出節點的三維矩陣;bim是偏置量。
(8)
式(8)為maxout神經元的梯度。maxout函數具有很強的擬合能力,當一個神經元得到它的若干個激活量時,maxout函數下取其中最大輸出值的激活量為1,其余設置為0,也就是說,maxout給了一個恒定的梯度。
maxout函數不僅能夠學習到隱藏單元彼此之間的相關性,還能夠學習到隱藏單元內的激活函數。此外,在局部域內,maxout函數幾乎都是線性的,還具有良好的魯棒性。因此,將maxout應用在CNN整個神經網絡中作為激活函數,可以有效改善神經網絡中存在的梯度消失現象,從而提高語音的識別效果。
2.2.2maxout優化殘差結構
殘差塊結構中,通過shortcut連接,能夠將原始的輸入值直接傳輸到后面的層,減少過深的卷積層數帶來的訓練誤差。殘差塊中,通常采用的激活函數是ReLU函數,本文提出通過maxout函數優化殘差網絡中,改善原本激活函數可能存在的死機現象,具體改進結構如圖3所示。

圖3 maxout優化殘差結構塊
其中:X是a[l-1]層的輸入,經過卷積和激活函數后輸出特征進入a[l]層。這些層的表示如下:
z[l]=W[l]a[l-1]+b[l]
(9)
a[l]=f(z[l])
(10)
z[l+1]=W[l+1]a[l]+b[l+1]
(11)
a[l+1]=f(z[l+1]+a[l-1])
(12)
式中:z[l]、z[l+1]為a[l-1]層和a[l]分別經過卷積加權的特征;W[l]、W[l+1]為該層對應的權重;b[l]、b[l+1]為偏置量;maxout函數用f(x)表示。將本層的加權和輸入激活函數,得到本層的輸出為a[l]。在殘差網絡結構中,第二個卷積層在激活函數計算的過程中,將第一層的原始輸入和本層的卷積核結果作為maxout的輸入,得到a[l+1]為經過殘差處理后的特征。
殘差塊通過添加shortcut,使得輸出發生變化,再經過激活函數可以得到最終的輸出。殘差塊的存在,使得構建較深層次的卷積神經網絡成為可能。
圖4為本文提出的CTC-DCNN語音識別系統。在該模型中,DCNN采用了殘差結構,能夠減輕訓練過程中網絡層數較多引起的訓練誤差。同時,通過maxout對網絡進一步優化,改善梯度消失現象。

圖4 CTC-DCNN識別系統
本文選擇實驗仿真平臺為:VMware虛擬機+ubuntu 16.04操作系統+tensorflow+spyder3。Python版本選擇2.7和3.5.2兩個版本,滿足測試過程中對語言版本的要求。
為了驗證本文提出的新的CTC-DCNN模型的性能,在英文語料庫TIMIT和中文語料庫Thchs-30下分別進行實驗。
中文語音識別中,選取清華大學30小時中文語音庫(Thchs-30)作為語音識別的數據庫。Thchs-30數據庫中,訓練集標注為A、B、C組,每組250句語音,測試集為D組。
英文語音識別系統中,選取TIMIT數據庫。TIMIT數據庫中462人的語音作為訓練集,24人所講的192條語音作為核心測試集,各個說話人之間無語音重疊,并搭建英文語音識別系統。
在本文識別過程中,通過詞錯率WER來表征語音識別效果。
3.2.1參數設計
在中文語音識別系統中,首先對中文語音信號處理。相關參數為:語音信號經過預處理和分幀加窗操作,設定幀長為20,幀移為10,幀長不足20的在其后補0。窗函數為漢明窗。進行MFCC特征提取,得到39維語音特征。
本文的聲學模型采用CTC-DCNN網絡。具體結構為:DCNN采用6層的卷積層后連接池化層,再連接2層的全連接層,最后輸出。首先對中文語音信號和特征進行降維,1×1的卷積層,卷積核大小為128,然后經過激活后輸入3×3的卷積層,卷積核數目為128。C3層的參數設置為:卷積核大小為1×1,卷積器個數為256,步進設置為1×1。C4層的參數設置為:卷積核大小為3×3,卷積器個數為256,步進設置為1×1。C5層的參數設置為:卷積核大小為1×1,卷積器個數為512。C6層的參數設置為:卷積核大小為3×3,卷積器個數為512,步進設置為1×1。之后輸入池化層,池化層采用3×3的最大池化方法。池化之后連接全連接層,為2層,每層有1 024個節點。輸出層為CTC損失函數。
本文選擇參照的中文語音識別系統采用卷積神經網絡聲學模型,結構為:2層卷積層后連接池化層,得到的特征經過2層全連接層進入輸出層。CNN中,第一層卷積核大小為10×10,步進為1×1。第二層為4×3,卷積核數目為256,步進為1×1。卷積層后連接池化層,采用3×3的最大池化的方法。全連接層設置2層,節點數為1 024個。
本文選擇的語言模型為N-gram模型。初始學習速率learning rate=0.001,迭代次數設定為16。
3.2.2識別結果
表1為不同聲學模型下中文語音識別系統錯誤率。可以看出,相同的迭代次數下,CTC-DCNN模型的識別效果要優于CTC-CNN模型和CNN模型。迭代次數為16次時,本文提出的maxout優化后的CTC-DCNN模型的詞錯率為20.1%,相比于未優化的CTC-DCNN降低了0.7%,比CTC-CNN模型降低3.5%。同時,隨著迭代次數的增加,發現語音識別詞錯率隨之降低。實驗結果表明,本文提出的CTC-DCNN模型魯棒性更好。其中:maxout有效緩解了深度卷積神經網絡訓練過程中存在的梯度消失現象;CTC結構加強了建模過程中語音分布關系,更接近真實情況下的語音識別過程,從而提高語音識別準確率。

表1 中文語音識別結果 %
3.3.1參數設計
在英文語音識別系統中,將40維的梅爾域濾波帶系數作為語音特征輸入,同時選取上下文相關的5幀,構成11幀長時串聯特征。
選擇CNN作為聲學模型,其結構參數為:一層卷積層后連接池化層,全連接層最后輸出。其中,卷積層卷積核大小為9×9,數目為256。池化層采用最大池化方法,全連接層節點個數為1 024。輸出層為softmax層。
3.3.2識別結果
表2為不同聲學模型下英文語音識別結果。可以看出,本文提出的CTC-DCNN模型相比其他聲學模型,詞錯率最低,為17.4%。相比于CNN和CTC-CNN模型,準確率提高了6.3%和2.8%。因此,CTC-DCNN模型能夠提高語音識別效果。

表2 英文語音識別結果 %
對比表1和表2,CTC-DCNN模型不僅在中文語音識別過程中表現良好,在英文語音識別中也有不錯的表現。這是因為CNN結構在處理語音信號的過程中,能夠克服語音的多變性,將語音信號的時頻域當做圖像進行處理,有效提高語音識別效果。本文提出的CTC-DCNN模型,兼具CNN和CTC的優勢,在不同語言的語音識別過程中,詞錯率均有所降低。
在Thchs-30中文語音庫下,本文將CTC-CNN模型和CTC-DCNN模型在不同的迭代次數下的語音識別結果進行了對比,如圖5所示。

圖5 不同迭代次數下語音識別結果
本文提出了一種新的CTC-DCNN模型。在語音識別過程中,通過端到端和卷積神經網絡構建CTC-CNN模型,并引入殘差結構,設計深層的CTC-DCNN模型,通過maxout激活函數對模型進行優化。分別在TIMIT和Thchs-30數據庫下進行實驗,結果表明本文提出的CTC-DCNN模型能夠有效提高語音識別準確率。