下面介绍几个马尔可夫模型中的重要概念:
n时刻的观测值只依赖于n-1时刻的观测值,即:
p ( x n ∣ x n − 1 , x n − 2 , . . . x 0 ) = p ( x n ∣ x n − 1 ) p(x_n|x_{n-1},x_{n-2},...x_0) = p(x_n|x_{n-1}) p(xn∣xn−1,xn−2,...x0)=p(xn∣xn−1)
a i , j = p ( x n = S j ∣ x n − 1 = S i ) a_{i,j} = p(x_n = S_j|x_{n-1} = S_i) ai,j=p(xn=Sj∣xn−1=Si)
假设有一个人被锁在房间里待了很多天,但是他想知道外面的天气是什么。他猜测天气的唯一途径就是看每天来照顾他的人有没有带伞。
这样,观测状态(observed state)就是{带伞,不带伞}; 隐藏状态(hidden state)就是{晴,雨}。
绿色圆圈是hidden state, 这是一个马尔可夫模型;
紫色圆圈是observed state, 只由对应的hidden state决定
HMM的初始化模型 μ = { A , B , Π } \mu = \{A,B,\Pi\} μ={A,B,Π} , 观测序列为 σ = { O 1 , O 2 , . . . O N } \sigma = \{O_1, O_2,...O_N\} σ={O1,O2,...ON}
使用全概率公式,按照hidden states 拆分:
P ( O ∣ μ ) = ∑ X P ( O , X ∣ μ ) P(O|\mu) = \sum _{X} P(O,X|\mu) P(O∣μ)=X∑P(O,X∣μ)
其中, P ( O , X ∣ μ ) = P ( X ∣ μ ) P ( O ∣ X , μ ) P(O,X|\mu) = P(X|\mu)P(O | X, \mu) P(O,X∣μ)=P(X∣μ)P(O∣X,μ)
故: P ( O ∣ μ ) = ∑ X P ( X ∣ μ ) P ( O ∣ X , μ ) ( 1 ) P(O|\mu) = \sum _{X} P(X|\mu) P(O|X,\mu)~~~~(1) P(O∣μ)=X∑P(X∣μ)P(O∣X,μ) (1)
其中,
P ( X ∣ μ ) = π x 1 a x 1 x 2 a x 2 x 3 . . . a x T − 1 x T P(X|\mu) = \pi_{x_1}a_{x_1x_2}a_{x_2x_3}...a_{x_{T-1}x_T} P(X∣μ)=πx1ax1x2ax2x3...axT−1xT
这是因为 P ( X ∣ μ ) P(X|\mu) P(X∣μ)表示:在HMM 模型的初始条件下,hidden state为X的概率。
还有:
P ( O ∣ X , μ ) = b x 1 o 1 b x 2 o 2 . . . b x T o T P(O|X,\mu) = b_{x_1o_1}b_{x_2o_2}...b_{x_To_T} P(O∣X,μ)=bx1o1bx2o2...bxToT
这是因为 P ( O ∣ X , μ ) P(O|X,\mu) P(O∣X,μ)表示:在HMM模型的初始条件下,以及hidden states的条件下,观测值为O的概率。由于观测值只和hidden state有关,这里的 μ \mu μ 并没有作用。
这个算法的复杂度为 O ( 2 T N T ) O(2TN^T) O(2TNT), 其中T为序列长度,N为状态个数。
上面这种做法的明显不足就是复杂度太高了!前向算法通过动态规划来降低复杂度。
【算法1】前向算法
定义 α t ( i ) = p ( o 1 , . . . o t , x t = i ∣ μ ) , \alpha_t(i) = p(o_1,...o_t,x_t=i|\mu), αt(i)=p(o1,...ot,xt=i∣μ),则 P ( O ∣ μ ) = ∑ i = 1 N α T ( i ) P(O| \mu)= \sum _{i=1}^N \alpha_T(i) P(O∣μ)=∑i=1NαT(i)
又有:
α t + 1 ( j ) = p ( o 1 , . . . o t + 1 , x t + 1 = j ∣ μ ) = ∑ i = 1 N p ( o 1 , . . . o t + 1 , x t + 1 = j , x t = i ∣ μ ) ① = ∑ i = 1 N p ( o 1 , . . . o t + 1 , x t + 1 = j ∣ x t = i , μ ) p ( x t = i ∣ μ ) ② = ∑ i = 1 N p ( o 1 , . . . o t ∣ x t = i , μ ) p ( o t + 1 , x t + 1 = j ∣ x t = i , μ ) p ( x t = i ∣ μ ) ③ = ∑ i = 1 N p ( o 1 , . . . o t , x t = i ∣ μ ) p ( o t + 1 , x t + 1 = j ∣ x t = i , μ ) ④ = ∑ i = 1 N p ( o 1 , . . . o t , x t = i ∣ μ ) p ( x t + 1 = j ∣ x t = i , μ ) p ( o t + 1 ∣ x t + 1 = j ) ⑤ = ∑ i = 1 N α t ( i ) a i j b j o t + 1 \alpha_{t+1}(j)=p(o_1,...o_{t+1},x_{t+1}=j|\mu) \\=\sum _{i=1}^Np(o_1,...o_{t+1},x_{t+1}=j,x_t=i|\mu) ~~~①\\=\sum _{i=1}^Np(o_1,...o_{t+1},x_{t+1}=j|x_t=i,\mu)p(x_t=i|\mu)~~~~② \\= \sum _{i=1}^Np(o_1,...o_{t}|x_t=i,\mu)p(o_{t+1},x_{t+1}=j|x_t=i,\mu)p(x_t=i|\mu)③ \\=\sum _{i=1}^Np(o_1,...o_{t},x_t=i|\mu)p(o_{t+1},x_{t+1}=j|x_t=i,\mu)~~~④ \\=\sum _{i=1}^Np(o_1,...o_{t},x_t=i|\mu)p(x_{t+1}=j|x_t=i,\mu)p(o_{t+1}|x_{t+1}=j)~~~⑤ \\ = \sum_{i=1}^N \alpha_t(i)a_{ij}b_{j o_{t+1}} αt+1(j)=p(o1,...ot+1,xt+1=j∣μ)=i=1∑Np(o1,...ot+1,xt+1=j,xt=i∣μ) ①=i=1∑Np(o1,...ot+1,xt+1=j∣xt=i,μ)p(xt=i∣μ) ②=i=1∑Np(o1,...ot∣xt=i,μ)p(ot+1,xt+1=j∣xt=i,μ)p(xt=i∣μ)③=i=1∑Np(o1,...ot,xt=i∣μ)p(ot+1,xt+1=j∣xt=i,μ) ④=i=1∑Np(o1,...ot,xt=i∣μ)p(xt+1=j∣xt=i,μ)p(ot+1∣xt+1=j) ⑤=i=1∑Nαt(i)aijbjot+1
②->③:独立性假设
③->④: 第一项第三项合并
④->⑤: 第二项拆分
这样,有 α t + 1 ( j ) = ∑ i = 1 N α t ( i ) a i j b j o t + 1 \alpha_{t+1}(j) = \sum_{i=1}^N \alpha_t(i)a_{ij}b_{j o_{t+1}} αt+1(j)=∑i=1Nαt(i)aijbjot+1,又有 P ( O ∣ μ ) = ∑ i = 1 N α T ( i ) P(O| \mu)= \sum _{i=1}^N \alpha_T(i) P(O∣μ)=∑i=1NαT(i),于是复杂度为 O ( N 2 T ) O(N^2T) O(N2T)
解码问题就是,已知observed state, 求最有可能的hidden state,即
arg max X P ( X ∣ O ) \argmax_{X} P(X|O) XargmaxP(X∣O)
【算法2】viterbi 算法
令 δ t ( j ) = max x 1 , . . . x t − 1 p ( x 1 , . . . , x t − 1 , x t = j , o 1 , . . . o t ) \delta_t(j)= \max _{x_1,...x_{t-1}}p(x_1,...,x_{t-1},x_t=j,o_1,...o_t) δt(j)=x1,...xt−1maxp(x1,...,xt−1,xt=j,o1,...ot)
它代表了一个最大概率,如下图所示:
求 arg max X P ( X ∣ O ) \argmax_{X} P(X|O) XargmaxP(X∣O)等价于求 arg max X P ( X , O ) \argmax_{X} P(X,O) XargmaxP(X,O) 等价于求 arg max j δ T ( j ) \argmax_{j} \delta_T(j) jargmaxδT(j)
递推公式:
δ t + 1 ( j ) = max j δ t ( i ) a i j b j o t + 1 \delta_{t+1}(j) = \max_j \delta_t(i)a_{ij}b_{j o_{t+1}} δt+1(j)=jmaxδt(i)aijbjot+1
意思是,每个时刻的前一个时刻一定是概率最大的,在当前时刻也应该选择一个使概率最大的隐藏状态j。这样一步步把使得概率最大的隐藏状态记录下来,就是最后的结果。