語音學習筆記10------如何利用Deep CNN大幅提升識別準確率?

塵封的記憶0發表於2017-03-14

近日,百度將 Deep CNN 應用於語音識別研究,使用了 VGGNet ,以及包含 Residual 連線的深層 CNN 等結構,並將 LSTM 和 CTC 的端對端語音識別技術相結合,使得識別錯誤率相對下降了 10% (原錯誤率的 90%)以上。

  

  機器之心對百度語音技術部識別技術負責人,同時也是 Deep Speech 中文研發負責人李先剛博士進行了獨家專訪,李先剛博士詳細解讀了 Deep CNN 中的各項技術以及研究思路,並表示此次語音識別技術的提升將在接下來用於語音搜尋產品。而百度正在努力推進 Deep Speech 3 ,這項研究不排除將會是 Deep Speech 3 的核心組成部分。以下是採訪內容:

  機器之心:能先大體介紹一下 Deep CNN 嗎?

  李先剛:百度這次利用深層卷積神經網路技術(Deep CNN)應用於語音識別聲學建模中,將其與基於長短時記憶單元(LSTM)和連線時序分類(CTC)的端對端語音識別技術相結合,大幅度提升語音識別產品效能。該技術相較於工業界現有的 CLDNN 結構(CNN+5LSTM+DNN)的語音識別產品技術,錯誤率相對降低 10% 。該技術借鑑了影象識別在近些年的成果,以及語音與影象在利用 CNN 模型訓練的共通性,是在端對端語音識別技術的革新之後取得的新的技術突破。

  其實最早 CNN 在語音領域是有應用的,這兩年語音研究專注的主要是 RNN ,而影象領域專注的 CNN 。在語音領域的研究者把 LSTM 和 RNN 做的很好之後,發現 CNN 的發展在語音領域是可以借鑑和有所幫助的。

  比如從 ImageNet 競賽中就可以看出深層卷積神經網路方面的進展。這些網路結構有一個明顯的發展趨勢,就是越來越深的卷積神經網路層級(CNN):從最初的 8 層網路,到 19 層,22 層,乃至 152 層的網路結構。ImageNet競賽的錯誤率也從 12 年的 16.4% 逐步降到了 3.57% 。

  

  在這個背景下,深層 CNN 成為今年語音領域前沿研究中最火的東西,很多公司都在做這方面研究。而我們這次做 CNN 有個很好的點是有個 baseline ,這是基於 Deep Speech 2 端對端基礎上,進一步通過引入 CNN 來實現更好效果,這是我們的研究背景。

  在這個情況下,我們做了一些非常有意思的實驗和希望得到最好效能的工作。為什麼說最好效能呢?因為我們做的工作都是大資料,調參時有上萬小時,做產品時甚至有 10 萬小時。我們希望通過這些來驗證,Deep CNN 是真的可以發揮作用,因為你會發現,現在很多基於資料集做的演算法在大資料時可能就沒用了,但我們發現它是有用的,在端到端框架下也是有用的,這可能算是我們的一個突破點和貢獻。

  機器之心:微軟最近也公佈了一項語音識別的突破,能對比一下這兩項研究嗎?

  李先剛:微軟這次研究更加學術,是在一些標準資料庫上做的,是一個口語資料庫,叫做 switchboard ,資料庫只有 2,000 小時。這個工作是微軟研究院做的,他們的關注點是基於這樣一個資料庫最終能做到什麼樣的效能。而我們的關注點是我們的語音技術能夠深入到大家的日常應用中,去把語音識別服務做到更好,我們的資料是數萬小時。

  機器之心:這項研究涉及的過程和具體技術工作有哪些?

  李先剛:在 ImageNet 競賽得到廣泛關注的 DeepCNN 結構,包括 VGGNet ,GoogleNet 和 ResNet 等。其中 ResNet ,可以通過 Residual 連線,訓練得到一百多層的 CNN 網路,這樣的網路雖然能夠顯著提升效能,由於其無法實現實時計算,使得其難以在產品模型得到應用。但是我們可以借鑑 Residual 連線的思想,訓練一個數 10 層的包含 Residual 連線的 DeepCNN ,以用於工業產品中。

  

  

  

從上至下為 VGGNet 、GoogleNet 和 ResNet

  因此,百度做了以下的對比試驗:1)HMM 框架中基於 VGGNet 結構的聲學模型;2)在 HMM 框架中包含 Residual 連線的 CNN 網路結構的聲學模型;3)在 CTC 框架中使用純 VGGNet 實現端對端建模;4)在 CTC 框架中,在 CLDNN(CNN+5LSTM+DNN)結構中的 CNN 借鑑影象領域的研究成果,嘗試 VGGNet ,包含 Residual 連線的深層 CNN 等結構。

  我們發現,深層 CNN 結構,不僅能夠顯著提升 HMM 語音識別系統的效能,也能提升 CTC 語音識別系統的效能。僅用深層 CNN 實現端對端建模,其效能相對較差,因此將如 LSTM 或 GRU的 迴圈隱層與 CNN 結合是一個相對較好的選擇。可以通過採用 VGG 結構中的 3*3 這種小 kernel ,也可以採用 Residual 連線等方式來提升其效能,而卷積神經網路的層數、濾波器個數等都會顯著影響整個模型的建模能力,在不同規模的語音訓練資料庫上,百度需要採用不同規模的 DeepCNN 模型配置才能使得最終達到最優的效能。

  因此,我們認為:1)在模型結構中,DeepCNN 幫助模型具有很好的在時頻域上的平移不變性,從而使得模型更加魯棒(抗噪性);2)在此基礎上,DeepLSTM 則與 CTC 一起專注於序列的分類,通過 LSTM 的迴圈連線結構來整合長時的資訊。3)在 DeepCNN 研究中,其卷積結構的時間軸上的感受野,以及濾波器的個數,針對不同規模的資料庫訓練的語音識別模型的效能起到了非常重要的作用。4)為了在數萬小時的語音資料庫上訓練一個最優的模型,則需要大量的模型超參的調優工作,依託多機多 GPU 的高效能運算平臺,才得以完成工作。5)基於 DeepCNN 的端對端語音識別引擎,也在一定程度上增加了模型的計算複雜度,通過百度自研的硬體,也使得這樣的模型能夠為廣大語音識別使用者服務。

  機器之心:CNN 適用於語音識別的原理是什麼,是如何帶來效果的大幅提升的?

  李先剛:語音識別建模是需要對語音訊號和文字內容間的關係建模。通常情況下,語音識別都是基於時頻分析後的語音譜完成的,而其中語音時頻譜是具有結構特點的。要想提高語音識別率,就是需要克服語音訊號所面臨各種各樣的多樣性,包括說話人的多樣性(說話人自身、以及說話人間),環境的多樣性等。卷積神經網路,由於其區域性連線和權重共享的特點,使得其具有很好的平移不變性。將卷積神經網路的思想應用到語音識別的聲學建模中,則可以利用卷積的不變性來客服語音訊號本身的多樣性。從這個角度來看,則可以認為是將整個語音訊號分析得到的時頻譜當作一張影象一樣來處理,採用影象中廣泛應用的深層卷積網路對其進行識別。

  

Deep CNN語音識別的建模過程

  2013 年過後,語音領域開始做 RNN ,影象領域做 CNN 。卷積操作是一種相較於全連線更加通用的計算形式,在 2013 年之後有很多進展,從 ImageNet 就可以看出來,首先發現 VGG 模型很有用,這種結構使用的是 3*3 這種小 kernel ; 此外 GoogleNet 結構,裡面設計了一個 Inception 模組,也是基於 CNN 來實現的;比較有趣的是,微軟 2015 年做的殘差網路直接把十幾層一下拉到 152 層,但 100 多層在工業上肯定沒法用,因為算不過來。但這告訴大家,通過這種方式可以非常簡單直接的提升效能,也就是提出了 residual 連線。

  從這幾個方面來看,CNN 在語音領域都沒得到充分的研究,但大家能意識到這是我們可以探索的一個方向。有了這個出發點之後,我們就有好幾個點可以做,比如說 VGGNet 裡的 3*3 的 kernel 在語音領域應該怎麼做;residual 連線怎麼融合進來。我們在語音識別最早用的 CLDNN 結構是一層卷積,我把其做到 10 層,變成 VGG 結構,再加上一些殘差連線,通過做一些大量實驗模型的結構調整,最終得到效能提升。

  

語譜圖

  從另外一個角度來看,如果你把語音當成一個影象,把語音視訊訊號分析過後就是一張影象,所以影象和語音是可以相互借鑑的。

  機器之心:能否介紹一下 CTC 端對端學習?

  李先剛:在深度學習興起以前,機器感知演算法(如語音識別,說話人識別,影象識別,等)通常都會包含以下幾個部分:特徵提取及學習,模式分類等。研究者們發現,在這樣的級聯絡統裡面,特徵學習起到了非常關鍵的作用。在深度學習中,特徵學習和模式分類兩個模組則通常聯合起來優化,從而使得通常意義下,深度學習的模型至少有兩層。從而也帶來了一個新的研究趨勢:減少流水線中的模組,使用一個單獨的學習演算法來完成從任務的輸入端到輸出端的所有過程,也就是所謂的端對端學習的興起。

  端對端學習使用一個演算法將輸入和輸出聯絡了起來,通常採用的是一個深層的神經網路。端對端學習推崇更少的人工特徵設計,更少的中間單元。端對端學習的系統包括:基於 CTC 的語音識別,基於注意機制的機器翻譯,都已經在工業界得到了應用。

  機器之心:Warp-CTC 、Stanford CTC 和 TensorFlow 等在使用上有什麼明顯區別麼?

  李先剛:我對 Stanford CTC 瞭解不多,但不管是哪種,我相信都是對 CTC 這種演算法的功能實現,都是加速的問題。TensorFlow 不太一樣,它是深度學習框架,不是針對 CTC 來做,客觀來說,它的好處是方便研究者做實驗預研。但壞處是速度慢。你可以在實驗室裡很快的嘗試一個新的網路結構,做個 100 小時的實驗,但如果規模上去了,TensorFlow 是不夠的。

  機器之心:語言模型採用 n-gram models 的主要好處是什麼?

  李先剛:n 元文法技術相對較老,但它可以很好的把規模弄上去,百度是一個文字大資料公司,在這樣的背景下,你會發現基於大資料做一個很好的 n 元文法是很容易的,而且效能很好。通過這樣一個大模型,通過海量資料,加上工程師做解碼器的特別優化,使得系統在很好的實時性下的情況去達到很好的識別率。

  說到語言模型,還有一個研究比較多的是神經網路語言模型。對於神經網路語言模型,我們也希望能做到 first-pass decoding ,神經網路語言模型還有一些工程上的東西需要突破,我們都是把它放在第二遍 second-pass rescoring 上。總之,兩者相比的話,神經網路語言模型的計算量特別大,優勢是效能好。這個需要做很多工程方面的工作。

  機器之心:訓練資料裡的「模擬語音資料」和 10 萬小時的精準標註語音資料對最後效能提升的貢獻各有什麼樣的價值?如何獲取「精準標註」資料?

  李先剛:訓練模型的根本還是精確標註的資料,這是決定整個效能的基礎。一般來說可以有這樣的結論:資料增加十倍,效能提升10%,這是針對精準人工標註的資料。一般情況下,在獲取什麼樣的精確標註資料的問題上,我們也會結合主動學習的思想,去收集那些對識別率影響更加直接的資料拿來人工精標。那為什麼還要用模擬資料呢?所謂的模擬資料就是在精準標註的基礎上做些訊號變化,加一點背景噪聲、混響的衝擊響應,加上這些資料以後,會使模型能夠見過更加多樣的資料,這樣對於模型的推廣性和效能有一定程度的幫助,這算是一個保證模型具有更強能力的方法。所以,從根本上來說還是那 10 萬小時。

  機器之心:百度自主研發的硬體技術對計算效率有多少貢獻?

  李先剛:百度開源了 Warp-CTC ,CTC 演算法本質是一個前向後向演算法在裡面,要實現它的並行化還是比較難的,Warp-CTC 在這方面做的比較好。我們在做實驗時發現,有了 Warp-CTC 這樣一個高速的演算法,還有我們自己內部有一個非常高效的多機訓練的平臺。使得我們整個模型訓練的規模性比較好,當我們從一臺機器擴充套件到十臺機器,我們訓練速度上的提升基本可以接近線性。有了這樣的平臺,才能使我們的近十萬小時的模型才能做實驗。否則連實驗也做不了。

  此外,基於百度自主研發的硬體,才使得這樣的計算複雜度更好的 Deep CNN 技術得以成為線上的服務。只有這些硬體技術的不斷升級,才給了我們聲學建模研究更大的空間。

  機器之心:CNN 是目前語音領域的最新研究進展,你能介紹一下深度學習以來語音領域出現過的其他突破性研究嗎?

  李先剛:大約是在 2011、2012 年開始將深度學習用於語音研究,最早是用最簡單的前饋 DNN 模型,發現比 GMM 有 30% 的提升,大家就意思到這是一個劃時代的突破。2013 年,研究者開始嘗試做一些啟用函式(例如ReLU,Maxout),其中的 Maxout 發現對 low-resource 的任務有幫助,對真實的大資料庫不一定有顯著幫助;2013-2014 年,大家開始做 CNN ,而非深層的;2014 年開始做 RNN ,尤其是 LSTM 。2014 年底 2015 年初,Hinton 的博士後 Alex Graves ,把以前做手寫體識別的 LSTM 加 CTC 的系統應用在了語音識別領域,在 TIMIT 上做了結果。緊接著谷歌認為這個很有前途,就開始把這些技術推廣在大資料上面。LSTM 和 CTC 引入進來之後,相較於之前的 DNN ,LSTM 能夠更好的幫助模型來捕捉輸入中的重要的點,CTC 打破了隱馬爾科夫的假設,把整個模型從靜態分類變成了序列分類,這是很重要的。百度在 2015 年中期開始做,年底 LSTM 和 CTC 上線。現在的 Deep CNN 是在我們整個研究框架中把 CNN 的潛力挖掘的更徹底。其實 CNN 和 LSTM 有相通也有不一樣的地方,如果 CNN 在時間上做卷積的話,和 LSTM 有很多相似之處。而不同在於 LSTM 擅長做整個時間域資訊的整合,而 CNN 要想達到同樣效果做的配置就要更加複雜。但 CNN 有很強的平移的不變性,對於整個語音識別任務來說,要獲得更好的魯棒性,CNN 比 LSTM 做的好。

  機器之心:這次 Deep CNN 帶來的提升會應用在哪些產品中?

  李先剛:這項技術會在搜尋產品,如手機百度的語音搜尋先使用,然後再推廣到其他產品。近一年來,手機百度上的語音識別的準確率提升了 20% 以上,效果感覺完全不一樣。這次會帶來效果的再次提升。

  機器之心:你提到,現在做的技術研究都是要和產品相結合。對於整個語音識別行業來說,識別率一直在提升,但目前語音識別產品還沒有被大範圍使用,這裡的原因是識別準確度還沒有達到一個臨界點?還是說產品層面的原因?

  李先剛:有各方面的問題,首先,識別率如果從現在的 97% 達到 99% ,那肯定會不一樣。其次,產品上也有很多問題,你要做好一個輸入法,或者語音搜尋,是要把很多方面結合在一起的。像我們的語音搜尋很早也具備了語音糾錯功能,語音糾錯對整個語音輸入和搜尋非常關鍵,僅僅做好一個識別率還不錯,怎麼樣讓你的產品體驗更好,還有很多事情要做。因此,一方面是從研究的角度提高準確度,另一個是從產品角度提升使用者體驗。還有一個是使用者習慣的養成,我們發現小孩對語音輸入的接受程度很高。此外,之前百度矽谷人工智慧實驗室和史丹佛合作過一篇論文,在實驗中,相比於在手機螢幕上打字,人類能夠語音識別能更快、更準確的組織文字訊息。

  機器之心:能否介紹一下百度目前整體的語音技術研究,這次 Deep CNN 對百度語音研究有著怎樣的意義?

  李先剛:此前,百度語音每年的模型演算法都在不斷更新,從 DNN ,到區分度模型,到 CTC 模型,再到如今的 Deep CNN 。基於 LSTM-CTC 的聲學模型也於 2015 年底已經在所有語音相關產品中得到了上線。比較重點的進展如下:1)2013 年,基於美爾子帶的 CNN 模型;2)2014年,Sequence Discriminative Training(區分度模型);3)2015 年初,基於 LSTM-HMM 的語音識別 ;4)2015 年底,基於 LSTM-CTC 的端對端語音識別;5)2016 年,Deep CNN 模型。

  

百度語音識別技術每年迭代演算法模型

  在識別精度提升方面,通常在海量資料庫上穩定提升 10% 以上就可以稱作顯著進步(significant improvement),這次我們就達到了這樣一個效果。舉個例子,我們語音技術部最開始用 CTC 提升了 15% ,這次用 Deep CNN 又提升了 10% 。

  我們正在努力推進 Deep Speech 3 ,這項研究不排除將會是 Deep Speech 3 的核心組成部分。而在工程領域,我們一直在做一些語音識別應用,手機百度和輸入法要提升效能。我們希望在未來的幾年內,將語音識別的準確率在某些任務上做到 99% ,從現在來看是有希望的。同時還有一些周邊技術也在研究,包括說話人切分、遠場語音識別應用等。


不懂的可以加我的QQ群:522869126(語音訊號處理) 歡迎你

到來哦,看了博文給點腳印唄,謝謝啦~~


相關文章