zoukankan      html  css  js  c++  java
  • 机器学习-HMM隐马尔可夫模型-笔记

    HMM定义

      1)隐马尔科夫模型 (HMM, Hidden Markov Model) 可用标注问题,在语音识别、 NLP 、生物信息、模式识别等领域被实践证明是有效的算法。

      2)HMM 是关于时序的概率模型,描述由一个隐藏的马尔科夫链生成不可观测的状态随机序列,再由各个状态生成观测随机序列的过程。

      3)隐马尔科夫模型随机生成的状态随机序列,称为状态序列;每个状态生成一个观测,由此产生的观测随机序列,称为观测序列。序列的每个位置可看做是一个时刻。

    隐马尔科夫模型的贝叶斯网络

    由于Z1,Z2,...,Zn,都是未知的,x1,x2,...,xn,存在一定的联系,即x1与x2不独立,x1与Z2不独立......

    HMM的确定(一定要分清下面的类似条件的公式,有助于HMM的公式理解)

      HMM 由初始概率分布 π向量 、状态转移概率分布 A矩阵以及观测概率分布B矩阵确定。 π 和 A 决定状态序列, B 决定观测序列。因此, HMM 可以用三元符号表示,称为HMM的三要素:

            λ=(A,B,π)

      Q是所有可能的状态的集合,N是可能的状态数

           Q={q1,q2,...,qn}

      V是所有可能的观测的集合,M是可能的观测数

           V={v1,v2,...,vm}

      I是长度为T的状态序列,O是对应的观测序列

       I={i1,i2,...,iT}   O={o1,o2,...,on}

      A是状态转移概率矩阵

          A=[aij]N×N

      其中aij=P(it+1=q| it=qi), aij是在时刻t处于状态qi的条件下时刻t+1转移到状态qj的概率。

      B是观测概率矩阵B=[bik]N×M

      其中,bik=P(ot=vk | it=qi) , bik是在时刻t处于状态qi的条件下生成观测vk的概率。

      π是初始状态概率向量:π=(πi)

      其中,πi=P(i1=qi), πi是时刻t=1处于状态qi的概率。

    HMM的两个基本性质(很任性的具有特点的性质,为后面的公式推导做支撑)

      1)齐次假设:当前状态只和上一个状态有关系,用公式表示的话就是:

      

      2)观测独立性假设: 所有的观测之间是互相独立的,某个观测只和生成它的状态有关系,即:

      

      此处性质若有疑问还请看看另一篇https://blog.csdn.net/xueyingxue001/article/details/52396494

    HMM的3个基本问题

    1) 概率计算问题:前向-后向算法—动态规划

      给定模型  λ=(A,B,π)和观测序列O={o1,o2,...,oT} ,计算模型 λ下观测序列O出现的概率P(O| λ)

    2) 学习问题:Baum Welch 算法状态未知EM

      已知观测序列O={o1,o2,...,oT}  ,估计模型 λ=(A,B,π)的参数,使得在该模型下观测序列 P(O| λ) 最大

    3) 预测问题:Viterbi 算法—动态规划

      解码问题:已知模型λ=(A,B,π) 和观测序列O={o1,o2,...,oT} 求给定观测序列条件概率 P(I|O,λ)最大的状态序列 I

    概率计算问题

    1. 直接算法: 暴力算法,在实际问题中不适用,它的时间复杂度为O(TNT),复杂度过高。

     前向算法

     后向算法

    1-1. 直接算法,尽管不适用但是有助于对前向算法和后向算法的理解。

      按照概率公式,列举所有可能的长度为 T 的状态序列I={i1,i2,...,iT},求各个状态序列 I与观测序列O={o1,o2,...,oT}的联合概率P(O,I | λ),然后对所有可能的状态序列求和从而得到 P(O|λ)。

      状态序列I={i1,i2,...,iT}的概率是:

        P(I|λ) = P(i1,i2, ..., iT |λ)

                            =P(i1 |λ)P(i2, i3, ..., iT |λ)

                            =P(i1 |λ)P(i2 | i1, λ)P(i3, i4, ..., iT |λ)

                            =......

                            =P(i1 |λ)P(i2 | i1, λ)P(i3 | i2, λ)...P(iT | iT-1, λ)

      而上面的P(i1 |λ) 是初始为状态i1的概率,P(i2 | i1, λ) 是从状态i1转移到i2的概率,其他同理,于是分别使用初始概率分布π 和状态转移矩阵A,就得到结果:

      

      对固定的状态序列I,观测序列O的概率是:

      P(O|I,λ)=P(o1,o2,...,oT|i1,i2,...,iT,λ)=P(o1|i1,λ)P(o2|i2,λ)...P(oT|iT,λ)

      

      O和I同时出现的联合概率是:

      

      对所有可能的状态序列I求和,得到观测序列O的概率P(O|λ)

      

      分析:加和符号中有2T个因子,I 的遍历个数为 NT,因此,时间复杂度为 O(TNT),复杂度过高。

    1-2. 前向算法

    αt(i)=P(y1,y2,...,yt,qt=i|λ)                           βt(i)=P(yt+1,yt+2,...,yT|qt=i,λ) (后向概率)

    定义:给定 λ ,定义到时刻 t 部分观测序列为o1,o2…ot 且状态为 qi 的概率称为前向概率,记作:

    αt(i)=P(o1,o2…ot,it=qi|λ),可以递推计算前向概率 αt(i) 及观测序列概率P(O|λ).

      初值:

      第一个时刻状态为第i号状态的概率是πi,在第i号状态时得到o1这个观测的概率是bio1,于是:

       

      递推:对于t=1,2…T-1

      时刻t+1的前向概率的 αt+1(i) 的求法就是:t时刻的状态转移到t+1时刻的状态的概率对所有状态求和 * t时刻的状态得到观测的概率,换句话说就是:t时刻的前向概率对所有的状态求和 * t时刻的状态得到观测的概率。(多读两遍)

      

      其中,αt(j)aji时刻t状态为j的概率×状态j转移到状态i的转移概率就是时刻t+1时状态为i的概率。

      最终观测序列概率

      

      其实:P(O|λ)= αT(1) +αT(2) + ... + αT(n),既然αT(i) 可以表达出来,当然P(O|λ)就可以表达出来了。

       举个例子具体是如何做的:

      假设有 3 个盒子,编号为 1 、 2 、 3 ,每个盒子都装有红白两种颜色的小球,数目如下:

      

      按照 π=(0.2,0.4,0.4) 的概率选择 1 个盒子,从盒子随机抽出1 个球,记录颜色后放回盒子;

      考察盒子球模型,计算观测向量 O=“ 红白红”的出现概率。

      初始概率分布π,状态转移概率分布A,观测概率分布B。

      

      计算初值:第一时刻观测到红球概率的情况(初始状态)

      

      递推(重点):第二时刻观测到白球概率的情况与第三时刻观测到红球概率情况

      

      

      最终:观测序列为“红白红”的概率为

      

      相信看完例子会舒服一点,不过我的例子写的也不算是详细,有兴趣可以看一下此博客https://blog.csdn.net/xueyingxue001/article/details/52396494

     1-3. 后向算法

      有了前向算法的基础,后向算法就好说了,因为就是前向算法的反过来:先计算最后一个然后推到第一个,于是详细说明就不在给了,直接上结论:

      定义:给定 λ ,定义到时刻 t 状态为qi的前提下,从 t+1 到 T 的部分观测序列为 ot+1,ot+2,…,oT的概率为后向概率,记做:

      

      可以递推计算后向概率 βt(i)及观测序列概率P(O|λ)

      初值:βT(i) = 1

        概率为1的原因是 -- 本来还需要看看时刻T后面有什么东西,但因为最后一个时刻T 后面已经没有时刻,即不需要再观测某个东西,所以随便给个什么都行。

      递推:  对于t=T-1,T-2…,1

      

      最终:

      

      后向算法的说明:

        为了计算在时刻 t 状态为 qi 条件下时刻 t+1 之后的观测序列为ot+1,ot+2 …oT 的后向概率βt(i),只需要考虑在时刻 t+1 所有可能的 N 个状态 qj的转移概率 (aij项 )),以及在此状态下的观测ot+1的观测概率
    ( 项 ) ,然后考虑状态qj之后的观测序列的后向概率 βt+1(j)

    根据前向概率后向概率定义

      αt(i)=P(y1,y2,...,yt,qt=i|λ)   

      βt(i)=P(yt+1,yt+2,...,yT|qt=i,λ) 

    单个状态的概率

      

    求给定模型λ和观测O,在时刻t处于状态qi的概率。记:

      这个的确是求隐状态序列的一种方式,但这种有个问题 -- 求出的隐状态之间互相独立,即:没有考虑到第t+1时刻的隐状态是由第t时刻的隐状态转移过来的情况。换言之:这样求得的隐状态是“每个隐状态都是仅在当前时刻最优,每个隐状态都没考虑到全局情况”。

    单个状态的概率:

    γ的意义

      在每个时刻 t 选择在该时刻最有可能出现的状态 it*,从而得到一个状态序列 I*={i1* i2*… iT*},将它作为预测的结果。

    两个状态的联合概率

      刚才“单个状态的概率”求得的t时刻的隐状态没有考虑到“上下文”,那就考虑下上下文,即:时刻t位于隐状态i时,t+1时刻位于隐状态j

      求给定模型 λ 和观测 O ,在时刻 t 处于状态 qi 并且时刻 t+1 处于状态 qj 的概率。

      

    期望:

    在观测O下状态i出现的期望:

      

    在观测O下状态i转移到状态j的期望:

      

    2. 学习算法

      1)若训练数据包括观测序列和状态序列,则HMM 的学习非常简单,是监督学习;

        大数定理

          假设已给定训练数据包含 S 个长度相同的观测序列和对应的状态序列
    {(O1,I1), (O2,I2)…(Os ,Is)},那么,可以直接利用 Bernoulli 大数定理的结论“频率的极限是概率”,给出HMM 的参数估计。

        监督学习方法

        

        当然若是从实例出发,可以考虑一篇文档的分词,文档的词汇量可以用大数定律来解决,我们可以把每个句子看作是一个小单元,每个单元中,有初始字,终止字,中间字,单个字之分,剩下的就可以看一下https://blog.csdn.net/xueyingxue001/article/details/52396494关于这部分的举例,当然它只将词分为终止字与非终止字。

      2)  若训练数据只有观测序列,则 HMM 的学习需要使用 EM 算法,是非监督学习。

        Baum-Welch 算法

        所有观测数据写成O=(o1,o2…oT),所有隐数据写成I=(i1,i2…iT),完全数据是(O,I)=(o1,o2…oT ,i1,i2…iT),完全数据的对数似然函数是lnP(O,I|λ)。

        假设是HMM参数的当前估计值,λ为待求的参数。

        

        EM过程:

        

        极大化:

        极大化Q,求得参数A,B,π,由于该三个参数分别位于三个项中,可分别极大化。

        Q的第一项:

          

        注意到πi满足加和为1,利用拉格朗日乘子法,得到:

        

        对上式相对于πi求偏导,得到:

        

        对i求和,得到:

        

        从而得到初始状态概率:

        

      转移概率和观测概率

        第二项可写成:

        

        仍然使用拉格朗日乘子法,得到

        

        同理,得到:

        

    3. 预测算法

    3-1预测的近似算法

       在每个时刻 t 选择在该时刻最有可能出现的状态 it*,从而得到一个状态序列 I*={i1* ,i2*… iT*},将它作为预测的结果。

      给定模型和观测序列,时刻 t 处于状态 qi 的概率为:

        

      选择概率最大的 i 作为最有可能的状态:会出现此状态在实际中可能不会发生的情况。

    3-2 Viterbi算法

      Viterbi 算法实际是用动态规划解 HMM 预测问题,用 DP 求概率最大的路径(最优路径),这是一条路径对应一个状态序列。

      定义变量 δt(i):在时刻 t 状态为 i 的所有路径中,概率的最大值。

        

    举例

      考察盒子球模型,观测向量 O=“ 红白红”,试求最优状态序列。

      

    初始化:(下面的红色数字逻辑应该从最后一个推到第一个)

      在 t=1 时,对于每一个状态 i ,求状态为 i 观测到 o1= 红的概率,记此概率为 δ1(t)

      

      求得 δ1(1)=0.2×0.5=0.1

         δ1(2)=0.4×0.4=0.16

         δ1(3)=0.4×0.7=0.28

      在t=2时,对每个状态i,求在t=1时状态为j观测为红并且在t=2时状态为i观测为白的路径的最大概率,记概率为δ2(t),则:

       

      求得

      

      同理:

      δ2(2)=max{0.1×0.2, 0.16×0.5, 0.28×0.3}×0.6=0.0504

      δ2(3)=max{0.1×0.3, 0.16×0.2, 0.28×0.5}×0.3=0.042

      同理,求得:

      δ3(1)=max{0.028×0.5, 0.0504×0.3, 0.042×0.2}×0.5=0.00756

      δ3(2)=max{0.028×0.2, 0.0504×0.5, 0.042×0.3}×0.4=0.01008

      δ3(3)=max{0.028×0.3, 0.0504×0.2, 0.042×0.5}×0.7=0.0147

      从而,最大是 δ3(3)= 0.0147 ,根据每一步的最大(红色数字倒推回去),得到序列是(3,3,3)。

      求最优路径图解:

      

  • 相关阅读:
    网络管理工具:Wireshark
    WAP header 信息的意义
    Visual Studio 2005 发布网站提示发布成功 但指定文件夹下没任何文件问题的解决
    Hello Win
    [转]手把手教你卸载oracle 10g
    如何识别 SQL Server 的版本
    生成insert sql脚本的存储过程
    JQuery触发事件
    PHP事务的使用方法
    PHP session和cookie
  • 原文地址:https://www.cnblogs.com/yang901112/p/11662500.html
Copyright © 2011-2022 走看看