隐马尔科夫模型HMM

本文深入介绍了隐马尔科夫模型(HMM),它是一种用于时间序列分析的概率模型。HMM假设状态序列遵循马尔科夫过程,并且每个状态以一定的概率产生输出。主要任务包括推理和训练,前者涉及计算给定输出序列的最可能状态序列,后者是根据输出序列估计模型参数。文章详细阐述了HMM的基本概念、参数求解方法如EM算法,以及维特比算法在模式匹配中的应用。此外,还讨论了HMM在序列标注和语音识别等领域的应用。
摘要由CSDN通过智能技术生成

诸神缄默不语-个人CSDN博文目录

本文介绍常见的机器学习模型隐马尔科夫模型HMM。
HMM也是generative model。

原始论文:(1971 The Annals of Mathematical Statistics) A Maximization Technique Occurring in the Statistical Analysis of Probabilistic Functions of Markov Chains

1. 概率与随机过程的区别

概率是反映随机事件发生的可能性。若随机事件发生的概率随时间而改变,我们在考虑时间因素或空间因素的情况下去分析随机事件发生的概率,称为随机过程。
若我们每次抛掷硬币且正面向上的概率为0.5,正面向上的概率不随抛掷次数而改变,我们可以用概率来描述这一事件,如P(X),其中X表示硬币正面向上的随机事件。
若我们每次抛掷硬币,硬币落在地上会导致形状的改变,正面向上的概率随抛掷次数的改变而改变,我们用随机过程来描述这一事件,如 P ( X 1 , X 2 , … , X i ) P(X_1,X_2,\dots,X_i) P(X1,X2,,Xi),其中 X i X_i Xi表示第i次抛掷硬币正面向上的随机事件。
笼统的讲,概率是分析一个随机变量,而随机过程是分析一组随机变量。

2. HMM概念

隐马尔科夫模型 Hidden Markov models (HMMs) 是时间序列的概率模型,变量variables可以在状态states之间转换,各种转换的概率(switch probability)不同。每个状态都能以某一概率(output probability)产生输出output之一。状态和输出的集合已知,输出已知,状态转换概率和输出概率等信息未知(隐)。

在这里插入图片描述

需要解决的问题:

  1. 推理:根据输出序列计算candidate state-switch sequences的概率
  2. 模式匹配:根据输出序列计算最可能是的state-switch sequence(Viterbi算法:信号处理领域)
  3. 训练:给出输出序列(训练)数据,计算最可能出现的state-switch/output probabilities (ie, system internals)
  4. 已知观测序列O和模型参数 λ \lambda λ,如何求解观测序列O出现的概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

模式匹配和训练任务事实上就是Naive Bayesian推理1延伸到了序列数据上。

假设:

  1. 状态序列(标注序列)符合马尔科夫链假设,状态转换的概率取决于前N个状态。最简单的N=1就是‘first-order’ case,仅基于当前状态决定(马尔科夫过程2
  2. 生成输出结果的概率仅取决于当前概率
  3. 观测序列是相互独立的

给定state-switch sequence和对应的observed-output sequence,可以直接用每个概率通过乘法计算出整体的概率。

马尔科夫模型与隐马尔科夫模型的区别:是否含有隐变量
在这里插入图片描述

在这里插入图片描述

3. HMM参数介绍和求解方法

观测序列:观测概率矩阵B(状态生成观测的概率)
未观测的状态序列:初始状态概率向量 π \pi π(处于状态的概率) + 状态转移概率矩阵A

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

HMM: P ( O ∣ λ ) = ∑ I P ( O , I ∣ λ ) = ∑ I P ( O ∣ I , λ ) P ( I ∣ λ ) P(O|\lambda)=\sum\limits_IP(O,I|\lambda)=\sum\limits_IP(O|I,\lambda)P(I|\lambda) P(Oλ)=IP(O,Iλ)=IP(OI,λ)P(Iλ)(其中I为标注序列)
给定模型参数,生成观测的概率→引入隐变量状态序列辅助求解

  1. 训练,已知 O O O λ \lambda λ:其中I为标注序列,在公式中是隐变量,因此可用EM算法3求解上式的模型参数 λ \lambda λ。具体步骤:
    1. 初始化 λ ‾ \overline\lambda λ
    2. 观测变量和隐变量的对数似然函数: log ⁡ 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 ) \log 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) logP(O,Iλ)=πi1bi1(o1)ai1i2bi2(o2)aiT1iTbiT(oT)(初始状态×生成观测的概率×状态转移概率×生成观测的概率…)
    3. E:对隐变量求期望 Q ( λ , λ ‾ ) = ∑ I log ⁡ P ( O , I ∣ λ ) P ( O , I ∣ λ ‾ ) = ∑ I log ⁡ π i 1 P ( O , I ∣ λ ‾ ) + ∑ I ( ∑ t = 1 T − 1 log ⁡ a i t i t + 1 ) P ( O , I ∣ λ ‾ ) + ∑ I ( ∑ t = 1 T log ⁡ b i t ( o t ) ) P ( O , I ∣ λ ‾ ) Q(\lambda,\overline\lambda)=\sum\limits_I\log P(O,I|\lambda)P(O,I|\overline\lambda)=\sum\limits_I\log\pi_{i_1}P(O,I|\overline\lambda)+\sum\limits_I(\sum\limits_{t=1}^{T-1}\log a_{i_ti_{t+1}})P(O,I|\overline\lambda)+\sum\limits_I(\sum\limits_{t=1}^T\log b_{i_t}(o_t))P(O,I|\overline\lambda) Q(λ,λ)=IlogP(O,Iλ)P(O,Iλ)=Ilogπi1P(O,Iλ)+I(t=1T1logaitit+1)P(O,Iλ)+I(t=1Tlogbit(ot))P(O,Iλ)
    4. M:求使 Q Q Q取极大值的 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)
      求偏导数并使其等于0,有: ∂ Q ( λ , λ ‾ ) ∂ π i = ∂ Q ( λ , λ ‾ ) ∂ a i j = ∂ Q ( λ , λ ‾ ) ∂ b j ( k ) 0 \dfrac{\partial Q(\lambda,\overline\lambda)}{\partial\pi_i}=\dfrac{\partial Q(\lambda,\overline\lambda)}{\partial a_{ij}}=\dfrac{\partial Q(\lambda,\overline\lambda)}{\partial b_j(k)}0 πiQ(λ,λ)=aijQ(λ,λ)=bj(k)Q(λ,λ)0
      约束条件为初始状态概率分布的和等于1,即: ∑ i = 1 N π i = 1 \sum\limits_{i=1}^N\pi_i=1 i=1Nπi=1
      状态已知的情况下,观测概率分布的和等于1,即: ∑ k = 1 M b j ( k ) = 1 \sum\limits_{k=1}^Mb_j(k)=1 k=1Mbj(k)=1
      得到 π i , a i j , b j ( k ) \pi_i,a_{ij},b_j(k) πi,aij,bj(k)的值,即更新 λ \lambda λ
    5. 重复步骤3、4
  2. 计算观测序列出现的概率(N是总的状态数)
    1. 枚举法: O ( T N T ) O(TN^T) O(TNT)
      在这里插入图片描述
    2. 递推法: O ( T N 2 ) O(TN^2) O(TN2)
      状态为 q i q_i qi的前向概率 α t ( i ) \alpha_t(i) αt(i)(生成给定长度为t的观测序列,且t状态是 q i q_i qi的概率): α t ( i ) = P ( o 1 , o 2 , … , o t , i t = q i ∣ λ ) \alpha_t(i)=P(o_1,o_2,\dots,o_t,i_t=q_i|\lambda) αt(i)=P(o1,o2,,ot,it=qiλ)

      t=1时: α 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , … , N \alpha_1(i)=\pi_ib_i(o_1),i=1,2,\dots,N α1(i)=πibi(o1),i=1,2,,N(初始得到该状态×该状态生出该观测)
      P ( o 1 ∣ λ ) = ∑ i = 1 N α 1 ( i ) P(o_1|\lambda)=\sum\limits^N_{i=1}\alpha_{1}(i) P(o1λ)=i=1Nα1(i)(在所有状态下生成该观测的概率加总)

      递推,对于 t = 1 , 2 , … , T − 1 t=1,2,\dots,T-1 t=1,2,,T1
      α t + 1 ( i ) = [ ∑ j = 1 N α t ( j ) a j i ] b i ( o t + 1 ) , i = 1 , 2 , … , N \alpha_{t+1}(i)=\Bigg[\sum\limits_{j=1}^N\alpha_t(j)a_{ji}\Bigg]b_i(o_{t+1}),i=1,2,\dots,N αt+1(i)=[j=1Nαt(j)aji]bi(ot+1),i=1,2,,N(上一次生成状态j,状态j转移为状态i,状态i生成观测的概率)
      P ( o 1 , o 2 , … , o t + 1 ∣ λ ) = ∑ i = 1 N α t + 1 ( i ) P(o_1,o_2,\dots,o_{t+1}|\lambda)=\sum\limits_{i=1}^N\alpha_{t+1}(i) P(o1,o2,,ot+1λ)=i=1Nαt+1(i)

      当t=T时:
      P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) P(O|\lambda)=\sum\limits_{i=1}^N\alpha_T(i) P(Oλ)=i=1NαT(i)

      算法复杂度(感觉图把i写成j了):
      在这里插入图片描述

      α t + 1 ( i ) = ∑ j = 1 N α t ( j ) a j i \alpha_{t+1}(i)=\sum\limits_{j=1}^N\alpha_t(j)a_{ji} αt+1(i)=j=1Nαt(j)aji(a是状态转移概率)
      因此从t到t+1时刻的计算量为 O ( N 2 ) O(N^2) O(N2)
      对于观测序列长度为T: O ( T N 2 ) O(TN^2) O(TN2)
  3. 模式匹配中的维特比Viterbi算法(动态规划)
    给定 λ \lambda λ(模型参数)和 O O O(观测序列),预测最有可能的状态序列
    算法思想:若 t 时刻最有可能的状态序列 I = ( i 1 , i 2 , … , i t ∗ ) I=(i_1,i_2,\dots,i_t^*) I=(i1,i2,,it)通过 i t ∗ i_t^* it,则从t时刻到T时刻的最优路径一定包括 i t ∗ i_t^* it。我们利用这一思想确定了最优状态序列的最后一个时刻的状态 i T i_T iT,然后利用该状态回溯时刻 t = 1 , 2 , … , T − 1 t=1,2,\dots,T-1 t=1,2,,T1的最优状态

    示例:
    已知模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π),观测集合 V = { O 1 , O 2 } V=\{O_1,O_2\} V={O1,O2},状态集合 Q = { 1 , 2 , 3 } Q=\{1,2,3\} Q={1,2,3}
    A = [ 0.5 , 0.2 , 0.3 0.3 , 0.5 , 0.2 0.2 , 0.3 , 0.5 ] , B = [ 0.5 , 0.5 0.4 , 0.6 0.7 , 0.3 ] , π = ( 0.2 , 0.4 , 0.2 ) T A=\begin{bmatrix} 0.5,0.2,0.3 \\ 0.3,0.5,0.2 \\ 0.2,0.3,0.5 \end{bmatrix},B=\begin{bmatrix} 0.5,0.5\\ 0.4,0.6\\ 0.7,0.3 \end{bmatrix},\pi=(0.2,0.4,0.2)^T A= 0.5,0.2,0.30.3,0.5,0.20.2,0.3,0.5 ,B= 0.5,0.50.4,0.60.7,0.3 ,π=(0.2,0.4,0.2)T
    若观测序列 O = ( O 1 , O 2 , O 1 ) O=(O_1,O_2,O_1) O=(O1,O2,O1),求最优状态序列 I = ( i 1 ∗ , i 2 ∗ , i 3 ∗ ) I=(i_1^*,i_2^*,i_3^*) I=(i1,i2,i3)


    解:
    定义 δ t ( i ) \delta_t(i) δt(i)是所有长度为t、最终状态为i的、能得到指定观测序列的路径中,概率最大的路径的概率。
    定义 Ψ t ( i ) \Psi_t(i) Ψt(i)是所有长度为t、最终状态为i的、能得到指定观测序列的路径中,最有可能的倒数第二个节点(倒数第二个时间点概率最大的状态): Ψ t ( i ) = arg max ⁡ i ≤ j ≤ N [ δ t − 1 ( j ) a j i ] \Psi_t(i)=\argmax\limits_{i\le j\le N}\big[\delta_{t-1}(j)a_{ji}\big] Ψt(i)=ijNargmax[δt1(j)aji]

    根据维特比算法的核心思想,我们计算观测序列下的最优路径:
    1. t=1时, δ 1 ( i ) \delta_1(i) δ1(i)是观测为 o 1 o_1 o1、状态为i的概率:
      δ 1 ( i ) = π i b i ( O 1 ) ,   i = 1 , 2 , 3 \delta_1(i)=\pi_ib_i(O_1),\ i=1,2,3 δ1(i)=πibi(O1), i=1,2,3
      δ 1 ( 1 ) = 0.2 ∗ 0.5 = 0.1 , δ 1 ( 2 ) = 0.16 , δ 1 ( 3 ) = 0.28 \delta_1(1)=0.2*0.5=0.1,\delta_1(2)=0.16,\delta_1(3)=0.28 δ1(1)=0.20.5=0.1,δ1(2)=0.16,δ1(3)=0.28
      Ψ 1 ( i ) = 0 ,   i = 1 , 2 , 3 \Psi_1(i)=0,\ i=1,2,3 Ψ1(i)=0, i=1,2,3
    2. t=2时:
      δ 2 ( i ) = max ⁡ 1 ≤ j ≤ 3 [ δ 1 ( j ) a j i ] b i ( o 2 ) \delta_2(i)=\max\limits_{1\le j\le3}\big[\delta_1(j)a_{ji}\big]b_i(o_2) δ2(i)=1j3max[δ1(j)aji]bi(o2)
      Ψ 2 ( i ) = arg max ⁡ 1 ≤ j ≤ 3 [ δ 1 ( j ) a j i ] , i = 1 , 2 , 3 \Psi_2(i)=\argmax\limits_{1\le j\le3}\big[\delta_1(j)a_{ji}\big],i=1,2,3 Ψ2(i)=1j3argmax[δ1(j)aji],i=1,2,3
      δ 2 ( 1 ) = max ⁡ j { 0.1 ∗ 0.5 , 0.16 ∗ 0.3 , 0.28 ∗ 0.2 } , Ψ 2 ( 1 ) = 3 \delta_2(1)=\max\limits_j\{0.1*0.5,0.16*0.3,0.28*0.2\},\Psi_2(1)=3 δ2(1)=jmax{0.10.5,0.160.3,0.280.2},Ψ2(1)=3
      类似: δ 2 ( 2 ) = 0.0504 , Ψ 2 ( 2 ) = 3 , δ 2 ( 3 ) = 0.042 , Ψ 2 ( 3 ) = 3 \delta_2(2)=0.0504,\Psi_2(2)=3,\delta_2(3)=0.042,\Psi_2(3)=3 δ2(2)=0.0504,Ψ2(2)=3,δ2(3)=0.042,Ψ2(3)=3
    3. t=3时:
      δ 3 ( i ) = max ⁡ 1 ≤ j ≤ 3 [ δ 2 ( j ) a j i ] b i ( o 3 ) \delta_3(i)=\max\limits_{1\le j\le3}\big[\delta_2(j)a_{ji}\big]b_i(o_3) δ3(i)=1j3max[δ2(j)aji]bi(o3)
      Ψ 3 ( i ) = arg max ⁡ 1 ≤ j ≤ 3 [ δ 2 ( j ) a j i ] , i = 1 , 2 , 3 \Psi_3(i)=\argmax\limits_{1\le j\le3}\big[\delta_2(j)a_{ji}\big],i=1,2,3 Ψ3(i)=1j3argmax[δ2(j)aji],i=1,2,3
      δ 3 ( 1 ) = 0.00756 , Ψ 3 ( 1 ) = 2 , δ 3 ( 2 ) = 0.01008 , Ψ 3 ( 2 ) = 2 , δ 3 ( 3 ) = 0.0147 , Ψ 3 ( 3 ) = 3 \delta_3(1)=0.00756,\Psi_3(1)=2,\delta_3(2)=0.01008,\Psi_3(2)=2,\delta_3(3)=0.0147,\Psi_3(3)=3 δ3(1)=0.00756,Ψ3(1)=2,δ3(2)=0.01008,Ψ3(2)=2,δ3(3)=0.0147,Ψ3(3)=3
      最有可能的路径以 i 3 ∗ = arg max ⁡ i [ δ 3 ( i ) ] i_3^*=\argmax_i\big[\delta_3(i)\big] i3=argmaxi[δ3(i)]为最终状态
    4. 回溯其他时刻的最优节点:
      t=2时, i 2 ∗ = Ψ 3 ( i 3 ∗ ) = Ψ 3 ( 3 ) = 3 i_2^*=\Psi_3(i_3^*)=\Psi_3(3)=3 i2=Ψ3(i3)=Ψ3(3)=3
      t=1时, i 1 ∗ = Ψ 2 ( i 2 ∗ ) = Ψ 2 ( 3 ) = 3 i_1^*=\Psi_2(i_2^*)=\Psi_2(3)=3 i1=Ψ2(i2)=Ψ2(3)=3
      因此最优状态序列是: I = ( i 1 ∗ , i 2 ∗ , i 3 ∗ ) = ( 3 , 3 , 3 ) I=(i_1^*,i_2^*,i_3^*)=(3,3,3) I=(i1,i2,i3)=(3,3,3)

4. HMM用法

  1. 标注学习/序列标注 sequence tagging:对已观测到的数据序列O进行标注,标注序列I相当于隐变量
    在这里插入图片描述

  2. 语音识别:waveform是输出序列,匹配音素(状态)序列

  3. 词性标注

  4. 文本分析

5. 其他正文及脚注未提及的参考资料

  1. Natural language processing: an introduction
  2. 初学者也能看懂的隐马尔科夫模型介绍
  3. 还没看
    1. Hidden Markov models | SpringerLink

  1. 可参考我撰写的博文:朴素贝叶斯Naive Bayesian分类器 (NBC)_诸神缄默不语的博客-CSDN博客 ↩︎

  2. 马尔可夫过程_百度百科 ↩︎

  3. 可参考我撰写的博文:变分推断(variational inference)/variational EM_诸神缄默不语的博客-CSDN博客 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值