天气预报:下雨、晴天、多云……
预测传染病的感染
语音识别
中文输入法
人口预测
生物信息学(e.g. 基因分析)
……
例:天气预报问题
一下讨论均基于一阶马尔可夫假设
例
利用Markov假设:\(P(w_n \vert w_{n-1},w_{n-2},\ldots,w_1) \approx P(w_n \vert w_{n-1})\)
以及联合概率:\(P(w_1,\ldots,w_n) = \prod_{i=1}^n P(w_i \vert w_{i-1})\)
Q1:已知今天是晴天,那么明天是晴天且后天下雨的概率是多少?
Q2:已知今天是雾天,那么后天下雨的概率是多少?
什么是隐马尔可夫模型(HMM)?
例:天气预测问题
假设一个人被关在一个房间里几天,他想知道外面的天气。
他所能知道的唯一线索:看守者是否拿着伞。
图形模型
圆圈:状态
箭头:状态之间的依赖关系
绿色圆圈:hidden states
只由前一个状态决定
未来与过去无关,只与现在有关。
紫色圆圈:observed states
观察到的状态只与隐状态有关
\(\{ S,K,\prod,A,B \}\)
\(S: \{ s_1, \ldots, s_N \}\) 隐状态的值
\(K: \{ k_1, \ldots, k_M \}\) 观察状态的值
\(\prod = \{\pi_i\}\) 初始状态概率
\(A = \{ a_{ij} \}\) 状态转移概率 \(p(x_n=S_j \vert x_{n-1}=S_i) = a_{ij}\)
\(B = \{ b_{ij} \}\) 观察状态概率(输出概率) \(p(y_n=K_j \vert x_n=S_i) = b_{ij}\)
例:之前的天气Markov过程为\(P(w_1,\ldots,w_n) = \prod_{i=1}^n P(w_i \vert w_{i-1})\),而现在实际的天气情况被隐藏了,我们只能观察到看守者是否带了雨伞
\[P(w_1,\ldots,w_n \vert u_1,\ldots,u_n) = \frac {P(u_1,\ldots,u_n \vert w_1,\ldots,w_n) P(w_1,\ldots,w_n)} {P(u_1,\ldots,u_n)}\]其中,如果看守者在第\(i\)天带了伞,那么\(u_i\)为真,如果没有则为假。
假设对于所有的\(i\),已知\(w_i\),那么对于所有的\(j \neq i\),\(u_i\)与所有的\(u_j\)和\(w_j\)无关。
\[P(u_1,\ldots,u_n \vert w_1,\ldots,w_n) = \prod_{i=1}^n P(u_i \vert w_i)\]Q3:观察变量有两种取值\(\{ C1 = \text{带伞} , C2 = \text{没带伞} \}\)
隐变量有三种状态\(\{ S_1 = \text{晴天} , S_2 = \text{雨天} ,S_1 = \text{雾天} \}\)
假设被关进房间的第一天是晴天,第二天看守者带了伞,那么第二天下雨的概率是多少?
给定初始HMM \(\mu = \{ A,B,\prod \}\),观察序列为\(O = o_1,\ldots,o_T\)
计算给定观察序列的概率\(p(O \vert \mu)\)
给定一个观察序列,计算最有可能的隐状态序列
给定一个观察序列和可能模型的集合,哪个模型与数据最接近。
\(O = o_1,\ldots,o_T\),\(\mu = \{ A,B,\prod \}\),计算\(P(O \vert \mu)\)
Solution 1
其中,\(P(O, X \vert \mu) = P(O \vert X, \mu) P(X \vert \mu)\),所以
\[P(O \vert \mu) = \sum_X P(O \vert X, \mu) P(X \vert \mu)\]其中,\(P(O \vert X, \mu) = b_{x_1 o_1} b_{x_2 o_2} \cdots b_{x_T o_T}\),\(P(X \vert \mu) = \pi_{x_1} a_{x_1 x_2} a_{x_2 x_3} \cdots a_{x_{T-1} a_T}\)
\[\boxed{ P(O \vert \mu) = \sum_{\{ x_1 \ldots x_T \}} { \pi_{x_1} b_{x_1 o_1} \prod_{t=1}^{T-1} a_{x_t x_{t+1}} b_{x_{t+1} o_{t+1}} } }\]方法1需要列出所有可能的状态序列(\(\text{长度} = T\)),需要做\(2TN^T\)次乘法(共\(N\)种可能的状态)。
Solution 2: Foward algorithm
HMM特殊的结构为动态规划提供了一种有效的解决方案——前向算法。
定义\(\quad \quad \color{green}{ \alpha_t(i) = P(o_1 \cdots o_t, x_t=i \vert \mu) }\) \(\quad \rightarrow \quad P(O \vert \mu) = \sum_{i=1}^N \alpha_T(i)\)
\[\begin{aligned} \alpha_{t+1}(j) & = P(o_1 \cdots o_{t+1}, x_{t+1}=j \vert \mu) \\ & = \sum_{i=1 \ldots N} P(o_1 \cdots o_{t}, o_{t+1}, x_t=i, x_{t+1}=j) \\ & = \sum_{i=1 \ldots N} P(o_1 \cdots o_{t}, o_{t+1}, x_{t+1}=j \vert x_t=i)P(x_t=i) \\ & = \sum_{i=1 \ldots N} P(o_1 \cdots o_{t} \vert x_t=i) P(o_{t+1}, x_{t+1}=j \vert x_t=i) P(x_t=i) \\ & = \sum_{i=1 \ldots N} P(o_1 \cdots o_{t} \vert x_t=i) P(x_{t+1}=j \vert x_t=i) P(o_{t+1} \vert x_{t+1}=j) \\ & = \sum_{i=1 \ldots N} \alpha_t(i) a_{ij} b_{j O_{t+1}} \end{aligned}\] \[\boxed { P(O \vert \mu) = \sum_{i=1}^N \alpha_T(i) }\]\(P(O \vert \mu)\):\(O(N^2 T)\)乘法
Solution 3: Backard algorithm
定义\(\quad \quad \color{green}{ \beta_t(i) = P(o_t \cdots o_T \vert x_t=i , \mu) }\) \(\quad \rightarrow \quad\boxed{ P(O \vert \mu) = \sum_{i=1}^N \pi_i \beta_1(i) }\)
\[\begin{aligned} & \beta_t(i) = \sum_{j=1 \ldots N} a_{ij} b_{i O_t} \beta_{t+1}(j) \quad , t = T,T-1,\ldots,1 \quad 1 \le i \le N \\ & \beta_{T+1}(i) = 1 \quad , \ 1 \le i \le N \end{aligned}\]总结
枚举法 \(P(O \vert \mu) = \sum_{\{ x_1,\ldots,x_T \}} {\pi_{x_1} b_{x_1 o_1} \prod_{t=1}^{T-1} a_{x_t x_{t+1}} b_{x_{t+1} o_{t+1}} }\)
前向法 \(P(O \vert \mu) = \sum_{i=1}^N \alpha_T(i)\)
后向法 \(P(O \vert \mu) = \sum_{i=1}^N \pi_i \beta_1(i)\)
Viterbi algorithm
维特比算法找到的可能是局部最优值。
定义
\[\delta_t(j) = \max_{x_1 \ldots x_{t-1}} P( x_1 \ldots x_{t-1} , o_1 \ldots o_{t-1} x_t = j , o_t )\] \[\max_x P(X \vert O) \Leftrightarrow \max_x P(X , O) \Leftrightarrow \max_j \delta_T(j)\]其中,\(\psi_{t+1}(j)\)为预测的\(t+1\)时刻隐状态,即\(\hat{X}_{t+1}\)