1. 概念
1.1. 马尔可夫链
随机过程有两个维度的不确定性。马尔可夫为了简化问题,提出了一种简化的假设,即随机过程中各个状态 s t s_t st的概率分布,只与它的前一个状态 s t − 1 s_{t-1} st−1有关, 即 P ( s t ∣ s 1 , s 2 , s 3 , ... , s t − 1 ) = P ( s t ∣ s t − 1 ) P(s_t|s_1, s_2, s_3, \dots,s_{t-1})=P(s_t|s_{t-1}) P(st∣s1,s2,s3,...,st−1)=P(st∣st−1)
这个假设后来被称为马尔可夫假设,而符合这个假设的随机过程则称为马尔可夫过程,也称为马尔可夫链。
P ( s t ∣ s 1 , s 2 , s 3 , ⋯ , s t − 1 ) = P ( s t ∣ s t − 1 ) P(s_t|s_1,s_2,s_3,\cdots,s_{t-1})=P(s_t|s_{t-1}) P(st∣s1,s2,s3,⋯,st−1)=P(st∣st−1)
时间和状态取值都是离散的马尔可夫过程也称为马尔可夫链。
1.2. 隐马尔可夫模型
P ( s 1 , s 2 , s 3 , ⋯ , o 1 , o 2 , o 3 , ⋯ ) = ∏ t P ( s t ∣ s t − 1 ) ⋅ P ( o t ∣ s t ) P(s_1,s_2,s_3,\cdots,o_1,o_2,o_3,\cdots)=\prod_{t} P(s_t | s_{t-1}) \cdot P(o_t | s_t) P(s1,s2,s3,⋯,o1,o2,o3,⋯)=t∏P(st∣st−1)⋅P(ot∣st)
隐含的是状态 s s s
隐马尔可夫模型由初始概率分布(向量 π \pi π),状态转移概率分布(矩阵 A A A)以及观测概率分布(矩阵 B B B )确定。
隐马尔可夫模型 λ \lambda λ 可以用三元符号表示, 即 λ = ( A , B , π ) \lambda = (A, B, \pi) λ=(A,B,π)
其中 A , B , π A,B,\pi A,B,π 称为模型三要素。
具体实现的过程中,如果观测的概率分布是定的,那么 B B B 就是确定的。在 hhmlearn 中,实现了三种概率分布的 HMM 模型:MultinominalHMM,GaussianHMM,GMMHMM。还可以定义不同的 emission probabilities,生成不同的HMM模型。
1.3. 两个基本假设
-
齐次马尔科夫假设(状态)
P ( i t ∣ i t − 1 , o t − 1 , ... , i 1 , o 1 ) = P ( i t ∣ i t − 1 ) , t = 1 , 2 , ... , T P(i_t|i_{t-1},o_{t-1},\dots,i_1,o_1) = P(i_t|i_{t-1}), t=1,2,\dots,T P(it∣it−1,ot−1,...,i1,o1)=P(it∣it−1),t=1,2,...,T假设隐藏的马尔可夫链在任意时刻 t t t的状态 → i t \rightarrow i_t →it
只依赖于其前一时刻的状态 → i t − 1 \rightarrow i_{t-1} →it−1
与其他时刻的状态 → i t − 1 , ⋯ , i 1 \rightarrow i_{t-1}, \cdots,i_1 →it−1,⋯,i1
及观测无关 → o t − 1 , ⋯ , o 1 \rightarrow o_{t-1},\cdots,o_1 →ot−1,⋯,o1
也与时刻 t t t 无关 t = 1 , 2 , ⋯ , T t=1,2,\cdots,T t=1,2,⋯,T
-
观测独立性假设(观测)
P ( o t ∣ i T , o T , i T − 1 , o T − 1 , ... , i t + 1 , o t + 1 , i t , i t − 1 , o t − 1 , ... , i 1 , o 1 ) = P ( o t ∣ i t ) P(o_t|i_T,o_T,i_{T-1},o_{T-1},\dots,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1},\dots,i_1,o_1)=P(o_t|i_t) P(ot∣iT,oT,iT−1,oT−1,...,it+1,ot+1,it,it−1,ot−1,...,i1,o1)=P(ot∣it) 假设任意时刻 t t t 的观测 → o t \rightarrow o_t →ot只依赖于该时刻的马尔可夫链的状态 → i t \rightarrow i_t →it
与其他观测 → o T , o T − 1 , ⋯ , o t + 1 , o t − 1 , ⋯ , o 1 \rightarrow o_T,o_{T-1},\cdots,o_{t+1},o_{t-1},\cdots,o_1 →oT,oT−1,⋯,ot+1,ot−1,⋯,o1
及状态无关 → i T , i T − 1 , ⋯ , i t + 1 , i t − 1 , ⋯ , i 1 \rightarrow i_T,i_{T-1},\cdots,i_{t+1},i_{t-1},\cdots,i_1 →iT,iT−1,⋯,it+1,it−1,⋯,i1
1.4. 三个基本问题
-
概率计算问题
输入:模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π),观测序列 O = ( o 1 , o 2 , ... , o T ) O=(o_1,o_2,\dots,o_T) O=(o1,o2,...,oT)
输出: P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
-
学习问题
输入:观测序列 O = ( o 1 , o 2 , ⋯ , o T ) O=(o_1,o_2,\cdots,o_T) O=(o1,o2,⋯,oT)
输出: λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)
-
预测问题, 也称为解码问题(Decoding)
输入:模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π),观测序列 O = ( o 1 , o 2 , ... , o T ) O=(o_1,o_2,\dots,o_T) O=(o1,o2,...,oT)
输出:状态序列 I = ( i 1 , i 2 , ⋯ , i T ) I=(i_1,i_2,\cdots,i_T) I=(i1,i2,⋯,iT)
因为状态序列是隐藏的,不可观测的,所以叫解码。
2. 算法
2.1 观测序列生成算法
输入: λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π) ,观测序列长度 T T T
输出:观测序列 O = ( o 1 , o 2 , ... , o T ) O=(o_1,o_2,\dots,o_T) O=(o1,o2,...,oT)
- 按照初始状态分布 π \pi π 产生 i 1 i_1 i1
- t = 1 t=1 t=1
- 按照状态 i t i_t it 的观测概率分布 b i t ( k ) b_{i_t}(k) bit(k) 生成 o t o_t ot
- 按照状态 i t i_t it 的状态转移概率分布 a i t , i t + 1 {a_{i_t, {i_{t+1}}}} ait,it+1 产生状 i t + 1 i_{t+1} it+1, i t + 1 = 1 , 2 , ... , N \color{red}i_{t+1}=1,2,\dots,N it+1=1,2,...,N
- t = t + 1 t=t+1 t=t+1 如果 t < T t<T t<T 转到3,否则,终止
书中定义了 I = ( i 1 , i 2 , ... , i T ) , Q = q 1 , q 2 , ... , q T I=(i_1,i_2,\dots,i_T), Q={q_1,q_2,\dots,q_T} I=(i1,i2,...,iT),Q=q1,q2,...,qT,根据定义, i t i_t it 的取值集合应该是 Q Q Q,而上面算法描述中说明了 i t + 1 = 1 , 2 , ... , N \color{red}i_{t+1}=1,2,\dots,N it+1=1,2,...,N 注意这里面的 i t i_t it实际上不是状态, 而是对应了前面的 i , j i,j i,j的含义,实际的状态应该是 q i t q_{i_t} qit这个算法中的 a i t i t + 1 = P ( i t + 1 = q i t + 1 ∣ i t = q i t ) a_{i_ti_{t+1}}=P(i_{t+1}=q_{i_{t+1}}|i_t=q_{i_t}) aitit+1=P(it+1=qit+1∣it=qit) 这里同样的符号,表示了两个不同的含义。
Rabiner定义的 a i j a_{ij} aij是这样的 A = a i j , a i j = P r ( q j a t t + 1 ∣ q i a t t ) A={a_{ij}},a_{ij}=Pr(q_j at t+1|q_i at t) A=aij,aij=Pr(qjatt+1∣qiatt) 这里理解就好, 有时候用角标 i i i代表对应的state, 有时候用 q i q_i qi代表对应的state。
2.2. 学习算法
概率计算算法
前向概率与后向概率
给定马尔可夫模型 λ \lambda λ,定义到时刻 t t t部分观测序列为 o 1 , o 2 , ... , o t o_1, o_2, \dots ,o_t o1,o2,...,ot, 且状态 q i q_i qi的概率为前向概率, 记作 α t ( i ) = P ( o 1 , o 2 , ... , o t , i t = q i ∣ λ ) \alpha_t(i)=P(o_1,o_2,\dots,o_t,i_t=q_i|\lambda) αt(i)=P(o1,o2,...,ot,it=qi∣λ) 给定马尔可夫模型 λ \lambda λ, 定义到时刻 t t t状态为 q i q_i qi的条件下, 从 t + 1 t+1 t+1到 T T T的部分观测序列为 o t + 1 , o t + 2 , ... , o T o_{t+1}, o_{t+2}, \dots ,o_T ot+1,ot+2,...,oT的概率为后向概率, 记作 β t ( i ) = P ( o t + 1 , o t + 2 , ... , o T ∣ i t = q i , λ ) \beta_t(i)=P(o_{t+1},o_{t+2},\dots,o_T|i_t=q_i, \lambda) βt(i)=P(ot+1,ot+2,...,oT∣it=qi,λ)
关于 α \alpha α 和 β \beta β 这两个公式,仔细看下,细心理解。前向概率从前往后递推, 后向概率从后向前递推。
前向算法