统计学习方法读书笔记第十章:隐马尔科夫模型

统计学习方法读书笔记第十章:隐马尔科夫模型

隐马尔科夫模型是可用于标注问题的统计学模型,描述由隐藏的马尔科夫链随机生成观测序列的过程,属于生成模型。

隐马尔科夫模型的基本概念

  • 隐马尔科夫模型的定义
    隐马尔科夫模型 隐马尔科夫模型是关于时序的概率模型,描述有一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔科夫链随机生成的状态的序列,称为状态序列;每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列。序列的每一个位置又可以看作是一个时刻。
    隐马尔科夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。应马尔科夫模型的形式定义如下:
    QQ是所有可能的状态的集合,VV是所有可能的观测的集合。
    Q={q1,q2, ,qN},V={v1,v2, ,vM} Q=\{q_1,q_2,\cdots,q_N\}, V=\{v_1,v_2,\cdots,v_M\}
    其中,NN是可能的状态数,MM是可能的观测数。
    II是长度为TT的状态序列,OO是对应的观测序列。
    I=(i1,i2, ,iT),O=(o1,o2, ,oT) I=(i_1,i_2,\cdots,i_T), O=(o_1,o_2,\cdots,o_T)
    AA是状态转移概率矩阵:
    (1)A=[aij]N×N A=[a_{ij}]_{N\times N} \tag{1}
    其中,
    (2)aij=P(it+1=qjit=qi),i=1,2, ,N;j=1,2, ,N a_{ij}=P(i_{t+1}=q_j|i_t=q_i), i=1,2,\cdots,N;j=1,2,\cdots,N \tag{2}
    是在时刻tt处于状态qiq_i的条件下在时刻t+1t+1转移到状态qjq_j的概率。
    BB是观测概率矩阵:
    (3)B=[bj(k)]N×M B=[b_j(k)]_{N\times M} \tag{3}
    其中,
    (4)bj(k)=P(ot=vkit=qj),k=1,2, ,M;j=1,2, ,N b_j(k)=P(o_t=v_k|i_t=q_j), k=1,2,\cdots,M; j=1,2,\cdots,N \tag{4}
    是在时刻tt处于状态qjq_j的条件下生成观测vkv_k的概率。
    π\pi是初始状态概率向量:
    (5)π=(πi) \pi=(\pi_i) \tag{5}
    其中,
    (6)πi=P(i1=qi),i=1,2, ,N \pi_i=P(i_1=q_i), i=1,2,\cdots,N \tag{6}
    是时刻t=1t=1处于状态qiq_i的概率。
    隐马尔科夫模型由初始状态概率向量π\pi、状态转移概率矩阵AA和观测概率矩阵BB决定。π\piAA决定状态序列,BB决定观测序列。因此,隐马尔科夫模型λ\lambda可以用三原符号表示,即
    (7)λ=(A,B,π) \lambda=(A,B,\pi) \tag{7}
    AABBπ\pi称为隐马尔科夫模型的三要素。
    状态转移概率矩阵AA与初始状态概率向量π\pi确定了隐藏的马尔科夫链,生成不可观测的状态序列。观测概率矩阵BB确定了如何从状态生成观测,与状态序列综合确定了如何产生观测序列。
    从定义可知,隐马尔科夫模型作了两个基本假设:
    (1) 齐次马尔科夫性假设,即假设隐藏的马尔科夫链在任意时刻tt的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻tt无关。
    (8)P(itit1,ot1, ,i1,o1)=P(itit1),t=1,2, ,T P(i_t|i_{t-1},o_{t-1},\cdots,i_1,o_1)=P(i_t|i_{t-1}), t=1,2,\cdots,T \tag{8}
    (2) 观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔科夫链的状态,与其他观测及状态无关。
    (9)P(otiT,oT,iT1,oT1, ,it+1,ot+1,it,it1,ot1, ,i1,o1)=P(otit) P(o_t|i_T,o_T,i_{T-1},o_{T-1},\cdots,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1},\cdots,i_1,o_1)=P(o_t|i_t) \tag{9}
    隐马尔科夫模型可以用于标注,这时状态对应着标记。标注问题是给定观测的序列预测其对应的标记序列。可以假设标注问题的数据是由隐马尔科夫模型生成的。这样我们可以利用隐马尔科夫模型的学习与预测算法进行标注。

  • 观测序列的生成过程
    根据马尔科夫模型的定义,可以将一个长度为TT的观测序列O=(o1,o2, ,oT)O=(o_1,o_2,\cdots,o_T)的生成过程描述如下:
    算法1(观测序列的生成)
    输入:隐马尔科夫模型λ=(A,B,π)\lambda=(A,B,\pi),观测序列长度TT
    输出:观测序列O=(o1,o2, ,oT)O=(o_1,o_2,\cdots,o_T)
    (1) 按照初始状态分布π\pi产生状态i1i_1
    (2) 令t=1t=1
    (3) 按照状态iti_t的观测概率分布bit(k)b_{i_t}(k)生成oto_t
    (4) 按照状态iti_t的状态转移概率分布{aitit+1}\{a_{i_ti_{t+1}}\}产生状态it+1,it+1=1,2, ,Ni_{t+1},i_{t+1}=1,2,\cdots,N
    (5) 令t=t+1t=t+1;如果t<Tt<T,转步(3);否则,终止。

  • 隐马尔科夫模型的3个基本问题
    隐马尔科夫模型有3个基本为题:
    (1) 概率模型问题。给定模型λ=(a,N,π)\lambda=(a,N,\pi)和观测序列O=(o1,o,2 ,oT)O=(o_1,o_,2\cdots,o_T),计算在模型KaTeX parse error: Expected 'EOF', got '\ambda' at position 1: \̲a̲m̲b̲d̲a̲下观测序列OO出现的概率P(Oλ)P(O|\lambda)
    (2) 学习问题。已知观测序列O=(o1,o,2 ,oT)O=(o_1,o_,2\cdots,o_T),估计模型参数λ=(A,B,π)\lambda=(A,B,\pi)的参数,使得在该模型下观测序列概率P(Oλ)P(O|\lambda)最大。即用极大似然估计的方法估计参数。
    (3) 预测问题,也称为解码问题。已知模型λ=(A,B,π)\lambda=(A,B,\pi)和序列O=(o1,o,2 ,oT)O=(o_1,o_,2\cdots,o_T),求给定观测序列条件概率P(IO)P(I|O)最大的状态序列I=(i1,i2, ,iT)I=(i_1,i_2,\cdots,i_T)。即给定观测序列,求最有可能的对应的状态序列。

概率计算算法

本节介绍计算观测序列概率P(Oλ)P(O|\lambda)的前向与后向算法。先介绍概念上可行但计算上不可行的直接计算法。

  • 直接计算法
    给定模型λ=(A,B,π)\lambda=(A,B,\pi)和观测序列O=(o1,o2, ,oT)O=(o_1,o_2,\cdots,o_T),计算观测序列OO出现的概率P(Oλ)P(O|\lambda)。最直接的方法是按概率公式直接计算。通过列举所有可能的长度为TT的状态序列I=(i1,i2, ,iT)I=(i_1,i_2,\cdots,i_T),求各个状态序列与观测序列O=(o1,o2, ,oT)O=(o_1,o_2,\cdots,o_T)的联合概率P(O,Iλ)P(O,I|\lambda),然后对所有可能的状态序列求和,得到P(Oλ)P(O|\lambda)
    状态序列I=(i1,i2, ,iT)I=(i_1,i_2,\cdots,i_T)的概率是
    (10)P(Iλ)=πi1ai1i2ai2i3aiT1iT P(I|\lambda)=\pi_{i_1}a_{i_1i_2}a_{i_2i_3}\cdots a_{i_{T-1}i_T} \tag{10}
    对固定的状态序列I=(i1,i2, ,iT)I=(i_1,i_2,\cdots,i_T),观测序列O=(o1,o2, ,oT)O=(o_1,o_2,\cdots,o_T)的概率是P(OI,λ)P(O|I,\lambda)
    (11)P(OI,λ)=bi1(o1)bi2(o2)biT(oT) P(O|I,\lambda)=b_{i_1}(o_1)b_{i_2}(o_2)\cdots b_{i_T}(o_T) \tag{11}
    OOII同时出现的联合概率为
    (12)P(O,Iλ)=P(OI,λ)P(Iλ)=πi1bi1(o1)ai1i2bi2(o2)aiT1iTbiT(oT) \begin{aligned} 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)\cdots a_{i_{T-1}i_T}b_{i_T}(o_T) \tag{12} \end{aligned}
    然后,对所有可能的状态序列II求和,得到观测序列OO的概率P(Oλ)P(O|\lambda),即
    (13)P(Oλ)=IP(OI,λ)P(Iλ)=i1,i2, ,iTπi1bi1(o1)ai1i2bi2(o2)aiT1iTbiT(oT) \begin{aligned} P(O|\lambda)&=\sum_{I}P(O|I,\lambda)P(I|\lambda) \\ &=\sum_{i_1,i_2,\cdots,i_T}\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)\cdots a_{i_{T-1}i_T}b_{i_T}(o_T) \tag{13} \end{aligned}
    但是,利用上式计算量很大,是O(TNT)O(TN^T)阶的,这种算法不可行。
    下面介绍计算观测序列概率P(Oλ)P(O|\lambda)的有效算法:前向-后向算法。
  • 前向算法
    前向概率 给定隐马尔科夫模型λ\lambda,定义到时刻tt部分观测序列为o1,o2, ,oto_1,o_2,\cdots,o_t且状态为qiq_i的概率为前向概率,记作
    (14)αt(i)=P(o1,o2, ,ot,it=qiλ) \alpha_t(i)=P(o_1,o_2,\cdots,o_t,i_t=q_i|\lambda) \tag{14}
    可以递推地求得前向概率αt(i)\alpha_t(i)及观测序列概率P(Oλ)P(O|\lambda)
    观测序列概率的前向算法
    输入:隐马尔科夫模型λ\lambda,观测序列OO
    输出:观测序列概率P(Oλ)P(O|\lambda)
    (1) 初值
    (15)α1(i)=πibi(o1),i=1,2, ,N \alpha_1(i)=\pi_ib_i(o_1),i=1,2,\cdots,N \tag{15}
    (2) 递推 对t=1,2, ,T1t=1,2,\cdots,T-1
    (116)αt+1(i)=[j=1Nαt(j)aji]bi(ot+1),i=1,2, ,N \alpha_{t+1}(i)=\bigg[\sum_{j=1}^{N}\alpha_t(j)a_{ji}\bigg]b_i(o_{t+1}), i=1,2,\cdots,N \tag{116}
    (3) 终止
    (17)P(Oλ)=i=1NαT(i) P(O|\lambda)=\sum_{i=1}^N\alpha_T(i) \tag{17}
    前向算法,步骤(1)初始化前向概率,是初始时刻的状态i1=qii_1=q_i和观测o1o_1的联合概率。步骤(2)是前向概率的递推公式,计算到时刻t+1t+1部分观测序列为o1,o2, ,ot,ot+1o_1,o_2,\cdots,o_t,o_{t+1}且在时刻t+1t+1处于状态qiq_i的前向概率,如下图所示。在(2)式的方括弧里,既然αt(j)\alpha_t(j)是到时刻tt观测到o1,o2, ,oto_1,o_2,\cdots,o_t并在时刻tt处于状态qjq_j的前向概率,那么乘积αt(j)aji\alpha_t(j)a_{ji}就是到时刻tt观测到o1,o2, ,oto_1,o_2,\cdots,o_t并在时刻tt处于状态qjq_j而在时刻t+1t+1到达状态qiq_i的联合概率。对这个乘积在时刻tt的所有可能的NN个状态qjq_j求和,其结果就是到时刻tt观测为o1,o2, ,oto_1,o_2,\cdots,o_t并在时刻t+1t+1处于状态qiq_i的联合概率。方括弧里的值与观测概率bi(ot+1)b_i(o_{t+1})的乘积恰好是时刻t+1t+1观测到o1,o2, ,ot,ot+1o_1,o_2,\cdots,o_t,o_{t+1}并在时刻t+1t+1处于状态qiq_i的前向概率αt+1(i)\alpha_{t+1}(i)。步骤(3)给出P(Oλ)P(O|\lambda)的计算公式。因为
    αT(i)=P(o1,o2, ,oT,iT=qiλ) \alpha_T(i)=P(o_1,o_2,\cdots,o_T,i_T=q_i|\lambda)
    所以
    P(Oλ)=i=1NαT(i) P(O|\lambda)=\sum_{i=1}^{N}\alpha_T(i)
    统计学习方法读书笔记第十章:隐马尔科夫模型
    如下图所示,前向算法实际是基于“状态序列的路径结构”递推计算P(Oλ)P(O|\lambda)的算法。前向算法高效的关键是其局部计算前向概率,然后利用路径结构将前向概率“递推”到全局,得到P(Oλ)P(O|\lambda)。具体地,在时刻t=1t=1,计算α1(i)\alpha_1(i)NN个值(i=1,2, ,N)(i=1,2,\cdots,N);在各个时刻t=1,2, ,T1t=1,2,\cdots,T-1,计算αt+1(i)\alpha_{t+1}(i)NN个值(i=1,2, ,N)(i=1,2,\cdots,N),并且每个αt+1(i)\alpha_{t+1}(i)的计算利用前一时刻NNαt(j)\alpha_t(j)。减少计算量的原因在于每一次计算直接引用前一个时刻的计算结果,避免重复计算。这样,利用前向概率计算P(Oλ)P(O|\lambda)的计算量是O(N2T)O(N^2T)阶的,而不是直接计算的O(TNT)O(TN^T)阶。
    统计学习方法读书笔记第十章:隐马尔科夫模型
  • 后向算法
    后向概率 给定隐马尔科夫模型λ\lambda,定义在时刻tt状态为qiq_i的条件下,从t+1t+1TT的部分观测序列为ot+1,ot+2, ,oTo_{t+1},o_{t+2},\cdots,o_T的概率为后向概率,记作
    (18)βt(i)=P(ot+1,ot+2, ,oTit=qi,λ) \beta_t(i)=P(o_{t+1},o_{t+2},\cdots,o_T|i_t=q_i,\lambda) \tag{18}
    可以利用递推的方法求得后向概率βt(i)\beta_t(i)及观测序列概率P(Oλ)P(O|\lambda)
    观测序列概率的后向算法
    输入:隐马尔科夫模型λ\lambda,观测序列OO
    输出:观测序列概率P(Oλ)P(O|\lambda)
    (1) (19)βT(i)=1,i=1,2, ,N \beta_T(i)=1,i=1,2,\cdots,N \tag{19}
    (2) 对t=T1,T2, ,1t=T-1,T-2,\cdots,1
    (20)βt(i)=j=1Naijbj(ot+1)βt+1(j),i=1,2, ,N \beta_t(i)=\sum_{j=1}^{N}a_{ij}b_j(o_{t+1})\beta_{t+1}(j), i=1,2,\cdots,N \tag{20}
    (3) (21)P(Oλ)=i=1Nπibi(o1)β1(i) P(O|\lambda)=\sum_{i=1}^N\pi_{i}b_i(o_1)\beta_1(i) \tag{21}
    步骤(1)初始化后向概率,对最终时刻的所有状态qiq_i规定βT(i)=1\beta_T(i)=1。步骤(2)(2)是后向概率的递推公式。如下图所示,为了计算在时刻tt状态为qiq_i条件下时刻t+1t+1之后的观测序列ot+1,ot+2, ,oTo_{t+1},o_{t+2},\cdots,o_T的后向概率βt(i)\beta_t(i),只需要考虑在时刻t+1t+1所有可能的NN个状态qjq_j的转移概率(即aija_{ij}项),以及在此状态下的观测ot+1o_{t+1}的观测概率(即bj(ot+1)b_j(o_{t+1})项),然后考虑状态qjq_j之后的观测序列的后向概率(即βt+1(j)\beta_{t+1}(j)项)。步骤(3)求P(Oλ)P(O|\lambda)的思路与步骤(2)一致,只是初始概率πi\pi_i代替转移概率。
    利用前向概率和后向概率的定义可以将观测序列概率P(Oλ)P(O|\lambda)统一写成
    (22)P(Oλ))=i=1Nj=1Nαt(i)aijbj(ot+1)βt+1(j),t=1,2, ,T1 P(O|\lambda))=\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j),t=1,2,\cdots,T-1 \tag{22}
    此式当t=1t=1t=T1t=T-1时分别为前向概率计算公式和后向概率计算公式。
    统计学习方法读书笔记第十章:隐马尔科夫模型
  • 一些概率与期望值的计算
    利用前向概率和后向概率,可以得到关于单个状态和两个状态概率的计算公式。
  1. 给定模型λ\lambda和观测OO,在时刻tt处于状态qiq_i的概率。记
    (23)γt(i)=P(it=qiO,λ) \gamma_t(i)=P(i_t=q_i|O,\lambda) \tag{23}
    可以通过前向后向概率计算。事实上,
    γt(i)=P(it=qiO,λ)=P(it=qi,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)\alpha_t(i)和后向概率βt(i)\beta_t(i)定义可知:
    αt(i)βt(i)=P(it=qi,Oλ) \alpha_t(i)\beta_t(i)=P(i_t=q_i,O|\lambda)
    于是得到:
    (24)γt(i)=αt(i)βt(i)P(Oλ)=αt(i)βt(i)j=1Nαt(j)βt(j) \gamma_t(i)=\frac{\alpha_t(i)\beta_t(i)}{P(O|\lambda)}=\frac{\alpha_t(i)\beta_t(i)} \tag{24}{\sum_{j=1}^N\alpha_t(j)\beta_t(j)}
  2. 给定模型λ\lambda和观测OO,在时刻tt处于状态qiq_i且在时刻t+1t+1处于状态qjq_j的概率。记
    (25)ξt(i,j)=P(it=qi,it+1=qj,Oλ)P(Oλ) \xi_t(i,j)=\frac{P(i_t=q_i,i_{t+1}=q_j,O|\lambda)}{P(O|\lambda)} \tag{25}
    可以通过前向后向概率计算:
    ξt(i,j)=P(it=qi,it+1=qj,Oλ)P(Oλ)=P(it=qi,it+1=qj,Oλ)i=1Nj=1NP(it=qi,it+1=qj,Oλ) \xi_t(i,j)=\frac{P(i_t=q_i,i_{t+1}=q_j,O|\lambda)}{P(O|\lambda)}=\frac{P(i_t=q_i,i_{t+1}=q_j,O|\lambda)}{\sum_{i=1}^N\sum_{j=1}^NP(i_t=q_i,i_{t+1}=q_j,O|\lambda)}

    P(it=qi,it+1=qj,Oλ)=αt(i)aijbj(ot+1)βt+1(j) P(i_t=q_i,i_{t+1}=q_j,O|\lambda)=\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)
    所以
    (26)ξt(i,j)=αt(i)aijbj(ot+1)βt+1(j)i=1Nj=1Nαt(i)aijbj(ot+1)βt+1(j) \xi_t(i,j)=\frac{\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)}{\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(o_{t+1})\beta_{t+1}(j)} \tag{26}
  3. γt(i)\gamma_t(i)ξt(i,j)\xi_t(i,j)对各个时刻tt求和,可以得到一些有用的期望值:
    (1) 在观测OO下状态ii出现的期望值
    (27)t=1Tγt(i) \sum_{t=1}^T\gamma_t(i) \tag{27}
    (2) 在观测OO下由状态ii转移的期望值
    (28)t=1T1γt(i) \sum_{t=1}^{T-1}\gamma_t(i) \tag{28}
    (3) 在观测OO下由状态ii转移到状态jj的期望值
    (29)t=1T1ξt(i,j) \sum_{t=1}^{T-1}\xi_t(i,j) \tag{29}

学习算法

隐马尔科夫模型的学习,根据训练数据是包括观测序列和对应的状态序列还是只有观测序列,可以分别由监督学习与非监督学习实现。本节首先介绍监督学习算法,而后介绍非监督学习算法--Baum-Welch算法(也就是EM算法)。

  • 监督学习方法
    假设已给训练数据包含SS个长度相同的观测序列和对应的状态序列{(O1,I1),(O2,I2), ,(OS,IS)}\{(O_1,I_1),(O_2,I_2),\cdots,(O_S,I_S)\},那么可以用极大似然估计法来估计隐马尔科夫模型的参数。具体方法如下:
  1. 转移概率aija_{ij}的估计
    设样本中时刻tt处于状态ii时刻t+1t+1转移到状态jj的频数为AijA_{ij},那么状态转移概率aija_{ij}的估计是
    (30)aij^=Aijj=1NAij,i=1,2, ,N;j=1,2, ,N \hat{a_{ij}}=\frac{A_{ij}}{\sum_{j=1}^NA_{ij}}, i=1,2,\cdots,N; j=1,2,\cdots,N \tag{30}
  2. 观测概率bj(k)b_j(k)的估计
    设样本中状态为jj并观测为kk的频数是BjkB_{jk},那么状态为jj观测为kk的概率bj(k)b_j(k)的估计是
    (31)bj(k)^=Bijk=1MBij,j=1,2, ,N;k=1,2, ,M \hat{b_j(k)}=\frac{B_{ij}}{\sum_{k=1}^MB_{ij}}, j=1,2,\cdots,N; k=1,2,\cdots,M \tag{31}
  3. 初始状态概率πi\pi_i的估计πi^\hat{\pi_i}SS个样本中初始状态为qiq_i的频率。
    由于监督学习需要使用训练数据,而人工标准训练数据往往代价很高,有时就会利用非监督学习的方法。
  • Baum-Welch算法
    假设给定训练数据只包含SS个长度为TT的观测序列{O1,O2, ,OS}\{O_1,O_2,\cdots,O_S\}而没有对应的状态序列,目标是学习隐马尔科夫模型λ=(A,B,π)\lambda=(A,B,\pi)的参数。我们将观测序列数据看作观测数据OO,状态序列数据看作不可观测的隐数据II,那么隐马尔科夫模型事实上是一个含有隐变量的概率模型
    (32)P(Pλ)=IP(OI,λ)P(Iλ) P(P|\lambda)=\sum_IP(O|I,\lambda)P(I|\lambda) \tag{32}
    它的参数学习可以由EM算法实现。
  1. 确定完全数据的对数似然函数
    所有观测数据写成O=(o1,o2, ,oT)O=(o_1,o_2,\cdots,o_T),所有隐数据写成I=(i1,i2, ,iT)I=(i_1,i_2,\cdots,i_T),完全数据是(O,I)=(o1,o2, ,oT,i1,i2, ,iT)(O,I)=(o_1,o_2,\cdots,o_T,i_1,i_2,\cdots,i_T)。完全数据的对数似然函数是logP(O,Iλ)logP(O,I|\lambda)
  2. EM算法的E步:求Q函数Q(λ,λˉ)Q(\lambda,\bar\lambda)
    (33)Q(λ,λˉ)=IlogP(O,Iλ)P(O,Iλˉ) Q(\lambda,\bar\lambda)=\sum_IlogP(O,I|\lambda)P(O,I|\bar\lambda) \tag{33}
    其中,λˉ\bar\lambda是隐马尔科夫模型参数的当前估计值,λ\lambda是要极大化的隐马尔科夫模型参数。
    P(O,Iλ)=πi1bi1(o1)ai1i2bi2(o2)aiT1iTbiT(oT) P(O,I|\lambda)=\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)\cdots a_{i_{T-1}i_T}b_{i_T}(o_T)
    于是Q函数可以写成:
    (34)Q(λ,λˉ)=Ilogπi1P(O,Iλˉ)+I(t=1T1logaitit+1)P(O,Iλˉ)+I(t=1Tlogbit(ot))P(O,Iλˉ) \begin{aligned} Q(\lambda,\bar\lambda)&=\sum_Ilog\pi_{i_1}P(O,I|\bar\lambda) \\ &+\sum_I\bigg(\sum_{t=1}^{T-1}loga_{i_ti_{t+1}}\bigg)P(O,I|\bar\lambda)+\sum_I\bigg(\sum_{t=1}^Tlogb_{i_t}(o_t)\bigg)P(O,I|\bar\lambda) \tag{34} \end{aligned}
    式中求和都是对所有训练数据的序列长度TT进行的。
  3. EM算法的M步:极大化Q函数Q(λ,λˉ)Q(\lambda,\bar\lambda)求模型参数AABBπ\pi
    由于要极大化的参数在式(34)中单独地出现在3个项中,所以只需对各项分别极大化。
    (1) 式(34)的第1项可以写成:
    Ilogπi0P(O,Iλˉ)=i=1NlogπiP(O,i1=iλˉ) \sum_Ilog\pi_{i_0}P(O,I|\bar\lambda)=\sum_{i=1}^Nlog\pi_iP(O,i_1=i|\bar\lambda)
    注意到πi\pi_i满足约束条件i=1Nπi=1\sum_{i=1}^N\pi_i=1,利用拉格朗日乘子法,写出拉格朗日函数:
    i=1NlogπiP(O,i1=iλˉ)+γ(i=1Nπi1) \sum_{i=1}^Nlog\pi_iP(O,i_1=i|\bar\lambda)+\gamma\bigg(\sum_{i=1}^N\pi_i-1\bigg)
    对其求偏导数并令结果为0
    (35)πi[i=1NlogπiP(O,i1=iλˉ)+γ(i=1Nπi1)] \frac{\partial}{\partial\pi_i}\bigg[\sum_{i=1}^Nlog\pi_iP(O,i_1=i|\bar\lambda)+\gamma\bigg(\sum_{i=1}^N\pi_i-1\bigg)\bigg] \tag{35}

    P(O,i1=iλˉ)+γπi=0 P(O,i_1=i|\bar\lambda)+\gamma\pi_i=0
    ii求和得到γ\gamma
    γ=P(Oλˉ) \gamma=-P(O|\bar\lambda)
    带入式(35)即得
    (36)πi=P(O,i1=iλˉ)P(Oλˉ) \pi_i=\frac{P(O,i_1=i|\bar\lambda)}{P(O|\bar\lambda)} \tag{36}
    (2) 式(34)的第2项可以写成
    I(t=1T1logaitit+1)P(O,Iλˉ)=i=1Nj=1Nt=1T1logaijP(O,it=i,it+1=jλˉ) \sum_I\bigg(\sum_{t=1}^{T-1}loga_{i_ti_{t+1}}\bigg)P(O,I|\bar\lambda)=\sum_{i=1}^N\sum_{j=1}^N \sum_{t=1}^{T-1}loga_{ij}P(O,i_t=i,i_{t+1}=j|\bar\lambda)
    类似第1项,应用具有约束条件j=1Naij=1\sum_{j=1}^Na_{ij}=1的拉格朗日乘子法可以求出
    (37)aij=t=1T1P(O,it=i,it+1=jλˉ)t=1T1P(O,it=iλˉ) a_{ij}=\frac{\sum_{t=1}^{T-1}P(O,i_t=i,i_{t+1}=j|\bar\lambda)}{\sum_{t=1}^{T-1}P(O,i_t=i|\bar\lambda)} \tag{37}
    (3) 式(34)的第3项为
    I(t=1Tlogbit(ot))P(O,Iλˉ)=j=1Nt=1Tlogbj(ot)P(O,it=jλˉ) \sum_I\bigg(\sum_{t=1}^Tlogb_{i_t}(o_t)\bigg)P(O,I|\bar\lambda)=\sum_{j=1}^N\sum_{t=1}^Tlogb_j(o_t)P(O,i_t=j|\bar\lambda)
    同样用拉格朗日乘子法,约束条件是k=1Mbj(k)=1\sum_{k=1}^Mb_j(k)=1。注意,只有在ot=vko_t=v_kbj(ot)b_j(o_t)bj(k)b_j(k)的偏导数才不为0,以I(ot=vk)I(o_t=v_k)表示。求得
    (38)bj(k)=t=1TP(O,it=jλˉ)I(ot=vk)t=1TP(O,it=jλˉ) b_j(k)=\frac{\sum_{t=1}^TP(O,i_t=j|\bar\lambda)I(o_t=v_k)}{\sum_{t=1}^TP(O,i_t=j|\bar\lambda)} \tag{38}
  • Baum-Welch模型参数估计公式
    将式(36)~式(38)中的各概率分别用γt(i)\gamma_t(i)ξt(i,j)\xi_t(i,j)表示,则可将相应的公式写成:
    (39)aij=t=1T1ξt(i,j)t=1T1γt(i) a_{ij}=\frac{\sum_{t=1}^{T-1}\xi_t(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)} \tag{39}
    (40)bj(k)=t=1,ot=vkTγt(j)t=1Tγt(j) b_j(k)=\frac{\sum_{t=1,o_t=v_k}^T\gamma_t(j)}{\sum_{t=1}^T\gamma_t(j)} \tag{40}
    (41)πi=γ1(i) \pi_i=\gamma_1(i) \tag{41}
    其中,γt(i)\gamma_t(i)ξt(i,j)\xi_t(i,j)分别由式(24)及式(26)给出。式(39)~式(41)就是Baum-Welch算法,它是EM算法在隐马尔科夫模型学习中的具体实现,由Baum和Welch提出。
    算法4(Baum-Welch算法)
    输入:观测数据O=(o1,o2, ,oT)O=(o_1,o_2,\cdots,o_T)
    输出:隐马尔科夫模型参数。
    (1) 初始化
    n=0n=0,选取aij(0)a_{ij}^{(0)}bj(k)(0)b_j(k)^{(0)}πi(0)\pi_i^{(0)},得到模型λ(0)=(A(0),B(0),π(0))\lambda^{(0)}=(A^{(0)},B^{(0)},\pi^{(0)})
    (2) 递推。对n=1,2,n=1,2,\cdots
    aij=t=1T1ξt(i,j)t=1T1γt(i)bj(k)=t=1,ot=vkTγt(j)t=1Tγt(j)πi=γ1(i) a_{ij}=\frac{\sum_{t=1}^{T-1}\xi_t(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)} \\ b_j(k)=\frac{\sum_{t=1,o_t=v_k}^T\gamma_t(j)}{\sum_{t=1}^T\gamma_t(j)} \\ \pi_i=\gamma_1(i)
    右端各值按观测O=(o1,o2, ,oT)O=(o_1,o_2,\cdots,o_T)和模型λ(n)=(A(n),B(n),π(n))\lambda^{(n)}=(A^{(n)},B^{(n)},\pi^{(n)})计算。式中γt(i)\gamma_t(i)ξt(i,j)\xi_t(i,j)由式(24)和式(26)给出。
    (3) 终止。得到模型参数λ(n+1)=(A(n+1),B(n+1),π(n+1))\lambda^{(n+1)}=(A^{(n+1)},B^{(n+1)},\pi^{(n+1)})

预测算法

下面介绍隐马尔科夫模型预测的两种算法:近似算法与维特比算法。

  • 近似算法
    近似算法的想法是,在每个时刻tt选择在该时刻最有可能出现的状态iti_t^*,从而得到一个状态序列I=(i1,i2, ,iT)I^*=(i_1^*,i_2^*,\cdots,i_T^*),将它作为预测的结果。
    给定隐马尔科夫模型λ\lambda和观测序列OO,在时刻tt处于状态qiq_i的概率γt(i)\gamma_t(i)
    (42)γt(i)=αt(i)βt(i)P(Oλ)=αt(i)βt(i)j=1Nα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)} \tag{42}
    在每一时刻tt最有可能的状态iti_t^*
    (43)it=argmax1iN[γt(i)],t=1,2, ,T i_t^*=arg\max_{1\leq i\leq N}[\gamma_t(i)], t=1,2,\cdots,T \tag{43}
    从而得到状态序列I=(i1,i2, ,iT)I^*=(i_1^*,i_2^*,\cdots,i_T^*)
    近似算法的优点是计算简单,其缺点是不能保证预测的状态序列整体是最有可能的状态序列,因为预测的状态序列可能有实际不发生的部分。事实上,上述方法得到的状态序列中有可能存在转移概率为0的相邻专题,即对某些iijjaij=0a_{ij}=0时。尽管如此,近似算法仍然是有用的。

  • 维特比算法
    维特比算法实际是动态规划解隐马尔科夫模型预测问题,即用动态规划求概率最大路径(最优路径)。这时一条路径对应着一个状态序列。
    根据动态规划原理,最优路径具有这样的特性:如果最优路径在时刻tt通过结点iti_t^*,那么这一路径从结点iti_t^*到终点iTi_T^*的部分路径,对于从iti_t^*iTi_T^*的所有可能的部分路径来说,必须是最优的。因为加入不是这样,那么从iti_t^*iTi_T^*就有另一条更好的部分路径存在,如果把它和从i1i_1^*iti_t^*的部分路径连接起来,就会形成一条比原来的路径更优的路径,这是矛盾的,依据这一原理,我们只需从时刻t=1t=1开始,递推地计算在时刻tt状态为ii的各条部分路径的最大概率,直到得到时刻t=Tt=T状态为ii的各条路径的最大概率。时刻t=Tt=T的最大概率即为最优路径的概率PP^*,最优路径的终结点iTi_T^*也同时得到。之后,为了找出最优路径的各个结点,从终结点iTi_T^*开始,由后向前逐步求得结点iT1, ,i1i_{T-1}^*,\cdots,i_1^*,得到最优路径I=(i1,i2, ,iT)I^*=(i_1^*,i_2^*,\cdots,i_T^*)。这就是维特比算法。
    首先导入两个变量δ\deltaψ\psi。定义在时刻tt状态为ii的所有单个路径(i1,i2, ,it)(i_1,i_2,\cdots,i_t)中概率最大值为
    (44)δt(i)=maxi1,i2, ,it1P(it=i,it1, ,i1,ot, ,o1λ),i=1,2, ,N \delta_t(i)=\max_{i_1,i_2,\cdots,i_{t-1}}P(i_t=i,i_{t-1},\cdots,i_1,o_t,\cdots,o_1|\lambda), i=1,2,\cdots,N \tag{44}
    由定义可得变量δ\delta的递推公式:
    (45)δt+1(i)=maxi1,i2, ,itP(it+1=i,it, ,i1,ot+1, ,o1λ)=max1jN[δt(j)aji]bi(ot+1),i=1,2, ,N;t=1,2, ,T1 \begin{aligned} \delta_{t+1}(i)&=\max_{i_1,i_2,\cdots,i_t}P(i_{t+1}=i,i_t,\cdots,i_1,o_{t+1},\cdots,o_1|\lambda) \\ &=\max_{1\leq j\leq N}[\delta_t(j)a_{ji}]b_i(o_{t+1}), i=1,2,\cdots,N; t=1,2,\cdots,T-1 \tag{45} \end{aligned}
    定义在时刻tt状态为ii的所有单个路径(i1,i2, ,it1,i)(i_1,i_2,\cdots,i_{t-1},i)中概率最大的路径的第t1t-1个结点为
    (46)ψt(i)=argmax1jN[δt1(j)aji],i=1,2, ,N \psi_t(i)=arg\max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}], i=1,2,\cdots,N \tag{46}
    下面介绍维特比算法。
    算法5(维特比算法)
    输入:模型λ=(A,B,π)\lambda=(A,B,\pi)和观测O=(o1,o2, ,oT)O=(o_1,o_2,\cdots,o_T)
    输出:最优路径I=(i1,i2, ,iT)I^*=(i_1^*,i_2^*,\cdots,i_T^*)
    (1) 初始化
    δ1(i)=πibi(o1),i=1,2, ,Nψ1(i)=0,i=1,2, ,N \delta_1(i)=\pi_ib_i(o_1), i=1,2,\cdots,N \\ \psi_1(i)=0, i=1,2,\cdots,N
    (2) 递推。对t=2,3, ,Tt=2,3,\cdots,T
    δt(i)=max1jN[δt1(j)aji]bi(ot),i=1,2, ,Nψt(i)=argmax1jN[δt1(j)aji],i=1,2, ,N \delta_t(i)=\max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}]b_i(o_t), i=1,2,\cdots,N \\ \psi_t(i)=arg\max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}], i=1,2,\cdots,N
    (3) 终止
    P=max1iNδT(i)iT=argmax1iN[δT(i)] P^*=\max_{1\leq i\leq N}\delta_T(i) \\ i_T^*=arg\max_{1\leq i\leq N}[\delta_T(i)]
    (4) 最优路径回溯。对t=T1,T2, ,1t=T-1,T-2,\cdots,1
    it=ψt+1(it+1) i_t^*=\psi_{t+1}(i_{t+1}^*)
    求得最优路径I=(i1,i2, ,iT)I^*=(i_1^*,i_2^*,\cdots,i_T^*)