隐马尔科夫模型HMM详解(1)

HMM学习算法参考下篇文章
代码地址:https://gitee.com/liangcd/speech_learning/tree/master/HMM

隐马尔科夫模型基本概念

先看一个小问题:

问题:假设你是2077年的气候学家,正在进行气候研究,无法获得西安2021年的天气记录。你找到了果冻的日记本,上面列出了果冻这个夏天每天吃的冰淇淋数目。你的目标是:根据观测量(果冻夏天每天吃的冰淇淋数目)估计夏天每天的天气。假设天气只有冷和热两种可能,果冻吃的冰淇淋数目只有1,2,3三种可能。

你的任务是:

  • 给定观测序列 O O O,如 O = ( 3 , 1 , 3 ) O=(3,1,3) O=(3,1,3),其中每个整数表示果冻当天吃的冰淇淋数目
  • 找出隐藏的天气状态序列 Q Q Q,比如 Q = ( H O T , C O L D , H O T ) Q=(HOT,COLD,HOT) Q=(HOT,COLD,HOT)

隐马尔科夫模型定义

  • 隐马尔科夫模型是关于时间序列的概率模型
  • 描述一个隐藏的马尔科夫链随机生成不可观测的状态序列,再由各个状态生成一个观测序列的过程,序列的每个位置又可以看作是一个时刻。

HMM由初始概率分布、状态转移概率分布和观测概率分布决定,当观测为离散值时:

Q = { q 1 q 2 … q N } Q=\left\{q_{1} q_{2} \ldots q_{N}\right\} \quad Q={q1q2qN} 所有可能的状态的集合 ( N (N (N ) ) )
V = { v 1 v 2 … v M } V=\left\{v_{1} v_{2} \ldots v_{M}\right\} \quad V={v1v2vM} 所有可能的观测的集合 ( M (M (M ) ) )
I = ( i 1 i 2 … i T ) I=\left(i_{1} i_{2} \ldots i_{T}\right) \quad I=(i1i2iT) 长度为 T T T的状态序列,每个来自 Q Q Q
O = ( o 1 o 2 … o T ) O=\left(o_{1} o_{2} \ldots o_{T}\right) \quad O=(o1o2oT) 长度为 T T T的观测序列,每个来自 V V V
A = [ a i j ] N × N A=\left[a_{i j}\right]_{N \times N} \quad A=[aij]N×N 状交转移概率矩阵,其中 a i j = P ( i t + 1 = q j ∣ i t = q i ) , i = 1 , 2 , … , N ; j = 1 , 2 , … , N a_{i j}=P\left(i_{t+1}=q_{j} \mid i_{t}=q_{i}\right), i=1,2, \ldots, N ; j=1,2, \ldots, N aij=P(it+1=qjit=qi),i=1,2,,N;j=1,2,,N是在时刻 t t t 处于状态 q i q_{i} qi 的条件下,在时刻 t + 1 t+1 t+1 转移到状态 q j q_{j} qj 的概率
B = [ b j ( o t ) ] N × M B = [b_{j}\left(o_{t}\right)]_{N \times M} B=[bj(ot)]N×M 观测概率矩阵,其中 b j ( o t ) = P ( o t = v k ∣ i t = q j ) , k = 1 , 2 , , … , M ; j = 1 , 2 , … , N b_{j}\left(o_{t}\right)=P\left(o_{t}=v_{k} \mid i_{t}=q_{j}\right), k=1,2,, \ldots, M ; j=1,2, \ldots, N bj(ot)=P(ot=vkit=qj),k=1,2,,,M;j=1,2,,N,是在时刻t处于状态 q j q_j qj的条件下生成观测 v k v_k vk的概率。
π = ( π i ) \pi=\left(\pi_{i}\right) \quad π=(πi) 初始状态概率向量,其中 π i = P ( i 1 = q i ) , i = 1 , 2 , … , N \pi_{i}=P\left(i_{1}=q_{i}\right), i=1,2, \ldots, N πi=P(i1=qi),i=1,2,,N, 是时刻 t = 1 t=1 t=1 处于状态 q i q_i qi的概率

HMM λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π) A , B , π A,B,\pi A,B,π称为HMM的三要素

HMM的两个基本假设

  • 齐次马尔可夫性假设:隐藏的马尔科夫链在时刻t的状态只与t-1的状态有关

    P ( i t ∣ i t − 1 , o t − 1 , . . . , i 1 , o 1 ) = P ( i t ∣ i t − 1 ) , t = 1 , 2 , . . . , 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(itit1,ot1,...,i1,o1)=P(itit1),t=1,2,...,T

  • 观测独立性假设:观测只与当前时刻的状态有关

    P ( o t ∣ i T , o T , i 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 ) P\left(o_{t} \mid i_{T}, o_{T}, i_{T-1}, o_{T-1}, \ldots, i_{t+1}, o_{t+1}, i_{t}, i_{t-1}, o_{t-1}, \ldots, i_{1}, o_{1}\right)=P\left(o_{t} \mid i_{t}\right) P(otiT,oT,iT1,oT1,,it+1,ot+1,it,it1,ot1,,i1,o1)=P(otit)

HMM的分类

HMM分类观测观测概率分布
离散HMM离散值离散(概率) B = [ b j ( o t ) ] N × M ′ o t ∈ V = { v 1 v 2 … v M } B=\left[b_{j}\left(o_{t}\right)\right]_{N \times M^{\prime}} o_{t} \in V=\left\{v_{1} v_{2} \ldots v_{M}\right\} B=[bj(ot)]N×MotV={v1v2vM}
连续HMM实数、向量连续(概率密度函数)单高斯分布: b j ( o t ) = N ( o t ; μ j , Σ j ) b_{j}\left(\boldsymbol{o}_{t}\right)=\mathcal{N}\left(\boldsymbol{o}_{t} ; \boldsymbol{\mu}_{j}, \boldsymbol{\Sigma}_{j}\right) bj(ot)=N(ot;μj,Σj)
高斯混合模型: b j ( o t ) = ∑ m = 1 M α j m N ( o t ; μ j m , Σ j m ) b_{j}\left(\boldsymbol{o}_{t}\right)=\sum_{m=1}^{M} \alpha_{j m} \mathcal{N}\left(\boldsymbol{o}_{t} ; \boldsymbol{\mu}_{j m}, \boldsymbol{\Sigma}_{j m}\right) bj(ot)=m=1MαjmN(ot;μjm,Σjm)

当HMM的观测概率分布由高斯混合模型表示时,称为GMM-HMM,它广泛应用在语音识别、词性标注等任务。

观测序列的生成过程

长度为T的观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)的生成过程如下:

输入:隐马尔科夫模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π),观测序列长度 T T T

输出:观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)

  1. 根据初始状态分布 π \pi π产生状态 i 1 i_1 i1
  2. t=1
  3. 根据状态 i t i_t it的观测概率分布 b i t ( k ) b_{i_t}(k) bit(k)生成 o t o_t ot
  4. 根据状态 i t i_t it的状态转移概率分布 { a i t i t + 1 } \{a_{i_ti_{t+1}}\} {aitit+1}产生状态 i t + 1 i_{t+1} it+1
  5. t=t+1,如果t<T,转第3步;否则终止

举个小栗子

问题:盒子和球的模型(烂大街栗子)

盒子1234
红球数5368
白球数5742

按照如下方法抽球,并产生球颜色的观测序列:

  • 开始:等概率随机选四个盒子中的一个,从该盒子随机抽一个球,记录颜色放回;
  • 然后从当前盒子随机转移到下一个盒子,从下一个盒子随机抽一个球,记录颜色放回;
  • 转移规则:
    • 盒子1 → \rightarrow 盒子2
    • 盒子2或3 → \rightarrow P=0.4左边,P=0.6右边
    • 盒子4 → \rightarrow P=0.5盒子4,P=0.5盒子3

观察者只能观察到球的颜色序列,观测不到球是从哪个盒子取出的,观测序列:球颜色序列;状态序列(隐藏):盒子的序列。重复5次:观测序列 O = { 红 , 红 , 白 , 白 , 红 } O=\{红,红,白,白,红\} O={,,,,}

QAQ:对应的状态集合,观测集合,初始状态概率向量,状态转移概率矩阵,观测概率矩阵分别是什么?

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

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

初始状态概率分布: π = ( 0.25 , 0.25 , 0.25 , 0.25 ) T \pi = (0.25,0.25,0.25,0.25)^T π=(0.25,0.25,0.25,0.25)T

状态转移概率分布: A = [ 0 1 0 0 0.4 0 0.6 0 0 0.4 0 0.6 0 0 0.5 0.5 ] A=\left[\begin{array}{cccc}0 & 1 & 0 & 0 \\ 0.4 & 0 & 0.6 & 0 \\ 0 & 0.4 & 0 & 0.6 \\ 0 & 0 & 0.5 & 0.5\end{array}\right] 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=\left[\begin{array}{ll}0.5 & 0.5 \\ 0.3 & 0.7 \\ 0.6 & 0.4 \\ 0.8 & 0.2\end{array}\right] B=0.50.30.60.80.50.70.40.2

隐马尔科夫模型的三个基本问题

  1. 概率计算问题

    • 已知模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)
    • 计算概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)
  2. 预测问题(解码问题)

    • 已知模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)

    • 计算使概率 P ( I ∣ O ) P(I|O) P(IO)最大的状态序列 I = ( i 1 i 2 … i T ) I=\left(i_{1} i_{2} \ldots i_{T}\right) I=(i1i2iT)

  3. 学习问题

    • 已知观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)

    • 估计模型 λ \lambda λ,使 P ( O ∣ λ ) P(O|\lambda) P(Oλ)最大

概率计算

已知模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT) b j ( o t ) b_j(o_t) bj(ot)可以是离散的也可以是连续的,计算概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ).

直接计算法

列举所有可能的长度为T状态序列 I = ( i 1 i 2 … i T ) I=\left(i_{1} i_{2} \ldots i_{T}\right) I=(i1i2iT),求每个状态序列 I I I与观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)的联合概率 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,Iλ),然后对所有可能的状态序列求和,得到 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

直接计算法

  • 状态序列 I = ( i 1 i 2 … i T ) I=\left(i_{1} i_{2} \ldots i_{T}\right) I=(i1i2iT)的概率是$P(I|\lambda)=\pi_{i_1} a_{i_1 i_2} a_{i_2 i_3}… a_{i_{T-1} i_T} $

  • 对固定的状态序列 I = ( i 1 i 2 … i T ) I=\left(i_{1} i_{2} \ldots i_{T}\right) I=(i1i2iT),观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)的概率是 P ( O ∣ I , λ ) P(O|I,\lambda) P(OI,λ)

  • O O O I I I同时出现的联合概率是:
    P ( O , I ∣ λ ) = P ( O ∣ I , λ ) P ( I ∣ λ ) = π i 1 b i 1 ( o 1 ) a i , b b i 2 ( o 2 ) ⋯ a i − 1 τ b i t ( o T ) \begin{aligned} P(O, I \mid \lambda) &=P(O \mid I, \lambda) P(I \mid \lambda) \\ &=\pi_{i_{1}} b_{i_{1}}\left(o_{1}\right) a_{i, b} b_{i_{2}}\left(o_{2}\right) \cdots a_{i_{-1} \tau} b_{i_{t}}\left(o_{T}\right) \end{aligned} P(O,Iλ)=P(OI,λ)P(Iλ)=πi1bi1(o1)ai,bbi2(o2)ai1τbit(oT)

  • 对所有可能的状态序列 I I I求和,得到观测序列 O O O的概率是 P ( O ∣ λ ) P(O|\lambda) P(Oλ)
    P ( O ∣ λ ) = ∑ l P ( O ∣ I , λ ) P ( I ∣ λ ) = ∑ i 1 , i 2 , . . . , i T π i 1 b i 1 ( o 1 ) a i i 2 b i 2 ( o 2 ) ⋯ a h − i T b i r ( o T ) \begin{aligned} P(O \mid \lambda) &=\sum_{l} P(O \mid I, \lambda) P(I \mid \lambda) \\ &=\sum_{i_1,i_2,...,i_T} \pi_{i_{1}} b_{i_{1}}\left(o_{1}\right) a_{i i_{2}} b_{i_{2}}\left(o_{2}\right) \cdots a_{h-i_{T}} b_{i_{r}}\left(o_{T}\right) \end{aligned} P(Oλ)=lP(OI,λ)P(Iλ)=i1,i2,...,iTπi1bi1(o1)aii2bi2(o2)ahiTbir(oT)

复杂度: O ( T N T ) O(TN^T) O(TNT),为什么?

每个时刻有N个可能的状态,所有T个时刻,状态序列有 N T N^T NT个可能,每个状态序列对应的时间复杂度是 O ( T ) O(T) O(T),可理解为T次乘法,则总的时间复杂度为 O ( T N T ) O(TN^T) O(TNT)

前向算法

前向概率定义:给定隐马尔科夫模型 λ \lambda λ,定义到时刻 t t t部分观测序列为 o 1 , o 2 , . . . , o t o_1,o_2,...,o_t o1,o2,...,ot,且状态为 q i q_i qi的概率为前向概率:
α t ( i ) = P ( o 1 , o 2 , … , o t , i t = q i ∣ λ ) \alpha_{t}(i)=P\left(o_{1}, o_{2}, \ldots, o_{t}, i_{t}=q_{i} \mid \lambda\right) αt(i)=P(o1,o2,,ot,it=qiλ)

观测序列概率的前向算法

输入:隐马尔科夫模型 λ \lambda λ,观测序列 O O O

输出:观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

  1. 初值:KaTeX parse error: \tag works only in display equations

  2. 递推:对 t = 1 , 2 , . . . , T − 1 t=1,2,...,T-1 t=1,2,...,T1
    α t + 1 ( i ) = [ ∑ j = 1 N α t ( j ) a j i ] b i ( o t + 1 ) (2) \alpha_{t+1}(i)=\left[\sum_{j=1}^{N} \alpha_{t}(j) a_{j i}\right] b_{i}\left(o_{t+1}\right) \tag{2} αt+1(i)=[j=1Nαt(j)aji]bi(ot+1)(2)

  3. 终止: P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) (3) P(O \mid \lambda)=\sum_{i=1}^{N} \alpha_{T}(i) \tag{3} P(Oλ)=i=1NαT(i)(3)

前向算法的关键:直接引用前一时刻的计算结果,避免重复计算,复杂度从 O ( T N T ) O(TN^T) O(TNT)降到 O ( T N 2 ) O(TN^2) O(TN2)

问题:(不理解可以略过)

  • 为什么上述公式1成立?使用贝叶斯公式

    α 1 ( i ) = P ( o 1 , i 1 = q i ) = P ( i 1 = q i ) P ( o 1 ∣ i 1 = q i ) = π i b i ( o 1 ) \alpha_{1}(i)=P\left(o_{1}, i_{1}=q_{i}\right)=P\left(i_{1}=q_{i}\right) P\left(o_{1} \mid i_{1}=q_{i}\right)=\pi_{i} b_{i}\left(o_{1}\right) α1(i)=P(o1,i1=qi)=P(i1=qi)P(o1i1=qi)=πibi(o1)

  • 为什么上述公式3成立?边缘分布
    α T ( i ) = P ( o 1 , o 2 , … , o T , i T = q i ∣ λ ) = P ( O , i T = q i ∣ λ ) P ( O ∣ λ ) = ∑ i = 1 N P ( O , i T = q i ∣ λ ) = ∑ i = 1 N α T ( i ) \begin{array}{c} \alpha_{T}(i)=P\left(o_{1}, o_{2}, \ldots, o_{T}, i_{T}=q_{i} \mid \lambda\right)=P\left(O, i_{T}=q_{i} \mid \lambda\right) \\ P(O \mid \lambda)=\sum_{i=1}^{N} P\left(O, i_{T}=q_{i} \mid \lambda\right)=\sum_{i=1}^{N} \alpha_{T}(i) \end{array} αT(i)=P(o1,o2,,oT,iT=qiλ)=P(O,iT=qiλ)P(Oλ)=i=1NP(O,iT=qiλ)=i=1NαT(i)

  • 为什么上述公式2成立?结合HMM的两个基本假设,贝叶斯公式,边缘分布

    q t = j q_t=j qt=j与前述 i t = q j i_t=q_j it=qj等价, o 1 t \mathbf{o}_{1}^{t} o1t o 1 , o 2 , . . . , o t o_1,o_2,...,o_t o1,o2,...,ot等价
    α t ( j ) = P ( q t = j , o 1 t ) = ∑ i = 1 N P ( q t − 1 = i , q t = j , o 1 t − 1 , o t ) = ∑ i = 1 N P ( q t = j , o t ∣ q t − 1 = i , o 1 t − 1 ) P ( q t − 1 = i , o 1 t − 1 ) = ∑ i = 1 N P ( q t = j , o t ∣ q t − 1 = i ) α t − 1 ( i ) = ∑ i = 1 N P ( o t ∣ q t = j , q t − 1 = i ) P ( q t = j ∣ q t − 1 = i ) α t − 1 ( i ) = ∑ i = 1 N b j ( o t ) a i j α t − 1 ( i ) \begin{aligned} \alpha_{t}(j) &=P\left(q_{t}=j, \mathbf{o}_{1}^{t}\right) \\ &=\sum_{i=1}^{N} P\left(q_{t-1}=i, q_{t}=j, \mathbf{o}_{1}^{t-1}, \mathbf{o}_{t}\right) \\ &=\sum_{i=1}^{N} P\left(q_{t}=j, \mathbf{o}_{t} \mid q_{t-1}=i, \mathbf{o}_{1}^{t-1}\right) P\left(q_{t-1}=i, \mathbf{o}_{1}^{t-1}\right) \\ &=\sum_{i=1}^{N} P\left(q_{t}=j, \mathbf{o}_{t} \mid q_{t-1}=i\right) \alpha_{t-1}(i) \\ &=\sum_{i=1}^{N} P\left(\mathbf{o}_{t} \mid q_{t}=j, q_{t-1}=i\right) P\left(q_{t}=j \mid q_{t-1}=i\right) \alpha_{t-1}(i) \\ &=\sum_{i=1}^{N} b_{j}\left(\mathbf{o}_{t}\right) a_{i j} \alpha_{t-1}(i) \end{aligned} αt(j)=P(qt=j,o1t)=i=1NP(qt1=i,qt=j,o1t1,ot)=i=1NP(qt=j,otqt1=i,o1t1)P(qt1=i,o1t1)=i=1NP(qt=j,otqt1=i)αt1(i)=i=1NP(otqt=j,qt1=i)P(qt=jqt1=i)αt1(i)=i=1Nbj(ot)aijαt1(i)

后向算法

后向概率定义:给定隐马尔科夫模型 λ \lambda λ,定义在时刻 t t t状态为 q i q_i qi条件下,从 t + 1 t+1 t+1 T T T的部分观测序列为 o t + 1 , o t + 2 , . . . , o T o_{t+1},o_{t+2},...,o_{T} ot+1,ot+2,...,oT的概率为后向概率:
β t ( i ) = P ( o t + 1 , o t + 2 , … , o T ∣ i t = q i , λ ) \beta_{t}(i)=P\left(o_{t+1}, o_{t+2}, \ldots, o_{T} \mid i_{t}=q_{i}, \lambda\right) βt(i)=P(ot+1,ot+2,,oTit=qi,λ)

观测序列概率的后向算法

输入:隐马尔科夫模型 λ \lambda λ,观测序列 O O O

输出:观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

  1. 初值: β T ( i ) = 1 , i = 1 , 2 , . . . , N \beta_{T}(i) = 1, i=1,2,...,N βT(i)=1,i=1,2,...,N

  2. 递推:对 t = T − 1 , T − 2 , . . . , 1 t=T-1,T-2,...,1 t=T1,T2,...,1
    β t ( i ) = ∑ j = 1 N a i j b j ( o t + 1 ) β t + 1 ( j ) , i = 1 , 2 , ⋯   , N (4) \beta_{t}(i)=\sum_{j=1}^{N} a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j), \quad i=1,2, \cdots, N \tag{4} βt(i)=j=1Naijbj(ot+1)βt+1(j),i=1,2,,N(4)

  3. 终止: P ( O ∣ λ ) = ∑ i = 1 N π i b i ( o 1 ) β 1 ( i ) (5) P(O \mid \lambda)=\sum_{i=1}^{N} \pi_{i} b_{i}\left(o_{1}\right) \beta_{1}(i) \tag{5} P(Oλ)=i=1Nπibi(o1)β1(i)(5)

问题:(不理解可以跳过)

公式(5)的证明和上述前向算法证明类似。

公式(4)证明:

q t = j q_t=j qt=j与前述 i t = q j i_t=q_j it=qj等价, o 1 t \mathbf{o}_{1}^{t} o1t o 1 , o 2 , . . . , o t o_1,o_2,...,o_t o1,o2,...,ot等价
β t ( i ) = P ( o t + 1 T ∣ q t = i ) = P ( o t + 1 T , q t = i ) P ( q t = i ) = ∑ j = 1 N P ( o t + 1 T , q t = i , q t + 1 = j ) P ( q t = i ) = ∑ j = 1 N P ( o t + 1 T ∣ q t = i , q t + 1 = j ) P ( q t = i , q t + 1 = j ) P ( q t = i ) = ∑ j = 1 N P ( o t + 1 T ∣ q t + 1 = j ) P ( q t = i , q t + 1 = j ) P ( q t = i ) = ∑ j = 1 N P ( o t + 2 T , o t + 1 ∣ q t + 1 = j ) a i j = ∑ j = 1 N P ( o t + 2 T ∣ q t + 1 = j ) P ( o t + 1 ∣ q t + 1 = j ) a i j = ∑ j = 1 N β t + 1 ( j ) b j ( o t + 1 ) a i j \begin{aligned} \beta_{t}(i) &=P\left(\mathbf{o}_{t+1}^{T} \mid q_{t}=i\right) \\ &=\frac{P\left(\mathbf{o}_{t+1}^{T}, q_{t}=i\right)}{P\left(q_{t}=i\right)} \\ &=\frac{\sum_{j=1}^{N} P\left(\mathbf{o}_{t+1}^{T}, q_{t}=i, q_{t+1}=j\right)}{P\left(q_{t}=i\right)} \\ &=\frac{\sum_{j=1}^{N} P\left(\mathbf{o}_{t+1}^{T} \mid q_{t}=i, q_{t+1}=j\right) P\left(q_{t}=i, q_{t+1}=j\right)}{P\left(q_{t}=i\right)} \\ &=\sum_{j=1}^{N} P\left(\mathbf{o}_{t+1}^{T} \mid q_{t+1}=j\right) \frac{P\left(q_{t}=i, q_{t+1}=j\right)}{P\left(q_{t}=i\right)} \\ &=\sum_{j=1}^{N} P\left(\mathbf{o}_{t+2}^{T}, \mathbf{o}_{t+1} \mid q_{t+1}=j\right) a_{i j} \\ &=\sum_{j=1}^{N} P\left(\mathbf{o}_{t+2}^{T} \mid q_{t+1}=j\right) P\left(\mathbf{o}_{t+1} \mid q_{t+1}=j\right) a_{i j} \\ &=\sum_{j=1}^{N} \beta_{t+1}(j) b_{j}\left(\mathbf{o}_{t+1}\right) a_{i j} \end{aligned} βt(i)=P(ot+1Tqt=i)=P(qt=i)P(ot+1T,qt=i)=P(qt=i)j=1NP(ot+1T,qt=i,qt+1=j)=P(qt=i)j=1NP(ot+1Tqt=i,qt+1=j)P(qt=i,qt+1=j)=j=1NP(ot+1Tqt+1=j)P(qt=i)P(qt=i,qt+1=j)=j=1NP(ot+2T,ot+1qt+1=j)aij=j=1NP(ot+2Tqt+1=j)P(ot+1qt+1=j)aij=j=1Nβt+1(j)bj(ot+1)aij

预测算法-Viterbi算法

已知模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT) b j ( o t ) b_j(o_t) bj(ot)可以是离散的也可以是连续的,计算使概率 P ( I ∣ O ) P(I|O) P(IO)最大的状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1,i_2,...,i_T) I=(i1,i2,...,iT).

用动态规划求概率最大路径(最优路径),一个路径对应一个状态序列。最有路径的特性:如果最优路径在时刻 t t t通过节点 i t ∗ i_t^* it,那么这一路径从节点 i t ∗ i_t^* it到终点 i T ∗ i_T^* iT的部分路径,对于从 i t ∗ i_t^* it i T ∗ i_T^* iT的所有可能路径来说必须是最优的。

只需从时刻 t − 1 t-1 t1开始,递推的计算在时刻 t t t状态为 i i i的各条部分路径的最大概率,直至得到时刻 t = T t=T t=T状态为 i i i的各条路径的最大概率,时刻 t = T t=T t=T的最大概率即为最优路径的概率 P ∗ P^* P,最优路径的终节点 i T ∗ i_T^* iT也同时的到。

之后为了找出最优路径的各个结点,从终结点 i T ∗ i_T^* iT开始,由后向前逐步求得节点 i T ∗ , . . . , i 1 ∗ i_T^*,...,i_1^* iT,...,i1,得到最优路径。

首先引入两个变量 δ \delta δ ψ \psi ψ。定义在时刻 t t t状态为 i i i的所有单个路径 ( i 1 , i 2 , . . . , i t ) (i_1,i_2,...,i_t) (i1,i2,...,it)中概率最大为:
δ t ( i ) = max ⁡ i 1 , i 2 , ⋯   , i t − 1 P ( i t = i , i t − 1 , ⋯   , i 1 , o t , ⋯   , o 1 ∣ λ ) , i = 1 , 2 , ⋯   , N \delta_{t}(i)=\max _{i_1, i_{2}, \cdots, i_{t-1}} P\left(i_{t}=i, i_{t-1}, \cdots, i_{1}, o_{t}, \cdots, o_{1} \mid \lambda\right), \quad i=1,2, \cdots, N δt(i)=i1,i2,,it1maxP(it=i,it1,,i1,ot,,o1λ),i=1,2,,N

由定义可得变量 δ \delta δ的递推式:
δ t + 1 ( i ) = max ⁡ i 1 , i 2 , ⋯   , i t P ( i t + 1 = i , i t , ⋯   , i 1 , o t + 1 , ⋯   , o 1 ∣ λ ) = max ⁡ 1 ⩽ j ⩽ N [ δ t ( j ) a j i ] b i ( o t + 1 ) , i = 1 , 2 , ⋯   , N ; t = 1 , 2 , ⋯   , T − 1 \begin{aligned} \delta_{t+1}(i) &=\max _{i_1, i_2, \cdots, i_t} P\left(i_{t+1}=i, i_{t}, \cdots, i_{1}, o_{t+1}, \cdots, o_{1} \mid \lambda\right) \\ &=\max _{1 \leqslant j \leqslant N}\left[\delta_{t}(j) a_{j i}\right] b_{i}\left(o_{t+1}\right), \quad i=1,2, \cdots, N ; t=1,2, \cdots, T-1 \end{aligned} δt+1(i)=i1,i2,,itmaxP(it+1=i,it,,i1,ot+1,,o1λ)=1jNmax[δt(j)aji]bi(ot+1),i=1,2,,N;t=1,2,,T1

定义在时刻 t t t状态为 i i i的所有单个路径 ( i 1 , i 2 , . . . , i t ) (i_1,i_2,...,i_t) (i1,i2,...,it)中概率最大的路径的第 t − 1 t-1 t1个节点为:
ψ t ( i ) = arg ⁡ max ⁡ 1 ⩽ j ⩽ N [ δ t − 1 ( j ) a j i ] , i = 1 , 2 , ⋯   , N \psi_{t}(i)=\arg \max _{1 \leqslant j \leqslant N}\left[\delta_{t-1}(j) a_{j i}\right], \quad i=1,2, \cdots, N ψt(i)=arg1jNmax[δt1(j)aji],i=1,2,,N

Viterbi算法

输入:隐马尔科夫模型 λ \lambda λ,观测序列 O O O

输出:最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^*=(i_1^*,i_2^*,...,i_T^*) I=(i1,i2,...,iT)

  1. 初始化:
    δ 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , ⋯   , N ψ 1 ( i ) = 0 , i = 1 , 2 , ⋯   , N \begin{array}{c} \delta_{1}(i)=\pi_{i} b_{i}\left(o_{1}\right), \quad i=1,2, \cdots, N \\ \psi_{1}(i)=0, \quad i=1,2, \cdots, N \end{array} δ1(i)=πibi(o1),i=1,2,,Nψ1(i)=0,i=1,2,,N

  2. 递推,对于 t = 2 , 3 , . . . T t=2,3,...T t=2,3,...T
    δ t ( i ) = max ⁡ 1 ⩽ j ⩽ N [ δ t − 1 ( j ) a j i ] b i ( o t ) , i = 1 , 2 , ⋯   , N ψ t ( i ) = arg ⁡ max ⁡ 1 ⩽ j ⩽ N [ δ t − 1 ( j ) a j i ] , i = 1 , 2 , ⋯   , N \begin{array}{ll} \delta_{t}(i)=\max _{1 \leqslant j \leqslant N} \left[\delta_{t-1}(j) a_{j i}\right] b_{i}\left(o_{t}\right), & i=1,2, \cdots, N \\ \psi_{t}(i)=\arg \max _{1 \leqslant j \leqslant N}\left[\delta_{t-1}(j) a_{j i}\right], & i=1,2, \cdots, N \end{array} δt(i)=max1jN[δt1(j)aji]bi(ot),ψt(i)=argmax1jN[δt1(j)aji],i=1,2,,Ni=1,2,,N

  3. 终止
    P ∗ = max ⁡ 1 ⩽ i ⩽ N δ T ( i ) i T ∗ = arg ⁡ max ⁡ 1 ⩽ i ⩽ N [ δ T ( i ) ] \begin{array}{c} P^{*}=\max _{1 \leqslant i \leqslant N} \delta_{T}(i) \\ i_{T}^{*}=\arg \max _{1 \leqslant i \leqslant N}\left[\delta_{T}(i)\right] \end{array} P=max1iNδT(i)iT=argmax1iN[δT(i)]

  4. 最优路径回溯,对于 t = T − 1 , T − 2 , . . . , 1 t=T-1,T-2,...,1 t=T1,T2,...,1
    i t ∗ = ψ t + 1 ( i t + 1 ∗ ) i_t^* = \psi_{t+1}(i_{t+1}^*) it=ψt+1(it+1)
    求得最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^*=(i_1^*,i_2^*,...,i_T^*) I=(i1,i2,...,iT)

再吃个栗子:

还是考虑盒子和球模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π),状态集合 Q = { 1 , 2 , 3 } Q=\{1,2,3\} Q={1,2,3},观测集合 V = { 红 , 白 } V=\{红,白\} V={,}

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.4 ) T A=\left[\begin{array}{lll}0.5 & 0.2 & 0.3 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.3 & 0.5\end{array}\right], \mathrm{B}=\left[\begin{array}{ll}0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3\end{array}\right], \pi=(0.2,0.4,0.4)^{T} A=0.50.30.20.20.50.30.30.20.5,B=0.50.40.70.50.60.3,π=(0.2,0.4,0.4)T

设T=3,O=(红,白,红)​,试用维特比算法求最优状态序列。

(1)初始化。 δ 1 ( i ) = π i b i ( o 1 ) \delta_1(i) = \pi_i b_i(o_1) δ1(i)=πibi(o1),带入数据: δ 1 ( 1 ) = 0.1 \delta_1(1) = 0.1 δ1(1)=0.1, δ 1 ( 2 ) = 0.16 \delta_1(2)=0.16 δ1(2)=0.16, δ 1 ( 3 ) = 0.28 \delta_1(3)=0.28 δ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)递推计算: δ 2 ( i ) = max ⁡ 1 ≤ j ≤ 3 [ δ 1 ( j ) a j i ] b i ( o 2 ) \delta_2(i) = \max _{1 \le j \le3}[\delta_1(j)a_{ji}]b_i(o_2) δ2(i)=max1j3[δ1(j)aji]bi(o2),同时记录概率最大路径的前一个状态j, ψ 2 ( i ) = arg ⁡ max ⁡ 1 ≤ j ≤ 3 [ δ 1 ( j ) a j i ] j = 1 , 2 , 3 \psi_2(i) = \arg \max _{1 \le j \le 3}[\delta_1(j)a_{ji}] \quad j=1,2,3 ψ2(i)=argmax1j3[δ1(j)aji]j=1,2,3

计算:

δ 2 ( 1 ) = m a x ( 0.1 × 0.5 , 0.16 × 0.3 , 0.28 × 0.2 ) × 0.5 \delta_2(1)=max(0.1\times0.5,0.16\times 0.3,0.28\times 0.2) \times 0.5 δ2(1)=max(0.1×0.5,0.16×0.3,0.28×0.2)×0.5 = 0.028

ψ 2 ( 1 ) = 3 \psi_2(1) = 3 ψ2(1)=3

δ 2 ( 2 ) = 0.0504 , ψ 2 ( 2 ) = 3 \delta_2(2) = 0.0504,\psi_2(2) = 3 δ2(2)=0.0504ψ2(2)=3

δ 2 ( 3 ) = 0.042 , ψ 2 ( 3 ) = 3 \delta_2(3) = 0.042,\psi_2(3) = 3 δ2(3)=0.042ψ2(3)=3

当t=3时,

δ 3 ( i ) = max ⁡ 1 ⩽ j ⩽ 3 [ δ 2 ( j ) a j i ] b i ( o 3 ) \delta_{3}(i)=\max _{1 \leqslant j \leqslant 3}\left[\delta_{2}(j) a_{j i}\right] b_{i}\left(o_{3}\right) δ3(i)=max1j3[δ2(j)aji]bi(o3)
ψ 3 ( i ) = arg ⁡ max ⁡ 1 ⩽ j < 3 [ δ 2 ( j ) a f ] \psi_{3}(i)=\arg \max _{1 \leqslant j<3}\left[\delta_{2}(j) a_{f}\right] ψ3(i)=argmax1j<3[δ2(j)af]
δ 3 ( 1 ) = 0.00756 , ψ 3 ( 1 ) = 2 \delta_{3}(1)=0.00756, \quad \psi_{3}(1)=2 δ3(1)=0.00756,ψ3(1)=2
δ 3 ( 2 ) = 0.01008 , ψ 3 ( 2 ) = 2 \delta_{3}(2)=0.01008, \quad \psi_{3}(2)=2 δ3(2)=0.01008,ψ3(2)=2
δ 3 ( 3 ) = 0.0147 , ψ 3 ( 3 ) = 3 \delta_{3}(3)=0.0147, \quad \psi_{3}(3)=3 δ3(3)=0.0147,ψ3(3)=3

(3)用 P ∗ P^* P表示最优路径的概率,则 P ∗ = max ⁡ 1 ≤ i ≤ 3 δ 3 ( i ) = 0.0147 P^*=\max _{1 \le i \le 3} \delta_3(i) = 0.0147 P=max1i3δ3(i)=0.0147

最优路径的终点 i 3 ∗ = arg ⁡ max ⁡ i [ δ 3 ( i ) ] = 3 i_3^*=\arg \max _{i}[\delta_3(i)] = 3 i3=argmaxi[δ3(i)]=3

(4)由最优路径的终点回溯:

i 2 ∗ = ψ 3 ( i 3 ∗ ) = ψ 3 ( 3 ) = 3 i_{2}^{*}=\psi_{3}\left(i_{3}^{*}\right)=\psi_{3}(3)=3 i2=ψ3(i3)=ψ3(3)=3
i 1 ∗ = ψ 2 ( i 2 ∗ ) = ψ 2 ( 3 ) = 3 {i}_{1}^{*}=\psi_{2}\left(i_{2}^{*}\right)=\psi_{2}(3)=3 i1=ψ2(i2)=ψ2(3)=3


HMM学习算法参考下篇文章

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值