語音識別學習日誌 2018-7-18 語音識別基礎知識準備(4)[Baun-Welch算法]

2018-7-18

HMM模型參數求解是HMM模型使用中的最複雜的一個問題。

HMM模型參數求解概述

HMM模型參數求解根據已知的條件可以分爲兩種情況。

第一種情況較爲簡單,就是我們已知D個長度爲T的觀測序列和對應的隱藏狀態序列,即\left \{{(O_1,I_1),(O_2,I_2),...(O_D,I_D)} \right \}是已知的,此時我們可以很容易的用最大似然來求解模型參數。

 假設樣本從隱藏狀態q_i轉移到q_i的頻率計數是A_i_j,那麼狀態轉移矩陣求得爲:

                                                        \small A = \Big[a_{ij}\Big], \; a_{ij} = \frac{A_{ij}}{\sum\limits_{s=1}^{N}A_{is}}

    假設樣本隱藏狀態爲q_j且觀測狀態爲v_k的頻率計數是B_j_k,那麼觀測狀態概率矩陣爲:

                                                        \small B= \Big[b_{j}(k)\Big], \;b_{j}(k) = \frac{B_{jk}}{\sum\limits_{s=1}^{M}B_{js}}

    假設所有樣本中初始隱藏狀態爲q_i的頻率計數爲C(i),那麼初始概率分佈爲:

                                                        \small \Pi = \pi(i) = \frac{C(i)}{\sum\limits_{s=1}^{N}C(s)}

     可見第一種情況下求解模型還是很簡單的。但是在很多時候,我們無法得到HMM樣本觀察序列對應的隱藏序列,只有D個長度爲T的觀測序列,即\left \{ {(O_1),(O_2),...(O_D)} \right \}是已知的,此時我們能不能求出合適的HMM模型參數呢?這就是我們的第二種情況,也是我們本文要討論的重點。它的解法最常用的是鮑姆-韋爾奇算法,其實就是基於EM算法的求解,只不過鮑姆-韋爾奇算法出現的時代,EM算法還沒有被抽象出來,所以我們本文還是說鮑姆-韋爾奇(Baun-Welch)算法。

Baun-Welch算法原理

鮑姆-韋爾奇算法原理既然使用的就是EM算法的原理,那麼我們需要在E步求出聯合分佈P(O,I|\lambda )基於條件概率P(I|O,\overline{\lambda })的期望,其中\overline{ \lambda }爲當前的模型參數,然後再M步最大化這個期望,得到更新的模型參數λ。接着不停的進行EM迭代,直到模型參數的值收斂爲止。

    首先來看看E步,當前模型參數爲\overline{ \lambda }, 聯合分佈P(O,I|\lambda )基於條件概率P(I|O,\overline{\lambda })的期望表達式爲:

                                                                      \small L(\lambda, \overline{\lambda}) = \sum\limits_{I}P(I|O,\overline{\lambda})logP(O,I|\lambda)

 

              在M步,我們極大化上式,然後得到更新後的模型參數如下:     

                                                                    \small \overline{\lambda} = arg\;\max_{\lambda}\sum\limits_{I}P(I|O,\overline{\lambda})logP(O,I|\lambda)       

             通過不斷的E步和M步的迭代,直到\small \overline{\lambda }收斂。下面我們來看看鮑姆-韋爾奇算法的推導過程。

Baun-Welch算法的推導

我們的訓練數據爲\left \{ {(O_1,I_1),(O_2,I_2),...(O_D,I_D)} \},其中任意一個觀測序列O_d=\{ {o^{(d)}_1,o^{(d)}_2,...o^{(d)}_T} \},其對應的未知的隱藏狀態序列表示爲:I_d=\{ {i^{(d)}_1,i^{(d)}_2,...i^{(d)}_T} \}.

             首先看鮑姆-韋爾奇算法的E步,我們需要先計算聯合分佈P(O,I|\lambda )的表達式如下:

                                                  \small P(O,I|\lambda) = \prod_{d=1}^D\pi_{i_1^{(d)}}b_{i_1^{(d)}}(o_1^{(d)})a_{i_1^{(d)}i_2^{(d)}}b_{i_2^{(d)}}(o_2^{(d)})...a_{i_{T-1}^{(d)}i_T^{(d)}}b_{i_T^{(d)}}(o_T^{(d)})

             我們的E步得到的期望表達式爲:

                                                    \small L(\lambda, \overline{\lambda}) = \sum\limits_{I}P(I|O,\overline{\lambda})logP(O,I|\lambda)

              在M步我們要極大化上式。由於P(I|O,\overline{\lambda})=\frac{P(I,O|\overline{\lambda})}{P(O|\overline{\lambda})},而P(O|\overline{\lambda})是常數,因此我們要極大化的式子等價於:

                                                     \small \overline{\lambda} = arg\;\max_{\lambda}\sum\limits_{I}P(O,I|\overline{\lambda})logP(O,I|\lambda)

              我們將上面P(O,I|\lambda )的表達式帶入我們的極大化式子,得到的表達式如下:

                                                     \small \overline{\lambda} = arg\;\max_{\lambda}\sum\limits_{d=1}^D\sum\limits_{I}P(O,I|\overline{\lambda})(log\pi_{i_1} + \sum\limits_{t=1}^{T-1}log\;a_{i_t}a_{i_{t+1}} + \sum\limits_{t=1}^Tb_{i_t}(o_t))

 

              我們的隱藏模型參數\lambda =(A,B,\Pi ),因此下面我們只需要對上式分別對A,B,Π求導即可得到我們更新的模型參數\overline{\lambda }.

              首先我們看看對模型參數ΠΠ的求導。由於Π只在上式中括號裏的第一部分出現,因此我們對於Π的極大化式子爲:

                                                  \small \overline{\pi_i} = arg\;\max_{\pi_{i_1}} \sum\limits_{d=1}^D\sum\limits_{I}P(O,I|\overline{\lambda})log\pi_{i_1} = arg\;\max_{\pi_{i}} \sum\limits_{d=1}^D\sum\limits_{i=1}^NP(O,i_1^{(d)} =i|\overline{\lambda})log\pi_{i}

             由於\pi_i還滿足\sum_{i=1}^{N}\pi_i=1,因此根據拉格朗日子乘法,我們得到\pi_i要極大化的拉格朗日函數爲:

                                                   \small arg\;\max_{\pi_{i}}\sum\limits_{d=1}^D\sum\limits_{i=1}^NP(O,i_1^{(d)} =i|\overline{\lambda})log\pi_{i} + \gamma(\sum\limits_{i=1}^N\pi_i -1)

             其中,\gamma爲拉格朗日系數。上式對\pi_i求偏導數並令結果爲0, 我們得到:

                                                    \small \sum\limits_{d=1}^DP(O,i_1^{(d)} =i|\overline{\lambda}) + \gamma\pi_i = 0

             令i分別等於從1到N,從上式可以得到N個式子,對這N個式子求和可得:

                                                   \small \sum\limits_{d=1}^DP(O|\overline{\lambda}) + \gamma = 0

              從上兩式消去\gamma,得到\pi_i的表達式爲:

                                               \small \pi_i =\frac{\sum\limits_{d=1}^DP(O,i_1^{(d)} =i|\overline{\lambda})}{\sum\limits_{d=1}^DP(O|\overline{\lambda})} = \frac{\sum\limits_{d=1}^DP(O,i_1^{(d)} =i|\overline{\lambda})}{DP(O|\overline{\lambda})} = \frac{\sum\limits_{d=1}^DP(i_1^{(d)} =i|O, \overline{\lambda})}{D} = \frac{\sum\limits_{d=1}^DP(i_1^{(d)} =i|O^{(d)}, \overline{\lambda})}{D}

             由前向概率的定義可得:

                                                   \small P(i_1^{(d)} =i|O^{(d)}, \overline{\lambda}) = \gamma_1^{(d)}(i)

             因此最終我們在M步\pi_i的迭代公式爲:

                                                   \small \pi_i = \frac{\sum\limits_{d=1}^D\gamma_1^{(d)}(i)}{D}

             現在我們來看看A的迭代公式求法。方法和Π的類似。由於A只在最大化函數式中括號裏的第二部分出現,而這部分式子可以整理爲:

                                       \small \sum\limits_{d=1}^D\sum\limits_{I}\sum\limits_{t=1}^{T-1}P(O,I|\overline{\lambda})log\;a_{i_t}a_{i_{t+1}} = \sum\limits_{d=1}^D\sum\limits_{i=1}^N\sum\limits_{j=1}^N\sum\limits_{t=1}^{T-1}P(O,i_t^{(d)} = i, i_{t+1}^{(d)} = j|\overline{\lambda})log\;a_{ij}

            由於a_i_j還滿足\sum^{N}_{j=1}a_i_j=1。和求解\pi _i類似,我們可以用拉格朗日子乘法並對a_i_j求導,並令結果爲0,可以得到a_i_j的迭代表達式爲:

                                                a_{ij} = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}P(O^{(d)}, i_t^{(d)} = i, i_{t+1}^{(d)} = j|\overline{\lambda})}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}P(O^{(d)}, i_t^{(d)} = i|\overline{\lambda})}

            給定模型λ和觀測序列O,在時刻t處於狀態q_i,且時刻t+1處於狀態q_j的概率記爲:

                                          \xi_t(i,j) = P(i_t = q_i, i_{t+1}=q_j | O,\lambda) = \frac{ P(i_t = q_i, i_{t+1}=q_j , O|\lambda)}{P(O|\lambda)}

           而P(i_t = q_i, i_{t+1}=q_j , O|\lambda)可以由前向後向概率來表示爲:

                                          P(i_t = q_i, i_{t+1}=q_j , O|\lambda) = \alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)

           從而最終我們得到\xi_t(i,j)的表達式如下:

                                          \xi_t(i,j) = \frac{\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)}{\sum\limits_{r=1}^N\sum\limits_{s=1}^N\alpha_t(r)a_{rs}b_s(o_{t+1})\beta_{t+1}(s)}

           因此可得b_{j}(o_t)表達式:

                                          b_{j}(k) = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1, o_t^{(d)}=v_k}^{T}\gamma_t^{(d)}(i)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}\gamma_t^{(d)}(i)}

            有了\pi_i, a_{ij},b_{j}(k)的迭代公式,我們就可以迭代求解HMM模型參數了。

Baun-Welch算法流程總結

            

這裏我們概括總結下鮑姆-韋爾奇算法的流程。

    輸入: D個觀測序列樣本\{(O_1), (O_2), ...(O_D)\}

    輸出:HMM模型參數

    1)隨機初始化所有的\pi_i, a_{ij},b_{j}(k)

    2) 對於每個樣本d = 1,2,...D,用前向後向算法計算\gamma_t^{(d)}(i), \xi_t^{(d)}(i,j), t =1,2...T

    3)  更新模型參數:

                                         \pi_i = \frac{\sum\limits_{d=1}^D\gamma_1^{(d)}(i)}{D}

                                          a_{ij} = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\xi_t^{(d)}(i,j)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T-1}\gamma_t^{(d)}(i)}

                                         b_{j}(k) = \frac{\sum\limits_{d=1}^D\sum\limits_{t=1, o_t^{(d)}=v_k}^{T}\gamma_t^{(d)}(i)}{\sum\limits_{d=1}^D\sum\limits_{t=1}^{T}\gamma_t^{(d)}(i)}

    4) 如果\pi_i, a_{ij},b_{j}(k)的值已經收斂,則算法結束,否則回到第2)步繼續迭代。

    以上就是Baun-Welch算法的整個過程。

          

             

               

 

               

 

 

                                               

                

發佈了118 篇原創文章 · 獲贊 35 · 訪問量 40萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章