本文主要是學習筆記,一方面是為了加強理解,感覺在做筆記過程中理解起來更簡單,另一方面為了加強記憶,建立大腦關於‘隱馬爾可夫模型’的神經網路
1. 模型場景
在介紹隱馬爾可夫模型之前先來看個例子:
假設有4個盒子,每個盒子裡面都裝有紅、白兩種顏色的求,盒子裡面的紅包球數量如下:
按照下面的方式抽球,產生一個球的顏色的觀測序列:
- (1)開始,從4個盒子裡以等概率隨機選取一個盒子,從這個盒子裡隨機抽出一個球,記錄其顏色,然後放回
- (2)然後,從當前盒子隨機轉移到下一個盒子,規則是:如果當前盒子是盒子1,那麼下一個盒子一定是盒子2,如果當前盒子是盒子2或3,那麼分別以概率0.4和0.6轉移到左邊或右邊的盒子,如果當前是盒子4,那麼各以0.5的概率停留在盒子4或轉移到盒子3
- (3)確定轉移的盒子後,再從這個盒子裡隨機抽出一個球,記錄其顏色,放回
- (4)如此下去,重複進行5次,得到一個球的顏色的觀測序列:\[O = (紅,紅,白,白,紅)\]
在這個過程中,觀察者只能觀測到球的顏色的序列,觀測不到球是從哪個盒子取出的,即觀測不到盒子的序列
2. 隱馬爾可夫模型三要素
上面的例子是一個典型的隱馬爾可夫模型。有兩個隨機序列,一個是盒子的序列(狀態序列),一個是球的顏色的觀測序列,前者是隱藏的,只有後者是可觀測的。
隱馬爾可夫模型有三要素,表示為\[\lambda = (A, B, \pi)\]
注:A為狀態轉移矩陣,B為觀測概率分佈矩陣,\(\pi 為初始狀態概率向量\)
通過上面的例子,來分別計算下A,B和\(\pi\)的值
狀態轉移概率分佈矩陣:
\[ A =
\left[
\begin{matrix}
0 & 1 & 0 & 0 \\
0.4 & 0 & 0.4 & 0 \\
0 & 0.4 & 0 & 0.6 \\
0 & 0 & 0.5 & 0.5
\end{matrix}
\right]
\]
\(A[ij]\)表示從狀態i轉移到狀態j的概率
觀測概率分佈矩陣:
\[ B =
\left[
\begin{matrix}
0.5 & 0.5 \\
0.3 & 0.7 \\
0.6 & 0.4 \\
0.8 & 0.2
\end{matrix}
\right]
\]
\(B[i0]\)表示盒子i中取出紅球的概率,\(B[i1]\)表示盒子i中取出白球的概率
初始概率分佈:
\[\pi = (0.25,0.25,0.25,0.25)\]
3. 隱馬爾可夫模型的三個基本問題
(1) 概率計算問題
給定模型\(\lambda = (A,B,\pi)\)和觀測序列\(O = (o_1,o_2,...,0_T)\),計算在模型\(\lambda\)下觀測模型出現的概率\(P(O|\lambda)\)
(2) 學習問題
已知觀測序列\(O = (o_1,o_2,...,0_T)\),估計模型\(\lambda = (A,B,\pi)\)引數,使得在該模型下觀測序列概率\(P(O|\lambda)\)最大,用極大似然估計的方法估計引數
(3) 預測問題,也稱為解碼問題
已知模型\(\lambda = (A,B,\pi)\)和觀測序列\(O = (o_1,o_2,...,0_T)\),求對給定觀測序列條件概率\(P(O|\lambda)\)最大的狀態序列\(I = (i_1,i_2,...,i_T)\)。即給定觀測序列,求最有可能的對應的狀態序列
下面分別介紹針對不同問題的解決演算法
4. 概率計算演算法
4.1 問題描述
給定模型\(\lambda = (A,B,\pi)\)和觀測序列\(O = (o_1,o_2,...,0_T)\),計算在模型\(\lambda\)下觀測模型出現的概率\(P(O|\lambda)\)
4.2 前向演算法
(1) 計算狀態t1下觀測為紅球的情況,注:序列和矩陣索引都從1開始
第一次從盒子1選擇紅球的情況:
\[a_1(1) = \pi_1 B_1(o_1) = 0.25 * 0.5 = 0.125\]
第一次從盒子2選擇紅球的情況:
\[a_1(2) = \pi_2 B_2(o_1) = 0.25 * 0.3 = 0.075\]
第一次從盒子3選擇紅球的情況:
\[a_1(3) = \pi_3 B_3(o_1) = 0.25 * 0.6 = 0.15\]
第一次從盒子4選擇紅球的情況:
\[a_1(4) = \pi_4 B_4(o_1) = 0.25 * 0.8 = 0.20\]
(2) 計算狀態t2下觀測為紅球的情況,及第二次選擇為紅球的情況
第二次從盒子1選擇紅球的情況:
\[a_2(1) = a_1(1)A_{11}B_1(o_2) + a_1(2)A_{21}B_1(o_2) + + a_1(3)A_{31}B_1(o_2) + + a_1(4)A_{41}B_1(o_2)\]
第二次從盒子2選擇紅球的情況:
\[a_2(2) = a_1(1)A_{12}B_2(o_2) + a_1(2)A_{22}B_2(o_2) + + a_1(3)A_{32}B_2(o_2) + + a_1(4)A_{42}B_2(o_2)\]
第二次從盒子3選擇紅球的情況:
\[a_2(3) = a_1(1)A_{13}B_3(o_2) + a_1(2)A_{23}B_3(o_2) + + a_1(3)A_{33}B_3(o_2) + + a_1(4)A_{43}B_3(o_2)\]
第二次從盒子4選擇紅球的情況:
\[a_2(4) = a_1(1)A_{14}B_4(o_2) + a_1(2)A_{24}B_4(o_2) + + a_1(3)A_{34}B_4(o_2) + + a_1(4)A_{44}B_4(o_2)\]
...
通過上述規律我們得到公式:
(1) 初值
\[a_1(i) = \pi(i)B_i(o_1)\]
(2) 遞推
\[a_{t+1}(i) = [\sum_{j=1}^N a_t(j)A_{ji}]B_i(o_{t+1}) \]
(3) 終止
\[P(O|\lambda) = \sum_{i=1}^N a_T(i)\]
4.3 後向演算法
顧名思義,後向演算法就是根據t時刻的觀測序列概率算出t-1時刻觀測序列的概率
令在t時刻狀態為\(q_i\)的條件下,從t+1到T的觀測序列的概率為\(\beta_t(i)\),則\[\beta_t(i) = P(o_{t+1},o_{t+2},...,o_T|i_t=q_i,\lambda)\]
要特別注意\(\beta_t(i)\)的定義,後面才能很好的理解
(1) 對最終時刻的所有狀態\(q_i\)規定\[\beta_T(i) = 1\]
(2) \[\beta_t(i) = \sum_{j=1}^N a_{ij}b_j(0_{t+1})\beta_{t+1}(j)\]
(3) \[P(O|\lambda) = \sum_{i=1}^N\pi_ib_i(o_1)\beta_1(i)\]
5. 學習演算法
5.1 問題描述
已知觀測序列\(O = (o_1,o_2,...,0_T)\),估計模型\(\lambda = (A,B,\pi)\)引數,使得在該模型下觀測序列概率\(P(O|\lambda)\)最大,用極大似然估計的方法估計引數
隱馬爾可夫模型的學習,根據訓練資料集是包括觀測序列和對應的狀態序列還是隻有觀測序列,可以分別由監督學習與無監督學習實現
對於監督學習,由於資料集包含了觀測序列和對應的狀態序列,這樣就可以直接根據利用資料集預估模型引數
對於非監督學習,可以使用EM算對隱引數進行學習。EM演算法參考附錄
6. 預測演算法
6.1 問題描述
已知模型\(\lambda = (A,B,\pi)\)和觀測序列\(O = (o_1,o_2,...,0_T)\),求對給定觀測序列條件概率\(P(O|\lambda)\)最大的狀態序列\(I = (i_1,i_2,...,i_T)\)。即給定觀測序列,求最有可能的對應的狀態序列
6.2 維特比演算法
維特比演算法實際是用動態規劃解隱馬爾可夫模型預測問題,即用動態規劃求概率最大路徑
定義兩個變數:
\(\delta_t(i)\)表示在時刻t狀態為i的所有單個路徑中的最大概率值
\[\delta_t(i) = max P(i_t=i,i_{t-1},...,i_1,o_t,...,o_1|\lambda), i = 1,2,...,N\]
\(\psi_t(i)\)表示在時刻t狀態為i的所有單個路徑中概率最大的路徑的第t-1個節點
\[\psi_t(i) = arg max_{1<=j<=N} [\delta_{t-1}(j)a_{ji}],i = 1,2,...,N\]
(1) 初始化\[\delta_1(i) = \pi_ib_i(o_1)\]
\[\psi_1(i) = 0\]
(2) 遞推,對t=2,3,...,T
\[\delta_t(i) = max_{1<=j<=N} [\delta_{t-1}(j)a_{ji}]b_i(o_t)\]
\[\psi_t(i) = arg max_{1<=j<=N} [\delta_{t-1}(j)a_{ji}]\]
(3) 終止
\[P^* = max_{1<=i<=N}\delta_T(i)\]
\[i_T^* = arg max_{1<=i<=N} [\delta_T(i)]\]
7. 附:EM演算法
7.1 EM演算法定義
輸入:觀測變數資料X,隱變數資料Z,聯合分佈\(P(X,Z|\theta)\),也稱為完全資料,這樣更好理解點
輸出:模型引數\(\theta\)
(1)選擇初始模型引數\(\theta^{(0)}\),開始迭代
(2)E步:記\(\theta^{i}\)為第i次迭代引數\(\theta\)的估計值,計算在第i次迭代的期望\[Q(\theta,\theta^{(i)}) = E(logP(x,z|\theta)|x,\theta^{(i)}))=\int_zlogp(x,z|\theta)p(z|\theta^{(i)})\]
(3)M步:求使\(\theta^{(i+1)} = Q(\theta,\theta^{(i)})的最大值\)
(4)重複第(2)步和第(3)步
7.2 EM演算法幾點說明
(1)引數的初值可以任意選擇,但需注意EM演算法對初始值是敏感的
(2)E步求\(Q(\theta,\theta^{(i)})\),Q函式中的Z是為隱變數,X是觀測資料,\(Q(\theta,\theta^{(i)})\)中的第一個變元表示要極大化的引數,第二個變元表示引數的當前估計值,每次迭代實際在求Q的極大值
(3)給出停止迭代的條件,一般是對較小的正數\(\xi_i,\xi_2\),若滿足\(||\theta^{(i+1)} - \theta^{(i)} < \xi_i||或||Q(\theta^{(i+1)},\theta^{(i)})-Q(\theta^{(i)},\theta^{(i)})|| < \xi_2\)
7.3 EM演算法推導
\[L(\theta)= argmaxlogP(x|\theta) = argmaxlog\int_zp(x,z|\theta)dz\]
\[L(\theta) = argmaxlog\int_z\frac{p(x,z|\theta)}{p(z|\theta^{(i)})}p(z|\theta^{(i)})dz\]
由於log函式為凹函式,則\[L(\theta) \geq \int_zlog\frac{p(x,z|\theta)}{p(z|\theta^{(i)})}p(z|\theta^{(i)})dz\]
\[L(\theta) \geq \int_zlogp(x,z|\theta)p(z|\theta^{(i)})dz - \int_zlog(p(z|\theta^{(i)}))p(z|\theta^{(i)})dz\]
由於減式後面與模型引數\(\theta\)無關,\(P(z|\theta^{(i)})是已知的\),所以只需關注減式前面的式子,令\[Q(\theta,\theta^{(i)})=\int_zlogp(x,z|\theta)p(z|\theta^{(i)})\]
和演算法定義中的步驟(2)相同,將原L的優化問題轉換為求原問題下界\(Q(\theta,\theta^{(i)})\)的最大值
因此,任何可以使\(Q(\theta,\theta^{(i)})\)增大的\(\theta\)都可以使\(L(\theta)\)增大,為了使\(L(\theta)\)有儘可能的增長,選擇使\(Q(\theta,\theta^{(i)})\)達到最大,即\[\theta^{(i+1)} = argmaxQ(\theta,\theta^{(i)})\]
7.4 EM演算法收斂性
定理1:\(設P(x|\theta)為觀測資料的似然函式,\theta^{(i)}為EM演算法得到的引數估計序列,P(x|\theta^{(i)})為對應的似然函式序列,則P(x|\theta^{(i)})單調遞增\)
定理2:\(設L(\theta) = logP(x|\theta)為觀測資料的似然函式,\theta^{(i)}為EM演算法得到的引數估計序列,L(\theta^{(i)})為對應的似然函式序列\)
(1)\(如果P(x|\theta)有上界,則L(\theta^{(i)})收斂到某一值L^*\)
(2)\(在函式Q(\theta,\theta^{(i)})與L(\theta)滿足一定條件下,由EM演算法得到的引數估計序列\theta^{(i)}的收斂值\theta^*是L(\theta)的穩定值\)
以上為EM演算法的'官方'說明,若不理解可以參考部落格https://www.jianshu.com/p/1121509ac1dc
最後針對隱馬爾可夫模型丟擲丟擲兩個問題:
(1) 如何對中文分詞問題用隱馬爾可夫模型進行建模和訓練?
(2) 最大熵馬爾可夫模型為什麼會產生標註偏置問題?如何解決?
參考資料:
李航老師的《統計學習方法》