机器学习_HMM

醉酒当歌 提交于 2019-12-14 07:59:28

HMM是一种结构简单的贝叶斯网络,主要用于时序数据建模,在语音识别,自然语言处理等领域有广泛应用。

一、HMM概述

1、HMM模型的网络结构
在这里插入图片描述

上图为HMM模型的结构,其中[z1,z2,....,zn][z_1,z_2,....,z_n]是不可观测的状态序列;[x1,x2,...,xn][x_1,x_2,...,x_n]为观测序列。ziz_i表示第ii时刻的状态变量,取值为[s1,s2,...,sN][s_1,s_2,...,s_N];。xix_i表示第ii时刻的观测值,取值为[o1,o2,...,oM][o_1,o_2,...,o_M]

2、HMM模型的三组参数
λ=[A,B,π]\lambda=[A,B,\pi]

  • A=[ai,j]NNA=[a_{i,j}]_{N*N}为状态转移矩阵。从前一个状态转移到后一个状态的概率。
    ai,j=Pr(zt+1=sjzt=si),1i,jNa_{i,j}=\Pr(z_{t+1}=s_j|z_t=s_i),1\leq i, j\leq N

  • B=[bi,j]NMB=[b_{i,j}]_{N*M}为观测概率分布矩阵,在当前状态下取某个观测值的概率
    bi,j=Pr(xt=ojzt=si),1iN,1jMb_{i,j}=\Pr(x_t=o_j|z_t=s_i), 1\leq i\leq N, 1\leq j\leq M

  • π=[π1,....,πN]\pi=[\pi_1,....,\pi_N]为初始概率矩阵, 表示初始时刻各状态出现概率。
    π=Pr(z1=si),1iN\pi=\Pr(z_1=s_i),1\leq i\leq N

       注意:
       1、状态序列是离散的,观测序列可以是离散的,也可以是连续的。
       2、t观测值只与t时刻状态相关,t+1时刻状态值只与t时刻状态值相关
    

例子:HMM分词

假设我们相对如下这行话进行分词:

【欢迎来到我的博客】

上面有8个字,即8个时刻。
假设我们是这样分的:找到“终止字”,然后根据终止字来分词。即:对于这行字,“迎、到、我、的、客”是终止字,于是最终这么分词:欢迎/来到/我/的/博客。那么我们对每个字只需判断它是否为终止字,这就是所谓的隐变量。[s1,s2][s_1,s_2]=[‘是终止字’,‘不是终止字’]

下面用上面的知识对这个例子建立HMM的λ=[A,B,π]\lambda=[A,B,\pi]

  • A 状态转移矩阵的确定:
    A=[ai,j]22,A=[a_{i,j}]_{2*2},
    其中,ai,j=Pr(zt+1=sjzt=si),1i,j2.a_{i,j}=\Pr(z_{t+1}=s_j|z_t=s_i),1\leq i, j\leq 2.

  • B观测矩阵的确定:
    如果我们的目标文字使用Unicode编码,那么上面的任何一个字都是0~65535中的一个数,于是我们的观测就会是[o1,o2,...,oM],M=65536[o_1,o_2,...,o_M], M=65536,于是观测矩阵就是个2*M的矩阵,如下:
    B=[bi,j]265536B=[b_{i,j}]_{2*65536}
    其中,bi,j=Pr(xt=ojzt=si),1iN,1jMb_{i,j}=\Pr(x_t=o_j|z_t=s_i), 1\leq i\leq N, 1\leq j\leq M

  • π\pi初始概率矩阵的确定
    π=[π1π2]π = [\pi_1,\pi_2]
    其中,πi=P(z1=si)i=1,2\pi_i= P(z_1=s_i),i=1,2

         HMM怎么生成观测序列【欢迎来到我的博客】?
       假设有了 z1=“非终止字”这个状态,然后根据这个状态从65535个字中选出x1=“欢”这个字,然后根据状态转移矩阵,下一次转移到了Z2 =“终止字”,然后根据Z2从65535个字中选出了x2=“迎”这个字,这样,最终生成了这句话。
    

3、HMM模型关注的三个问题

  • 1)概率计算问题:给定参数λ\lambda和观测序列x=[x1,x2,...,xn]x=[x_1,x_2,...,x_n],计算Pr(xλ)\Pr(x|\lambda)
    使用前向后向算法(动态规划)
  • 2)学习问题:已知观测序列x=[x1,x2,...,xn]x=[x_1,x_2,...,x_n],求解参数λ\lambda,使得Pr(xλ)\Pr(x|\lambda)最大,即求解arg maxλPr(xλ)\argmax_{\lambda} \Pr(x|\lambda)
    采用Baum-Welch算法(EM)
  • 3)预测问题:已知λ\lambda和观测序列x=[x1,x2,...,xn]x=[x_1,x_2,...,x_n],求隐藏的状态序列的概率。即求Pr(zx,λ)\Pr(z|x,\lambda),例已知参数和观测值,求每个字是不是终止字,这样就可以分词了啊。
    采用Viterbi算法(动态规划)

二、HMM关注的问题求解

1、概率计算问题

  • 首先给出直接求解的方法,它的缺点是时间复杂度极高。
    (注意:下面的xix_i代表的都是一个已知的具体的观测值,[x1,x2,x3][x_1,x_2,x_3]=[红白红])
    在这里插入图片描述

  • 给出前向后向算法,时间复杂度极大地减小。
    下图给出了前向概率和后向概率的表示,αt(i)\alpha_t(i)为给定λ\lambda的条件下,计算时刻t观测值为i且观测值为[y1,y2,...,yt][y_1,y_2,...,y_t]的前向概率。
    在这里插入图片描述
    在这里插入图片描述
    下面给出一道例题来直观理解前向算法的迭代过程
    在这里插入图片描述

  • 前向后向算法的关系
    Pr(zt=si,xλ)=αt(i)βt(i)\Pr(z_t=s_i,x|\lambda)=\alpha_t(i)\beta_t(i)

  • 初步给出了预测问题的近似解。
    已知λ\lambda和观测序列x=[x1,x2,...,xn]x=[x_1,x_2,...,x_n],求t时刻隐藏的状态序列的概率。即求γt(i)=Pr(zt=six,λ)\gamma_t(i)=\Pr(z_t=s_i|x,\lambda),它求的是单个状态的概率。
    γt(i)=αt(i)βt(i)i=1Nαt(i)βt(i)\gamma_t(i)=\frac{\alpha_t(i)\beta_t(i)}{\sum_{i=1}^N\alpha_t(i)\beta_t(i)}
    有了上式,我们可以根据观测序列和λ\lambda,求得每个字是否为"停止字"的概率,假设是的概率大于否的概率,则判定这个字是停止字,从而进行分词处理。

两个状态的联合概率分布ξt(i,j)=Pr(zt=si,zt+1=sjx,λ)\xi_t(i,j)=\Pr(z_t=s_i,z_{t+1}=s_j|x,\lambda)

在这里插入图片描述
2、学习问题

  • 给出观测序列和状态序列(监督学习)
    以HMM分词为例,你已经拿到了语料库,即有每个字的(B,M,E,S)四种状态。训练得到参数,在测试语料上分词。此时利用大数定律来学习参数λ\lambda
    在这里插入图片描述
  • 只给了观测序列(无监督学习)
    采用Baum-Welch算法(可以看成EM算法的推广)
    推导就是EM算法的E步(求Q)和M步(求参数),这里不做赘述。下图就是最终得到的算法。
    在这里插入图片描述

3、预测问题
Viterbi算法
对比前向算法,发现只是把Σ\Sigma换为max\max
在这里插入图片描述

直观例题理解

当球为红白红时,三次从哪个盒子摸出的概率最大。
在这里插入图片描述
参考文章:参考文章

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!