如图,已知了HMM的参数 θ (π, A, B) 和观测序列 X(x1,x2,x3,…xn),寻找最佳的状态序列 Z(z1,z2,z3,…,zn)
其中:π 是初始状态概率向量, A 是状态转移矩阵, B 是观测概率矩阵
最笨的解法 :求使 likelyhood 最大的状态序列
假设每个隐状态可取 {a, b, c}, 那么状态序列的组合就有 3^n 次方种,假设其中 3 种 (只考虑 n=5 时)为:
Z1 = (a, b, b, c, a)
Z2 = (b, c, a, b, c)
Z3 = (a, a, c, b ,b)
那么计算 Zi的 likelyhood 为P(Zi):(概率值包括两部分,一部分是转移概率,一部分是观测概率)
P(Z1) = p(a) * p(b|a) * p(b | b) * p(c|b ) * p(a |c) * p( x1 | a) * p(x2|b) * p(x3 | b) *p(x4|c) *p(x5| a)
P(Z1) = p(b) * p(c|b) * p(a | c) * p(b|a ) * p(c |b) * p( x1 | b) * p(x2| c) * p(x3 | a) *p(x4| b) *p(x5| c)
P(Z1) = p(a) * p(a|a) * p(c | a) * p(b|c ) * p(b |b) * p( x1 | a) * p(x2| a) * p(x3 | c) *p(x4| b) *p(x5 | b)
由于 θ (π, A, B)都是已知的,所以上式中所有概率都可以计算出来;
我们只需要选择使 P(Zi) 最大的 Zi 就行了,但这是指数级复杂度,不可能求解出来,所以使用威特比算法
维特比算法只适用于链式结构,即当前的隐藏状态只依赖与上一时刻的隐藏状态,而不能依赖于 上两个隐藏状态或下一个隐藏状态等…
维特比算法开始前都会画一个图
图中:Zi 是隐藏状态,m 是状态的所有可能取值 类似于上文提到的{ a, b , c …}
定义:δ_k(i) 是到 第 K 时刻,状态为 i 的最佳路径的score,score值就是 likelyhood值,只不过会取 log ,将乘法变成加法, 避免计算机溢出。
我们现在要求: δ_k+1(i) = ?
如图所示:假设 绿色的点 为δ_k+1(j),那么它有可能来自 δ_k(1), δ_k(2),δ_k(3),…δ_k(m)
所以
如何计算上面的式子呢?
可以创建一个 M x N 列的表格,M表示可能的状态取值,N代表每一个时刻;
然后一列一列的去填充这个表格,表格中的第一列根据 π, B 的值来填充,其他列的计算就要用到 π, A, B了。比如第一列第一个的值为:
填充完表格之后,找出最后一列最大值score对应的影藏状态,然后从后往前推出其他隐藏状态,因为我们在填充每一列时会记录当前值是由之前哪一条路径得来的。
F/B 算法: Forward and Backward 算法
F : Forward 算法
B :Backward算法
F/B: 目标是计算 P (Zk | X) ,即给定状态序列 X, 求 k 时刻处于隐藏状态Zk 的概率
F :目标是计算联合概率 P( Zk, X1:k) ,即求 k 时刻处于隐藏状态Zk,且 k 时刻之前的观测值为 X1,X2,X3,…,Xk
B:目标是计算条件概率 p( Xk+1:n | Zk),即求 在k 时刻处于隐藏状态Zk 的条件下,在k 时刻之后观测值为 Xk+1, Xk+2, Xk+3, …Xk+n 的概率
X1:k 表示 X1, X2, X3, …,Xk
Xk+1:n 表示 Xk+1, Xk+2, Xk+3,…, Xk+n
上式只是计算了 P(Zk, X),若要计算 P(Zk | X) 还必须 进行归一化,即
估计模型参数
判断两个图(或观测)之间是否发生突变,一种方法计算两种图的相似度,如果小于某个设定的阈值,则认为这两张图发生了突变,可用于风险控制。另一种方法是看隐状态,假如隐状态可能取值 {0,1}, 正常的状态序列为 0 -->0 --> 0 --> …, 如果发生突变则会变为 0 --> 0—> 0 —> 1 —>0 ----> 0 …
目的:计算 P(Zk, X1:k) 概率
方法:动态规划
idea:构建一个概率,使它包含 P(Zk, X1:k) 的子问题 P(Zk-1, X1:k-1) ,类似于下图
观测左右两边变量不一样,左边没有Zk-1,为了引入这个变量,我们需要做边缘化处理,也就是变成联合概率
我们要时刻记住这是一个动态规划的算法,那么我们是要保留 P(Zk-1, X1:k-1) 这一项的,所以在此基础上拆解联合概率分布
推导过程如下:用到了马尔科夫的两个假设
动态规划必须有第一项才能迭代下去
目标: 计算条件概率 P( Xk+1:n | Zk)
方法:动态规划
idea:由于是后项,子问题是 P( Xk+2:n | Zk+1)
观测左右两边变量不一样,左边条件是Zk,而右边是Zk+1,为了引入这个变量,我们需要做边缘化处理,也就是变成联合概率
因为Zk+1 有 m 个可能的取值,∑ 相当于要循环 m 次,而 (Zk)也有 m 种可能取值;k 是某一时刻,而要计算完整个序列,长度是为 n 的,所以复杂度为
前向算法与后向算法复杂度一样
如何基于 P(Zk | X ) 去估计HMM的参数 θ (π, A, B),请听下回分解- -