天天看點

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

感想

這篇文章的署名作者尤其的多,做了很多工作,從模型設計到産品不熟,還實作了一個GPU版本的CTC,CTC可以說是這篇文章的核心部分,沒有它,就沒有端到端的訓練,作者還用到了雙向神經網絡,對GPU并行都做了相應的定制化優化,涉及的很全,算法比較實驗也很全,大多都是很人類水準比較。

介紹

數十年的手工工程領域知識已經融入到了最新的自動語音識别(automatic speech recognition,ASR)系統中,一個簡單的解決方案就是端到端的訓練ASR模型。使用深度學習的一個模型去替換以往ASR的多個子產品,端到端的訓練簡化了訓練過程,移除了工程中重采樣(bootstrapping),對齊(alignment),聚類(clustering),HMM裝置。系統建立于端到端的深度學習,我們可以用一系列的深度學習技術,像擷取大量的訓練集合(capturing large training sets),用高性能計算訓練更大的模型,有條理的探索深度學習結構的空間(the space of neural network architectures)。

貢獻

模型結構

2.

大量标記的訓練集

3.

語音識别的計算規模

模型結構

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

系統是一個循環神經網絡(RNN),輸入是一個或者多個卷積輸入層,後面接了多個循環層或者雙向循環層。然後接了一個全連接配接層,輸出為softmax層輸出。網絡使用的是CTC損失函數進行端到端的訓練,CTC直接從輸入音頻中預測符号序列。

網絡的輸入是規範化聲音片段的log能量譜,用20ms的視窗計算得到的;輸出是每個語言的字母表。在每個輸出時間步t,RNN做了一個預測,P(lt|x),lt是一個字元或者字母或者一個空白符号。在英文中,lt屬于{a,b,c…,z, 間隔(space),撇号(apostrophe),空白(blank)},我們加了間隙代表每個單詞的邊界。對于國語系統,網絡的輸出是簡體中文字元,有6000個字元,其中包括羅馬字母,。

CTC模型是用一個更大的文本集合進行訓練的,我們使用一個特别的定向搜尋(beam search)去找轉錄y,使得下式最大化:

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

Wc(y)是轉錄y中英文或者中文的數量,α控制着語言模型和CTC網絡的相對貢獻。權重β鼓勵轉錄出更多的字。這些參數是在development set集合上進行微調的。

模型訓練用的是SGD+ Nesterov momentum,mini batch設定的是512句,學習率是從[1*10^-4,6*10^-4]取得的,在每次疊代後以一個常量因子1.2退火(詳細請見論文,我隻能幫到這兒了)。Momentum設定的是0.99。如果規範的梯度(norm of the gradient)超過了400這個門檻值,我們就将其置為400(這是為了防止梯度爆炸的問題,論文算法僞代碼在下面)

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

對于英文

英文模型有2層2Dj卷積,随後接了3層無向循環層,和每層有2560個GRU cells,随後又接了一個lookahead convolution層,T的值設定為80,用BatchNorm和SortaGrad進行訓練。

組成部分的詳細細節

Batch Normalization for Deep RNNs

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

Batch normalization隻加在RNN的垂直連接配接上,對于每一個隐藏單元我們都計算了其均值和方差,在一個mini batch中。

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

上圖顯示的是有Batch normailization的深度網絡收斂的更快。有兩個訓練模型,9-7代表網絡深度為9層,其中7層位雙向循環神經網絡(vanilla bidirectional RNNs)。5-1表示網絡有5層,其中一層為雙向循環神經網絡。9-7比5-1的網絡更好。

SortaGrad

用了batch normalization(BN)後,我們發現訓練CTC時有時還是不穩定,是以,就有了sortaGrad.

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

在一個訓練epoch中,我們通過mini batch進行疊代,訓練集以mini batch中最長音頻長度的遞增順序進行訓練,我們在development set上比較WER(word error rate),所有的網絡有38M參數,随着深度的增加,隐藏層的單元數遞減,最後的兩列是我們在比較循環網絡單元的類型變了之後的結果,用的是GRU結構和BN結構,這是在development set上進行的。從結果來看,SortaGrad提高了訓練的穩定性,特别是針對BN結構的循環層。

Frequency Convolutions

時序卷積(Temporal convolution)是語音識别裡慣用的方法,這是為了針對可變長度的語音語句的時序翻譯不變性模組化。頻率的卷積是對譜的可變性模組化,因為說話人的多變性。

實驗結果表明,二維的卷積能提升在噪聲資料上提升性能。在development set上,我們用三層二維卷積達到了23.9%的錯誤率,

Lookahead Convolution and Unidirectional Models

Didirectional RNN模型很難用于線上,低延遲的場景中,因為他們不能流式轉錄過程,因為語音資料是從使用者來的,正常的前向循環比雙向模型表現效果差,是以,一些未來上下文的資訊對識别性能表現的提高是至關重要的。是以我們需要建立一個無向模型,我們提出了一個特别的層,叫做lookahead convolution。如下

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

這層通過線性的結合每個神經元第t時間步的激勵到未來(future,實在不知道怎麼翻譯通順,見諒),使得我們可以控制未來所需上下文的數量。

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

Rt是時間步t,lookahead layer是Wi,j組成的的矩陣,d是上一層的神經元的數量。我們把lookahead convolution放在所有循環層的上面。

這樣可以流化所有在lookahead convolution下面計算,以一個比較好的間隔(granularity)。

系統優化

我們的網絡有幾百萬的參數,一次訓練實驗包含幾十個單精度exaFLOPS, 我們開發了一個基于高性能計算設施的高度優化的訓練系統。即使現在訓練深度網絡都是并行的。

但是可拓展性其可拓展性常常成為瓶頸,特别的,我們專門定制了OpenMPI的All-Reduce代碼,用于多多節點的GPU的梯度求和,我們實作了一個針對GPU加速的CTC,

并且使用了定制的記憶體配置設定器(custom memory allocators)。對于每個節點,這些技術使我們維持了整體45%的理論峰值性能。

注意:exaFLOPS

exa : 用于計量機關,表示10的18次方,表示百億億次

FLOPS= FLoating-point Operations Per Second,每秒浮點運算次數(巨型計算機的計算速度機關,即1秒内浮點運算的次數)。

訓練資料

大規模深度學習系統需要大量發的标記的訓練資料,訓練我們的英文模型,我們使用了11940小時的語音資料,約800,0000句話,

中文系統用了9400小時的标記語音資料,約1100,0000句。

資料構造

部分英文和中文資料集是從未處理的資料而來,裡面有長語音片段,和一些噪聲轉錄。為了切分這些長語音片段,我們把語音和文稿對齊,對齊計算公式:

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

這本質上是一個Viterbi算法對齊,使用了用CTC進行訓練的RNN模型。CTC隻保證整個對齊,而不能保證單個的精确對齊。但是我們發現當使用雙向RNN以後,

這個方法可以精确單個對齊。

為了過濾掉錯誤的文稿轉錄片段,我們使用了一個有以下特征的分類器:CTC損失(the raw CTC cost),CTC損失被序列的長度歸一化,序列長度到文稿長度的比率,

文稿中字的數量,文稿中字元的數量。我們用衆包的方式建立這些資料集。對于英文集合,當我們通過這種方式重新得到超過50%的訓練樣例的時候,

我們發現錯誤率從17%降至5%。另外,我們還給資料集加了一些噪聲,SNR在0dB到30dB之間。

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

如上表,正常的 developments sets和有噪聲的development sets,随着不斷增加其資料集的比例的結果,結果是WER,越低越好。

模型有9層,2層2D卷積,7個循環層,有68M參數。樣本都是在完整資料集裡随機采樣,模型訓練達到20 epoch,用了early-stopping防止過拟合,

WER降了接近40%。

實驗結果

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

上圖英文語音識别系統和衆包的人類水準的性能對比,數值為WER,越低越好。

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

上圖是不同RNN結構的比較,dev set和test set都是内部的語料庫,每個模型大約有80,0000個參數。

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

上圖是國語識别系統和人類的對比,前一個100句語料,是由一個委員會的5位中國人(a committee of 5 Chinese speakers)标記的。

第二個是250句語料是由一個職業轉譯的人标記的。

部署

為了增加部署的可拓展性,我們仍然能夠保持低延遲的轉綠,我們建立了一個批量排程器(batching scheduler),叫做Batch Dispatch,去集合使用者請求的流資料,

然後再用RNN在這些bathes進行前向傳導。有了這個排程器,我們可以增加batch的大小,最終能提高效率,但同時增加了延遲。

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin論文筆記

我們的系統中間的延遲為44ms,當同時加載10個流資料時,98%的延遲為70ms(這是本人也不是很了解)。伺服器使用NVIDIA Quadro K1200 GPU對RNN進行評估,

Batch Dispatch使得在加載的batch增加時,保持了較低的延遲。

單詞

Benchmark  n 基準,參照; 标準檢查程式; 水準标; vt.  檢測(用基準問題測試);

Transcription 抄本; 抄寫; 錄音; 翻譯;

Granularity  間隔尺寸,粒度;

參考文獻

[1]. Exaflops. ​​ https://baike.baidu.com/item/exaflops/8335270?fr=aladdin​​

[2] Razvan Pascanu, Tomas Mikolov, YoshuaBengio:On the difficulty of training recurrent neural networks. ICML (3) 2013:1310-1318

[3] Dario Amodei, Rishita Anubhai, EricBattenberg, Carl Case, Jared Casper, Bryan Catanzaro, Jingdong Chen, MikeChrzanowski, Adam Coates, Greg Diamos, Erich Elsen, Jesse Engel, Linxi Fan,Christopher Fougner, Awni Y. Hannun, Billy Jun, Tony Han, Patrick LeGresley,Xiangang Li, Libby Lin, Sharan Narang, Andrew Y. Ng, Sherjil Ozair, RyanPrenger, Sheng Qian, Jonathan Raiman, Sanjeev Satheesh, David Seetapun, ShubhoSengupta, Chong Wang, Yi Wang, Zhiqian Wang, Bo Xiao, Yan Xie, Dani Yogatama,Jun Zhan, Zhenyao Zhu:

Deep Speech 2 : End-to-End SpeechRecognition in English and Mandarin. ICML 2016: 173-182