-
引述
隐马尔科夫模型(Hidden Markov Model,HMM)用来描述由隐藏马尔科夫链随机生成的观测序列的过程,属于生成模型,面向的问题是标注问题。
隐马尔科夫模型是关于时序的概率模型,序列的每一个位置可看做一个时刻。其包含两个序列,一个是观测序列,另一个为状态序列。
- 一个由隐藏的马尔科夫链随机生成的不可观测的状态随机序列,称为状态序列(State Sequence);
- 一个由各个状态序列产生的观测随机序列,称为观测序列(Observation Sequence).
对于隐马尔科夫模型,做了两个假设:
- 齐次马尔科夫假设:在任意时刻 t 的状态只依靠于前一时刻(t-1)的状态与其他时刻的状态与观测无关,与时刻也无关;
- 观测独立性假设:任意时刻的观测只依赖于 对应时刻 马尔科夫链的状态,与其他观测及状态无关。
-
定义
首先列举 HMM 中的一些参数与集合:
-
两个集合
Q = { q 1 , q 2 , … … , q N } Q = \{ q_1,q_2,……,q_N \} Q={q1,q2,……,qN}:N 种可能的 状态集合;
V = { v 1 , v 2 , … … , v M } V = \{ v_1,v_2,……,v_M \} V={v1,v2,……,vM}:M 种可能的 观测集合;
-
两个序列
S = ( s 1 , s 2 , … … , s T ) S = (s_1,s_2,……,s_T) S=(s1,s2,……,sT):长度为 T 的 状态序列,每一时刻 st 的取值都是集合 Q 中的元素;
O = ( o 1 , o 2 , … … , o T ) O = (o_1,o_2,……,o_T) O=(o1,o2,……,oT):长度为 T 的 观测序列,每一时刻 ot 的取值都是集合 V 中的元素;
-
两个概率矩阵
A = [ a i j ] N ∗ N , a i j = P ( s t + 1 = q j ∣ s t = q i ) A=[a_{ij}]_{N*N},a_{ij}=P(s_{t+1}=q_j|s_t=q_i) A=[aij]N∗N,aij=P(st+1=qj∣st=qi),状态转移概率矩阵,描述当 t 时刻状态为 qi 时,t+1 时刻状态取值为 qj 的概率。
B = [ b j ( k ) ] N ∗ M , b j ( k ) = P ( o t = v k ∣ s t = q j ) B=[b_j(k)]_{N*M},b_j(k)=P(o_t=v_k|s_t=q_j) B=[bj(k)]N∗M,bj(k)=P(ot=vk∣st=qj),观测概率矩阵,描述当 t 时刻状态为 qj 时,t 时刻观测值为 vk 的概率。
-
其他参数
Π = ( π i ) , i = 1 , 2 , … , N , π i = P ( s 1 = q i ) Π=(π_i),i=1,2,…,N,π_i=P(s_1=q_i) Π=(πi),i=1,2,…,N,πi=P(s1=qi),初始状态概率向量,描述开始时,最初的状态取值为 qi 的概率。
λ = ( A , B , Π ) λ=(A,B,Π) λ=(A,B,Π),三元符号表示的隐马尔科夫模型。该模型由 状态转移概率矩阵、观测概率矩阵以及初始状态概率向量决定。其中 Π Π Π 与 A A A 决定状态序列, B B B 决定观测序列
-
模型举例
假设有 4 个盒子,每个盒子都装有红白两种颜色的球,各盒子的红白球数为:
盒子编号 1 2 3 4 红球数 5 3 6 8 白球数 5 7 4 2 我们按照以下方法抽取小球并产生颜色的观测序列:
开始时,从 4 个盒子中 等概率 随机选取一个盒子,从盒子中抽取 1 个小球记录颜色并放回;
然后从当前盒子随即转移到下一个盒子,转移的规则是:
- 如果当前盒子是 盒子 1,那么下一个盒子一定是 盒子 2;
- 如果当前盒子是 盒子 2 或 3,那么分别以概率 0.4 和 0.6 转移到 左边 或 右边 的盒子;
- 如果当前盒子是 盒子 4,那么各以 0.5 的概率停留在 盒子 4 或 转移到 盒子 3,
确定转移的盒子以后,再从转移的盒子中抽取出1 个小球,记录颜色并放回;
如此重复 5 次,最终得到一个 球颜色的观测序列: O = ( 红 , 红 , 白 , 白 , 红 ) O=(红,红,白,白,红) O=(红,红,白,白,红)
我们根据所给条件,写出对应的集合与参数:
-
两个集合
状态集合 Q = { 盒 子 1 , 盒 子 2 , 盒 子 3 , 盒 子 4 } , N = 4 Q=\{盒子1,盒子2,盒子3,盒子4\},N=4 Q={盒子1,盒子2,盒子3,盒子4},N=4
观测集合 V = { 红 色 、 白 色 } , M = 2 V=\{红色、白色\},M=2 V={红色、白色},M=2
-
两个序列
状态序列 S S S 是隐藏的,我们无法确定的知道每次抽取的是哪个盒子。
观测序列 O = ( 红 , 红 , 白 , 白 , 红 ) O=(红,红,白,白,红) O=(红,红,白,白,红)
-
两个概率矩阵
状态转移概率矩阵: A = [ 0 1 0 0 0.4 0 0.6 0 0 0.4 0 0.6 0 0 0.5 0.5 ] A=\begin{bmatrix} 0 & 1 & 0 & 0\\ 0.4 & 0 & 0.6 & 0\\ 0 & 0.4 & 0 & 0.6\\ 0 & 0 & 0.5 & 0.5\\ \end{bmatrix} \quad A=⎣⎢⎢⎡00.400100.4000.600.5000.60.5⎦⎥⎥⎤
也可以用图模型表示:
观测概率矩阵: B = [ 0.5 0.5 0.3 0.7 0.6 0.4 0.8 0.2 ] B=\begin{bmatrix} 0.5 & 0.5\\ 0.3 & 0.7\\ 0.6 & 0.4\\ 0.8 & 0.2\\ \end{bmatrix} \quad B=⎣⎢⎢⎡0.50.30.60.80.50.70.40.2⎦⎥⎥⎤
(行代表状态,列代表颜色,每个元素代表不同状态下各颜色的概率)
-
-
概率计算方法
-
直接计算法
在概率的计算中,最暴力的方法就是直接计算:通过列举所有的可能性求和。但是计算量很大,无法再实际中使用。
给定模型 λ = ( A , B , Π ) λ=(A,B,Π) λ=(A,B,Π) 以及观测序列 O = ( o 1 , o 2 , … … , o T ) O = (o_1,o_2,……,o_T) O=(o1,o2,……,oT),计算此观测序列出现的概率。
使用直接计算法便是直接按照概率公式直接计算。
-
计算所有可能的状态序列 S k = ( s 1 , s 2 , … … , s T ) S^k = (s_1,s_2,……,s_T) Sk=(s1,s2,……,sT) 的概率,即按顺序链式计算条件概率:
P ( S 1 ∣ λ ) = π s 1 ⋅ a s 1 s 2 ⋅ … ⋅ a s T − 1 s T P(S^1|λ)=π_{s_1}·a_{s_1s_2}·…·a_{s_{T-1}s_T} P(S1∣λ)=πs1⋅as1s2⋅…⋅asT−1sT
……
P ( S K ∣ λ ) = π s 1 ⋅ a s 1 s 2 ⋅ … ⋅ a s T − 1 s T P(S^K|λ)=π_{s_1}·a_{s_1s_2}·…·a_{s_{T-1}s_T} P(SK∣λ)=πs1⋅as1s2⋅…⋅asT−1sT
以上述 “盒子-球” 举例,可以生成观测序列 O = ( 红 , 红 , 白 , 白 , 红 ) O=(红,红,白,白,红) O=(红,红,白,白,红) 的盒子选择的方式有很多,那么就将所有这些盒子选择的方式都计算条件概率。
-
根据不同的状态序列 P ( S k ∣ λ ) P(S^k|λ) P(Sk∣λ),分别计算相应的观测序列 O = ( o 1 , o 2 , … … , o T ) O = (o_1,o_2,……,o_T) O=(o1,o2,……,oT) 出现的概率:
P ( O ∣ S 1 , λ ) = b s 1 ( o 1 ) ⋅ b s 2 ( o 2 ) ⋅ … ⋅ b s T ( o T ) P(O|S^1,λ)=b_{s_1}(o_1)·b_{s_2}(o_2)·…·b_{s_T}(o_T) P(O∣S1,λ)=bs1(o1)⋅bs2(o2)⋅…⋅bsT(oT)
……
P ( O ∣ S K , λ ) = b s 1 ( o 1 ) ⋅ b s 2 ( o 2 ) ⋅ … ⋅ b s T ( o T ) P(O|S^K,λ)=b_{s_1}(o_1)·b_{s_2}(o_2)·…·b_{s_T}(o_T) P(O∣SK,λ)=bs1(o1)⋅bs2(o2)⋅…⋅bsT(oT)
-
计算 O O O 和 S S S 同时出现的联合概率:
P ( O ∣ λ ) = P ( O ∣ S 1 , λ ) P ( S 1 ∣ λ ) P(O|λ)=P(O|S^1,λ)P(S^1|λ) P(O∣λ)=P(O∣S1,λ)P(S1∣λ)
……
P ( O ∣ λ ) = P ( O ∣ S K , λ ) P ( S K ∣ λ ) P(O|λ)=P(O|S^K,λ)P(S^K|λ) P(O∣λ)=P(O∣SK,λ)P(SK∣λ)
-
对所有可能的状态序列 S S S 求和,得到观测序列 O O O 的概率 P ( O ∣ λ ) P(O|λ) P(O∣λ),即:
P ( O ∣ λ ) = ∑ k = 1 K P ( O ∣ S k , λ ) P ( S k ∣ λ ) P(O|λ)=\sum_{k=1}^{K}P(O|S^k,λ)P(S^k|λ) P(O∣λ)=∑k=1KP(O∣Sk,λ)P(Sk∣λ)
这样的直接计算方法计算量很大,时间复杂度为 O ( T N T ) O(TN^T) O(TNT),所以在实际工程应用中是不可行的。下一篇我们介绍计算观测序列概率的有效算法:前向-后向算法。
-
-
机器学习 - 隐马尔科夫模型(1)- 概念 and 直接计算法
最新推荐文章于 2022-08-22 01:48:14 发布