隐马尔科夫模型

隐马尔科夫模型

1 隐马尔科夫模型概述

1.1 隐马尔科夫模型的定义

隐马尔科夫模型是关于时序的概率模型,描述由隐藏的马尔科夫链生成不可观测的状态序列,再由状态序列生成可观测的观测序列的过程。

设隐马尔科夫模型的状态集合 Y \mathcal{Y} Y { s 1 , s 2 , . . . , s N } \{s_1,s_2,...,s_N\} {s1,s2,...,sN},观测集合 X \mathcal{X} X { o 1 , o 2 , . . . , o M } \{o_1,o_2,...,o_M\} {o1,o2,...,oM}。一个隐马尔科夫模型的变量可以分为两组,一组是状态变量 Y = ( y 1 , y 2 , . . . , y T ) Y=(y_1,y_2,...,y_T) Y=(y1,y2,...,yT),其中 y i y_i yi表示系统在第 i i i时刻的状态,状态是不可观测的;一组是观测变量 X = ( x 1 , x 2 , . . . , x T ) X=(x_1,x_2,...,x_T) X=(x1,x2,...,xT),其中 x i x_i xi表示系统在第 i i i时刻的观测值。

为确定一个隐马尔科夫模型,需要以下三组参数

  • 状态转移概率:模型在状态间转换的概率,表示为矩阵 A = [ a i j ] N × N A=[a_{ij}]_{N\times N} A=[aij]N×N,其中
    a i j = P ( y t + 1 = s j ∣ y t = s i ) a_{ij}=P(y_{t+1}=s_j\mid y_{t}=s_i) aij=P(yt+1=sjyt=si)

  • 输出观测概率:模型在当前状态获得各个观测值的概率,表示为矩阵 B = [ b j ( k ) ] N × M B=[b_{j}(k)]_{N \times M} B=[bj(k)]N×M,其中
    b j ( k ) = P ( x t = o k ∣ y t = s j ) b_{j}(k)=P(x_t=o_k\mid y_t=s_j) bj(k)=P(xt=okyt=sj)

  • 初始状态概率:模型在初识时刻各状态出现的概率,通常表示为 π = ( π 1 , π 2 , . . . , π N ) \pi=(\pi_1,\pi_2,...,\pi_N) π=(π1,π2,...,πN),其中
    π i = P ( y 1 = s i ) \pi_i=P(y_1=s_i) πi=P(y1=si)

因此,隐马尔科夫模型可用三元组 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)表示。

1.2 观测序列的生成过程

给定隐马尔科夫模型 λ \lambda λ,观测序列的生成过程描述如下:

( 1 ) (1) (1) 按照初始状态概率选择 y 1 y_1 y1,令 t = 1 t=1 t=1

( 2 ) (2) (2) 根据输出观测概率矩阵 B B B y t y_t yt选择观测值 x t x_t xt

( 3 ) (3) (3) 根据状态转移矩阵 B B B y t y_t yt选择状态 y t + 1 y_{t+1} yt+1

( 4 ) (4) (4) 如果 t < T t<T t<T,设置 t = t + 1 t=t+1 t=t+1,转到第(2)步,否则停止。

1.3 隐马尔科夫模型的三个基本问题

隐马尔科夫模型有 3 3 3个基本问题。

( 1 ) (1) (1) 概率计算问题。给定模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 X = ( x 1 , x 2 , . . . , x T ) X=(x_1,x_2,...,x_T) X=(x1,x2,...,xT),计算在模型 λ \lambda λ下观测 X X X出现的概率 P ( X ∣ λ ) P(X\mid\lambda) P(Xλ)

( 2 ) (2) (2) 参数估计问题。给定观测序列 X = ( x 1 , x 2 , . . . , x T ) X=(x_1,x_2,...,x_T) X=(x1,x2,...,xT),估计模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)的参数,使得在该模型下观测概率 P ( X ∣ λ ) P(X\mid\lambda) P(Xλ)最大。

( 3 ) (3) (3) 状态预测问题。给定模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 X = ( x 1 , x 2 , . . . , x T ) X=(x_1,x_2,...,x_T) X=(x1,x2,...,xT),求最有可能的状态序列,即使得 P ( Y ∣ X ) P(Y\mid X) P(YX)最大的状态序列 Y = ( y 1 , y 2 , . . . , y T ) Y=(y_1,y_2,...,y_T) Y=(y1,y2,...,yT)

下面将逐一介绍这三种问题的解法。

2 概率计算

2.1 直接计算法

给定模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 X = ( x 1 , x 2 , . . . , x T ) X=(x_1,x_2,...,x_T) X=(x1,x2,...,xT),计算在模型 λ \lambda λ下观测 X X X出现的概率 P ( X ∣ λ ) P(X\mid\lambda) P(Xλ),最直接的方法就是枚举所有可能的状态序列 Y = ( y 1 , y 2 , . . . , y T ) Y=(y_1,y_2,...,y_T) Y=(y1,y2,...,yT),计算联合概率 P ( X , Y ∣ λ ) P(X,Y\mid\lambda) P(X,Yλ),然后对所有可能的状态序列求和,计算 P ( X ∣ λ ) P(X\mid\lambda) P(Xλ)

根据贝叶斯公式
P ( X , Y ∣ λ ) = P ( X ∣ Y , λ ) P ( Y ∣ λ ) P(X,Y\mid\lambda)=P(X\mid Y,\lambda)P(Y\mid\lambda) P(X,Yλ)=P(XY,λ)P(Yλ)
其中
P ( Y ∣ λ ) = π y 1 a y 1 y 2 a y 2 y 3 , . . . , a y T − 1 y T P ( X ∣ Y , λ ) = b y 1 ( x 1 ) b y 2 ( x 2 ) , . . . , b y T ( x T ) \begin{aligned} P(Y\mid\lambda)&=\pi_{y_1}a_{y_1y_2}a_{y_2y_3},...,a_{y_{T-1}y_T}\\ P(X\mid Y,\lambda)&=b_{y_1}(x_1)b_{y_2}(x_2),...,b_{y_T}(x_T) \end{aligned} P(Yλ)P(XY,λ)=πy1ay1y2ay2y3,...,ayT1yT=by1(x1)by2(x2),...,byT(xT)
因此
P ( X , Y ∣ λ ) = π y 1 b y 1 ( x 1 ) a y 1 y 2 b y 2 ( x 2 ) , . . . , a y T − 1 y T b y T ( x T ) P(X,Y\mid\lambda)=\pi_{y_1}b_{y_1}(x_1)a_{y_1y_2}b_{y_2}(x_2),...,a_{y_{T-1}y_T}b_{y_T}(x_T) P(X,Yλ)=πy1by1(x1)ay1y2by2(x2),...,ayT1yTbyT(xT)
然后,通过对所有可能的状态序列求和,就可以得到观测序列 X X X的概率 P ( X ∣ λ ) P(X\mid\lambda) P(Xλ),即
P ( X ∣ λ ) = ∑ Y P ( X , Y ∣ λ ) = ∑ y 1 , y 2 , . . . , y T π y 1 b y 1 ( x 1 ) a y 1 y 2 b y 2 ( x 2 ) , . . . , a y T − 1 y T b y T ( x T ) \begin{aligned} P(X\mid\lambda)&=\sum_{Y}P(X,Y\mid\lambda)\\ &=\sum_{y_1,y_2,...,y_T}\pi_{y_1}b_{y_1}(x_1)a_{y_1y_2}b_{y_2}(x_2),...,a_{y_{T-1}y_T}b_{y_T}(x_T) \end{aligned} P(Xλ)=YP(X,Yλ)=y1,y2,...,yTπy1by1(x1)ay1y2by2(x2),...,ayT1yTbyT(xT)
这种方法计算量很大,不可行。下面介绍更有效的算法:前向-后向算法。

2.2 前向算法

前向概率:给定隐马尔科夫模型 λ \lambda λ,定义到时刻 t t t观测序列为 x 1 , x 2 , . . . , x t x_1,x_2,...,x_t x1,x2,...,xt且状态为 s i s_i si的概率为前向概率,记作
α t ( i ) = P ( x 1 , x 2 , . . . x t , y t = s i ∣ λ ) \alpha_t(i)=P(x_1,x_2,...x_t,y_t=s_i\mid\lambda) αt(i)=P(x1,x2,...xt,yt=siλ)

观测序列概率的前向算法

输入:隐马尔科夫模型 λ \lambda λ,观测序列 X X X

输出:观测序列概率 P ( X ∣ λ ) P(X\mid\lambda) P(Xλ)

( 1 ) (1) (1) 初值
α 1 ( i ) = π i b i ( x 1 ) i = 1 , 2 , . . . , N \alpha_1(i)=\pi_ib_{i}(x_1)\quad i=1,2,...,N α1(i)=πibi(x1)i=1,2,...,N
( 2 ) (2) (2) 递推,对 t = 1 , 2 , . . . , T − 1 t=1,2,...,T-1 t=1,2,...,T1
α t + 1 ( i ) = ( ∑ j = 1 N α t ( j ) a j i ) b i ( x t + 1 ) i = 1 , 2 , . . . , N \alpha_{t+1}(i)=(\sum_{j=1}^N\alpha_{t}(j)a_{ji})b_{i}(x_{t+1})\quad i=1,2,...,N αt+1(i)=(j=1Nαt(j)aji)bi(xt+1)i=1,2,...,N
( 3 ) (3) (3) 终止
P ( X ∣ λ ) = ∑ j = 1 N α T ( j ) P(X\mid\lambda)=\sum_{j=1}^N\alpha_T(j) P(Xλ)=j=1NαT(j)

2.3 后向算法

后向概率:给定隐马尔科夫模型 λ \lambda λ,定义时刻 t t t状态为 s i s_i si的条件下,从 t + 1 t+1 t+1 T T T观测序列为 x t + 1 , x t + 2 , . . . , x T x_{t+1},x_{t+2},...,x_{T} xt+1,xt+2,...,xT的概率为后向概率,记作
β t ( i ) = P ( x t + 1 , x t + 2 , . . . , x T ∣ y t = s i , λ ) \beta_t(i)=P(x_{t+1},x_{t+2},...,x_T\mid y_t=s_i,\lambda) βt(i)=P(xt+1,xt+2,...,xTyt=si,λ)

观测序列概率的后向算法

输入:隐马尔科夫模型 λ \lambda λ,观测序列 X X X

输出:观测序列概率 P ( X ∣ λ ) P(X\mid\lambda) P(Xλ)

( 1 ) (1) (1) 初值
β T ( i ) = 1 i = 1 , 2 , . . . , N \beta_T(i)=1\quad i=1,2,...,N βT(i)=1i=1,2,...,N
( 2 ) (2) (2) 递推,对 t = T − 1 , T − 2 , . . . , 1 t=T-1,T-2,...,1 t=T1,T2,...,1
β t ( i ) = ∑ j = 1 N a i j b j ( x t + 1 ) β t + 1 ( j ) i = 1 , 2 , . . . , N \beta_{t}(i)=\sum_{j=1}^Na_{ij}b_{j}(x_{t+1})\beta_{t+1}(j)\quad i=1,2,...,N βt(i)=j=1Naijbj(xt+1)βt+1(j)i=1,2,...,N
( 3 ) (3) (3) 终止
P ( X ∣ λ ) = ∑ i = 1 N π i b i ( x 1 ) β 1 ( i ) P(X\mid\lambda)=\sum_{i=1}^N\pi_ib_{i}(x_1)\beta_1(i) P(Xλ)=i=1Nπibi(x1)β1(i)

2.4 一些概率与期望值的计算

利用前向概率和后向概率,可以方便的对一些概率进行计算。

1. 1. 1. 给定参数 λ \lambda λ和观测 X X X,在时刻 t t t处于状态 s i s_i si的概率,记为
γ t ( i ) = P ( y t = s i ∣ X , λ ) \gamma_t(i)=P(y_t=s_i\mid X,\lambda) γt(i)=P(yt=siX,λ)
根据贝叶斯公式
γ t ( i ) = P ( y t = s i , X ∣ λ ) P ( X ∣ λ ) = P ( y t = s i , X ∣ λ ) ∑ i = 1 N P ( y t = s i , X ∣ λ ) \gamma_t(i)=\frac{P(y_t=s_i,X\mid\lambda)}{P(X\mid\lambda)}=\frac{P(y_t=s_i,X\mid\lambda)}{\sum_{i=1}^NP(y_t=s_i,X\mid\lambda)} γt(i)=P(Xλ)P(yt=si,Xλ)=i=1NP(yt=si,Xλ)P(yt=si,Xλ)
根据前向概率与后向概率的定义有
P ( y t = s i ∣ X , λ ) = α t ( i ) β t ( i ) P(y_t=s_i\mid X,\lambda)=\alpha_t(i)\beta_t(i) P(yt=siX,λ)=αt(i)βt(i)
因此得到
γ t ( i ) = α t ( i ) β t ( i ) ∑ j = 1 T α t ( j ) β t ( j ) \gamma_t(i)=\frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^T\alpha_t(j)\beta_t(j)} γt(i)=j=1Tαt(j)βt(j)αt(i)βt(i)
2. 2. 2. 给定参数 λ \lambda λ和观测 X X X,在时刻 t t t处于状态 s i s_i si且在时刻 t + 1 t+1 t+1处于状态 s j s_j sj的概率,记为
ξ t ( i , j ) = P ( y t = s i , y t + 1 = s j ∣ X , λ ) \xi_t(i,j)=P(y_t=s_i,y_{t+1}=s_j\mid X,\lambda) ξt(i,j)=P(yt=si,yt+1=sjX,λ)
根据贝叶斯公式
ξ t ( i , j ) = P ( y t = s i , y t + 1 = s j , X ∣ λ ) P ( X , ∣ λ ) = P ( y t = s i , y t + 1 = s j , X ∣ λ ) ∑ i = 1 N ∑ j = 1 N P ( y t = s i , y t + 1 = s j , X ∣ λ ) \xi_t(i,j)=\frac{P(y_t=s_i,y_{t+1}=s_j,X\mid\lambda)}{P(X,\mid\lambda)} =\frac{P(y_t=s_i,y_{t+1}=s_j,X\mid\lambda)}{\sum_{i=1}^N\sum_{j=1}^NP(y_t=s_i,y_{t+1}=s_j,X\mid\lambda)} ξt(i,j)=P(X,λ)P(yt=si,yt+1=sj,Xλ)=i=1Nj=1NP(yt=si,yt+1=sj,Xλ)P(yt=si,yt+1=sj,Xλ)

P ( y t = s i , y t + 1 = s j , X ∣ λ ) = α t ( i ) a i j b j ( x t + 1 ) β t + 1 ( j ) P(y_t=s_i,y_{t+1}=s_j,X\mid\lambda)=\alpha_t(i)a_{ij}b_{j}(x_{t+1})\beta_{t+1}(j) P(yt=si,yt+1=sj,Xλ)=αt(i)aijbj(xt+1)βt+1(j)
因此得到
ξ t ( i , j ) = α t ( i ) a i j b j ( x t + 1 ) β t + 1 ( j ) ∑ i = 1 N ∑ j = 1 α t ( i ) a i j b j ( x t + 1 ) β t + 1 ( j ) \xi_t(i,j)=\frac{\alpha_t(i)a_{ij}b_{j}(x_{t+1})\beta_{t+1}(j)}{\sum_{i=1}^N\sum_{j=1}\alpha_t(i)a_{ij}b_{j}(x_{t+1})\beta_{t+1}(j)} ξt(i,j)=i=1Nj=1αt(i)aijbj(xt+1)βt+1(j)αt(i)aijbj(xt+1)βt+1(j)
3. 3. 3. 一些有用的期望:

( 1 ) (1) (1) 在观测 X X X下状态 s i s_i si出现的期望值
∑ t = 1 T γ t ( i ) \sum_{t=1}^T\gamma_t(i) t=1Tγt(i)
( 2 ) (2) (2) 在观测 X X X下由状态 s i s_i si转移的期望值
∑ t = 1 T − 1 γ t ( i ) \sum_{t=1}^{T-1}\gamma_t(i) t=1T1γt(i)
( 3 ) (3) (3) 在观测 X X X下由状态 s i s_i si转移到状态 s j s_j sj的期望值
∑ t = 1 T − 1 ξ ( i , j ) \sum_{t=1}^{T-1}\xi(i,j) t=1T1ξ(i,j)

3 参数估计

通过观测序列或者观测序列和状态序列来估计隐马尔科夫模型参数的算法,称为隐马尔科夫模型的学习算法

3.1 监督学习

假设给定的训练数据包含若干个观测序列和对应的状态序列,那么可以利用极大似然估计来估计参数

1. \mathrm{1.} 1. 转移概率 a i j a_{ij} aij的计算

设样本中时刻 t t t处于状态 i i i时刻 t + 1 t+1 t+1处于状态 j j j的频数是 A i j A_{ij} Aij,那么 a i j a_{ij} aij的估计是
a i j = A i j ∑ j = 1 N A i j a_{ij}=\frac{A_{ij}}{\sum_{j=1}^NA_{ij}} aij=j=1NAijAij
2. \mathrm{2.} 2. 观测概率 b j ( k ) b_{j}(k) bj(k)的计算

设样本中状态 j j j且观测为 k k k的频数是 B j k B_{jk} Bjk,那么 b j ( k ) b_{j}(k) bj(k)的估计是
b j ( k ) = B j k ∑ k = 1 M B j k b_{j}(k)=\frac{B_{jk}}{\sum_{k=1}^MB_{jk}} bj(k)=k=1MBjkBjk
3. \mathrm{3.} 3. 初始状态 π i \pi_i πi的估计为所有样本中初始状态为 s i s_i si的概率

3.2 非监督学习

对于非监督学习,此时的训练数据将只包含观测序列,状态序列是隐变量,这时应该使用 B a u m − W e l c h \mathrm{Baum-Welch} BaumWelch算法,也即 E M \mathrm{EM} EM算法。

1. \mathrm{1.} 1. 确定完全数据的对数似然函数

所有观测数据为 X = ( x 1 , x 2 , . . . , x T ) X=(x_1,x_2,...,x_T) X=(x1,x2,...,xT),所有隐数据为 Y = ( y 1 , y 2 , . . . , y T ) Y=(y_1,y_2,...,y_T) Y=(y1,y2,...,yT),完全数据是 ( X , Y ) = ( x 1 , x 2 , . . . , x T , y 1 , y 2 , . . . , y T ) (X,Y)=(x_1,x_2,...,x_T,y_1,y_2,...,y_T) (X,Y)=(x1,x2,...,xT,y1,y2,...,yT),完全数据的对数似然函数是 log ⁡ P ( X , Y ∣ λ ) \log P(X,Y\mid\lambda) logP(X,Yλ)

2. \mathrm{2.} 2. E M \mathrm{EM} EM算法的 Q Q Q函数
Q ( λ , λ ˉ ) = ∑ Y P ( Y ∣ X , λ ˉ ) P ( X , Y ∣ λ ) = ∑ Y P ( X , Y ∣ λ ˉ ) P ( X ∣ λ ˉ ) P ( X , Y ∣ λ ) \begin{aligned} Q(\lambda,\bar{\lambda})&=\sum_{Y}P(Y\mid X,\bar{\lambda})P(X,Y\mid\lambda)\\ &=\sum_{Y}\frac{P(X,Y\mid\bar{\lambda})}{P(X\mid\bar{\lambda})}P(X,Y\mid\lambda) \end{aligned} Q(λ,λˉ)=YP(YX,λˉ)P(X,Yλ)=YP(Xλˉ)P(X,Yλˉ)P(X,Yλ)
其中 λ ˉ \bar{\lambda} λˉ表示当前估计值,由于 P ( X ∣ λ ˉ ) P(X\mid\bar{\lambda}) P(Xλˉ)是常数项,略去后可写成
Q ( λ , λ ˉ ) = ∑ Y P ( X , Y ∣ λ ˉ ) P ( X , Y ∣ λ ) Q(\lambda,\bar{\lambda})=\sum_{Y}P(X,Y\mid\bar{\lambda})P(X,Y\mid\lambda) Q(λ,λˉ)=YP(X,Yλˉ)P(X,Yλ)
由于
P ( X , Y , ∣ λ ) = π y 1 b y 1 ( x 1 ) a y 1 y 2 b y 2 ( x 2 ) . . . a y T − 1 y T b y T ( x T ) P(X,Y,\mid\lambda)=\pi_{y_1}b_{y_1}(x_1)a_{y_1y_2}b_{y_2}(x_2)...a_{y_{T-1}y_T}b_{y_T}(x_T) P(X,Y,λ)=πy1by1(x1)ay1y2by2(x2)...ayT1yTbyT(xT)

于是 Q Q Q函数可以写成
Q ( λ , λ ˉ ) = ∑ Y log ⁡ π y 1 P ( X , Y ∣ λ ˉ ) + ∑ Y ( ∑ t = 1 T − 1 log ⁡ a y t y t + 1 ) P ( X , I , ∣ λ ˉ ) + ∑ Y ( ∑ t = 1 T log ⁡ b y t ( x t ) ) P ( X , I , ∣ λ ˉ ) \begin{aligned} Q(\lambda,\bar{\lambda})&=\sum_{Y}\log\pi_{y_1}P(X,Y\mid\bar{\lambda})+\sum_{Y}(\sum_{t=1}^{T-1}\log a_{y_ty_{t+1}})P(X,I,\mid\bar{\lambda})\\ &+\sum_{Y}(\sum_{t=1}^T\log b_{y_t}(x_t))P(X,I,\mid\bar{\lambda}) \end{aligned} Q(λ,λˉ)=Ylogπy1P(X,Yλˉ)+Y(t=1T1logaytyt+1)P(X,I,λˉ)+Y(t=1Tlogbyt(xt))P(X,I,λˉ)

3. \mathrm{3.} 3. 极大化 Q Q Q函数

由于 Q Q Q函数中的 3 \mathrm{3} 3个参数都是单独出现的,因此可以对每一项分别极大化。

( 1 ) (1) (1) 初始状态概率的极大化
∑ Y log ⁡ π y 1 P ( X , Y ∣ λ ˉ ) = ∑ i = 1 N log ⁡ π i P ( X , y 1 = i ∣ λ ˉ ) \sum_{Y}\log\pi_{y_1}P(X,Y\mid\bar{\lambda})=\sum_{i=1}^N\log\pi_iP(X,y_1=i\mid\bar{\lambda}) Ylogπy1P(X,Yλˉ)=i=1NlogπiP(X,y1=iλˉ)
这里可以理解为合并同类项,由于存在约束条件 ∑ i = 1 N π i = 1 \sum_{i=1}^N\pi_i=1 i=1Nπi=1,利用拉格朗日乘子法,拉格朗日函数为
L ( π , γ ) = ∑ i = 1 N log ⁡ π i P ( X , y 1 = i ∣ λ ˉ ) + γ ( ∑ i = 1 N π i − 1 ) L(\pi,\gamma)=\sum_{i=1}^N\log\pi_iP(X,y_1=i\mid\bar{\lambda})+\gamma(\sum_{i=1}^N\pi_i-1) L(π,γ)=i=1NlogπiP(X,y1=iλˉ)+γ(i=1Nπi1)
π i \pi_i πi求偏导
∂ L ( π , λ ) ∂ π i = P ( X , y 1 = i ∣ λ ˉ ) π i + γ \frac{\partial L(\pi,\lambda)}{\partial\pi_i}=\frac{P(X,y_1=i\mid\bar{\lambda})}{\pi_i}+\gamma πiL(π,λ)=πiP(X,y1=iλˉ)+γ
令偏导数等于 0 0 0
P ( X , y 1 = i ∣ λ ˉ ) + γ π i = 0 P(X,y_1=i\mid\bar{\lambda})+\gamma\pi_i=0 P(X,y1=iλˉ)+γπi=0
i i i求和得
γ = − P ( X ∣ λ ˉ ) \gamma=-P(X\mid\bar\lambda) γ=P(Xλˉ)
因此
π i = P ( X , y 1 = i ∣ λ ˉ ) P ( X ∣ λ ˉ ) \pi_i=\frac{P(X,y_1=i\mid\bar{\lambda})}{P(X\mid\bar\lambda)} πi=P(Xλˉ)P(X,y1=iλˉ)

( 2 ) (2) (2) 状态转移概率的极大化

∑ Y ( ∑ t = 1 T − 1 log ⁡ a y t y t + 1 ) P ( X , I , ∣ λ ˉ ) = ∑ i = 1 N ∑ j = 1 N ∑ t = 1 T − 1 log ⁡ a i j P ( X , y t = i , y t + 1 = j ∣ λ ˉ ) \sum_{Y}(\sum_{t=1}^{T-1}\log a_{y_ty_{t+1}})P(X,I,\mid\bar{\lambda})=\sum_{i=1}^N\sum_{j=1}^N\sum_{t=1}^{T-1}\log a_{ij}P(X,y_t=i,y_{t+1}=j\mid\bar\lambda) Y(t=1T1logaytyt+1)P(X,I,λˉ)=i=1Nj=1Nt=1T1logaijP(X,yt=i,yt+1=jλˉ)
由于存在约束条件 ∑ j = 1 N a i j = 1 \sum_{j=1}^Na_{ij}=1 j=1Naij=1,拉格朗日函数为
L ( a , γ ) = ∑ i = 1 N ∑ j = 1 N ∑ t = 1 T − 1 log ⁡ a i j P ( X , y t = i , y t + 1 = j ∣ λ ˉ ) + ∑ i = 1 N γ i ( ∑ j = 1 N a i j − 1 ) L(a,\gamma)=\sum_{i=1}^N\sum_{j=1}^N\sum_{t=1}^{T-1}\log a_{ij}P(X,y_t=i,y_{t+1}=j\mid\bar\lambda)+\sum_{i=1}^N\gamma_i(\sum_{j=1}^Na_{ij}-1) L(a,γ)=i=1Nj=1Nt=1T1logaijP(X,yt=i,yt+1=jλˉ)+i=1Nγi(j=1Naij1)
a i j a_{ij} aij求偏导
∂ L ( a , λ ) ∂ a i j = ∑ t = 1 T − 1 P ( X , y t = i , y t + 1 = j ∣ λ ˉ ) a i j + γ i \frac{\partial L(a,\lambda)}{\partial a_{ij}}=\frac{\sum_{t=1}^{T-1}P(X,y_t=i,y_{t+1}=j\mid\bar\lambda)}{a_{ij}}+\gamma_i aijL(a,λ)=aijt=1T1P(X,yt=i,yt+1=jλˉ)+γi
令偏导数等于 0 0 0
∑ t = 1 T − 1 P ( X , y t = i , y t + 1 = j ∣ λ ˉ ) + a i j γ i = 0 \sum_{t=1}^{T-1}P(X,y_t=i,y_{t+1}=j\mid\bar\lambda)+a_{ij}\gamma_i=0 t=1T1P(X,yt=i,yt+1=jλˉ)+aijγi=0
对所有的 j j j求和的
γ i = − ∑ t = 1 T − 1 P ( X , y t = i ∣ γ ˉ ) \gamma_i=-\sum_{t=1}^{T-1}P(X,y_t=i\mid\bar\gamma) γi=t=1T1P(X,yt=iγˉ)
因此
a i j = ∑ t = 1 T − 1 P ( X , y t = i , y t + 1 = j ∣ λ ˉ ) ∑ t = 1 T − 1 P ( X , y t = i ∣ λ ˉ ) a_{ij}=\frac{\sum_{t=1}^{T-1}P(X,y_t=i,y_{t+1}=j\mid\bar\lambda)}{\sum_{t=1}^{T-1}P(X,y_t=i\mid\bar\lambda)} aij=t=1T1P(X,yt=iλˉ)t=1T1P(X,yt=i,yt+1=jλˉ)
( 3 ) (3) (3) 输出观测概率的极大化

∑ Y ( ∑ t = 1 T log ⁡ b y t ( x t ) ) P ( X , I , ∣ λ ˉ ) = ∑ j = 1 N ∑ t = 1 T log ⁡ b j ( x t ) P ( X , y t = j ∣ λ ˉ ) \sum_{Y}(\sum_{t=1}^T\log b_{y_t}(x_t))P(X,I,\mid\bar{\lambda})=\sum_{j=1}^N\sum_{t=1}^{T}\log b_j(x_t)P(X,y_t=j\mid\bar\lambda) Y(t=1Tlogbyt(xt))P(X,I,λˉ)=j=1Nt=1Tlogbj(xt)P(X,yt=jλˉ)
存在约束条件 ∑ k = 1 M b j ( k ) = 1 \sum_{k=1}^Mb_j(k)=1 k=1Mbj(k)=1,拉格朗日函数为
L ( b , γ ) = ∑ j = 1 N ∑ t = 1 T log ⁡ b j ( x t ) P ( X , y t = j ∣ λ ˉ ) + ∑ j = 1 N γ j ( ∑ k = 1 M b j ( k ) − 1 ) L(b,\gamma)=\sum_{j=1}^N\sum_{t=1}^{T}\log b_j(x_t)P(X,y_t=j\mid\bar\lambda)+\sum_{j=1}^{N}\gamma_j(\sum_{k=1}^Mb_j(k)-1) L(b,γ)=j=1Nt=1Tlogbj(xt)P(X,yt=jλˉ)+j=1Nγj(k=1Mbj(k)1)
b j ( k ) b_j(k) bj(k)求偏导时,只有在 x t = o k x_t=o_k xt=ok b j ( x t ) b_j(x_t) bj(xt) b j k b_{jk} bjk的偏导数才不为 0 0 0,用 I ( x t = o k ) I(x_t=o_k) I(xt=ok)表示
∂ L ( b , γ ) ∂ b j ( k ) = ∑ t = 1 T I ( x t = o k ) P ( X , y t = j ∣ λ ˉ ) b j ( k ) + γ j \frac{\partial L(b,\gamma)}{\partial b_j(k)}=\frac{\sum_{t=1}^{T}I(x_t=o_k)P(X,y_t=j\mid\bar\lambda)}{b_j(k)}+\gamma_j bj(k)L(b,γ)=bj(k)t=1TI(xt=ok)P(X,yt=jλˉ)+γj
令偏导数等于 0 0 0
∑ t = 1 T I ( x t = o k ) P ( X , y t = j ∣ λ ˉ ) + b j ( k ) γ j = 0 \sum_{t=1}^{T}I(x_t=o_k)P(X,y_t=j\mid\bar\lambda)+b_j(k)\gamma_j=0 t=1TI(xt=ok)P(X,yt=jλˉ)+bj(k)γj=0
k k k求和得
γ j = − ∑ t = 1 T P ( X , y t = j ∣ λ ˉ ) \gamma_j=-\sum_{t=1}^{T}P(X,y_t=j\mid\bar\lambda) γj=t=1TP(X,yt=jλˉ)
因此
b j ( k ) = ∑ t = 1 T I ( x t = o k ) P ( X , y t = j ∣ λ ˉ ) ∑ t = 1 T P ( X , y t = j ∣ λ ˉ ) b_j(k)=\frac{\sum_{t=1}^{T}I(x_t=o_k)P(X,y_t=j\mid\bar\lambda)}{\sum_{t=1}^{T}P(X,y_t=j\mid\bar\lambda)} bj(k)=t=1TP(X,yt=jλˉ)t=1TI(xt=ok)P(X,yt=jλˉ)

到此就推导完了 E M \mathrm{EM} EM算法中的迭代更新公式,我们可以使用在 2.3 2.3 2.3中定义的概率值来重写更新公式
π i = γ 1 ( i ) a i j = ∑ t = 1 T − 1 ξ ( i , j ) ∑ t = 1 T − 1 γ t ( i ) b j ( k ) = ∑ t = 1 T γ t ( i ) I ( x t = o k ) ∑ t = 1 T γ t ( i ) \begin{aligned} \pi_i&=\gamma_1(i)\\ a_{ij}&=\frac{\sum_{t=1}^{T-1}\xi(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)}\\ b_j(k)&=\frac{\sum_{t=1}^{T}\gamma_t(i)I(x_t=o_k)}{\sum_{t=1}^{T}\gamma_t(i)} \end{aligned} πiaijbj(k)=γ1(i)=t=1T1γt(i)t=1T1ξ(i,j)=t=1Tγt(i)t=1Tγt(i)I(xt=ok)
B a u m − W e l c h \mathrm{Baum-Welch} BaumWelch算法

输入:观测数据 X = ( x 1 , x 2 , . . . , x T ) X=(x_1,x_2,...,x_T) X=(x1,x2,...,xT)

输出:隐马尔科夫模型参数。

( 1 ) (1) (1) 初始化,对 n = 0 n=0 n=0,选取 a i j ( 0 ) , b j ( k ) ( 0 ) , π i ( 0 ) a_{ij}^{(0)},b_j(k)^{(0)},\pi_i^{(0)} aij(0),bj(k)(0),πi(0),得到模型 λ ( 0 ) = ( A ( 0 ) , B ( 0 ) , π ( 0 ) ) \lambda^{(0)}=(A^{(0)},B^{(0)},\pi^{(0)}) λ(0)=(A(0),B(0),π(0))

( 2 ) (2) (2) 递推。对 n = 1 , 2 , . . . , n=1,2,..., n=1,2,...,
a i j ( n + 1 ) = ∑ t = 1 T − 1 ξ ( i , j ) ∑ t = 1 T − 1 γ t ( i ) b j ( k ) ( n + 1 ) = ∑ t = 1 T γ t ( i ) I ( x t = o k ) ∑ t = 1 T γ t ( i ) π i ( n + 1 ) = γ 1 ( i ) \begin{aligned} a_{ij}^{(n+1)}&=\frac{\sum_{t=1}^{T-1}\xi(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)}\\ b_j(k)^{(n+1)}&=\frac{\sum_{t=1}^{T}\gamma_t(i)I(x_t=o_k)}{\sum_{t=1}^{T}\gamma_t(i)}\\ \pi_i^{(n+1)}&=\gamma_1(i) \end{aligned} aij(n+1)bj(k)(n+1)πi(n+1)=t=1T1γt(i)t=1T1ξ(i,j)=t=1Tγt(i)t=1Tγt(i)I(xt=ok)=γ1(i)
右端各值按观测 X = ( x 1 , x 2 , . . . , x T ) X=(x_1,x_2,...,x_T) X=(x1,x2,...,xT)和模型 λ ( n ) = ( A ( n ) , B ( n ) , π ( n ) ) \lambda^{(n)}=(A^{(n)},B^{(n)},\pi^{(n)}) λ(n)=(A(n),B(n),π(n))计算。

( 3 ) (3) (3) 终止,得到模型参数 λ ( n + 1 ) = ( A ( n + 1 ) , B ( n + 1 ) , π ( n + 1 ) ) \lambda^{(n+1)}=(A^{(n+1)},B^{(n+1)},\pi^{(n+1)}) λ(n+1)=(A(n+1),B(n+1),π(n+1))

4 状态预测

4.1 近似算法

近似算法的思想是,在每个时刻 t t t,选择在该时刻最有可能出现的状态 y t ∗ y_t^* yt作为该时刻的预测,也即
y t ∗ = arg ⁡ max ⁡ 1 ≤ i ≤ N [ γ t ( i ) ] y_t^*=\arg\max\limits_{1\leq i\leq N}[\gamma_t(i)] yt=arg1iNmax[γt(i)]
从而得到状态序列 Y = ( y 1 ∗ , y 2 ∗ , . . . , y T ∗ ) Y=(y_1^*,y_2^*,...,y_T^*) Y=(y1,y2,...,yT),近似算法是一种贪婪算法,优点是计算简单,缺点是不能保证得到的状态序列是最优状态序列。

4.2 维特比算法

维特比算法利用动态规划法求解隐马尔科夫模型的状态预测问题。维特比算法将一个状态序列当做一条路径,目的是求解概率最大路径。

根据动态规划原理,最优路径具有最优子结构的性质。即如果最优路径在时刻 t t t通过节点 y t ∗ y_t^* yt,那么这一路径中从节点 y t ∗ y_t^* yt到节点 y T ∗ y_T^* yT的部分路径,对于从 y t ∗ y_t^* yt y T ∗ y_T^* yT的所有可能路径来说,必然是最优的。否则就会得到一条比原来路径更优的路径,这是矛盾的。

因此,只需从时刻 t = 1 t=1 t=1开始,递推的计算在时刻 t t t状态为 i i i的各条部分路径的最大概率,直至得到时刻 T T T状态为 i i i的各条路径的最大概率。时刻 t = T t=T t=T的最大概率即为最优路径的概率 P ∗ P^* P,最优路径的终结点 y T ∗ y_T^* yT也已经得到,之后从 y T ∗ y_T^* yT开始,从后向前逐步求得 y T − 1 ∗ , . . . , y 1 ∗ y_{T-1}^*,...,y_1^* yT1,...,y1,得到最优路径 Y ∗ = ( y 1 ∗ , y 2 ∗ , . . . , y T ∗ ) Y^*=(y_1^*,y_2^*,...,y_T^*) Y=(y1,y2,...,yT)

定义在时刻 t t t状态为 i i i的所有单个路径 ( y 1 , y 2 , . . . , y t ) (y_1,y_2,...,y_t) (y1,y2,...,yt)中概率最大值为
δ t ( i ) = max ⁡ y 1 , y 2 , . . . , y t − 1 P ( y t = i , y t − 1 , . . . , y 1 , x t , . . . , x 1 ∣ λ ) , i = 1 , 2 , . . . , N \delta_t(i)=\max\limits_{y_1,y_2,...,y_{t-1}}P(y_t=i,y_{t-1},...,y_1,x_t,...,x_1\mid\lambda),\quad i=1,2,...,N δt(i)=y1,y2,...,yt1maxP(yt=i,yt1,...,y1,xt,...,x1λ),i=1,2,...,N
变量 δ \delta δ的递推公式为
δ t + 1 ( i ) = max ⁡ y 1 , y 2 , . . . , y t P ( y t + 1 = i , y t , . . . , y 1 , x t + 1 , . . . , x 1 ∣ λ ) = max ⁡ 1 ≤ j ≤ N [ δ t ( j ) a j i ] b i ( x t + 1 ) , i = 1 , 2 , . . . , N , t = 1 , 2 , . . . , T − 1 \begin{aligned} \delta_{t+1}(i) &=\max\limits_{y_1,y_2,...,y_t}P(y_{t+1}=i,y_t,...,y_1,x_{t+1},...,x_1\mid\lambda)\\ &=\max\limits_{1\leq j\leq N}[\delta_t(j)a_{ji}]b_i(x_{t+1}),\quad i=1,2,...,N,t=1,2,...,T-1 \end{aligned} δt+1(i)=y1,y2,...,ytmaxP(yt+1=i,yt,...,y1,xt+1,...,x1λ)=1jNmax[δt(j)aji]bi(xt+1),i=1,2,...,N,t=1,2,...,T1
定义在时刻 t t t状态为 i i i的所有单个路径 ( y 1 , y 2 , . . . , y t ) (y_1,y_2,...,y_t) (y1,y2,...,yt)中概率最大的路径的第 t − 1 t-1 t1个节点为
ψ t ( i ) = arg ⁡ max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] , i = 1 , 2 , . . . , N \psi_t(i)=\arg\max\limits_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}],\quad i=1,2,...,N ψt(i)=arg1jNmax[δt1(j)aji],i=1,2,...,N
有了这两个变量,就可以介绍维特比算法。

维特比算法

输入:隐马尔科夫模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测 X = ( x 1 , x 2 , . . . , x T ) X=(x_1,x_2,...,x_T) X=(x1,x2,...,xT)

输出:最优状态序列 Y ∗ = ( y 1 ∗ , y 2 ∗ , . . . , y T ∗ ) Y^*=(y_1^*,y_2^*,...,y_T^*) Y=(y1,y2,...,yT)

( 1 ) (1) (1) 初始化
δ 1 ( i ) = π i b i ( x 1 ) , i = 1 , 2 , . . . , N ψ 1 ( i ) = 0 , i = 1 , 2 , . . . , N \begin{aligned} \delta_1(i)&=\pi_ib_i(x_1),\quad i=1,2,...,N\\ \psi_1(i)&=0,\quad\quad\quad\quad i=1,2,...,N \end{aligned} δ1(i)ψ1(i)=πibi(x1),i=1,2,...,N=0,i=1,2,...,N
( 2 ) (2) (2) 递推。对 t = 2 , 3 , . . . , T t=2,3,...,T t=2,3,...,T
δ t ( i ) = max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] b i ( x t ) , i = 1 , 2 , . . . , N ψ t ( i ) = arg ⁡ max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] , i = 1 , 2 , . . . , N \begin{aligned} \delta_{t}(i) &=\max\limits_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}]b_i(x_{t}),\quad i=1,2,...,N\\ \psi_t(i)&=\arg\max\limits_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}],\quad i=1,2,...,N \end{aligned} δt(i)ψt(i)=1jNmax[δt1(j)aji]bi(xt),i=1,2,...,N=arg1jNmax[δt1(j)aji],i=1,2,...,N
( 3 ) (3) (3) 终止
P ∗ = max ⁡ 1 ≤ i ≤ N [ δ T ( i ) ] y T ∗ = arg ⁡ max ⁡ 1 ≤ i ≤ N [ δ T ( i ) ] \begin{aligned} P^*&=\max\limits_{1\leq i\leq N}[\delta_T(i)]\\ y_T^*&=\arg\max\limits_{1\leq i\leq N}[\delta_T(i)] \end{aligned} PyT=1iNmax[δT(i)]=arg1iNmax[δT(i)]
( 4 ) (4) (4) 回溯。对 t = T − 1 , T − 2 , . . . , 1 t=T-1,T-2,...,1 t=T1,T2,...,1
y t ∗ = ψ t + 1 ( y t + 1 ∗ ) y_t^*=\psi_{t+1}(y_{t+1}^*) yt=ψt+1(yt+1)

求得最优状态序列 Y ∗ = ( y 1 ∗ , y 2 ∗ , . . . , y T ∗ ) Y^*=(y_1^*,y_2^*,...,y_T^*) Y=(y1,y2,...,yT)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值