机器学习基础——隐马尔可夫模型

隐马尔可夫模型

  • 定义:隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。
    在这里插入图片描述

  • 对该问题中的数据进行数学定义

  • 所有可能的状态集合 Q Q Q,其中 N N N为所有可能的状态数:
    Q = { q 1 , q 2 , . . . , q N } Q = \{q_1,q_2,...,q_N\} Q={q1,q2,...,qN}

  • 所有可能的观测集合 V V V,其中 M M M为所有可能的观测数:
    V = { v 1 , v 2 , . . . , v M } V = \{v_1,v_2,...,v_M\} V={v1,v2,...,vM}

  • 长度为 T T T的状态序列 I I I
    I = ( i 1 , i 2 , . . . i T ) I = (i_1,i_2,...i_T) I=(i1,i2,...iT)

  • 长度为 T T T的观测序列 O O O:
    O = ( o 1 , o 2 , . . . , o T ) O = (o_1,o_2,...,o_T) O=(o1,o2,...,oT)

1.模型定义

隐马尔可夫模型立足于两个基本假设:齐次马尔可夫性假设观测独立性假设

  • 齐次马尔可夫性假设: 假设隐藏的马尔科夫链在任意时刻 t t t的状态只依赖于前一时刻的状态,与其他时刻的状态及观测无关,也与时刻 t t t无关。数学表示如下:
    P ( i t ∣ i t − 1 , o t − 1 , . . . i 1 , o 1 ) = P ( i t ∣ i t − 1 ) ,   t = 1 , 2 , . . . T P(i_t|i_{t-1},o_{t-1},...i_1,o_1) = P(i_t|i_{t-1}),\space t=1,2,...T P(itit1,ot1,...i1,o1)=P(itit1), t=1,2,...T
  • 观测独立性假设: 即假设任意时刻的观测只能依赖于该时刻的马尔科夫链的状态,与其他观测及状态无关。数学表示如下:
    P ( o t ∣ i T , o T , 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_T,o_T,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(otiT,oT,iT1,oT1,...,it+1,ot+1,it,it1,ot1,...i1,o1)=P(otit)
    基于两个基本假设,我们建立状态转移概率矩阵 A A A观测概率矩阵 B B B
  • 状态转移概率矩阵 A A A
    A = [ a i j ] N × N A = [a_{ij}]_{N×N} A=[aij]N×N
    式中, a i j a_{ij} aij表示由状态 q i q_i qi转移到状态 q j q_j qj的概率。数学表示如下:
    a i j = P ( i t + 1 = q j ∣ i t = q i ) a_{ij}=P(i_{t+1}=q_j|i_t=q_i) aij=P(it+1=qjit=qi)
  • 观测概率矩阵 B B B:
    B = [ b j ( k ) ] N × M B = [b_j(k)]_{N×M} B=[bj(k)]N×M
    式 中 , b j ( k ) 表 示 状 态 为 q j 时 , 观 测 为 v k 的 概 率 。 数 学 表 示 如 下 : 式中,b_j(k)表示状态为q_j时,观测为v_k的概率。数学表示如下: bj(k)qjvk
    b j ( k ) = P ( o t = v k ∣ i t = q j ) b_j(k) = P(o_t=v_k|i_t=q_j) bj(k)=P(ot=vkit=qj)
    对 已 有 的 矩 阵 A 和 B , 补 充 初 始 状 态 概 率 即 可 构 成 闭 合 问 题 。 定 义 初 始 状 态 台 率 向 量 π : 对已有的矩阵A和B,补充初始状态概率即可构成闭合问题。定义初始状态台率向量\pi: ABπ
    π = ( π i ) \pi = (\pi_i) π=(πi)
    π i 表 示 t = 1 时 刻 处 于 状 态 q i 的 概 率 。 数 学 表 示 如 下 : \pi_i表示t=1时刻处于状态q_i的概率。数学表示如下: πit=1qi
    π i = P ( i 1 = q i ) \pi_i = P(i_1 = q_i) πi=P(i1=qi)
    对 构 成 的 闭 合 问 题 , π 和 A 可 以 决 定 状 态 序 列 , B 可 以 决 定 观 测 序 列 , 所 以 隐 马 尔 可 夫 模 型 可 以 表 示 为 : 对构成的闭合问题,\pi和A可以决定状态序列,B可以决定观测序列,所以隐马尔可夫模型可以表示为: πAB
    λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π)

2.隐马尔可夫模型的3个基本问题

  • 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.学习问题。已知观测序列 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.解码问题。已知模型 λ = ( 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(IO)最大的状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1,i_2,...,i_T) I=(i1,i2,...,iT),即给定观测序列,求最有可能的对应的状态序列。
  • 其中,解码问题常常被用来解决序列标注问题,假设给定了一段文本,这段文本可以视为马尔科夫链,文本为观测序列,文字的词性即为状态,构成状态序列,序列标注问题就是求出模型 λ \lambda λ后,求出最有可能的状态序列,即求出词性序列。

2.1 概率计算问题

本文重点讨论解码问题,即序列标注问题,概率计算问题不是我们关注的重点,不过概率计算问题中引入的前向概率后向概率值得学习,所以本节仍做讲解。
概率计算问题是已知 λ \lambda λ O O O,求 O O O出现的概率。数学表示为:
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) I I I的概率是:
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....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,λ)=bi1(o1)bi2(o2)...biT(oT)
由以上两式,可计算联合概率分布 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,Iλ),即给定模型参数时,状态序列 I , O I,O I,O同时出现的概率:
P ( O , I ∣ λ ) = P ( I ∣ λ ) 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) = P(I|\lambda)P(O|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(Iλ)P(OI,λ)=πi1bi1(o1)ai1i2bi2(o2).....aiT1iTbiT(oT)
由此,可通过对所有可能的状态序列 I I I求和,就可以计算出边缘概率分布 P ( O ∣ λ ) P(O|\lambda) P(Oλ),即:
P ( O , I ∣ λ ) = ∑ I P ( 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,I|\lambda) = \sum_I P(I|\lambda)P(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λ)=IP(Iλ)P(OI,λ)=i1,i2,...iTπi1bi1(o1)ai1i2bi2(o2).....aiT1iTbiT(oT)
每一时刻的状态 i i i N N N种可能,所以该算法的计算复杂度为 O ( T N T ) O(TN^T) O(TNT),为避免如此复杂的计算,引入前向算法和后向算法。

2.1.1 前向算法
  • 首先定义前向概率:给定到 t t t时刻,部分观测序列为 o 1 , o 2 , . . . o t o_1,o_2,...o_t o1,o2,...ot,且 t t t时刻状态为 q i q_i qi的概率为前向概率,数学表示为:
    α 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λ)
    由此,给出递推公式:
    初 值 : α 1 ( i ) = π i b 1 ( o 1 ) , i = 1 , 2 , . . . . N 递 推 : α t + 1 ( i ) = [ ∑ j = 1 N α t ( j ) ] a j i b t + 1 ( o t + 1 ) , t = 1 , 2 , . . . T − 1 终 止 : P ( O ∣ λ ) = ∑ i N α T ( i ) \red{初值}:\alpha_1(i) = \pi_ib_1(o_1),i=1,2,....N\\ \red{递推}:\alpha_{t+1}(i) = [\sum_{j=1}^N\alpha_{t}(j)]a_{ji}b_{t+1}(o_{t+1}),t=1,2,...T-1\\ \red{终止}:P(O|\lambda) = \sum_i^N\alpha_T(i) α1(i)=πib1(o1),i=1,2,....N:αt+1(i)=[j=1Nαt(j)]ajibt+1(ot+1),t=1,2,...T1P(Oλ)=iNαT(i)
    这里需要注意,在第一步中没有计算所有状态出现的概率和,是因为在计算 α 2 ( i ) \alpha_2(i) α2(i)时,会计算 t = 1 t=1 t=1时刻的所有状态出现的概率和;在递推过程中,执行到最后一项,得到 α T ( i ) \alpha_T(i) αT(i),但是我们需要计算的是 O O O出现的概率,所以需要对所有可能的状态相加,得到边缘概率分布。
2.1.2 后向算法
  • 后向概率:给定隐马尔可夫模型 λ \lambda λ,在时刻 t t t状态为 q i q_i qi的条件下,从 t + 1 t+1 t+1 T T T的部分观测序列为 o t + 1 , . . . o T o_{t+1},...o_T ot+1,...oT的概率为后向概率,数学表示为:
    β t ( i ) = P ( o t + 1 , . . . o T ∣ i t = q i , λ ) \beta_t(i)=P(o_{t+1},...o_T|i_t=q_i,\lambda) βt(i)=P(ot+1,...oTit=qi,λ)
  • 由此给出递推公式:
    初 始 化 : β T ( i ) = 1 递 推 : β t ( i ) = ∑ j = 1 N a i j b t ( o t ) β t + 1 ( j ) , t = 1 , 2 , . . . T − 1 终 止 : P ( O ∣ λ ) = ∑ i = 1 N π i b 1 ( o 1 ) β 1 ( i ) \red{初始化:}\beta_T(i)=1\\ \red{递推:}\beta_t(i) = \sum_{j=1}^{N}a_{ij}b_t(o_t)\beta_{t+1}(j),t=1,2,...T-1\\ \red{终止:}P(O|\lambda)=\sum_{i=1}^{N}\pi_ib_1(o_1)\beta_1(i) βT(i)=1βt(i)=j=1Naijbt(ot)βt+1(j),t=1,2,...T1P(Oλ)=i=1Nπib1(o1)β1(i)
2.13 概率给出

根据前项公式和后向公式,可以给出 O O O出现的概率计算公式:
P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) = ∑ i = 1 N π i b 1 ( o 1 ) β 1 ( i ) = ∑ i = 1 N α t ( i ) β t ( i ) = ∑ 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\alpha_T(i)=\sum_{i=1}^N\pi_ib_1(o_1)\beta_1(i)=\sum_{i=1}^N\alpha_t(i)\beta_t(i)\\=\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_{j}(o_{t+1})\beta_{t+1}(j) P(Oλ)=i=1NαT(i)=i=1Nπib1(o1)β1(i)=i=1Nαt(i)βt(i)=i=1Nj=1Nαt(i)aijbj(ot+1)βt+1(j)

2.2 学习算法

2.2.1 监督学习方法

假设训练数据包含S个长度相同的观测序列和对应的状态序列 { ( O 1 , I 1 ) , ( O 2 , I 2 ) , . . . , ( O s , I s ) } \{(O_1,I_1),(O_2,I_2),...,(O_s,I_s)\} {(O1,I1),(O2,I2),...,(Os,Is)},可以利用极大似然估计法来估计隐马尔可夫模型的参数。

  • 转移概率 a i j a_{ij} aij的估计
    a ^ i j = A i j ∑ j = 1 N A i j   , i = 1 , 2 , . . . N ; j = 1 , 2 , . . . N \hat{a}_{ij} = \frac{A_{ij}}{\sum_{j=1}^{N}A_{ij}}\space ,i=1,2,...N;j=1,2,...N a^ij=j=1NAijAij ,i=1,2,...N;j=1,2,...N
    A i j A_{ij} Aij为由状态 i i i向状态 j j j转移的频数。
  • 观测概率 b j ( k ) b_j(k) bj(k)的估计
    b ^ j ( k ) = B j k ∑ k = 1 M B j k   , j = 1 , 2 , . . . N ; k = 1 , 2 , . . . , M \hat{b}_j(k)=\frac{B_{jk}}{\sum_{k=1}^{M}B_{jk}}\space ,j=1,2,...N;k=1,2,...,M b^j(k)=k=1MBjkBjk ,j=1,2,...N;k=1,2,...,M
    B j k B_{jk} Bjk为状态为 j j j,观测为 k k k的频数。
  • 初始状态概率 π i \pi_i πi的估计
    π i ^ = Q i S   , i = 1 , 2 , . . . , N \hat{\pi_i}=\frac{Q_i}{S}\space ,i=1,2,...,N πi^=SQi ,i=1,2,...,N
    Q i Q_i Qi为初始状态为 q i q_i qi的频数, S S S为样本数量。
2.2.2 无监督学习方法

这一部分式子太多了,改手写吧。。。字难看,各位见谅。

  • 无监督学习使用著名的baum-welch算法,该方法后来被证明为使EM算法
    算法同EM算法相同,分两步:E步和M步。E步求期望M步最大化模型参数
2.2.2.1 E步求期望

E步是指在给定当前模型参数 λ ˉ \bar\lambda λˉ和观测数据 O O O的条件下,求完全数据 O , I O,I O,I的对数似然概率关于未知数据 I I I的期望。数学表示及推导见下图,各位见谅。。。
在这里插入图片描述

2.2.2.2 M步最大化模型参数

在这里插入图片描述

2.3 解码方法

  • 设在 t t t状态为 i i i的所有单个路径 ( i 1 , i 2 , . . . i T ) (i_1,i_2,...i_T) (i1,i2,...iT)中概率最大值为 δ t ( i ) \delta_t(i) δt(i)。数学表示为:
    δ t ( i ) = max ⁡   P ( i t = i , i t − 1 , . . . , i 1 , o t , . . . , o 1 ∣ λ ) ,   i = 1 , 2 , . . . N \delta_t(i)=\max\space P(i_t=i,i_{t-1},...,i_1,o_t,...,o_1|\lambda), \space i=1,2,...N δt(i)=max P(it=i,it1,...,i1,ot,...,o1λ), i=1,2,...N
    递推:
    初 始 : δ 1 ( i ) = π i b i ( o 1 ) ,   i = 1 , 2 , . . . , N 递 推 : δ t + 1 ( i ) = max ⁡ 1 ≤ j ≤ N [ δ t ( j ) a j i ] b i ( o t + 1 ) 初始:\delta_1(i) = \pi_ib_i(o_1),\space i = 1,2,...,N \\递推:\delta_{t+1}(i)=\max_{1\leq j\leq N}[\delta_t(j)a_{ji}]b_{i}(o_{t+1}) δ1(i)=πibi(o1), i=1,2,...,Nδt+1(i)=1jNmax[δt(j)aji]bi(ot+1)
  • 设在时刻 t t t状态为 i i i的所有单个路径 ( i 1 , i 2 , . . . , i t − 1 , i ) (i_1,i_2,...,i_{t-1},i) (i1,i2,...,it1,i)中概率最大的路径第 t − 1 t-1 t1个结点为 Ψ t ( i ) \Psi_t(i) Ψt(i),数学表示为:
    Ψ t ( i ) = arg ⁡   max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] \Psi_t(i)=\arg\space \max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}] Ψt(i)=arg 1jNmax[δt1(j)aji]
    递推:
    初 始 : Ψ 1 ( i ) = 0 递 推 : Ψ t ( i ) = arg ⁡   max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] 初始:\Psi_1(i)=0 \\递推:\Psi_t(i)=\arg\space \max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}] Ψ1(i)=0Ψt(i)=arg 1jNmax[δt1(j)aji]
2.3.1 维特比算法求解过程

初始化(t=1):
δ 1 ( i ) = π i b i ( o 1 ) ,   i = 1 , 2 , . . . , N Ψ 1 ( i ) = 0 \\\delta_1(i) = \pi_ib_i(o_1),\space i = 1,2,...,N \\ \Psi_1(i)=0 δ1(i)=πibi(o1), i=1,2,...,NΨ1(i)=0
递推t=2,…,T:
δ t ( i ) = max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] b i ( o t ) Ψ t ( i ) = arg ⁡   max ⁡ 1 ≤ j ≤ N [ δ t − 1 ( j ) a j i ] \\\delta_{t}(i)=\max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}]b_{i}(o_{t}) \\ \Psi_t(i)=\arg\space \max_{1\leq j\leq N}[\delta_{t-1}(j)a_{ji}] δt(i)=1jNmax[δt1(j)aji]bi(ot)Ψt(i)=arg 1jNmax[δt1(j)aji]
终止:
i T ∗ = arg ⁡ max ⁡ 1 ≤ i ≤ N [ δ T ( i ) ] i^*_T = \arg \max_{1\leq i\leq N}[\delta_T(i)] iT=arg1iNmax[δT(i)]
最优路径回溯 t = T − 1 , . . . , 2 , 1 t=T-1,...,2,1 t=T1,...,2,1
i t ∗ = Ψ i + 1 ( i t + 1 ∗ ) i^*_t = \Psi_{i+1}(i^*_{t+1}) it=Ψi+1(it+1)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值