[机器学习] 小傻学HMM:嚼烂HMM

1 基本概念介绍

1.1 HMM

两种算法模型:

  1. 生成式P(x, Y)

     与nlg的生成概念不同
     Y可能是隐变量y=(smeo),可能是回归值,可能是类别. 
     优势:能力强大;缺陷:成本高
     x->y, y->x, x,y
     可以用来采样
     朴素贝叶斯、混合高斯模型GMM、隐马尔科夫模型(HMM)、贝叶斯网络 Sigmoid Belief Networks 、深度信念网络(DBN) 
    
  2. 判别式P(Y|X)
    优势:目标导向,成本低;缺陷:只能解决单一问题
    x->y
    线性回归/逻辑回归(Logistic Regression)、K近邻(KNN)、感知机、神经网络(NN)、支持向量机(SVM)、决策树、最大熵模型(maximum entropy model, MaxEnt)、高斯过程(Gaussian Process)、条件随机场(CRF)、boosting方法

马尔可夫链(Markov link):一种特殊的随机过程,其随机性只与当前状态有关,与过往已发生的状态和将来可能发生的状态都无关
隐马尔可夫链(hidden Markov method):用来描述一个变化状态是隐藏的,且是离散的马尔可夫过程(特殊随机过程)。
隐马尔可夫模型(Hidden Markov Model,HMM): 统计模型,描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别。

统计模型:
	是一组数学模型,它包含了一组关于样本数据的假设。统计模型通常以相当理想化的形式表示数据生成过程。
马尔可夫过程(Markov Process):
	一类随机过程。马尔可夫过程是研究离散事件动态系统状态空间的重要方法,它的数学基础是随机过程理论。

1.1.1 参数定义

  1. 隐状态序列: S = s 1 s 2 . . . s n S = s_1s_2...s_n S=s1s2...sn (S: state, 不能观测到的状态)
  2. 观测序列: O = o 1 o 2 . . . o n O = o_1o_2...o_n O=o1o2...on(O: objective, 我们所观测到的状态)
  3. 隐状态集合: H = h 1 , h 2 , . . . , h n H ={ h_1, h_2, ..., h_n} H=h1,h2,...,hn(H: hidden, 就是一系列的隐状态所组成的集合, s i s_i si属于H)
  4. 观测值集合: R = r 1 , r 2 , . . . , r n R ={ r_1, r_2, ..., r_n} R=r1,r2,...,rn(R: Reality,已成事实,观测到啥样就是啥样;一系列的观测状态所组成的集合, o i o_i oi属于R)
  5. 参数 λ = ( π , A , B ) \lambda = (\pi, A, B) λ=(π,A,B)
  • π \pi π : 初始状态概率分布,即第一个隐状态 s 1 s_1 s1为各状态 H = { h 1 , h 2 , . . . h N } H=\{h_1,h_2,...h_N\} H={h1,h2,...hN}的概率分别是多少。
  • A 中 的 元 素 a i j A中的元素a_{ij} Aaij : 当前时间点它的状态是 h i h_i hi,下一个时间点变成 h j h_j hj的概率,因为 H H H N N N个元素,所以它是个 N × N N\times N N×N方阵,每一个时间点的转移矩阵都是相同的,此为时间无关性。
  • B 中 元 素 b i k = P ( o t = r k ∣ s t = h i ) = b s t → o t B中元素b_{ik}=P(o_t=r_k|s_t=h_i)=b_{s_t \to o_t} Bbik=P(ot=rkst=hi)=bstot : 一个 N × M N\times M N×M矩阵,隐状态 h i h_i hi到观测值 r k r_k rk的概率,也是与时间先后无关的。

一个例子
在这里插入图片描述

假设我手里有三个不同的骰子。第一个骰子6个面(称这个骰子为D6),每个面(1,2,3,4,5,6)出现的概率是1/6。第二个骰子是个四面体(称这个骰子为D4),每个面(1,2,3,4)出现的概率是1/4。第三个骰子有八个面(称这个骰子为D8),每个面(1,2,3,4,5,6,7,8)出现的概率是1/8。

我们开始掷骰子:
1.)我们先从三个骰子里挑一个,挑到每一个骰子的概率都是1/3。
2.)然后我们掷骰子,得到一个数字,1,2,3,4,5,6,7,8中的一个。不停的重复上述过程,我们会得到一串数字,每个数字都是1,2,3,4,5,6,7,8中的一个。

最后得到这么一串可见的数字称之为可见状态链 (掷骰子10次):1 6 3 5 2 7 3 5 2 4
还有一个隐含状态链,是你用的哪种骰子的序列D6 D8 D8 D6 D4 D8 D6 D6 D4 D8
在这里插入图片描述
在这里插入图片描述

1.2 二个假设

  1. 齐次markov性假设(当前状态至于其前一个状态有关,与观测序列无关): P ( s t + 1 ∣ s 1 s 2 . . . s t ; o 1 o 2 . . . o t ) = P ( s t + 1 ∣ s t ) P(s_{t+1}|s_1s_2...s_t;o_1o_2...o_t)=P(s_{t+1}|s_t) P(st+1s1s2...st;o1o2...ot)=P(st+1st)
  2. 观测独立性假设(观测值至于其隐状态有关,与其他状态无关): P ( o t ∣ s 1 s 2 . . . s t ; o 1 o 2 . . . o t − 1 ) = P ( o t ∣ s t ) P(o_t|s_1s_2...s_t;o_1o_2...o_{t-1})=P(o_t|s_t) P(ots1s2...st;o1o2...ot1)=P(otst)
    假设式为了增加模型泛化能力的先验,也是为了方便求解做出的妥协。

1.3 三种问题

Evaluation概率计算,正向、反向算法
给定𝜆,求𝑝(𝑂|𝜆)
Learning学习,EM算法
已知一个观测序列O,用MLE找出使O概率最大的𝜆
𝜆_𝑀𝐿𝐸=𝑎𝑟𝑔𝑚𝑎𝑥 𝑝(𝑂|𝜆)
Decoding解码,viterbi算法
已知观测序列和参数lambda,求解概率最大的隐藏状态序列
𝐻=𝑎𝑟𝑔𝑚𝑎𝑥 𝑝(𝐻|𝑂,𝜆)

  1. Evaluation, Given λ \lambda λ, 求 P ( O ∣ λ ) P(O|\lambda) P(Oλ), 已知参数 λ \lambda λ,评估一个已经发生的观测序列 O O O的概率,用以判断我们的模型参数是不是准(知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据掷骰子掷出的结果(可见状态链),我想知道掷出这个结果的概率)
  2. Learning, λ \lambda λ, λ M L E = a r g m a x P ( O ∣ λ ) \lambda_{MLE} = arg maxP(O|\lambda) λMLE=argmaxP(Oλ) 已知一个观测序列事实 O O O,找出一组参数 λ \lambda λ使得其概率最大, 用 E M EM EM算法(知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据掷骰子掷出的结果(可见状态链),我想知道每次掷出来的都是哪种骰子(隐含状态链))
  3. Decoding, H ^ = a r g m a x P ( H ∣ O ; λ ) \hat{H}= arg maxP(H|O;\lambda) H^=argmaxP(HO;λ), 已知观察序列和参数,求(反编)哪一串隐序列使得这个事实发生的概率最大,Viterbi算法(动态规划)穷举法(舍弃)(知道骰子有几种(隐含状态数量),不知道每种骰子是什么(转换概率),观测到很多次掷骰子的结果(可见状态链),我想反推出每种骰子是什么(转换概率)。)

2 公式推导

(参考别人,自己进行细化,个别地方进行解释说明)

2.1 question1:Evaluation

针对上述第一个问题,进行公式求解。
给定 λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B) 求 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

P ( O ∣ λ ) = ∑ S H P ( O , S ∣ λ ) = ∑ S H P ( O ∣ S ; λ ) P ( S ∣ λ ) (1) P(O|\lambda) = \sum_{S}^H P(O,S|\lambda) =\sum_{S}^H P(O|S;\lambda)P(S|\lambda) \tag{1} P(Oλ)=SHP(O,Sλ)=SHP(OS;λ)P(Sλ)(1)
S = s 1 s 2 . . . s n S = s_1s_2...s_n S=s1s2...sn,将其带入公式:
P ( S ∣ λ ) = P ( s 1 s 2 . . . s T ∣ λ ) = P ( s T ∣ s 1 s 2 . . . s T − 1 ; λ ) P ( s 1 s 2 . . . s T − 1 ; λ ) P(S|\lambda)=P(s_1s_2...s_T|\lambda)=\color{green}P(s_T|s_1s_2...s_{T-1};\lambda)\color{red}P(s_1s_2...s_{T-1};\lambda) P(Sλ)=P(s1s2...sTλ)=P(sTs1s2...sT1;λ)P(s1s2...sT1;λ)
计算至T-1,进行迭代:
P ( s 1 s 2 . . . s T − 1 ; λ ) = P ( s T − 1 ∣ s 1 s 2 . . . s T − 2 ; λ ) P ( s 1 s 2 . . . s T − 2 ; λ ) P(s_1s_2...s_{T-1};\lambda)=\color{green}P(s_{T-1}|s_1s_2...s_{T-2};\lambda)\color{red}P(s_1s_2...s_{T-2};\lambda) P(s1s2...sT1;λ)=P(sT1s1s2...sT2;λ)P(s1s2...sT2;λ)
P ( s 1 s 2 . . . s T − 2 ; λ ) = P ( s T − 2 ∣ s 1 s 2 . . . s T − 3 ; λ ) P ( s 1 s 2 . . . s T − 3 ; λ ) P(s_1s_2...s_{T-2};\lambda)=\color{green}P(s_{T-2}|s_1s_2...s_{T-3};\lambda)\color{red}P(s_1s_2...s_{T-3};\lambda) P(s1s2...sT2;λ)=P(sT2s1s2...sT3;λ)P(s1s2...sT3;λ)
. . . ... ...
P ( s 2 ; λ ) = P ( s 2 ∣ s 1 ; λ ) P ( s 1 ; λ ) P(s_2;\lambda)=\color{green}P(s_2|s_1;\lambda)\color{red}P(s_1;\lambda) P(s2;λ)=P(s2s1;λ)P(s1;λ)
又由齐次markov性假设(当前状态至于其前一个状态有关,与观测序列无关):
P ( s t + 1 ∣ s 1 s 2 . . . s t ; o 1 o 2 . . . o t ) = P ( s t + 1 ∣ s t ) P(s_{t+1}|s_1s_2...s_t;o_1o_2...o_t)=P(s_{t+1}|s_t) P(st+1s1s2...st;o1o2...ot)=P(st+1st),故上式将后式逐渐向前式中进行带入,有

P ( S ∣ λ ) = P ( s 1 s 2 . . . s T ∣ λ ) = P ( s T ∣ s 1 s 2 . . . s T − 1 ; λ ) P ( s T − 1 ∣ s 1 s 2 . . . s T − 2 ; λ ) P ( s T − 2 ∣ s 1 s 2 . . . s T − 3 ; λ ) . . . P ( s 2 ∣ s 1 ; λ ) = P ( s T ∣ s T − 1 ; λ ) P ( s T − 1 ∣ s T − 2 ; λ ) P ( s T − 2 ∣ s T − 3 ; λ ) . . . P ( s 2 ∣ s 1 ; λ ) = ∏ t = 2 T p ( s t ∣ s t − 1 , λ ) P ( s 2 ∣ s 1 ; λ ) ;    s t ∈ H P(S|\lambda)=P(s_1s_2...s_T|\lambda)=\color{green}P(s_T|s_1s_2...s_{T-1};\lambda) P(s_{T-1}|s_1s_2...s_{T-2};\lambda) P(s_{T-2}|s_1s_2...s_{T-3};\lambda)... \color{red}P(s_2|s_1;\lambda)\\ \color{black}= P(s_T|s_{T-1};\lambda) P(s_{T-1}|s_{T-2};\lambda) P(s_{T-2}|s_{T-3};\lambda)... \color{red}P(s_2|s_1;\lambda)\\ \color{block}=\prod_{t=2}^{T} p(s_t|s_{t-1}, \lambda)\color{red}P(s_2|s_1;\lambda);\; s_t \in H P(Sλ)=P(s1s2...sTλ)=P(sTs1s2...sT1;λ)P(sT1s1s2...sT2;λ)P(sT2s1s2...sT3;λ)...P(s2s1;λ)=P(sTsT1;λ)P(sT1sT2;λ)P(sT2sT3;λ)...P(s2s1;λ)=t=2Tp(stst1,λ)P(s2s1;λ);stH

= ∏ t = 2 T p ( s t ∣ s t − 1 , λ ) P ( s 1 ; λ ) = π ( s 1 ) ∏ t = 2 T a s t − 1 s t ,      s t ∈ H (2) =\prod_{t=2}^{T} p(s_t|s_{t-1}, \lambda)\color{red}P(s_1;\lambda) =\pi(s_1)\prod_{t=2}^{T} a_{s_{t-1}s_{t}}, \;\; s_t \in H \tag{2} =t=2Tp(stst1,λ)P(s1;λ)=π(s1)t=2Tast1st,stH(2)
根据定义, P ( O ∣ S ; λ ) P(O|S;\lambda) P(OS;λ)为给定参数 λ \lambda λ,隐藏状态S时观测变量值,可直接得到:
P ( O ∣ S ; λ ) = ∏ t = 1 T b s t → o t ,      s t ∈ H , o t ∈ R (3) P(O|S;\lambda)=\prod_{t=1}^T b_{s_t \to o_t}, \; \; s_t \in H , o_t \in R \tag{3} P(OS;λ)=t=1Tbstot,stH,otR(3)

所以
P ( O ∣ λ ) = ∑ s 1 H ∑ s 2 H . . . ∑ s T H ⏟ O=N的T次方 π ( s 1 ) ∏ t = 1 T - 1 a s t s t + 1 ∏ t = 1 T b s t → o t o ( T N T ) (4) P(O|\lambda)=\underbrace{\sum_{s_1}^H\sum_{s_2}^H...\sum_{s_T}^H}_{\text{O=N的T次方}} \pi(s_1) \prod_{t=1}^{T-1} a_{s_ts_{t+1}}\prod_{t=1}^T b_{s_t \to o_t} \tag{4}\\ o(TN^T) P(Oλ)=O=NT次方 s1Hs2H...sTHπ(s1)t=1T1astst+1t=1Tbstoto(TNT)(4)

2.1.1前向算法

前向概率: 给定隐马尔可夫模型 λ \lambda λ,定义到t时刻部分观测序列为 0 1 , o 2 , . . . , o t 0_1, o_2, ..., o_t 01,o2,...,ot,且状态为 q i q_i qi的概率为前向概率,记为
α t ( i ) = P ( o 1 . . . o t , s t = h i ∣ λ ) (5) \alpha_{t}(i)=P(o_1...o_t,s_t=h_i|\lambda) \tag{5} αt(i)=P(o1...ot,st=hiλ)(5)
则可递推求得前向概率 α t ( i ) \alpha_{t}(i) αt(i)及观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)。即给定了模型参数,给定时刻t的状态,此为概率进行计算。
α 1 ( i ) = P ( o 1 , s 1 = h i ∣ λ ) = P ( o 1 ∣ s 1 = h i ) P ( s 1 = h i ) = b h i → o 1 π ( s 1 = h i ) α T ( i ) = P ( O , s T = h i ∣ λ ) (6) \tag{6} \alpha_{1}(i)=P(o_1,s_1=h_i|\lambda)=P(o_1|s_1=h_i)P(s_1=h_i)\\ =b_{h_i\to o_1}\pi(s_1=h_i) \\ \alpha_{T}(i)=P(O,s_T=h_i|\lambda) α1(i)=P(o1,s1=hiλ)=P(o1s1=hi)P(s1=hi)=bhio1π(s1=hi)αT(i)=P(O,sT=hiλ)(6)

P ( O ∣ λ ) = ∑ i = 1 N P ( O , S T = h i ∣ λ ) = ∑ i = 1 N α T ( i ) (7) \tag{7} P(O|\lambda) = \sum_{i=1}^N P(O,S_T=h_i|\lambda)\\ =\sum_{i=1}^N \alpha_{T}(i) P(Oλ)=i=1NP(O,ST=hiλ)=i=1NαT(i)(7)
展开
α t + 1 ( j ) = P ( o 1 . . . o t o t + 1 , s t + 1 = h j ∣ λ ) = ∑ i = 1 N P ( o 1 . . . o t o t + 1 , s t = h i s t + 1 = h j ∣ λ ) = ∑ i = 1 N P ( o t + 1 ∣ o 1 . . . o t , s t = h i s t + 1 = h j ; λ ) P ( o 1 . . . o t , s t = h i s t + 1 = h j ; λ ) = ∑ i = 1 N P ( o t + 1 ∣ s t + 1 = h j ) P ( o 1 . . . o t , s t = h i s t + 1 = h j ; λ ) = ∑ i = 1 N P ( o t + 1 ∣ s t + 1 = h j ) P ( s t + 1 = h j ∣ s t = h i ; λ ) P ( o 1 . . . o t , s t = h i ; λ ) = ∑ i = 1 N b h j → o t + 1 a i j α t ( i ) (8) \tag{8} \alpha_{t+1}(j)=P(o_1...o_to_{t+1},s_{t+1}=h_j|\lambda) \\ =\sum_{i=1}^N P(o_1...o_to_{t+1},s_t=h_i s_{t+1}=h_j|\lambda) \\ =\sum_{i=1}^N P(o_{t+1}|o_1...o_t,s_t=h_i s_{t+1}=h_j;\lambda) P(o_1...o_t,s_t=h_i s_{t+1}=h_j;\lambda) \\ =\sum_{i=1}^N P(o_{t+1}|s_{t+1}=h_j) P(o_1...o_t,s_t=h_i s_{t+1}=h_j;\lambda) \\ =\sum_{i=1}^N P(o_{t+1}|s_{t+1}=h_j) P(s_{t+1}=h_j|s_t=h_i;\lambda) P(o_1...o_t,s_t=h_i;\lambda) \\ =\sum_{i=1}^N b_{h_j \to o_{t+1}} a_{ij} \alpha_{t}(i) αt+1(j)=P(o1...otot+1,st+1=hjλ)=i=1NP(o1...otot+1,st=hist+1=hjλ)=i=1NP(ot+1o1...ot,st=hist+1=hj;λ)P(o1...ot,st=hist+1=hj;λ)=i=1NP(ot+1st+1=hj)P(o1...ot,st=hist+1=hj;λ)=i=1NP(ot+1st+1=hj)P(st+1=hjst=hi;λ)P(o1...ot,st=hi;λ)=i=1Nbhjot+1aijαt(i)(8)

2.1.2 计算过程:

  • step1: 计算 α 1 ( i )      f r o m      i = 1 → N \alpha_{1}(i) \; \; from \;\; i=1 \to N α1(i)fromi=1N 依据公式 ( 6 ) (6) (6)
  • step2: 计算 α 2 ( j )      f r o m      j = 1 → N \alpha_{2}(j) \; \; from \;\; j=1 \to N α2(j)fromj=1N 依据step1 和公式 ( 8 ) (8) (8)
  • …依据上一步和公式 ( 8 ) (8) (8)
  • stepT: 计算 α T ( k )      f r o m      k = 1 → N \alpha_{T}(k) \; \; from \;\; k=1 \to N αT(k)fromk=1N 依据上一步和公式 ( 8 ) (8) (8)
  • finally 依公式 ( 7 ) (7) (7) P ( O ∣ λ ) P(O∣\lambda) P(Oλ)

2.2 后向算法

给定 λ = ( π , A , B ) \lambda=(\pi,A,B) λ=(π,A,B) 求 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

若记
β t ( i ) = P ( o t + 1 . . . o T ∣ s t = h i ; λ ) (9) \tag{9} \beta_{t}(i) = P(o_{t+1}...o_T|s_t=h_i;\lambda) βt(i)=P(ot+1...oTst=hi;λ)(9)
则有
β 1 ( i ) = P ( o 2 . . . o T ∣ s 1 = h i ; λ ) (10) \tag{10} \beta_{1}(i) = P(o_2...o_T|s_1=h_i;\lambda) β1(i)=P(o2...oTs1=hi;λ)(10)
同时
β T − 1 ( i ) = P ( o T ∣ s T − 1 = h i ; λ ) = ∑ j = 1 N P ( o T , s T = h j ∣ s T − 1 = h i ; λ ) = ∑ j = 1 N P ( o T ∣ s T = h j , s T − 1 = h i ; λ ) P ( s T = h j ∣ s T − 1 = h i ; λ ) = ∑ j = 1 N P ( o T ∣ s T = h j , s T − 1 = h i ; λ ) a i j = ∑ j = 1 N b j → o T a i j (11) \tag{11} \beta_{T-1}(i)=P(o_T|s_{T-1}=h_i;\lambda) \\ =\sum_{j=1}^N P(o_T,s_T=h_j|s_{T-1}=h_i;\lambda) \\ =\sum_{j=1}^N P(o_T|s_T=h_j,s_{T-1}=h_i;\lambda) P(s_T=h_j|s_{T-1}=h_i;\lambda) \\ =\sum_{j=1}^N P(o_T|s_T=h_j,s_{T-1}=h_i;\lambda) a_{ij} \\ =\sum_{j=1}^N b_{j\to o_T} a_{ij} βT1(i)=P(oTsT1=hi;λ)=j=1NP(oT,sT=hjsT1=hi;λ)=j=1NP(oTsT=hj,sT1=hi;λ)P(sT=hjsT1=hi;λ)=j=1NP(oTsT=hj,sT1=hi;λ)aij=j=1NbjoTaij(11)
现在我们列出递推式 β t \beta_t βt β t + 1 \beta_{t+1} βt+1的关系
β t ( i ) = P ( o t + 1 . . . o T ∣ s t = h i ; λ ) = ∑ j = 1 N P ( o t + 1 . . . o T , s t + 1 = h j ∣ s t = h i ; λ ) = ∑ j = 1 N P ( o t + 1 ∣ o t + 2 . . . o T , s t + 1 = h j , s t = h i ; λ ) P ( o t + 2 . . . o T , s t + 1 = h j ∣ s t = h i ; λ ) = ∑ j = 1 N b j → o t + 1 P ( o t + 2 . . . o T ∣ s t + 1 = h j , s t = h i ) P ( s t + 1 = h j ∣ s t = h i ) 这 一 步 两 个 状 态 作 为 条 件 不 能 直 接 把 s t 去 掉 。 但 考 虑 到 a − > b − > c , 知 道 了 b 就 中 断 了 a 与 c 的 联 系 , a c 相 当 于 互 相 独 立 了 。 则 可 以 去 掉 s t = ∑ j = 1 N b j → o t + 1 β t + 1 ( j ) a i j (12) \tag{12} \beta_{t}(i)=P(o_{t+1}...o_T|s_t=h_i;\lambda) \\ =\sum_{j=1}^N P(o_{t+1}...o_T,s_{t+1}=h_j|s_t=h_i;\lambda) \\ =\sum_{j=1}^N P(o_{t+1}|o_{t+2}...o_T,s_{t+1}=h_j,s_t=h_i;\lambda) P(o_{t+2}...o_T,s_{t+1}=h_j|s_t=h_i;\lambda) \\ =\sum_{j=1}^N b_{j \to o_{t+1}} P(o_{t+2}...o_T|s_{t+1}=h_j,s_t=h_i) P(s_{t+1}=h_j|s_t=h_i) \\ 这一步两个状态作为条件不能直接把s_{t}去掉。\\但考虑到a->b->c,知道了b就中断了a与c的联系,ac相当于互相独立了。则可以去掉s_t\\ =\sum_{j=1}^N b_{j \to o_{t+1}} \beta_{t+1}(j) a_{ij} βt(i)=P(ot+1...oTst=hi;λ)=j=1NP(ot+1...oT,st+1=hjst=hi;λ)=j=1NP(ot+1ot+2...oT,st+1=hj,st=hi;λ)P(ot+2...oT,st+1=hjst=hi;λ)=j=1Nbjot+1P(ot+2...oTst+1=hj,st=hi)P(st+1=hjst=hi)sta>b>cbacacst=j=1Nbjot+1βt+1(j)aij(12)
而所求为
P ( O ∣ λ ) = P ( o 1 . . . o T ∣ λ ) = ∑ i = 1 N P ( o 1 . . . o T , s 1 = h i ; λ ) = ∑ i = 1 N P ( o 1 . . . o T ∣ s 1 = h i ; λ ) P ( s 1 = h i ) = ∑ i = 1 N P ( o 1 . . . o T ∣ s 1 = h i ; λ ) π ( s 1 ) = ∑ i = 1 N P ( o 1 ∣ o 2 . . . o T , s 1 = h i ; λ ) P ( o 2 . . . o T , s 1 = h i ; λ ) π ( s 1 ) = ∑ i = 1 N P ( o 1 ∣ s 1 = h i ) β 1 ( i ) π ( s 1 = h i ) = ∑ i = 1 N b s 1 = h i → o 1 β 1 ( i ) π ( s 1 = h i ) (13) \tag{13} P(O|\lambda)=P(o_1...o_T|\lambda) \\ =\sum_{i=1}^N P(o_1...o_T,s_1=h_i;\lambda) \\ =\sum_{i=1}^N P(o_1...o_T|s_1=h_i;\lambda)P(s_1=h_i) \\ =\sum_{i=1}^N P(o_1...o_T|s_1=h_i;\lambda)\pi(s_1) \\ =\sum_{i=1}^N P(o_1|o_2...o_T,s_1=h_i;\lambda)P(o_2...o_T,s_1=h_i;\lambda)\pi(s_1) \\ =\sum_{i=1}^N P(o_1 | s_1=h_i)\beta_1(i) \pi(s_1=h_i) \\ =\sum_{i=1}^N b_{s_1=h_i \to o_1} \beta_1(i)\pi(s_1=h_i) P(Oλ)=P(o1...oTλ)=i=1NP(o1...oT,s1=hi;λ)=i=1NP(o1...oTs1=hi;λ)P(s1=hi)=i=1NP(o1...oTs1=hi;λ)π(s1)=i=1NP(o1o2...oT,s1=hi;λ)P(o2...oT,s1=hi;λ)π(s1)=i=1NP(o1s1=hi)β1(i)π(s1=hi)=i=1Nbs1=hio1β1(i)π(s1=hi)(13)

计算过程:
  • step1: 计算 β T − 1 ( i )      f r o m      i = 1 → N \beta_{T-1}(i) \; \; from \;\; i=1 \to N βT1(i)fromi=1N 依据公式 ( 11 ) (11) (11)
  • step2: 计算 β T − 2 ( j )      f r o m      j = 1 → N \beta_{T-2}(j) \; \; from \;\; j=1 \to N βT2(j)fromj=1N 依据step1 和公式 ( 12 ) (12) (12)
  • …依据上一步和公式 ( 12 ) (12) (12)
  • stepT-1: 计算 β 1 ( k )      f r o m      k = 1 → N \beta_{1}(k) \; \; from \;\; k=1 \to N β1(k)fromk=1N 依据上一步和公式 ( 12 ) (12) (12)
  • finally 依公式 ( 13 ) (13) (13) P ( O ∣ λ ) P(O∣\lambda) P(Oλ)

Learning 问题

EM算法
θ t + 1 = argmax ⁡ θ ∫ z l o g P ( X , Z ∣ θ ) P ( Z ∣ X , θ t ) d z (14) \tag{14} \theta^{t+1}=\underset{\theta}{\operatorname{argmax}} \int_{z} log P(X,Z|\theta) P(Z|X,\theta^t)dz θt+1=θargmaxzlogP(X,Zθ)P(ZX,θt)dz(14)
对应到HMM的参数 λ = ( π , A , B ) \lambda=(\pi, A, B) λ=(π,A,B)
λ t + 1 = argmax ⁡ λ ∑ S l o g P ( O , S ∣ λ ) P ( S ∣ O , λ t ) (15) \tag{15} \lambda^{t+1}=\underset{\lambda}{\operatorname{argmax}} \sum_{S} log P(O,S|\lambda) P(S|O,\lambda^t) λt+1=λargmaxSlogP(O,Sλ)P(SO,λt)(15)
又因为
P ( S ∣ O , λ t ) = P ( S , O ∣ λ t ) P ( O , λ t ) P(S|O,\lambda^t)=\frac{P(S,O|\lambda^t)}{P(O,\lambda^t)} P(SO,λt)=P(O,λt)P(S,Oλt)
中分母 P ( O , λ t ) P(O,\lambda^t) P(O,λt)是个定值,对 ( 15 ) (15) (15)不影响,所以目标可变为
λ t + 1 = argmax ⁡ λ ∑ S l o g P ( O , S ∣ λ ) P ( S , O ∣ λ t ) (16) \tag{16} \lambda^{t+1}=\underset{\lambda}{\operatorname{argmax}} \sum_{S} log P(O,S|\lambda) P(S,O|\lambda^t) λt+1=λargmaxSlogP(O,Sλ)P(S,Oλt)(16)
所以我们可以定义目标函数为:
f ( λ , λ t ) = ∑ S log ⁡ P ( O , S ∣ λ ) P ( S , O ∣ λ t ) 代 入 ( 4 ) 式   P ( O , S ∣ λ ) = π ( s 1 ) ∏ t = 1 T - 1 a s t s t + 1 ∏ t = 1 T b s t → o t = ∑ S [ ( l o g π ( s 1 ) + ∑ t = 1 T - 1 l o g a s t s t + 1 + ∑ t = 1 T l o g b s t → o t ) P ( S , O ∣ λ t ) ] (17) \tag{17} f(\lambda, \lambda^t)=\sum_{S} \log P(O,S|\lambda) P(S,O|\lambda^t) \\ 代入(4)式 P(O,S|\lambda)=\pi(s_1) \prod_{t=1}^{T-1} a_{s_ts_{t+1}}\prod_{t=1}^T b_{s_t \to o_t} \\ =\sum_{S} [(log \pi(s_1) + \bcancel{\sum_{t=1}^{T-1} log a_{s_ts_{t+1}}}+ \bcancel{\sum_{t=1}^T log b_{s_t \to o_t}})P(S,O|\lambda^t)] f(λ,λt)=SlogP(O,Sλ)P(S,Oλt)(4) P(O,Sλ)=π(s1)t=1T1astst+1t=1Tbstot=S[(logπ(s1)+t=1T1logastst+1 +t=1Tlogbstot )P(S,Oλt)](17)
为了简便计算,我们先只考虑 π ( s 1 ) \pi(s_1) π(s1), 公式 ( 17 ) (17) (17)可进一步简化为:
∑ S [ l o g π ( s 1 ) P ( S , O ∣ λ t ) ] = ∑ s 1 . . . ∑ s T [ l o g π ( s 1 ) P ( O , s 1 . . . s T ∣ λ t ) ] s 2 . . . s T 与 π 没 关 系 , 所 以 ∑ s 2... N 相 当 于 求 P ( O , S ) 的 边 缘 概 率 : P ( O , s 1 ) = ∑ s 2... N P ( O , s 1 . . . s N ) 故 = ∑ s 1 [ l o g π ( s 1 ) P ( O , s 1 ∣ λ t ) ] = ∑ h i , i = 1 N [ l o g π ( s 1 = h i ) P ( O , s 1 = h i ∣ λ t ) ] \sum_{S} [log \pi(s_1)P(S,O|\lambda^t)] \\ =\sum_{s_1}...\sum_{s_T} [log \pi(s_1)P(O,s_1...s_T|\lambda^t)] \\ s_2...s_T与\pi没关系,所以\sum_{s_{2...N}}相当于求P(O,S)的边缘概率:P(O,s_1)=\sum_{s_{2...N}}P(O,s_1...s_N)\\ 故=\sum_{s_1} [log \pi(s_1)P(O,s_1|\lambda^t)] \\ =\sum_{h_i,i=1}^N [log \pi(s_1=h_i)P(O,s_1=h_i|\lambda^t)] S[logπ(s1)P(S,Oλt)]=s1...sT[logπ(s1)P(O,s1...sTλt)]s2...sTπs2...NP(O,S)P(O,s1)=s2...NP(O,s1...sN)=s1[logπ(s1)P(O,s1λt)]=hi,i=1N[logπ(s1=hi)P(O,s1=hiλt)]
问题转化为约束条件下的极值问题:
{ ∑ i = 1 N [ l o g π ( s 1 = h i ) P ( O , s 1 = h i ∣ λ t ) ] s . t      ∑ i = 1 N π ( s 1 = h i ) = 1 \begin{cases} \sum_{i=1}^N [log \pi(s_1=h_i)P(O,s_1=h_i|\lambda^t)] \\ s.t \;\; \sum_{i=1}^N \pi(s_1=h_i)=1 \end{cases} {i=1N[logπ(s1=hi)P(O,s1=hiλt)]s.ti=1Nπ(s1=hi)=1
利用Lagrange乘子法
L ( π , η ) = ∑ i = 1 N [ l o g π ( s 1 = h i ) P ( O , s 1 = h i ∣ λ t ) ] + η ( ∑ i = 1 N π ( s 1 = h i ) − 1 ) (19) \tag{19} L(\pi, \eta)=\sum_{i=1}^N [log \pi(s_1=h_i)P(O,s_1=h_i|\lambda^t)] + \eta(\sum_{i=1}^N \pi(s_1=h_i)-1) L(π,η)=i=1N[logπ(s1=hi)P(O,s1=hiλt)]+η(i=1Nπ(s1=hi)1)(19)

∂ L ∂ π i = 1 π i P ( O , s 1 = h i ∣ λ t ) + η = 0 (20) \tag{20} \frac{\partial L}{\partial \pi_i}=\frac{1}{\pi_i}P(O,s_1=h_i|\lambda^t) + \eta =0 πiL=πi1P(O,s1=hiλt)+η=0(20)

两边乘以 π i \pi_i πi 再把所有 π i \pi_i πi进行求和得:
∑ i = 1 N P ( O , s 1 = h i ∣ λ t ) + η = 0 η = − ∑ i = 1 N P ( O , s 1 = h i ∣ λ t ) \sum_{i=1}^N P(O,s_1=h_i|\lambda^t) + \eta =0 \eta = -\sum_{i=1}^N P(O,s_1=h_i|\lambda^t) i=1NP(O,s1=hiλt)+η=0η=i=1NP(O,s1=hiλt)代入(20)得
π i = P ( O , s 1 = h i ∣ λ t ) ∑ i = 1 N P ( O , s 1 = h i ∣ λ t ) \pi_i =\frac{P(O,s_1=h_i|\lambda^t)}{\sum_{i=1}^N P(O,s_1=h_i|\lambda^t)} πi=i=1NP(O,s1=hiλt)P(O,s1=hiλt)
最终得
π i t + 1 = P ( O , s 1 = h i ∣ λ t ) P ( O ∣ λ t ) \pi_i^{t+1} =\frac{P(O,s_1=h_i|\lambda^t)}{P(O|\lambda^t)} πit+1=P(Oλt)P(O,s1=hiλt)
PS:这里如果真实求值,则依然使用前向后向算法,只是把第一个隐藏状态做了限制。

∑ I ( ∑ t = 1 T − 1 log ⁡ a i t i t + 1 ) p ( O , I ∣ λ − ) = ∑ i = 1 N ∑ j = 1 N ∑ t = 1 T − 1 a i j p ( O , i t = i , i t + 1 = j ∣ λ − ) ∑ j = 1 N a i j = 1 a i j = ∑ t = 1 T − 1 p ( O , i t = i , i t + 1 = j ∣ λ − ) ∑ t = 1 T − 1 p ( O , i t = i ∣ λ − ) \sum_I(\sum_{t=1}^{T-1}\log a_{i_ti_{t+1}})p(O,I|\lambda^-)=\sum_{i=1}^N\sum_{j=1}^N\sum_{t=1}^{T-1}a_{ij}p(O,i_t=i,i_{t+1}=j|\lambda^-)\\ \sum_{j=1}^N a_{ij}=1\\ a_{ij}=\frac {\sum_{t=1}^{T-1}p(O,i_t=i,i_{t+1}=j|\lambda^-)}{\sum_{t=1}^{T-1}p(O,i_t=i|\lambda^-)} I(t=1T1logaitit+1)p(O,Iλ)=i=1Nj=1Nt=1T1aijp(O,it=i,it+1=jλ)j=1Naij=1aij=t=1T1p(O,it=iλ)t=1T1p(O,it=i,it+1=jλ)

b j ( k ) = ∑ t = 1 T p ( O , i t = j ∣ λ − ) I ( o t = v k ) ∑ t = 1 T p ( O , i t = i ∣ λ − ) b_j(k)=\frac {\sum_{t=1}^{T}p(O,i_t=j|\lambda^-)I(o_t=v_k)}{\sum_{t=1}^{T}p(O,i_t=i|\lambda^-)} bj(k)=t=1Tp(O,it=iλ)t=1Tp(O,it=jλ)I(ot=vk)

发射概率b,每个隐藏状态对应K个值,对b_k求导时,只有o_t=v_k时才不等于0。

hmm的em算法是无监督的,如果有标注,那么直接使用统计即可得出参数

Decoding 问题

Viterbi算法

类似动态规划思想,求出每个子序列的最大值进而逐步得到整个序列发生的最大值。它相比穷举法对时间复杂度有很大的改进。

对于一个已经发生的观察序列 O = o 1 o 2 . . . o T O=o_1o_2...o_T O=o1o2...oT, 要找到某一隐序列 s 1 s 2 . . . s T , s i ∈ H s_1s_2...s_T, s_i \in H s1s2...sT,siH 使发生的概率最大

  • 穷举法,每一个 s i s_i si都可以有 N N N种可能,共有 N T N^T NT种序列,根据参数,算出每一种序列的发观事实的概率,取最大的。
  • Viterbi 算法, o 1 o_1 o1找出最大概率对应的 s 1 s_1 s1,固定! s 1 → s 2 = h i → o 2 s_1 \to s_2=h_i \to o_2 s1s2=hio2选一条最大的固定, s 1 s 2 → s 3 = h i → o 3 s_1s_2\to s_3=h_i \to o_3 s1s2s3=hio3选一条最大的,这样就有 T ∗ N T*N TN的计算复杂度。

P ( S ∣ O , λ ) S = s 1 s 2 s 3 . . . s T O = o 1 o 2 o 3 . . . o T (21) \tag{21} P(S|O,\lambda) \\ S=s_1s_2s_3...s_T \\ O=o_1o_2o_3...o_T P(SO,λ)S=s1s2s3...sTO=o1o2o3...oT(21)
首先定义
δ t ( i ) = max ⁡ s 1 s 2 . . . s t P ( s t = h i , . . . s 2 s 1 , o 1 o 2 . . . o t ∣ λ ) \delta_{t} (i) = \underset{s_1s_2...s_{t}}{\operatorname{max}} P(s_t=h_i,...s_2s_1,o_1o_2...o_t|\lambda) δt(i)=s1s2...stmaxP(st=hi,...s2s1,o1o2...otλ)
表示 t t t时刻,隐状态 s t = h i s_t=h_i st=hi,为最符合已发生事实的概率标记,

则有
δ t + 1 ( i ) = max ⁡ s 1 . . . s t + 1 p ( s t + 1 = h i , s 1 . . . s t , o 1 . . o t + 1 ) = max ⁡ s 1 . . . s t + 1 p ( o t + 1 ∣ s 1 . . . s t + 1 , o 1 . . o t ) p ( s 1 . . . s t + 1 , o 1 . . o t ) = max ⁡ s 1 . . . s t + 1 p ( o t + 1 ∣ s t + 1 ) p ( s t + 1 ∣ s t , s 1 . . s t − 1 , o 1 . . o t ) p ( s 1 . . . s t , o 1 . . o t ) = max ⁡ s 1 . . . s t + 1 p ( o t + 1 ∣ s t + 1 ) p ( s t + 1 ∣ s t ) p ( s 1 . . . s t , o 1 . . o t ) = max ⁡ j = 1 N θ t ( j ) a j i b s i o t + 1 \delta_{t+1} (i) =\max_{s_1...s_{t+1}}p(s_{t+1}=h_i,s_1...s_t,o_1..o_{t+1})\\ =\max_{s_1...s_{t+1}}p(o_{t+1}|s_1...s_{t+1},o_1..o_t)p(s_1...s_{t+1},o_1..o_t)\\ =\max_{s_1...s_{t+1}}p(o_{t+1}|s_{t+1})p(s_{t+1}|s_t,s_1..s_{t-1},o_1..o_t)p(s_1...s_t,o_1..o_t)\\ =\max_{s_1...s_{t+1}}p(o_{t+1}|s_{t+1})p(s_{t+1}|s_t)p(s_1...s_t,o_1..o_t)\\ =\max_{j=1}^N \theta_t(j)a_{ji}b_{s_io_{t+1}} δt+1(i)=s1...st+1maxp(st+1=hi,s1...st,o1..ot+1)=s1...st+1maxp(ot+1s1...st+1,o1..ot)p(s1...st+1,o1..ot)=s1...st+1maxp(ot+1st+1)p(st+1st,s1..st1,o1..ot)p(s1...st,o1..ot)=s1...st+1maxp(ot+1st+1)p(st+1st)p(s1...st,o1..ot)=j=1maxNθt(j)ajibsiot+1

δ 1 ( i ) = max ⁡ s 1 P ( s 1 = h i , o 1 ) \delta_{1}(i)={\max_{s_1}}P(s_1=h_i,o_1) δ1(i)=s1maxP(s1=hi,o1)

φ ( t ) = arg ⁡ max ⁡ 1 < = i < = N δ t ( i ) = i \varphi(t)=\arg \max_{1<=i<=N} \delta_t (i)=i φ(t)=arg1<=i<=Nmaxδt(i)=i
所以有
φ ( 1 ) φ ( 2 ) . . . φ ( T ) = i n d e x ( S ) = max ⁡ i n d e x ( S ) P ( S ∣ O , λ ) \varphi(1)\varphi(2)...\varphi(T) = index(S) = \underset{index(S)}{\operatorname{max}}P(S|O,\lambda) φ(1)φ(2)...φ(T)=index(S)=index(S)maxP(SO,λ)

计算步骤由 1 , 2 , . . . T 1,2,...T 1,2,...T即解码的隐状态序列,这种方法也叫Viterbi算法

References

  1. 统计学习方法(李航)
  2. 如何用简单易懂的例子解释隐马尔可夫模型?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值