隐马尔科夫模型

一、序言

重新复习隐马尔科夫模型,重点是HMM模型的三个问题及前向、后向和维特比算法。

二、基本概念

2.1 定义

definition
隐马尔可夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。隐马尔可夫模型的形式定义如下:
设Q是所有可能的状态的集合,V是所有可能的观测的集合。
Q = q 1 , q 2 , . . . , q n , V = v 1 , v 2 , . . . v m Q={q_{1},q_{2},...,q_{n}}, \quad 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}}, \quad 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×n} A=[aij]n×n
其中,
a i j = P ( i t = q j ∣ i t − 1 = q i ) , i = 1 , . . . n ; j = 1 , . . . , n a_{ij}=P(i_{t}=q_{j}|i_{t-1}=q_{i}), \quad i=1,...n;j=1,...,n aij=P(it=qjit1=qi),i=1,...n;j=1,...,n
是在时刻 t − 1 t-1 t1处于状态 q i q_{i} qi的条件下在时刻 t t t转移到状态 q j q_{j} qj的概率。
B B B是观测概率矩阵:
B = [ b j k ] n × m B=[b_{jk}]_{n×m} B=[bjk]n×m
其中,
b k j = P ( o t = v k ∣ i t = q j ) , k = 1 , . . . m , j = 1 , . . . , n b_{kj}=P(o_{t}=v_{k}|i_{t}=q_{j}), \quad k=1,...m,j=1,...,n bkj=P(ot=vkit=qj),k=1,...m,j=1,...,n
是在时刻 t t t处于状态 q j q_{j} qj的条件下生成观测 v k v_{k} vk的概率。
π \pi π是初始状态概率向量:
π = π i \pi=\pi_{i} π=πi
其中,
π i = P ( i 1 = q i ) , i = 1 , . . . n \pi_{i}=P(i_{1}=q_{i}), \quad i=1,...n πi=P(i1=qi),i=1,...n
是初始时刻 t = 1 t=1 t=1处于状态 q i q_{i} qi的概率。
definition

2.2 例子

举个例子,当观察到屋外艳阳高照,那么肯定是晴天;若是半乌云密布,则是阴天;若是电闪雷鸣,则是雨天。艳阳高照,乌云密布,电闪雷鸣是我们能直接观察到的,对应着上面定义的观测序列。
而它们对应的天气状态分别是晴天、阴天和雨天,则是状态序列,因为我们先观察到外边的环境是艳阳高照,乌云密布,电闪雷鸣,然后再推测出是晴天、阴天还是雨天。
如下图所示,上面的是一条隐马尔科夫链,下面对应着其随机生成的状态序列。

如下图所示,是一个完整的 HMM 模型。

状态集合 Q = q 1 , q 2 , q 3 Q={q_{1},q_{2},q_{3}} Q=q1,q2,q3,其中 q 1 = 艳 阳 高 照 q_{1}=艳阳高照 q1= q 2 = 乌 云 密 布 q_{2}=乌云密布 q2= q 3 = 电 闪 雷 鸣 q_{3}=电闪雷鸣 q3=
观测集合 V = v 1 , v 2 , v 3 V={v_{1},v_{2},v_{3}} V=v1,v2,v3,其中 v 1 = 晴 天 v_{1}=晴天 v1= v 2 = 阴 天 v_{2}=阴天 v2= v 3 = 雨 天 v_{3}=雨天 v3=
状态转移概率矩阵 A A A

观测概率矩阵 B B B

初始状态概率 π \pi π

以上数据是随便写的。

2.3 基本假设

三、三个问题

只看这个可能有点晦涩,下面就例子说的通俗一下:

3.1 概率计算问题

评估问题,即概率计算问题,是三个问题中最简单的。给定 HMM 模型 λ \lambda λ,也就是已经知道状态转移概率矩阵 A A A、观测概率矩阵 B B B 和初始状态概率 π \pi π,同时给出观测序列 O = o 1 , o 2 , . . . , o t O={o_{1},o_{2},...,o_{t}} O=o1,o2,...,ot,求在该 HMM 模型下这个观测序列生成的概率。例如求接下来三天的观测天气是(阴天,雨天,晴天)的概率。解决算法:前向-后向算法。

3.2 学习问题

学习问题是三个问题中最复杂的一个。这个问题中只给出观测序列 O = o 1 , o 2 , . . . , o t O={o_{1},o_{2},...,o_{t}} O=o1,o2,...,ot,让求 HMM 模型 λ \lambda λ 的三个参数: A A A B B B π \pi π。例如,给出观测天气是(阴天,雨天,晴天),根据观测序列求一个 HMM 模型。解决算法: B a u m − W e l c h Baum-Welch BaumWelch 算法(EM算法)。

3.3 预测问题

预测问题,也称为解码问题。给定 HMM 模型 λ \lambda λ 和观测序列 O = o 1 , o 2 , . . . , o t O={o_{1},o_{2},...,o_{t}} O=o1,o2,...,ot,求在该 HMM 模型下最有可能生成这个观测序列的隐状态序列。例如,观测天气是(阴天,雨天,晴天),求最有可能对应该观测序列的状态序列是(艳阳高照,乌云密布,电闪雷鸣),还是(乌云密布,电闪雷鸣,艳阳高照),或者是其他的某个状态序列。解决算法: V i t e r b i Viterbi Viterbi 算法(一种动态规划)。

四、三个问题解决算法

4.1 概率计算算法

目的:给定 HMM 模型 λ = ( 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,求在该HMM 模型下生成该观测序列的概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

4.1.1 直接计算法(暴力法)

首先,在给定 HMM 模型下,生成 一个 隐状态序列 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_{1}i_{2}}a_{i_{2}i_{3}}...a_{i_{T-1}i_{T}} P(Iλ)=πi1ai1i2ai2i3...aiT1iT
然后,在该状态序列,生成对应的观测序列 O = o 1 , o 2 , . . . , o T O={o_{1},o_{2},...,o_{T}} O=o1,o2,...,oT 的改立为:
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(OI,λ)=bi1o1bi2o2...biToT
最后,在给定 HMM 模型下,生成状态序列 I I I 和观测序列 O O O 的联合概率为:
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_{1}i_{2}}b_{i_{2}o_{2}}...a_{i_{T-1}i_{T}}b_{i_{T}o_{T}} P(O,Iλ)=P(OI,λ)P(Iλ)=πi1bi1o1ai1i2bi2o2...aiT1iTbiToT
综上是 HMM 模型生成一个状态序列,再生成观测序列的概率。只要对所有不同的状态序列 I I I 求和,就是要求的给定观测序列的概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)
P ( O ∣ λ ) = ∑ I P ( O ∣ I , λ ) P ( I ∣ λ ) = ∑ I 1 , I 2 , . . . π 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_{I}P(O|I,\lambda)P(I|\lambda) = \sum_{I_{1},I_{2},...}\pi_{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λ)=IP(OI,λ)P(Iλ)=I1,I2,...πi1bi1o1ai1i2bi2o2...aiT1iTbiToT
使用该算法原理简单,但是计算量巨大。时间复杂度: O ( T N T ) O(TN^{T}) O(TNT)

4.1.2 前向算法
4.1.2.1 详解


前向概率 α t ( i ) \alpha_{t}(i) αt(i) 如下图所示:

其实,前向算法可以看做是动态规划。
注意看呦, α t ( i ) = P ( o 1 , o 2 , . . . , o t , i t = q t ∣ λ ) \alpha_{t}(i) = P(o_{1},o_{2},...,o_{t},i_{t}=q_{t}|\lambda) αt(i)=P(o1,o2,...,ot,it=qtλ) 这不就是 暴力法中第三步 求的状态序列 I I I 和观测序列 O O O 的联合概率吗?
我们只要把 t t t 时刻中所有状态序列 q i ∈ ( q 1 , q 2 , . . . , q n ) q_{i} \in (q_{1},q_{2},...,q_{n}) qi(q1,q2,...,qn) 做累加,然后乘上 t + 1 t+1 t+1 时刻 q i q_{i} qi 对应的观测概率,即 [ ∑ j = 1 n α t ( j ) a j i ] b i o t + 1 [\sum_{j=1}^n \alpha_{t}(j)a_{ji}]b_{i}o_{t+1} [j=1nαt(j)aji]biot+1,就得到 t + 1 t+1 t+1 时刻的状态序列 I I I 和观测序列 O O O 的联合概率,即前向概率 α t + 1 ( i ) \alpha_{t+1}(i) αt+1(i)
如下图所示:

所以,只要计算出 t = 1 t=1 t=1 时刻的前向概率 α 1 ( i ) \alpha_{1}(i) α1(i),往后依次递推就可以了。例如 α 1 ( i ) = π i 1 b i 1 o 1 \alpha_{1}(i) = \pi_{i_{1}}b_{i_{1}o_{1}} α1(i)=πi1bi1o1 α 2 ( i ) = α 1 ( 1 ) b 1 o i + α 1 ( 2 ) b 2 o i + . . . + α 1 ( n ) b n o i \alpha_{2}(i) = \alpha_{1}(1)b_{1}o_{i} + \alpha_{1}(2)b_{2}o_{i} +...+\alpha_{1}(n)b_{n}o_{i} α2(i)=α1(1)b1oi+α1(2)b2oi+...+α1(n)bnoi

综上:

4.1.2.2 例子


观测集合为:
V = ( 红 , 白 ) V=(红,白) V=()
状态集合为:
Q = ( 盒 子 1 , 盒 子 2 , 盒 子 3 ) Q=(盒子1,盒子2,盒子3) Q=(1,2,3)
观测序列为:
O = ( 红 , 白 , 红 ) O=(红,白,红) O=()
状态转移概率矩阵为 A A A :
i i i 行表示选择第 i i i 个盒子,第 j j j 列表示转移到第 j j j 个盒子, 比如: A 23 A_{23} A23 表示上一次选择第二个盒子,这次选择第三个盒子的概率为 0.2。
观测概率矩阵 B B B
i i i 行表示选择的是第 i i i 个盒子,第 j j j 列表示从该盒子取到 j j j 号球, 比如: B 31 B_{31} B31 表示从第二个盒子取出球的概率为 0.7。

(1) 计算初值 t = 1 t=1 t=1
t = 1 t=1 t=1 时刻取出红球,隐状态是盒子1的概率:
α 1 ( 1 ) = π 1 b 1 o 1 = 0.2 × 0.5 = 0.10 \alpha_{1}(1) = \pi_{1}b_{1o_{1}} = 0.2×0.5=0.10 α1(1)=π1b1o1=0.2×0.5=0.10
t = 1 t=1 t=1 时刻取出红球,隐状态是盒子2的概率:
α 1 ( 2 ) = π 2 b 2 o 1 = 0.4 × 0.4 = 0.16 \alpha_{1}(2) = \pi_{2}b_{2o_{1}} = 0.4×0.4=0.16 α1(2)=π2b2o1=0.4×0.4=0.16
t = 1 t=1 t=1 时刻取出红球,隐状态是盒子3的概率:
α 1 ( 3 ) = π 3 b 3 o 1 = 0.4 × 0.7 = 0.28 \alpha_{1}(3) = \pi_{3}b_{3o_{1}} = 0.4×0.7=0.28 α1(3)=π3b3o1=0.4×0.7=0.28
(2) 递推计算 t = 2 t=2 t=2
t = 2 t=2 t=2 时刻取出白球,隐状态是盒子1的概率:
α 2 ( 1 ) = [ ∑ i = 1 3 α 1 ( i ) a i 1 ] b 1 o 2 = ( 0.10 × 0.5 + 0.16 × 0.3 + 0.28 ∗ 0.2 ) × 0.5 = 0.154 × 0.5 = 0.077 \alpha_{2}(1) = [\sum_{i=1}^3 \alpha_{1}(i)a_{i1}]b_{1o_{2}} = (0.10×0.5+0.16×0.3+0.28*0.2)×0.5=0.154×0.5=0.077 α2(1)=[i=13α1(i)ai1]b1o2=(0.10×0.5+0.16×0.3+0.280.2)×0.5=0.154×0.5=0.077
t = 2 t=2 t=2 时刻取出白球,隐状态是盒子2的概率:
α 2 ( 2 ) = [ ∑ i = 1 3 α 1 ( i ) a i 2 ] b 2 o 2 = ( 0.10 × 0.2 + 0.16 × 0.5 + 0.28 ∗ 0.3 ) × 0.6 = 0.184 × 0.6 = 0.1104 \alpha_{2}(2) = [\sum_{i=1}^3 \alpha_{1}(i)a_{i2}]b_{2o_{2}} = (0.10×0.2+0.16×0.5+0.28*0.3)×0.6=0.184×0.6=0.1104 α2(2)=[i=13α1(i)ai2]b2o2=(0.10×0.2+0.16×0.5+0.280.3)×0.6=0.184×0.6=0.1104
t = 2 t=2 t=2 时刻取出白球,隐状态是盒子3的概率:
α 2 ( 3 ) = [ ∑ i = 1 3 α 1 ( i ) a i 3 ] b 3 o 2 = ( 0.10 × 0.3 + 0.16 × 0.2 + 0.28 ∗ 0.5 ) × 0.3 = 0.202 × 0.3 = 0.0606 \alpha_{2}(3) = [\sum_{i=1}^3 \alpha_{1}(i)a_{i3}]b_{3o_{2}} = (0.10×0.3+0.16×0.2+0.28*0.5)×0.3=0.202×0.3=0.0606 α2(3)=[i=13α1(i)ai3]b3o2=(0.10×0.3+0.16×0.2+0.280.5)×0.3=0.202×0.3=0.0606
(3) 递推计算 t = 3 t=3 t=3
t = 3 t=3 t=3 时刻取出红球,隐状态是盒子1的概率:
α 3 ( 1 ) = [ ∑ i = 1 3 α 2 ( i ) a i 1 ] b 1 o 2 = 0.04187 \alpha_{3}(1) = [\sum_{i=1}^3 \alpha_{2}(i)a_{i1}]b_{1o_{2}}=0.04187 α3(1)=[i=13α2(i)ai1]b1o2=0.04187
t = 3 t=3 t=3 时刻取出红球,隐状态是盒子2的概率:
α 3 ( 2 ) = [ ∑ i = 1 3 α 2 ( i ) a i 2 ] b 2 o 2 = 0.03551 \alpha_{3}(2) = [\sum_{i=1}^3 \alpha_{2}(i)a_{i2}]b_{2o_{2}}=0.03551 α3(2)=[i=13α2(i)ai2]b2o2=0.03551
t = 3 t=3 t=3 时刻取出红球,隐状态是盒子2的概率:
α 3 ( 3 ) = [ ∑ i = 1 3 α 2 ( i ) a i 3 ] b 3 o 2 = 0.05284 \alpha_{3}(3) = [\sum_{i=1}^3 \alpha_{2}(i)a_{i3}]b_{3o_{2}}=0.05284 α3(3)=[i=13α2(i)ai3]b3o2=0.05284
(4) 终止
P ( O ∣ λ ) = ∑ i = 1 3 α 3 ( i ) = 0.13022 P(O|\lambda) =\sum_{i=1}^3 \alpha_{3}(i)=0.13022 P(Oλ)=i=13α3(i)=0.13022

4.1.3 后向算法

其实后向算法和前向算法类似,只不过是从后往前递推。

后向概率 β t ( i ) \beta{t}(i) βt(i) 如下图所示:

首先,定义最后时刻的 β T ( i ) = 1 \beta_{T}(i) = 1 βT(i)=1
然后 ,对于 t = T − 1 , T − 2 , . . . , 1 t = T-1,T-2,...,1 t=T1,T2,...,1,后向概率 β t ( i ) \beta_{t}(i) βt(i) 就等于 t t t 时刻的状态 i t = q i i_{t} = q_{i} it=qi 转移到时刻 t + 1 t+1 t+1 的状态 i t + 1 = q j i_{t+1} = q_{j} it+1=qj 的概率 × t + 1 t+1 t+1 时刻状态 i t + 1 i_{t+1} it+1 对应的观测状态 o t + 1 o_{t+1} ot+1 的概率 × t + 1 t+1 t+1 时刻的后向概率 β t + 1 ( i ) \beta_{t+1}(i) βt+1(i)。即:
β t ( i ) = ∑ j = 1 n a i j b j o t + 1 β t + 1 ( i ) \beta_{t}(i) = \sum_{j=1}^n a_{ij}b_{jo_{t+1}}\beta_{t+1}(i) βt(i)=j=1naijbjot+1βt+1(i)
如下图所示:

最后,观测概率 P ( O ∣ λ ) = ∑ i = 1 n π i b i o 1 β 1 ( i ) P(O|\lambda) = \sum_{i=1}^n \pi_{i}b_{io_{1}}\beta_{1}(i) P(Oλ)=i=1nπibio1β1(i)
其实,观测概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ) 还可以这么写:
P ( O ∣ λ ) = ∑ i = 1 n ∑ j = 1 n α t ( i ) a i j b j o t + 1 β t + 1 ( j ) P(O|\lambda) = \sum_{i=1}^n \sum_{j=1}^n \alpha_{t}(i)a_{ij}b_{jo_{t+1}}\beta_{t+1}(j) P(Oλ)=i=1nj=1nαt(i)aijbjot+1βt+1(j)
是不是其实很好理解。

4.1.3 一些概率与期望的计算

利用前向概率和后向概率,可以得到关于单个状态和两个状态概率的计算公式。

  1. 给定模型 λ \lambda λ 和观测 O O O,在时刻 t t t 处于状态 q i q_{i} qi 的概率。记
    γ t ( i ) = P ( i t = q i ∣ O , λ ) = P ( i t = q i , O ∣ λ ) P ( O ∣ λ ) \gamma_{t}(i) = P(i_{t}=q_{i}|O,\lambda) = \frac{P(i_{t}=q_{i},O|\lambda)}{P(O|\lambda)} γt(i)=P(it=qiO,λ)=P(Oλ)P(it=qi,Oλ)
    由前向概率 α t ( i ) \alpha_t(i) αt(i) 和后向概率 β t ( i ) \beta_t(i) βt(i) 定义可知:
    α t ( i ) β t ( i ) = P ( i t = q t ∣ O , λ ) \alpha_{t}(i)\beta_t(i) = P(i_{t}=q_{t}|O,\lambda) αt(i)βt(i)=P(it=qtO,λ)
    于是得到:
    γ t ( i ) = α t ( i ) β t ( i ) P ( O ∣ λ ) = α t ( i ) β t ( i ) ∑ j = 1 N α t ( j ) β t ( j ) \gamma_{t}(i) = \frac{\alpha_{t}(i)\beta_t(i)}{P(O|\lambda)} = \frac{\alpha_{t}(i)\beta_t(i)}{\sum_{j=1}^N \alpha_{t}(j)\beta_t(j)} γt(i)=P(Oλ)αt(i)βt(i)=j=1Nαt(j)βt(j)αt(i)βt(i)
  2. 给定模型 λ \lambda λ 和观测 O O O,在时刻 t t t 处于状态 q i q_{i} qi 的概率。同时在时刻 t + 1 t+1 t+1 处于状态 q j q_{j} qj 的概率,记
    ξ t ( i , j ) = P ( i t = q i , i t + 1 = q j ∣ O , λ ) = P ( i t = q i , i t + 1 = q j , O ∣ λ ) ∑ i = 1 N ∑ j = 1 N P ( i t = q i , i t + 1 = q j , O ∣ λ ) \xi_{t}(i,j) = P(i_{t}=q_{i},i_{t+1}=q_{j}|O,\lambda) = \frac{P(i_{t}=q_{i},i_{t+1}=q_{j},O|\lambda)}{\sum_{i=1}^N \sum_{j=1}^N P(i_{t}=q_{i},i_{t+1}=q_{j},O|\lambda)} ξt(i,j)=P(it=qi,it+1=qjO,λ)=i=1Nj=1NP(it=qi,it+1=qj,Oλ)P(it=qi,it+1=qj,Oλ)

    P ( i t = q i , i t + 1 = q j , O ∣ λ ) = α t ( i ) a i j b j o t + 1 β t + 1 ( j ) P(i_{t}=q_{i},i_{t+1}=q_{j},O|\lambda) = \alpha_{t}(i)a_{ij}b_{jo_{t+1}}\beta_{t+1}(j) P(it=qi,it+1=qj,Oλ)=αt(i)aijbjot+1βt+1(j)
    所以
    ξ t ( i , j ) = q j , O ∣ λ ) = α t ( i ) a i j b j o t + 1 β t + 1 ( j ) ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j o t + 1 β t + 1 ( j ) \xi_{t}(i,j) = q_{j},O|\lambda) = \frac{\alpha_{t}(i)a_{ij}b_{jo_{t+1}}\beta_{t+1}(j)}{\sum_{i=1}^N \sum_{j=1}^N \alpha_{t}(i)a_{ij}b_{jo_{t+1}}\beta_{t+1}(j)} ξt(i,j)=qj,Oλ)=i=1Nj=1Nαt(i)aijbjot+1βt+1(j)αt(i)aijbjot+1βt+1(j)

4.2 学习算法

目的

  1. 给定观测序列 O = o 1 , o 2 , . . . , o T O={o_{1},o_{2},...,o_{T}} O=o1,o2,...,oT 和状态序列 I = i 1 , i 2 , . . . , i T I={i_{1},i_{2},...,i_{T}} I=i1,i2,...,iT,求HMM 模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 的三个参数。
  2. 给定观测序列 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,π) 的三个参数。

解决方法

  1. 监督算法
  2. B a u m − W e l c h Baum-Welch BaumWelch 算法
4.2.1 监督算法

第二步求观测概率应该是 b j k b_{jk} bjk,因为懒,就直接截图了。

4.2.2 Baum-Welch 算法

现在已经知道的是观测数据 O = o 1 , o 2 , . . . , o T O={o_{1},o_{2},...,o_{T}} O=o1,o2,...,oT, 设隐状态数据为 I = i 1 , i 2 , . . . , i T I={i_{1},i_{2},...,i_{T}} I=i1,i2,...,iT,那么完全数据是 ( O , I ) = ( o 1 , o 2 , . . . , o T , i 1 , i 2 , . . . , i T ) (O,I)=(o_{1},o_{2},...,o_{T},i_{1},i_{2},...,i_{T}) (O,I)=(o1,o2,...,oT,i1,i2,...,iT)。完全数据的对数似然函数是 l o g P ( O , I ∣ λ ) logP(O,I|\lambda) logP(O,Iλ)

既然 B a u m − W e l c h Baum-Welch BaumWelch 算法使用的就是 E M EM EM 算法,那么就要走两个步骤:
(1) E E E
求出联合分布 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,Iλ) 基于条件概率 ( I ∣ O , λ ‾ ) (I|O,\overline \lambda) (IO,λ) 的期望,其中 λ ‾ \overline \lambda λHMM 模型参数的当前估计值, λ \lambda λ 为极大化的 HMM 模型参数。
(2) M M M
最大化这个期望,得到更新的模型参数λ。接着不停的进行EM迭代,直到模型参数的值收敛为止。

公式推导
(1) E E E 步:求 Q Q Q 函数
根据 E M EM EM Q Q Q 函数定义,即这里要求的联合分布的期望为:
Q ( λ , λ ‾ ) = ∑ I P ( I ∣ O , λ ‾ ) l n P ( O , I ∣ λ ) = ∑ I l n P ( O , I ∣ λ ) P ( I , O ∣ λ ‾ ) P ( O , λ ‾ ) Q(\lambda,\overline \lambda) = \sum_{I}P(I|O,\overline \lambda)lnP(O,I|\lambda) = \sum_{I}lnP(O,I|\lambda)\frac{P(I,O|\overline \lambda)}{P(O,\overline \lambda)} Q(λ,λ)=IP(IO,λ)lnP(O,Iλ)=IlnP(O,Iλ)P(O,λ)P(I,Oλ)
P ( O , λ ‾ ) P(O,\overline \lambda) P(O,λ) 表示上次求出的参数与观测数据的联合概率,没有什么影响,所以:
Q ( λ , λ ‾ ) = ∑ I l n P ( O , I ∣ λ ) P ( I , O ∣ λ ‾ ) Q(\lambda,\overline \lambda) = \sum_{I}lnP(O,I|\lambda)P(I,O|\overline \lambda) Q(λ,λ)=IlnP(O,Iλ)P(I,Oλ)

P ( O , 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) = \pi_{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λ)=πi1bi1o1ai1i2bi2o2...aiT1iTbiToT
所以
Q ( λ , λ ‾ ) = ∑ I P ( I , O ∣ λ ‾ ) [ l n π i 1 + l n ( a i 1 i 2 + . . . + a i T − 1 i T + l n ( b i 1 o 1 + . . . + b i T o T ) ) ] = ∑ I l n π i 1 P ( I , O ∣ λ ‾ ) ⏟ 式 1 + ∑ I ( ∑ t = 1 T − 1 l n a i t i t + 1 ) P ( I , O ∣ λ ‾ ) ⏟ 式 2 + ∑ I ( ∑ t = 1 T l n b i t o t ) P ( I , O ∣ λ ‾ ) ⏟ 式 3 Q(\lambda,\overline \lambda) = \sum_{I}P(I,O|\overline \lambda) [ln \pi_{i_{1}} + ln(a_{i_{1}i_{2}}+...+a_{i_{T-1}i_{T}} + ln(b_{i_{1}o_{1}}+...+b_{i_{T}o_{T}}))] \\ = \underbrace{ \sum_{I} ln \pi_{i_{1}} P(I,O|\overline \lambda)}_{式1} + \underbrace{ \sum_{I} (\sum_{t=1}^{T-1} ln a_{i_{t}i_{t+1}}) P(I,O|\overline \lambda)}_{式2} + \underbrace{ \sum_{I} (\sum_{t=1}^{T} ln b_{i_{t}o_{t}}) P(I,O|\overline \lambda)}_{式3} Q(λ,λ)=IP(I,Oλ)[lnπi1+ln(ai1i2+...+aiT1iT+ln(bi1o1+...+biToT))]=1 Ilnπi1P(I,Oλ)+2 I(t=1T1lnaitit+1)P(I,Oλ)+3 I(t=1Tlnbitot)P(I,Oλ)

(2) M M M 步:极大化 Q Q Q,求模型参数 A , B , π A,B,\pi A,B,π
 1)求 π i \pi_{i} πi
 既然是求极值,肯定是要求导了。对于 π i \pi_{i} πi 来说,满足约束条件 ∑ t = 1 N π i = 1 \sum_{t=1}^N \pi_{i}=1 t=1Nπi=1。现在就变成了带约束条件的求极值,直接上拉格朗日乘子法。
 式 1 可以写成:
  ∑ I l n π i 1 P ( I , O ∣ λ ‾ ) = ∑ i = 1 N l n π i P ( O , i 1 = q i ∣ λ ‾ ) \sum_{I} ln \pi_{i_{1}} P(I,O|\overline \lambda) = \sum_{i=1}^N ln \pi_{i} P(O,i_{1}=q_{i}|\overline \lambda) Ilnπi1P(I,Oλ)=i=1NlnπiP(O,i1=qiλ)
 拉格朗日函数:
  L = ∑ i = 1 N l n π i P ( O , i 1 = q i ∣ λ ‾ ) + γ ( ∑ i = 1 N π i − 1 ) L = \sum_{i=1}^N ln \pi_{i}P(O,i_{1}=q_{i}|\overline \lambda) + \gamma(\sum_{i=1}^N \pi_{i}-1) L=i=1NlnπiP(O,i1=qiλ)+γ(i=1Nπi1)
 首先把求和 ∑ \sum 去掉,只对单个的 π i \pi_{i} πi 求偏导并等于 0
  ∂ L ∂ π i = P ( O , i 1 = q i ∣ λ ‾ ) π i + γ = 0 \frac{\partial L}{\partial \pi_{i}} = \frac{P(O,i_{1}=q_{i}|\overline \lambda)}{\pi_{i}} + \gamma = 0 πiL=πiP(O,i1=qiλ)+γ=0
 等价于:
  ∂ L ∂ π i = P ( O , i 1 = q i ∣ λ ‾ ) + γ π i = 0 \frac{\partial L}{\partial \pi_{i}} =P(O,i_{1}=q_{i}|\overline \lambda) + \gamma \pi_{i} = 0 πiL=P(O,i1=qiλ)+γπi=0
 然后再添上对 i i i 的求和 ∑ \sum ,可得到:
  γ = − P ( O ∣ λ ‾ ) \gamma = -P(O|\overline \lambda) γ=P(Oλ)
 带入到第三项公式,可得:
  π i = P ( O , i 1 = q i ∣ λ ‾ ) P ( O ∣ λ ‾ ) \pi_{i} = \frac{P(O,i_{1}=q_{i}|\overline \lambda)}{P(O|\overline \lambda)} πi=P(Oλ)P(O,i1=qiλ)

2)求 a i j a_{ij} aij
 式 2 可以写成:
  ∑ I ( ∑ t = 1 T − 1 l n a i t i t + 1 ) P ( O , I ∣ λ ‾ ) = ∑ i = 1 N ∑ j = 1 N ∑ t = 1 T − 1 l n a i j P ( O , i t = q i , i t + 1 = q j ∣ λ ‾ ) \sum_{I} (\sum_{t=1}^{T-1} ln a_{i_{t}i_{t+1}}) P(O,I|\overline \lambda) = \sum_{i=1}^N \sum_{j=1}^N \sum_{t=1}^{T-1} ln a_{ij} P(O,i_{t}=q_{i},i_{t+1}=q_{j}|\overline \lambda) I(t=1T1lnaitit+1)P(O,Iλ)=i=1Nj=1Nt=1T1lnaijP(O,it=qi,it+1=qjλ)
 同样有约束条件 ∑ j = 1 N a i j = 1 \sum_{j=1}^Na_{ij}=1 j=1Naij=1,最后可以得到:
  a i j = ∑ t = 1 T − 1 P ( O , i 1 = q i , i t + 1 = q j ∣ λ ‾ ) P ( O , i t = q i ∣ λ ‾ ) a_{ij} = \frac{\sum_{t=1}^{T-1} P(O,i_{1}=q_{i},i_{t+1}=q_{j}|\overline \lambda)}{P(O,i_{t}=q_{i}|\overline \lambda)} aij=P(O,it=qiλ)t=1T1P(O,i1=qi,it+1=qjλ)
 3)求 b i j b_{ij} bij
 式 3 可以写成:
   ∑ I ( ∑ t = 1 T l n b i t o t ) P ( I , O ∣ λ ‾ ) = ∑ j = 1 N ∑ t = 1 T − 1 l n b j o t P ( O , i t = q j ∣ λ ‾ ) \sum_{I} (\sum_{t=1}^{T} ln b_{i_{t}o_{t}}) P(I,O|\overline \lambda) = \sum_{j=1}^N \sum_{t=1}^{T-1} lnb_{jo_{t}}P(O,i_{t}=q_{j}|\overline \lambda) I(t=1Tlnbitot)P(I,Oλ)=j=1Nt=1T1lnbjotP(O,it=qjλ)
 同样有约束条件 ∑ k = 1 M b j k = 1 \sum_{k=1}^M b_{jk}=1 k=1Mbjk=1,要注意的是只有在 o t = v k o_{t}=v_{k} ot=vk b j o t b_{jo_{t}} bjot b j k b_{jk} bjk 的偏导数才不为 0,以 I ( o t = v k ) I(o_{t}=v_{k}) I(ot=vk) 表示,最后可以得到:
  b j k = ∑ t = 1 T P ( O , i t = q j ∣ λ ‾ ) I ( o t = v k ) ∑ t = 1 T P ( O , i t = q j ∣ λ ‾ ) b_{jk} = \frac{\sum_{t=1}^{T} P(O,i_{t}=q_{j}|\overline \lambda) I(o_{t}=v_{k})}{\sum_{t=1}^{T} P(O,i_{t}=q_{j}|\overline \lambda)} bjk=t=1TP(O,it=qjλ)t=1TP(O,it=qjλ)I(ot=vk)

参数估计公式
得到参数后,可以用 4.1.3 节的 γ t ( i ) , ξ t ( i , j ) \gamma_{t}(i),\xi_{t}(i,j) γt(i),ξt(i,j) 表示:

算法总结

4.3 预测算法

目的:给定 HMM 模型 λ = ( 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,求在该观测序列下,最可能对应的状态序列 I ∗ = i 1 ∗ , i 2 ∗ , . . . , i T ∗ I^*={i_{1}^*,i_{2}^*,...,i_{T}^*} I=i1,i2,...,iT,也就是最大化 P ( I ∗ ∣ O ) P(I^*|O) P(IO)
解决Viterbi 算法。
其实维特比算法就用动态规划的方法求概率最大路径,计算过程中的每条路径都对应着一个状态序列。计算过程中将最优路径经过的点都保存下来。得到最优路径后,由后向前逐步求得最优结点,这就是维特比算法。
过程
因为计算过程很简单,就直接给出书中的截图了。
首先导入两个变量 δ \delta δ ψ \psi ψ。定义在时刻 t t t 状态为 i i i 的所有单个路径 ( i 1 , i 2 , . . . , i t ) (i_{1} ,i_{2},...,i_{t} ) (i1,i2,...,it) 中概率最大值为:


过程是不是很好理解?如果还不好理解,就继续看个例子。
例子

整个计算过程如下图所示,


Reference

统计学习方法 李航

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值