Loading...

隐马尔科夫模型

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

1.1 模型的定义

  隐马尔科夫模型适用于标注问题的统计学习模型,描述由隐藏的马尔科夫链随机生成观测序列的过程,属于生成模型。
  隐马尔科夫模型是关于时序的概率模型,观测序列是观测变量,状态序列是隐变量,用观测序列求得状态序列(状态序列有时序性关系)

(1)隐马尔可夫模型用概率图模型来表示
(2)组成三要素

     λ\lambda=(A,B,π\pi)

  • 状态转移概率矩阵A
    A=[aija_{ij}]_{N×N}                                                                     (1)
    aija_{ij}=P(it+1i_{t+1}=qjq_{j}|iti_{t}=qiq_{i}),             i=1,2,…,N;   j=1,2,…,N
    是在时刻t处在状态qiq_{i}的条件下在时刻t+1转移到状态qjq_{j}的概率
  • 观测概率矩阵B
    B=[bjb_{j}(k)]_{N×M}
    bjb_{j}(k)=P(oto_{t}=vkv_{k}|iti_{t}=qjq_{j}),                k=1,2,…,M;   j=1,2,…,N
    是在时刻t处于状态qjq_{j}的条件下生成观测vkv_{k}的概率
  • 初始状态概率向量
    π\pi=(πi\pi_{i})
    πi\pi_{i}=P(i1i_{1}=qiq_{i}),                         i=1,2,…,N
    是时刻t=1处于状态qiq_{i}的概率

  A和π\pi确定了隐藏的马尔科夫链,生成不可观测的状态序列;B确定了如何从状态序列生成观测序列
(3)两个假设前提

  • 齐次马尔可夫模型
    t时刻的状态只依赖前一时刻的状态
  • 观测独立性假设
    t时刻观测只依赖于t时刻的状态

2.概率计算方法

介绍计算观测序列概率P(O|λ\lambda)

2.1 直接计算法

  状态序列 I=(i1i_{1},i2i_{2},…,iTi_{T})的概率:

  给定状态序列I=(i1i_{1},i2i_{2},…,iTi_{T}),观测序列O=(o1o_{1},o2o_{2},…,oTo_{T})的概率:

  根据贝叶斯公式可得:

  根据联合概率求边缘概率可得:

  但是直接计算的复杂度太高,是O(TNTN^{T}),算法不可行。

2.2 前向算法

(1)前向算法推导(递推部分):
αt+1\alpha_{t+1}(i)=P(o1o_{1},o2o_{2},…,ot+1o_{t+1},it+1i_{t+1}=qiq_{i}|λ\lambda)  (前向概率的定义)
           =j=1N\sum^{N}_{j=1}P(o1o_{1},o2o_{2},…,ot+1o_{t+1},it+1i_{t+1}=qiq_{i},iti_{t}=qjq_{j}|λ\lambda)
           =j=1N\sum^{N}_{j=1}P(o1o_{1},o2o_{2},…,ot+1o_{t+1},iti_{t}=qjq_{j}|λ\lambda)P(ot+1o_{t+1}|o1o_{1},o2o_{2},…,oto_{t},it+1i_{t+1}=qiq_{i},iti_{t}=qjq_{j}|λ\lambda)P(it+1i_{t+1}=qiq_{i}|o1o_{1},o2o_{2},…,oto_{t},ot+1o_{t+1},iti_{t}=qjq_{j},λ\lambda)
  根据两个假设前提:t时刻的状态只依赖前一时刻的状态,和t时刻观测只依赖于t时刻的状态
           =j=1N\sum^{N}_{j=1}P(o1o_{1},o2o_{2},…,ot+1o_{t+1},iti_{t}=qjq_{j}|λ\lambda)P(ot+1o_{t+1}|it+1i_{t+1}=qiq_{i}|λ\lambda)P(it+1i_{t+1}=qiq_{i}|iti_{t}=qjq_{j},λ\lambda)
           =j=1N\sum^{N}_{j=1}αt\alpha_{t}ajia_{ji}bib_{i}(ot+1o_{t+1})

(2)观测序列概率的前向算法
  输入:隐马尔科夫模型λ\lambda,观测序列O
  输出:观测序列概率P(O|λ\lambda)

  • 初值:α1\alpha_{1}=πi\pi_ibib_i(oio_i)          ,i=1,2,…,N(N是状态数)
  • 递推:αt+1\alpha_{t+1}(i)=[j=1N\sum^{N}_{j=1}αt(j)\alpha_{t}(j)ajia_{ji}]bib_{i}(ot+1o_{t+1})
  • 终止:P(O|λ\lambda)=i=1N\sum^{N}_{i=1}αT(i)\alpha_{T}(i)(T是最终的时刻)

(3)前向算法例题

  • α1\alpha_{1}(2):在t=1时,状态为2的概率
  • a12a_{12}:下一时刻由状态1转换为状态2的概率
  • b1b_1(o2o_2):状态为1时生成t=2时刻观测的结果的概率
  • π2\pi_2:t=1时刻状态为2的概率

2.3后向算法

  输入和输出同前向算法

  • 初始值:βT\beta_{T}(i)=1,                   i=1,2,…,N
  • 递推:βt\beta_{t}(i)=j=1N\sum^{N}_{j=1}aija_{ij}bjb_j(ot+1o_{t+1})βt+1\beta_{t+1}(j),                   i=1,2,…,N
  • 最终:P(O|λ\lambda)=i=1N\sum^{N}_{i=1}πi\pi_{i}bib_i(o1o_1)β1\beta_{1}(i)

2.4前向-后向算法

  前面步骤基本一致,是前向后向算法的总和,只是最终这里不同:
P(O|λ\lambda)=i=1N\sum^{N}_{i=1}j=1N\sum^{N}_{j=1}αij\alpha_{ij}bjb_j(ot+1o_{t+1})βt+1\beta_{t+1}(j),                   t=1,2,…,T

3.学习算法

3.1监督学习方法

给定的训练数据:S个长度相同的观测序列和对应的状态序列{(O1O_1,I1I_1),(O2O_2,I2I_2),…,(OsO_s,IsI_s)}

  • 转移概率aija_{ij}的估计
    aija_{ij}=AijA_{ij}/j=1N\sum^{N}_{j=1}AijA_{ij}
    分子:样本中状态i到下一时刻转移到状态j的频数
    分母:样本中状态i到下一时刻转移到所有状态的频数

  • 观测概率bjb_j(k)的估计
    bjb_j(k)=BjkB_{jk}/Mk=1\sum^{k=1}_{M}BjkB_{jk}
    分子:样本中状态j观测为k的频数
    分母:样本中状态j观测为所有的频数

  • 初始状态概率πi\pi_{i}
    例:10个样本,3个样本的初始状态为q1q_1,那么π1\pi_1=310\frac{3}{10}

3.2Baum-Welch算法(无监督学习)

给定训练数据:S个观测序列{O1O_1,O2O_2,…,OsO_s}
(1)BW算法

  • E步:
    EM算法的Q函数:

    Q(θ,θ(i)θ^{(i)}) = Z\sum_{Z}P(Z|Y,θ(i)θ^{(i)}) log[P(Y|Z,θ)P(Z|θ)]
                     = Z\sum_{Z}P(Z|Y,θ(i)θ^{(i)}) logP(Y,Z|θ)
                     = EZE_{Z}[P(Z|Y,θ(i)θ^{(i)}) logP(Y,Z|θ)]

    BW算法的Q函数(两者是有区别的):

    Q(λ,λλ^{'}) = I\sum_{I} logP(O,I|λ)P(O,I|λ\lambda^{'})      (省略了一个常数因子1/P(O|λ\lambda^{'}))

  • M步:
    分别对三个模型参数进行求导=0

(2)BW算法流程
输入:观测数据O
输出:隐马尔科夫模型参数

  • 初始化:n=0,选取aij(0)a^{(0)}_{ij},bj0b^{0}_{j}(k),πi(0)\pi^{(0)}_{i}

  • 递推:n=1,2,…,
    πi(n+1)\pi^{(n+1)}_{i}=P(O,i1i_1=i|λ\lambda^{'})/P(O|λ\lambda^{'})
               =P(i1i_1=i|O,λ\lambda^{'})
               =γ1\gamma_1(i)
    γ1\gamma_1(i):给定模型λ\lambda^{'}和观测O,在时刻t=1时处于状态i的概率


    aij(n+1)a^{(n+1)}_{ij}=t=1T1\sum^{T-1}_{t=1}P(O,iti_t=i,it+1i_{t+1}=j|λ\lambda^{'})/t=1T1\sum^{T-1}_{t=1}P(O,iti_t=i|λ\lambda^{'})
               =t=1T1\sum^{T-1}_{t=1}ξt\xi_{t}(i,j)/t=1T1\sum^{T-1}_{t=1}γt\gamma_t(i)
    ξt\xi_{t}(i,j):给定模型λ\lambda和观测O,状态qiq_i在下一时刻转换为qiq_i的概率
    t=1T1\sum^{T-1}_{t=1}ξt\xi_{t}(i,j):在观测O下由状态i转移到状态j的期望值
    t=1T1\sum^{T-1}_{t=1}γt\gamma_t(i):在观测O下由状态i转移的期望


    bj(n+1)b^{(n+1)}_j(k)=t=1T\sum^{T}_{t=1}P(O,iti_t=j|λ\lambda^{'})I(oto_t=vkv_k)/t=1T\sum^{T}_{t=1}P(O,iti_t=j|λ\lambda^{'})

                   =t=1,ot=vkT\sum^{T}_{t=1,o_t=v_k}γt\gamma_t(j)/t=1T\sum^{T}_{t=1}γt\gamma_t(j)
    t=1T\sum^{T}_{t=1}γt\gamma_t(j):观测O下状态i出现的期望

  • 最终:得到模型参数

4. 预测算法

当我们有了模型λ\lambda=(A,B,π\pi)和观测序列O,就可以来预测最有可能的状态序列I了

4.1近似算法

t时刻处于状态qiq_i的概率为:
γt\gamma_t(i)=P(O,iti_t=qiq_i|λ\lambda)/P(O|λ\lambda)
       =P(o1o_1,o2o_2,…,oto_t,iti_t =qiq_i|λ\lambda)/P(ot+1o_{t+1},ot+2o_{t+2},…,oTo_T|o1o_1,o2o_2,…,oto_t,iti_t=qiq_i,λ\lambda)
       =P(o1o_1,o2o_2,…,oto_t,iti_t=qiq_i|λ\lambda)/P(ot+1o_{t+1},ot+2o_{t+2},…,oTo_T|iti_t=qiq_i,λ\lambda)
       =αt\alpha_t(i)βt\beta_t(i)/j=1N\sum^{N}_{j=1}αt\alpha_t(j)βt\beta_t(j)     (求和是所有状态)

t时刻最有可能的状态是: iti^{*}_{t}= arg max1iNmax_{1≤i≤N} [γt\gamma_t(i)]        ,t=1,2,…,T

从而得到状态序列: II^*=(i1i^{*}_{1},i2i^{*}_{2},…,iTi^{*}_{T})

缺点:存在转移概率为0的相邻状态,无法解决。

4.2维特比算法

(1)维特比算法的参数
实质:动态规划求解概率最大路径
t时刻最有可能在哪个状态的可能性:δt\delta_{t}(i)=maxi1,i2,...,it1max_{i_1,i_2,...,i_{t-1}}P(iti_t=i,it1i_{t-1},…,i1i_1,oto_t,…,o1o_1|λ\lambda)
t时刻最有可能是哪个状态:φt\varphi_t(i)=arg max1jNmax_{1≤j≤N} [δt1\delta_{t-1}(i)ajia_{ji}]

(2)维特比算法流程
输入:模型λ\lambda和观测O
输出:最优路径 II^*=(i1i^*_1,i2i^*_2,…,iTi^*_T)

  • 初始化:δ1\delta_1(i)=πi\pi_ibib_i(o1o_1)         ,i=1,2,…,N
                  φ1\varphi_1(i)=0           ,i=1.2,…,N
  • 递推:δt\delta_{t}(i)=max1jNmax_{1≤j≤N} [δt1\delta_{t-1}(j)ajia_{ji}]bib_i(oto_t)        ,i=1,2,…,N
              φt\varphi_t(i)=arg max1jNmax_{1≤j≤N} [δt1\delta_{t-1}(i)ajia_{ji}]        ,i=1,2,…,N
  • 最终:PP^*=max1jNmax_{1≤j≤N} δT\delta_{T}(i)
                iTi^*_T=arg max1jNmax_{1≤j≤N} [δT\delta_{T}(i)]
  • 最优路径回溯:iti^*_t=φt+1\varphi_{t+1}(it+1i^*_{t+1})
           最优路径:II^*=(i1i^*_1,i2i^*_2,…,iTi^*_T)

(3)典型例题