點擊上方“AI大道理”,選擇“置頂”公眾號
重磅干貨,細致入微AI大道理
——————
1HMM基礎
一模型、兩假設、三問題
1)一個模型
隨機過程:是依賴於參數的一組隨機變量的全體,參數通常是時間。隨機變量是隨機現象的數量表現,其取值隨着偶然因素的影響而改變。
例如,某商店在從時間t0到時間tK這段時間內接待顧客的人數,就是依賴於時間t的一組隨機變量,即隨機過程。
馬爾科夫過程:隨機過程的一類,系統下一時刻的狀態僅與單前狀態有關。
隱馬爾科夫模型(HMM):用來描述一個含有未知參數的馬爾科夫過程。
隱馬爾可夫模型是關於時間序列的概率模型,描述由一個隱藏的馬爾可夫鏈隨機生成不可觀測的狀態序列 (state sequence),再由各個狀態生成一個 觀測而產生觀測序列 (observation sequence)的過程,序列的每一個位置又可以看作是一個時刻。
2)兩個基本假設
齊次馬爾可夫性假設:隱藏的馬爾可夫鏈在時刻t的狀態只和t-1的狀態有關。
觀測獨立性假設:觀測只和當前時刻的狀態有關。
3)三大問題
1) 概率計算問題。即給定模型λ=(A,B,Π)λ=(A,B,Π)和觀測序列O={o1,o2,...oT}O={o1,o2,...oT},計算在模型λ下觀測序列O出現的概率P(O|λ)。這個問題的求解需要用到前向算法、后向算法和直接計算法。
2)解碼問題。即給定模型λ=(A,B,Π)和觀測序列O={o1,o2,...oT},求給定觀測序列條件下,最可能出現的對應的狀態序列,這個問題的求解需要用到基於動態規划的Viterbi算法。
3)模學習問題。即給定觀測序列O={o1,o2,...oT},估計模型λ=(A,B,Π)的參數,使該模型下觀測序列的條件概率P(O|λ)最大。這個問題的求解需要用到基於EM算法的Baum-Welch算法。
2 HMM的隱狀態
隱狀態、箱子、第K個高斯
隱藏狀態是抽象出來的概念,由於語音信號在一個長時間斷內是非平穩信號,而在一個較短的時間內則可近似看做平穩的(比如50毫秒)。平穩信號的特點在於信號的頻譜分布是穩定的,不同時間段的頻譜分布相似。隱馬爾可夫模型將一小段頻譜相似的連續信號歸為一個隱狀態。Viterbi算法對齊就是為了找到哪些幀歸於哪個隱狀態,隱馬爾可夫模型的訓練過程是最大化似然度,每一個狀態產生的數據用一個概率分布表示。只有當相似的連續信號盡可能被歸為同一個狀態,似然度才能盡可能的大
類比箱子和小球,手從哪個箱子拿的球不知道,只知道拿出來后看見的小球,問小球來自哪個箱子的可能。其中,箱子就是隱狀態,小球就是可觀測的。箱子中有不同小球的比例,或者分布,而HMM中也有隱狀態對應到特征向量的概率分布。假如箱子中小球分布符合高斯分布,假設HMM中隱狀態中特征符合高斯分布,GMM混合高斯模型就是在模擬這個分布,理解性的表達可以說模擬隱狀態中可觀測特征的比例。只不過一個箱子中三個小球比列為3:2:1,而HMM一個隱狀態中有39種特征,也是有占比。
GMM中也有隱狀態,特征向量不知道來自哪個Gaussion。K1、K2、K3組成一個GMM,K1、K2、K3類比箱子1、箱子2、箱子3,類比HMM中狀態1、狀態2、狀態3。
3 概率計算問題
前向算法、后向算法、Viterbi
概率計算問題(評估問題、序列分類問題、求可觀測問題):
即給定模型λ=(A,B,Π)λ=(A,B,Π)和觀測序列O={o1,o2,...oT}O={o1,o2,...oT},計算在模型λ下觀測序列O出現的概率P(O|λ)。
1)直接法(不用)
2)前向算法
前向算法實現:
3)后向算法
后向算法實現:
4)Viterbi算法(近似)
可以回溯到最優的狀態序列,求最優路徑的概率代替所有路徑的概率和P(O|λ)。
靈魂的拷問:這樣計算最優路徑的概率代替所有路徑概率和P(O|λ),是不是不准了呢?又為什么能代替呢?
AI大語音:在實際語音識別中,是可以代替的。因為概率的分布比較尖,也就是某個位置的概率會非常大,其他比較小,最優路徑的概率跟所有路徑的概率差不多。那條最優路徑的概率就如同戰場上的將軍、游戲里的大boss,戰力已經接近總戰力了,所有和所有路徑的概率和很接近。
既然可以近似,那兩種算法的概率應該差不多大才是。對比一下程序中前向算法和Viterbis算法求出來的概率。
靈魂的拷問:一個0.13級別、一個0.014級別的,這也叫差不大嘛?都差一個數量級了。
AI大語音:轉移矩陣、發射矩陣中的概率差別不是特別大的時候是不能用來近似的,程序中的例子不具有代表性,不是類似語音識別的例子,在大多數語音識別應用中求出來兩者的概率才會差不多,才能近似代替。
4 解碼問題
Viterbi算法、近似算法
解碼問題(對齊問題、預測問題、序列標注問題、求隱狀態問題)
即給定模型λ=(A,B,Π)和觀測序列O={o1,o2,...oT},求給定觀測序列條件下,最可能出現的對應的狀態序列,這個問題的求解需要用到基於動態規划的Viterbi算法。
Viterbi算法是最優路徑算法的一種。最優路徑算法:
窮舉法
方法:把所有可能路徑都計算一遍,最優路徑自然就出來了。
優點:必然能找到最優路徑。
缺點:計算量太大。
A*算法
方法:每一步只走最好走的路(目光短淺)
優點:計算快,而且這種貪心或者說啟發式的算法,通常情況下,效果還是不錯的。
缺點:很難找到最優解,陷入局部最優
beam search (波束搜索)
方法:每一步只走最好走的前N條路。這里的N也叫Beam Width。是A*算法的改進,當N=1時,退化為A*算法,當N=N時,退化為窮舉法。
優點:N設置良好的話效果不錯。
缺點:Beam Width越大,找到最優解的概率越大,相應的計算復雜度也越大。
1) Viterbi算法
方法:記錄每個時刻的每個可能狀態的之前最優路徑的概率,同時記錄最優路徑的前一個狀態,不斷向后迭代,找到最后一個時間點的最大概率值對應的狀態,回溯找到最優路徑。
注意:Viterbi算法前向時只是計算概率,並記住,后向回溯時才得到最優路徑。
算法實現:
2) 近似算法(不常用)
近似算法是前向計算時最大的就選了這個路徑,也就是單步最大的路徑組合成最優路徑;而Viterbi是前向只計算並記住,根據最后最大的那個概率回溯選擇路徑。
5 學習問題
Viterbi學習算法、Baum-Welch算法
學習問題(訓練問題、參數估計、求模型問題)
即給定觀測序列O={o1,o2,...oT},估計模型λ=(A,B,Π)的參數,使該模型下觀測序列的條件概率P(O|λ)最大。這個問題的求解需要用到基於EM算法的Baum-Welch學習算法和Viterbi學習算法。
1)Viterbi學習算法(硬對齊)
Viterbi算法需要先初始化一個HMM模型λ=(A,B,Π)。
在語音識別應用中由於HMM是從左到右的模型,第一個必然是狀態一,即P(q0=1)=1。所以沒有pi這個參數了。
1)Baum-Welch學習算法(軟對齊)
同樣,在語音識別應用中沒有pi。
附錄(魔鬼寫手)
——————
淺談則止,細致入微AI大道理
掃描下方“AI大道理”,選擇“關注”公眾號
歡迎加入!
▼下期預告▼AI大語音(六)——混合高斯模型(GMM)
▼往期精彩回顧▼
AI大語音(一)——語音識別基礎
AI大語音(二)——語音預處理
AI大語音(三)——傅里葉變換家族
AI大語音(四)——MFCC特征提取