zoukankan      html  css  js  c++  java
  • 第十章-HMM模型以及相关推导

    隐马尔可夫模型(Hidden Markov Model, HMM)是可用于标注问题的统计学习模型,描述由隐藏的马尔科夫链随机生成的观测序列的过程,属于生成模型,是概率模型的一种。本章主要是总结HMM模型的概率计算算法、学习算法以及预测算法。HMM在语音识别、自然语言处理NLP等领域有着广泛的应用。

    概率图模型常常是为了描述随机变量之间的关系(是不是独立的),分为有向图和无向图,而HMM主要用有向图。

    概率图模型

    在有向图中,用圆圈⭕表示随机变量,可以是一维的,也可以是多维的,既可以是离散随机变量,也可以是连续的,⭕叫做结点,图是由结点和边构成的,在有向图中就是有向边,要描述Y受X影响的,就将X和Y连接起来,并用箭头描述从X指向Y的方向。

    随机变量之间的关系

    一个箭头可以表示两个随机变量之间的关系,引入条件独立的概念,在概率图模型中,假设有三个随机变量X,Y,Z,一般来说,隐变量在图模型中用⭕表示,如果能观察到一个变量取值的时候,用带阴影的圆ullet表示。在掷硬币的例子中,第1个结果是观察不到的,用空心圆⭕表示,第2个结果是可以观察到的,用带阴影的圆●表示。为什么要强调隐变量和观测变量,圆是空心⭕还是阴影●会影响到随机变量的依赖性

    第一种情况

    随机变量都是空心圆,三个随机变量都是观测不到的。即:

    [P(X,Z) eq P(X)(Z) ]

    第二种情况

    Y是带阴影的圆,随机变量Y是可以观测到的,可得P(X,Z|Y)=P(X|Y)P(Z|Y),从箭头的指向看,信息是从X传到Y,Y传到Z,一旦将Y固定了,信息的流通相当于被Y观察到的值堵住了,所以当观察到Y时,X和Z就是独立的

    第三种情况

    Y指向了两边,这个时候单看X和Z是不独立的,满足P(X,Z) ≠ P(X)P(Z),如果给定Y,X和Z是独立的,满足

    [P(X,Z|Y)=P(X|Y)P(Z|Y) ]

    第四种情况

    随机变量满足:

    [P(X,Z)=P(X)P(Z),P(X,Z|Y) eq P(X|Y)P(Z|Y) ]

    HMM模型

    定义

    隐马尔科夫模型是关于时序的概率模型,描述由一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔科夫链随机生成的状态序列称为状态序列(state sequence),每个状态生成一个观测值,而由此生成的观测的随机序列称为观测序列(observation sequence).

    HMM是一个三元组,由初始状态概率向量、状态转移概率矩阵和观测概率矩阵决定,即:

    [lambda = (A,B,pi),其中pi是初始状态概率向量,A是状态转移概率矩阵,B是观测概率矩阵 ]

    定义的形式如下:

    [设Q是所有可能的状态的集合,V是所有可能观测的集合。Q={q_1,q_2,q_3...q_N},V={v_1,v_2,..v_M},\ 其中N是所有可能的状态数,M是所有观测数。\ I是长度为T的状态序列,O是对应的观测序列。I=(i_1,i_2...i_T),O=(o_1,o_2...o_T).\ A是状态转移概率矩阵:\ A=[a_{ij}]_{N imes N},其中a_{ij}=P(i_{t+1}=q_j|i_t=q_t),i=1,2,3...N;j=1,2,...N\ 是时刻t处于状态q_i的条件下在时刻t+1转移到状态q_j的概率。\ B是观测概率矩阵:\ B=[b_j(k)]_{N imes M},其中,b_j(k)=P(o_t=v_k|i_t=q_t),k=1,2,..M;j=1,2,...N\ 是在时刻t处于状态q_j的条件下生成观测v_k的概率。\ pi是初始状态概率向量:\ pi=(pi_i),其中,pi_i=P(i_j=q_i),i=1,2,...N\ 是在时刻t=1处于状态q_i的概率。\ ]

    从定义可知,隐马尔科夫模型做了两个基本假设:

    • 齐次马尔可夫性假设。即假设隐藏的马尔可夫链在任意时刻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(o_t|i_T,o_T,o_{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) ]

    纯粹这样看定义,一堆的数学公式,可能看得不是很懂,那么可以采用概率图的方式来理解HMM模型,如图所示:

    图中的一行⭕表示隐变量的集合,称为状态序列;●表示可观测的集合,称为观测序列,由图可看出,第一个状态变量会影响第二个状态变量,同时还会影响第一个观测变量,依次递推下去,隐马尔可夫模型从状态变量看是一个影响一个的,可以理解成时间序列模型,其适用范围为文本分析,比如标注问题

    三个基本问题

    概率计算算法

    给定模型和观测序列,那么计算在该模型下观测序列出现的概率的方法有三种:直接计算法、前向算法、后向算法。

    直接计算法

    [egin{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_1 i_2}b_{i_2}(o_2) cdots a_{i_{T-1} i_T}b_{i_T}(o_T) end{aligned}\ 首先观察求和符号中b有T项,a有T-1项,pi有1项,一共有2T项,求和是从i_1,i_2,cdots,i_T不同的取值求和,\对于i_1从状态集合{q_1,q_2,...q_N}中取值有N个,i_2取值有N个……i_T取值有N个,所以求和范围有N^T项,\要对N^T个范围进行求和,每一个求和范围都需要O(T)个计算量,所以计算复杂度为\2T imes N^T=2TN^T=O(TN^T)。 ]

    前向算法

    [输入:隐马尔可夫模型lambda,观测序列O。\ 输出:观测序列概率P(O|lambda)。\ (1)初值:alpha_1(i)=pi_i b_i(o_1), quad i=1,2,cdots,N\ (2)递推,对t=1,2,cdots,T-1,alpha_{t+1}(i)=left[sum_{j=1}^N alpha_t(j) a_{ji} ight]\ b_i(o_t+1), quad i=1,2,cdots,N\(3)终止。P(O|lambda)=sum_{i=1}^N alpha_T(i) ]

    可是为何是这样子计算的吗?从数学的角度来推导下具体的算法计算方式——

    [1.首先最终终止的那个公式的推导:\ 将alpha_t(i)的时刻t的观测值o_1,o_2,cdots,o_t及状态值q_i,记作alpha_t(i)=P(o_1,o_2,cdots,o_t,i_t=q_i)(忽略lambda的条件概率)。\ 前向算法用来做的就是概率计算,当lambda给定时,观测值o_1,o_2,cdots,o_t出现的概率为P(o_1,o_2,cdots,o_T),\这是边缘概率,而P(o_1,o_2,cdots,o_T, i_T=q_i)是联合概率,可得\displaystyle P(o_1,o_2,cdots,o_T) = sum_{i=1}^N P(o_1,o_2,cdots,o_T, i_T=q_i)=sum_{i=1}^N alpha_T(i)。\ 2.在递推过程中的公式推导:\ ecause 根据定义alpha_{t+1}(i) = P(o_1,o_2,cdots,o_t,o_{t+1},i_{t+1}=q_i),\对比alpha_{t}(i)=P(o_1,cdots,o_t,i_t=q_i)少了o_{t+1},i_{t+1}=q_i,\ herefore alpha_{t+1}(i) = P(o_1,o_2,cdots,o_t,o_{t+1},i_{t+1}=q_i) ......................联合概率\ =sum_{j=1}^N P(o_1,o_2,...o_t,o_{t+1},i_{t+1}=q_i,i_t=q_j) .....................边缘概率\ =sum_{j=1}^N P(o_1,o_2,...o_t,i_t=q_j)P(o_{t+1}|i_{t+1}=q_i)P(i_{t+1}=q_i|i_t=q_t)\ 又 ecause P(o_{t+1}|i_{t+1}=q_i)=b_i(o_{t+1}) \ P(i_{t+1}=q_i|i_t=q_j)=a_{ji} \ P(o_1,o_2,cdots,o_t, i_t=q_j)=alpha_t(j)\ displaystyle herefore sum_{j=1}^N P(o_1,o_2,cdots,o_t, i_t=q_j)P(o_{t+1}|i_{t+1}=q_i)P(i_{t+1}=q_i|i_t=q_j) = left[ sum_{j=1}^N alpha_t(j) a_{ji} ight] b_i(o_{t+1}) \ displaystyle herefore alpha_{t+1}(i) = left[ sum_{j=1}^N alpha_t(j) a_{ji} ight] b_i(o_{t+1}) ]

    后向算法

    [输入:隐马尔可夫模型lambda,观测序列O。\ 输出:观测序列概率P(O|lambda)。\ (1)eta_T(i)=1,quad i=1,2,cdots,N。\ (2)对t=T-1,T-2,cdots,1,eta_t(i)=sum_{j=1}^N a_{ij}b_j(o_{t+1})eta_{t+1}(j), quad i=1,2,cdots,N\(3)P(O|lambda)=sum_{i=1}^N pi_i b_i(o_1) eta_1(i) ]

    学习问题

    已知观测序列,需要估计参数。和之前讲过的很多模型是类似的,需要用一组训练数据集估计模型,之前可能是估计分类超平面,常用的两个方法:监督学习方法Baum-Welch算法,这两种方法的区别在于哪个算法更贴近应用,这两个方法的学习设定是不一样的。

    监督学习方法

    [假设已给训练数据包含S个长度相同的观测序列和对应的状态序列{(O_1,I_1),(O_2,I_2),cdots,(O_S,I_S)},\那么可以利用极大似然估计法来估计隐马尔可夫模型的参数。具体方法如下:\ (1)转移概率a_{ij}的估计。\ 设样本中时刻t处于状态i时刻t+1转移到状态j记为A_{ij},那么a_{ij}的估计是:\ hat{a}{ij}=frac{A{ij}}{displaystyle sum_{j=1}^N A_{ij}}, quad i=1,2,cdots,N; j=1,2,cdots,N\ (2)观测概率b_j(k)的估计。\ 设样本中状态为j观测为k的频数是B_{jk},那么b_j(k)的估计是:\hat{b}j(k)=frac{B{jk}}{displaystyle sum_{k=1}^M B_{jk}}, quad j=1,2,cdots,N;k=1,2,cdots,M\ (3)初始状态概率pi_i的估计hat{pi}_i为S个样本中初始状态为q_i的频率。 ]

    [观测序列和状态序列都有S个样本,需要估计的参数:\ 首先初始状态pi,如果直接用极大似然估计,就是看这S个样本中在初始状态时的各个取值的频率。\ 概率转移矩阵A,前一个状态i_t=q_i,后一个状态i_{t+1}=q_j的概率记作a_{ij},考察在S个观测序列中,\每个观测序列都是有(i_1,i_2,cdots,i_{T-1},i_T),一共有S个这样的马尔可夫链,总计S(T-1)组,\在这些序列组中有多少是观测序列为q_i,然后在这些组中,又有多少组后一项的状态取值为q_j,\这样的比例就是a_{ij}的估计。 观测概率b_j(k)的估计也是类似的。 ]

    Baum-Welch算法(EM算法)

    [输入:观测数据O=(o_1,o_2,cdots,o_T)\ 输出:隐马尔可夫模型\ (1)初始化。\ 对n=0,选取a_{ij}^{(0)},b_j(k)^{(0)},pi_i^{(0)}$,得到模型$lambda^{(0)}=(A^{(0)},B^{(0)},pi^{(0)})\ (2)递推,对n=1,2,cdots,a_{ij}^{(n+1)}=frac{displaystyle sum_{t=1}^{T-1} xi_t(i,j)}{displaystyle sum_{t=1}^{T-1} gamma_i(i)} b_j(k)^{(n+1)}=frac{displaystyle sum_{t=1,o_t=v_k}^T gamma_t(j)}{displaystyle sum_{t=1}^T gamma_t(j)} pi_i^{(n+1)} = gamma_1(i) \其中displaystyle gamma_t(i)=frac{alpha_t(i)eta_t(i)}{P(O|lambda)}=frac{alpha_t(i)eta_t(i)}{displaystyle sum_{j=1}^N alpha_t(j)eta_t(j)} \ displaystyle xi_t(i,j)=frac{alpha_t(i)a_{ij}b_j(o_{t+1})eta_{t+1}(j)}{displaystyle sum_{i=1}^N sum_{j=1}^N alpha_t(i)a_{ij}b_j(o_{t+1})eta_{t+1}(j)} ]

    预测问算法

    该算法其实就是一个标注问题,已知观测序列和模型参数,让计算机标注每一个观测值的状态,书中提出了两个算法:近似算法(得到的结果并不是全局最优解)、维特比算法(用动态规划思想求最优路径)。但是最常用的还是维特比算法。

    维特比算法

    维特比算法是求解给定的观测条件下,使得概率最大的状态变量的序列预测,也就是说,求解已知观测序列的出现的概率最大。

    [输入:模型lambda=(A,B,pi)和观测O=(o_1,o_2,cdots,o_T)。 输出:最优路径I^=(i_1^,i_2^,cdots,i_T^)。\ (1)初始化。delta_1(i) = pi_i b_i(o_1),quad i=1,2,cdots,N psi_1(i)=0,quad i=1,2,cdots,N\(2)递推,对t=2, 3,cdots,T delta_t(i)=mathop{max} limits_{1 leqslant j leqslant N}left[delta_{t-1}(j)a_{ji} ight] b_i(o_t),quad i=1,2,cdots,N \ psi_t(i) = mathop{arg max} limits_{1 leqslant j leqslant N} left[delta_{t-1}(j)a_{ji} ight], quad i=1,2,cdots,N。\(3)终止。P^=mathop{max} limits_{1 leqslant i leqslant N} delta_T(i) i_T^=mathop{max} limits_{1 leqslant i leqslant N} left[delta_T(i) ight] \(4)最优路径回溯,对t=T-1,T-2,cdots,1 i_t^=psi_{t+1}(i_{t+1}^)求得最优路径I^=(i_1^,i_2^,cdots,i_T^). ]

    具体的例子可以看书中的简单例子。但是要注意的是,在求得每个时刻的观测出现的概率的过程中,一定要记录每个概率最大路径的前一个状态,还有即使在回溯的过程中,要注意通过终点逐步逆向回溯的计算

  • 相关阅读:
    大约 C++ 几个方面分析--overload, override, overwrite, rewrite
    Catalan数总结
    JAVA该队列中的数组,圆阵队列,链队列
    hdu4770:Lights Against Dudely(回溯 + 修剪)
    Birt
    Activity
    简单实现的Servlet文件上传,并显示
    阿里云centos 6.5 32位安装可视化界面的方法
    cannot mount database in EXCLUSIVE mode
    ORA-00845: MEMORY_TARGET not supported on this system
  • 原文地址:https://www.cnblogs.com/cecilia-2019/p/11542453.html
Copyright © 2011-2022 走看看