文章目录
- 1 HMM 的概念
- 1.1 引入
- 1.1.1 Markov property
- 1.1.2 Markov chain
- 1.1.3 一阶离散马尔可夫模型
- 1.2 HMM 的定义
- 1.3 观测序列的生成过程
- 1.4 HMM 的 3 个基本问题
- 2 三个基本问题的解法
- 2.1 概率计算算法
- 2.1.1 直接计算法
- 2.1.2 向前算法
- 2.1.3 向后算法
- 2.1.4 一些概率与期望值的计算
- 2.2 学习算法
- 2.3 预测算法
来自《统计学习方法》—李航
隐马尔可夫模型(Hidden Markov Model,HMM)是可用于标注问题(tagging,给定观测的序列预测其对应的标记序列)的统计学模型,描述由隐藏的马尔科夫链随机生成观测序列的过程,属于生成模型。HMM 在语音识别、自然语言处理、生物信息、模式识别等领域有着广泛的应用。
输入变量与输出变量均为连续变量的预测问题称为回归问题;
输出变量为有限个离散变量的预测问题称为分类问题;
输入变量与输出变量均为变量序列的预测问题称为标注问题。
1 HMM 的概念
1.1 引入
马尔可夫模型的观测序列本身就是状态序列;
隐马尔可夫模型的观测序列不是状态序列
1.1.1 Markov property
如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程。
X
(
t
+
1
)
=
f
(
X
(
t
)
)
X(t+1) = f(X(t))
X(t+1)=f(X(t))
1.1.2 Markov chain
时间和状态都离散的马尔可夫过程称为马尔可夫链
几种典型形状的马尔可夫链
- (a). 状态转义概率组成的A矩阵没有零值的Markov链
- (b). A矩阵有零值的Markov链
- (c./d). 左-右形式的Markov链
Probabilistic Graphical Model
1.1.3 一阶离散马尔可夫模型
- 有 N N N 个状态, S 1 S_1 S1, S 2 S_2 S2… S N S_N SN
- 存在一个离散的时间序列 t = 0 , t = 1 … … t=0,t=1…… t=0,t=1……
- 在每个时刻t,系统只能处于唯一一个状态 q t q_t qt
- 下一个时刻所处的状态是随机出现的
- 当前状态 q t q_t qt 只与前面相邻的一个状态 q t − 1 q_{t-1} qt−1 有关,与其他状态无关(日光族,积蓄什么的,不存在的)
P [ q t = j ∣ q t − 1 = i , q t − 1 = k ] = P [ q t = j ∣ q t − 1 = i ] P[q_t = j | q_{t-1} = i, q_{t-1} = k] = P[q_t = j | q_{t-1} = i] P[qt=j∣qt−1=i,qt−1=k]=P[qt=j∣qt−1=i]
1.2 HMM 的定义
HMM 是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列(state sequence),再由各个状态生成一个观测而产生观测随机序列(观测序列,observation sequence)的过程。
序列的每一个位置又可以看作是一个时刻。
HMM 由初始概率分布、状态转移概率分布以及观测概率分布确定,定义如下:
- 设 Q Q Q 是所有可能的状态的集合, V V V 是所有可能的观测的集合
Q = { q 1 , q 2 , . . . , q N } , V = { v 1 , v 2 , . . . , v M } Q = \{q_1,q_2,...,q_N\},V = \{v_1,v_2,...,v_M\} Q={q1,q2,...,qN},V={v1,v2,...,vM}
其中, N N N 是可能的状态数, M M M 是可能的观测数
-
I I I 是长度为 T T T 的状态序列, O O O 是对应的观测序列。
I = ( i 1 , i 2 , . . . , i T ) , O = ( o 1 , o 2 , . . . , o T ) I = (i_1,i_2,...,i_T),O = (o_1,o_2,...,o_T) I=(i1,i2,...,iT),O=(o1,o2,...,oT) -
A A A 是状态转移概率矩阵:
A = [ a i j ] N × N A = [a_{ij}]_{N \times N} A=[aij]N×N
其中,
a i j = P ( i t + 1 = q j ∣ i t = q i ) , i = 1 , 2 , . . . , N ; j = 1 , 2 , . . . , N a_{ij} = P(i_{t+1} = q_j|i_t = q_i), i = 1,2,...,N; j = 1,2,...,N aij=P(it+1=qj∣it=qi),i=1,2,...,N;j=1,2,...,N
是在时刻 t t t 处于状态 q i q_i qi 条件下在时刻 t + 1 t+1 t+1 转移到状态 q j q_j qj 的概率。
- B B B 是观测概率矩阵:
B = [ b j ( k ) ] N × M B = [b_j(k)]_{N \times M} B=[bj(k)]N×M
其中,
b
j
(
k
)
=
P
(
o
t
=
v
k
∣
i
t
=
q
j
)
,
k
=
1
,
2
,
.
.
.
,
M
;
j
=
1
,
2
,
.
.
.
,
N
b_j(k) = P(o_t = v_k | i_t = q_j), k=1,2,...,M;j = 1,2,...,N
bj(k)=P(ot=vk∣it=qj),k=1,2,...,M;j=1,2,...,N
是在时刻
t
t
t 处于状态
q
j
q_j
qj 的条件下生成观测
v
k
v_k
vk 的概率。
- π \pi π 是初始状态概率向量:
π = ( π i ) \pi = (\pi_i) π=(πi)
其中,
π = P ( i 1 = q i ) , i = 1 , 2 , . . . , N \pi = P(i_1 = q_i),i=1,2,...,N π=P(i1=qi),i=1,2,...,N
是时刻 t = 1 t=1 t=1 处于状态 q i q_i qi 的概率。
HMM 由初始状态概率向量 π \pi π、状态转移概率矩阵 A A A 和观测概率矩阵 B B B 决定。 π \pi π 和 A A A 决定状态序列, B B B 决定观测序列。因此 HMM λ \lambda λ 可用如下的三元符号表示:
λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π)
A , B , π A,B,\pi A,B,π 称为 HMM 的三要素。
状态转移概率矩阵 A A A 与初始状态概率向量 π \pi π 确定了隐藏的马尔可夫链,生成不可观测的状态序列。观测概率矩阵 B B B 确定了如何从状态生成观测,与状态序列综合确定了如何产生观测序列。
我们仔细分析下有效参数量:
- π ∈ R N \pi \in \mathbb{R}^{N} π∈RN,有效参数量为 N − 1 N-1 N−1,因为所有初始状态概率的和要求为 1
- A ∈ R N × N A \in \mathbb{R}^{N \times N} A∈RN×N,有效参数量为 N × N − N N×N-N N×N−N,因为每行的概率的和要求为 1
- B ∈ R N × M B \in \mathbb{R}^{N \times M} B∈RN×M,有效参数量为 N × M − N N×M-N N×M−N,因为每行的概率的和要求为 1
从定义可知,HMM 作了两个基本假设:
- 齐次马尔可夫性假设,即假设隐藏的马尔可夫链在任意时刻 t t t 的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻 t t t 无关。
- 观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关。
P ( o t ∣ i r , o r , 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_r,o_r,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(ot∣ir,or,iT−1,oT−1,...,it+1,ot+1,it,it−1,ot−1,....,i1,o1)=P(ot∣it)
HMM 可以用于标注(tagging),这时状态对应着标记,标注问题是给定观测的序列预测其对应的标记序列(反向操作)。可以假设标注问题的数据是由 HMM 生成的,这样我们可以利用 HMM 的学习和预测算法进行标注。
下面看一个 HMM 的例子。
(盒子和球模型)假设有 4 个盒子,每个盒子里都装有红白两种颜色的球,盒子里红白数如下表所示:
盒子 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
红球数 | 5 | 3 | 6 | 8 |
白球数 | 5 | 7 | 4 | 2 |
按照下面的方法抽球,产生一个球的颜色的观测序列:开始,从 4 个盒子里以等概率随机选取 1 个盒子,从这个盒子里随机抽出 1 个球,记录其颜色后,放回;然后,从当前盒子随机转移到下一个盒子,规则是:如果当前盒子是盒子 1,那么下一盒子一定是盒子 2,如果当前是盒子 2 或 3,那么分别以概率 0.4 和 0.6 转移到左边或右边的盒子,如果当前是盒子 4,那么各以 0.5 的概率停留在盒子 4 或转移到盒子 3;确定转移的盒子后,再从这个盒子里随机抽出一歌球,记录其颜色,放回去;如此下去重复 4 次,得到一个球的颜色的观测序列:
O = { 红,红,白,白,红 } O = \{红,红,白,白,红\} O={红,红,白,白,红}
在这个过程中,观察者只能观测到球的颜色的序列,观测不到球是从哪个盒子取出的,即观测不到盒子的序列(状态序列)。
在这个例子中有两个随机序列,一个是盒子的序列(状态序列),一个是球的颜色的观测序列(观测序列)。前者是隐藏的,只有后者是可观测的。这是一个 HMM 的例子,根据所给条件,可以明确状态集合、观测集合、序列长度以及模型的三要素。
-
盒子对应状态,状态的集合是
Q = { 盒子 1 ,盒子 2 ,盒子 3 ,盒子 4 } Q =\{盒子1,盒子2,盒子3,盒子4\} Q={盒子1,盒子2,盒子3,盒子4} -
球的颜色对应观测,观测的集合是
V = { 红,白 } , M = 2 V = \{红,白\},M=2 V={红,白},M=2
-
状态序列和观测序列长度 T = 5 T=5 T=5
-
初始概率分布 π \pi π 为
π = ( 0.25 , 0.25 , 0.25 , 0.25 ) T \pi = (0.25,0.25,0.25,0.25)^T π=(0.25,0.25,0.25,0.25)T
- 状态转移概率分布 A A A 为
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} A= 00.400100.4000.600.5000.60.5
- 观测概率分布 B B B 为
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} B= 0.50.30.60.80.50.70.40.2
1.3 观测序列的生成过程
根据 HMM 定义,可以将一个长度为 T T T 的观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT) 的生成过程描述如下:
输入: HMM
λ
=
(
A
,
B
,
π
)
\lambda = (A,B,\pi)
λ=(A,B,π),观测序列长度
T
T
T;
输出: 观测序列
O
=
(
o
1
,
o
2
,
.
.
.
,
o
T
)
O=(o_1,o_2,...,o_T)
O=(o1,o2,...,oT)
(1)按照初始状态分布
π
\pi
π 产生状态
i
1
i_1
i1
(2)令
t
=
1
t=1
t=1
(3)按照状态
i
t
i_t
it 的观测概率分布
b
i
t
(
k
)
b_{i_t}(k)
bit(k) 生成
o
t
o_t
ot
(4)按照状态
i
t
i_t
it 的状态转移概率分布 {
a
i
t
,
i
t
+
1
a_{i_t,i_{t+1}}
ait,it+1},
i
t
+
1
=
1
,
2
,
.
.
.
,
N
i_{t+1} = 1,2,...,N
it+1=1,2,...,N
(5)令
t
=
t
+
1
t = t+1
t=t+1;如果
t
<
T
t<T
t<T,转步(3);否则,终止
1.4 HMM 的 3 个基本问题
HMM 有三个基本问题:
(1)概率计算问题(评估问题,求观测序列出现的概率)。给定模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算在模型 λ \lambda λ 下观测序列 O O O 出现的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。
(2)学习问题(求HMM模型参数)。已知观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),估计模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 参数,使得在该模型下观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ) 最大。即用极大似然估计的方法估计参数。
(3)预测问题(求状态序列),也称解码(decoding)问题。已经模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),求给定观测序列条件概率 P ( I ∣ O ) P(I|O) P(I∣O) 最大的状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1,i_2,...,i_T) I=(i1,i2,...,iT)。即给定观测序列,求最有可能的对应的状态序列。
下面用一个例子,来形象化上面三个问题
赌场的欺诈
某赌场在投骰子根据点数决定胜负时,暗中采取了如下作弊手段,在连续多次投骰子的过程中,通常使用公平骰子 S 1 S_1 S1,偶尔混进一个灌铅骰子 S 2 S_2 S2
公平骰子 S 1 S_1 S1 和灌铅骰子 S 2 S_2 S2 的区别如下:
骰子 S 1 S_1 S1 | 骰子 S 2 S_2 S2 | |
---|---|---|
1 1 1 点 | 1/6 | 0 |
2 2 2 点 | 1/6 | 1/8 |
3 3 3 点 | 1/6 | 1/8 |
4 4 4 点 | 1/6 | 3/16 |
5 5 5 点 | 1/6 | 3/16 |
6 6 6 点 | 1/6 | 3/8 |
一次连续投骰子的过程模拟如下:
时间 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
骰子 | S 1 S_1 S1 | S 1 S_1 S1 | S 1 S_1 S1 | S 2 S_2 S2 | S 1 S_1 S1 | S 1 S_1 S1 | S 1 S_1 S1 |
投出点数 | 3 | 3 | 4 | 5 | 1 | 6 | 2 |
上表中,第二列“骰子”相当于状态序列(隐序列),第三列“投出点数”相当于观测序列(明序列)
问题1—概率计算问题(评估问题)
- 一个骰子投出的点数记录为,131452,会出现这个点数记录的概率有多大
问题2—学习问题(似然估计)
- 一个骰子投出的点数记录为,131452,作弊骰子投出各点数的概率是怎么样?公平骰子投出各点数的概率又是怎么样的?赌场是何时换用骰子的(转换概率如何)?——从大量的点数序列样本中学习得出
问题3—预测问题(解码问题)
- 一个骰子投出的点数记录为,131452,点数序列中的哪些点数是用骰子 S 2 S2 S2 投出的?
2 三个基本问题的解法
2.1 概率计算算法
概率计算问题(评估问题,求观测序列出现的概率)。给定模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算在模型 λ \lambda λ 下观测序列 O O O 出现的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。
一个骰子投出的点数记录为,131452,会出现这个点数记录的概率有多大
本小节介绍计算观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ) 的向前(forward)与向后(backward)算法。先介绍概念上可行但计算上不可行的直接计算法。
2.1.1 直接计算法
给定模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算在模型 λ \lambda λ 下观测序列 O O O 出现的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。最直接的方法是按概率公式直接计算。通过列举所有可能的长度为 T T T 的状态序列 I = ( i 1 , i 2 , . . . , i T ) I = (i_1,i_2,...,i_T) I=(i1,i2,...,iT),求各个状态序列 I I I 与观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT) 的联合概率 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,I∣λ),然后对所有可能的状态序列求和,得到 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
状态序列 I = ( i 1 , i 2 , . . . , i T ) I = (i_1,i_2,...,i_T) I=(i1,i2,...,iT) 的概率是
P ( I ∣ λ ) = π i 1 a i 1 i 2 a i 2 i 3 . . . a i T − 1 i T P(I|\lambda) = \pi_{i_1}a_{i_1i_2}a_{i_2i_3}...a_{i_{T-1}i_T} P(I∣λ)=πi1ai1i2ai2i3...aiT−1iT
对固定的状态序列 I = ( i 1 , i 2 , . . . , i T ) I = (i_1,i_2,...,i_T) I=(i1,i2,...,iT),观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT) 的概率是 P ( O ∣ I , λ ) P(O|I,\lambda) P(O∣I,λ)
P ( O ∣ I , λ ) = b i 1 ( o 1 ) b i 2 ( o 2 ) . . . b i T ( o T ) P(O|I,\lambda) = b_{i_1}(o_1)b_{i_2}(o_2)...b_{i_T}(o_T) P(O∣I,λ)=bi1(o1)bi2(o2)...biT(oT)
O O O 和 I I I 同时出现的联合概率为
P ( O , I ∣ λ ) = P ( O ∣ I , λ ) P ( I ∣ λ ) = π i 1 b i 1 ( o 1 ) a i 1 i 2 b i 2 ( o 2 ) . . . a i T − 1 i T b i T ( o T ) P(O,I|\lambda) = P(O|I,\lambda)P(I|\lambda)=\pi_{i_1} b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_T}b_{i_T}(o_T) P(O,I∣λ)=P(O∣I,λ)P(I∣λ)=πi1bi1(o1)ai1i2bi2(o2)...aiT−1iTbiT(oT)
然后,对所有可能的状态序列 I I I 求和,得到观测序列 O O O 的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ),也即
P ( O ∣ λ ) = ∑ I P ( O , I ∣ λ ) = ∑ i 1 , i 2 , . . . , i T π i 1 b i 1 ( o 1 ) a i 1 i 2 b i 2 ( o 2 ) . . . a i T − 1 i T b i T ( o T ) P(O|\lambda) = \sum_IP(O,I|\lambda) = \sum_{i_1,i_2,...,i_T}\pi_{i_1} b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_T}b_{i_T}(o_T) P(O∣λ)=I∑P(O,I∣λ)=i1,i2,...,iT∑πi1bi1(o1)ai1i2bi2(o2)...aiT−1iTbiT(oT)
但是,上面公式的计算量很大,是 O ( T N T ) O(TN^T) O(TNT) 阶的( I I I 的所有排列组合是 T ! T! T!,采用递归方式计算的话,复杂度是 T T T,序列长度 T T T,每个位置 N N N 种情况,也就是 N T N^T NT),这种算法不可行!下面介绍计算观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ) 的有效算法,前向-后向算法(forward-backward algorithm)
未完待续。。。