机器学习 - 隐马尔科夫模型(1)- 概念 and 直接计算法

机器学习 - 隐马尔科夫模型(1)- HMM 概念 and 直接计算法

  • 引述

    隐马尔科夫模型(Hidden Markov Model,HMM)用来描述由隐藏马尔科夫链随机生成的观测序列的过程,属于生成模型,面向的问题是标注问题。

    隐马尔科夫模型是关于时序的概率模型,序列的每一个位置可看做一个时刻。其包含两个序列,一个是观测序列,另一个为状态序列。

    1. 一个由隐藏的马尔科夫链随机生成的不可观测的状态随机序列,称为状态序列(State Sequence);
    2. 一个由各个状态序列产生的观测随机序列,称为观测序列(Observation Sequence).

    对于隐马尔科夫模型,做了两个假设:

    1. 齐次马尔科夫假设:在任意时刻 t 的状态只依靠于前一时刻(t-1)的状态与其他时刻的状态与观测无关,与时刻也无关
    2. 观测独立性假设:任意时刻的观测只依赖于 对应时刻 马尔科夫链的状态,与其他观测及状态无关。
  • 定义

    首先列举 HMM 中的一些参数与集合:

    1. 两个集合

      Q = { q 1 , q 2 , … … , q N } Q = \{ q_1,q_2,……,q_N \} Q={q1q2qN}:N 种可能的 状态集合

      V = { v 1 , v 2 , … … , v M } V = \{ v_1,v_2,……,v_M \} V={v1v2vM}:M 种可能的 观测集合

    2. 两个序列

      S = ( s 1 , s 2 , … … , s T ) S = (s_1,s_2,……,s_T) S=(s1s2sT):长度为 T 的 状态序列,每一时刻 st 的取值都是集合 Q 中的元素;

      O = ( o 1 , o 2 , … … , o T ) O = (o_1,o_2,……,o_T) O=(o1o2oT):长度为 T 的 观测序列,每一时刻 ot 的取值都是集合 V 中的元素;

    3. 两个概率矩阵

      A = [ a i j ] N ∗ N , a i j = P ( s t + 1 = q j ∣ s t = q i ) A=[a_{ij}]_{N*N},a_{ij}=P(s_{t+1}=q_j|s_t=q_i) A=[aij]NNaij=P(st+1=qjst=qi)状态转移概率矩阵,描述当 t 时刻状态为 qi 时,t+1 时刻状态取值为 qj 的概率。

      B = [ b j ( k ) ] N ∗ M , b j ( k ) = P ( o t = v k ∣ s t = q j ) B=[b_j(k)]_{N*M},b_j(k)=P(o_t=v_k|s_t=q_j) B=[bj(k)]NMbj(k)=P(ot=vkst=qj)观测概率矩阵,描述当 t 时刻状态为 qj 时,t 时刻观测值为 vk 的概率。

    4. 其他参数

      Π = ( π i ) , i = 1 , 2 , … , N , π i = P ( s 1 = q i ) Π=(π_i),i=1,2,…,N,π_i=P(s_1=q_i) Π=(πi)i=1,2,,Nπi=P(s1=qi)初始状态概率向量,描述开始时,最初的状态取值为 qi 的概率。

      λ = ( A , B , Π ) λ=(A,B,Π) λ=(A,B,Π)三元符号表示的隐马尔科夫模型。该模型由 状态转移概率矩阵、观测概率矩阵以及初始状态概率向量决定。其中 Π Π Π A A A 决定状态序列, B B B 决定观测序列

    5. 模型举例

      假设有 4 个盒子,每个盒子都装有红白两种颜色的球,各盒子的红白球数为:

      盒子编号1234
      红球数5368
      白球数5742

      我们按照以下方法抽取小球并产生颜色的观测序列:

      开始时,从 4 个盒子中 等概率 随机选取一个盒子,从盒子中抽取 1 个小球记录颜色并放回;

      然后从当前盒子随即转移到下一个盒子,转移的规则是:

      1. 如果当前盒子是 盒子 1,那么下一个盒子一定是 盒子 2
      2. 如果当前盒子是 盒子 2 或 3,那么分别以概率 0.40.6 转移到 左边右边 的盒子;
      3. 如果当前盒子是 盒子 4,那么各以 0.5 的概率停留在 盒子 4 或 转移到 盒子 3

      确定转移的盒子以后,再从转移的盒子中抽取出1 个小球,记录颜色并放回;

      如此重复 5 次,最终得到一个 球颜色的观测序列 O = ( 红 , 红 , 白 , 白 , 红 ) O=(红,红,白,白,红) O=()


      我们根据所给条件,写出对应的集合与参数:

      1. 两个集合

        状态集合 Q = { 盒 子 1 , 盒 子 2 , 盒 子 3 , 盒 子 4 } , N = 4 Q=\{盒子1,盒子2,盒子3,盒子4\},N=4 Q={1234}N=4

        观测集合 V = { 红 色 、 白 色 } , M = 2 V=\{红色、白色\},M=2 V={}M=2

      2. 两个序列

        状态序列 S S S 是隐藏的,我们无法确定的知道每次抽取的是哪个盒子。

        观测序列 O = ( 红 , 红 , 白 , 白 , 红 ) O=(红,红,白,白,红) O=()

      3. 两个概率矩阵

        状态转移概率矩阵 A = [ 0 1 0 0 0.4 0 0.6 0 0 0.4 0 0.6 0 0 0.5 0.5 ] A=\begin{bmatrix} 0 & 1 & 0 & 0\\ 0.4 & 0 & 0.6 & 0\\ 0 & 0.4 & 0 & 0.6\\ 0 & 0 & 0.5 & 0.5\\ \end{bmatrix} \quad A=00.400100.4000.600.5000.60.5

        也可以用图模型表示:
        状态转移概率图模型

        观测概率矩阵 B = [ 0.5 0.5 0.3 0.7 0.6 0.4 0.8 0.2 ] B=\begin{bmatrix} 0.5 & 0.5\\ 0.3 & 0.7\\ 0.6 & 0.4\\ 0.8 & 0.2\\ \end{bmatrix} \quad B=0.50.30.60.80.50.70.40.2

        (行代表状态,列代表颜色,每个元素代表不同状态下各颜色的概率)

  • 概率计算方法

    1. 直接计算法

      在概率的计算中,最暴力的方法就是直接计算:通过列举所有的可能性求和。但是计算量很大,无法再实际中使用。

      给定模型 λ = ( A , B , Π ) λ=(A,B,Π) λ=(A,B,Π) 以及观测序列 O = ( o 1 , o 2 , … … , o T ) O = (o_1,o_2,……,o_T) O=(o1o2oT),计算此观测序列出现的概率。

      使用直接计算法便是直接按照概率公式直接计算。

      1. 计算所有可能的状态序列 S k = ( s 1 , s 2 , … … , s T ) S^k = (s_1,s_2,……,s_T) Sk=(s1s2sT) 的概率,即按顺序链式计算条件概率:

        P ( S 1 ∣ λ ) = π s 1 ⋅ a s 1 s 2 ⋅ … ⋅ a s T − 1 s T P(S^1|λ)=π_{s_1}·a_{s_1s_2}·…·a_{s_{T-1}s_T} P(S1λ)=πs1as1s2asT1sT

        ……

        P ( S K ∣ λ ) = π s 1 ⋅ a s 1 s 2 ⋅ … ⋅ a s T − 1 s T P(S^K|λ)=π_{s_1}·a_{s_1s_2}·…·a_{s_{T-1}s_T} P(SKλ)=πs1as1s2asT1sT

        以上述 “盒子-球” 举例,可以生成观测序列 O = ( 红 , 红 , 白 , 白 , 红 ) O=(红,红,白,白,红) O=() 的盒子选择的方式有很多,那么就将所有这些盒子选择的方式都计算条件概率。

      2. 根据不同的状态序列 P ( S k ∣ λ ) P(S^k|λ) P(Skλ),分别计算相应的观测序列 O = ( o 1 , o 2 , … … , o T ) O = (o_1,o_2,……,o_T) O=(o1o2oT) 出现的概率:

        P ( O ∣ S 1 , λ ) = b s 1 ( o 1 ) ⋅ b s 2 ( o 2 ) ⋅ … ⋅ b s T ( o T ) P(O|S^1,λ)=b_{s_1}(o_1)·b_{s_2}(o_2)·…·b_{s_T}(o_T) P(OS1,λ)=bs1(o1)bs2(o2)bsT(oT)

        ……

        P ( O ∣ S K , λ ) = b s 1 ( o 1 ) ⋅ b s 2 ( o 2 ) ⋅ … ⋅ b s T ( o T ) P(O|S^K,λ)=b_{s_1}(o_1)·b_{s_2}(o_2)·…·b_{s_T}(o_T) P(OSK,λ)=bs1(o1)bs2(o2)bsT(oT)

      3. 计算 O O O S S S 同时出现的联合概率:

        P ( O ∣ λ ) = P ( O ∣ S 1 , λ ) P ( S 1 ∣ λ ) P(O|λ)=P(O|S^1,λ)P(S^1|λ) P(Oλ)=P(OS1,λ)P(S1λ)

        ……

        P ( O ∣ λ ) = P ( O ∣ S K , λ ) P ( S K ∣ λ ) P(O|λ)=P(O|S^K,λ)P(S^K|λ) P(Oλ)=P(OSK,λ)P(SKλ)

      4. 对所有可能的状态序列 S S S 求和,得到观测序列 O O O 的概率 P ( O ∣ λ ) P(O|λ) P(Oλ),即:

        P ( O ∣ λ ) = ∑ k = 1 K P ( O ∣ S k , λ ) P ( S k ∣ λ ) P(O|λ)=\sum_{k=1}^{K}P(O|S^k,λ)P(S^k|λ) P(Oλ)=k=1KP(OSk,λ)P(Skλ)

      这样的直接计算方法计算量很大,时间复杂度为 O ( T N T ) O(TN^T) O(TNT),所以在实际工程应用中是不可行的。下一篇我们介绍计算观测序列概率的有效算法:前向-后向算法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值