HMM-读书笔记

news/2024/11/28 23:37:43/

信息提取基础

MM

马卡洛夫链(Markov chain)是处理一类随机过程,这些过程包含最少量的内存,但实际上并不是无记忆的。下面,我们将处理离散随机变量和有限马尔可夫链。令 X1, X2, … , Xn, … 为随机变量序列,它们的值为同样有限字母表中的值 A = { 1, 2, … , c}。如果没有别的条件,那么贝叶斯公式适用:
马卡洛夫链公式
我们可以看出这是用联合概率密度公式推导来的:
P(A, B)=P(A|B) * P(B)=P(B|A) * P(A)
P(X1, X2)=P(X2|X1) * P(X1)
P(X1, X2, X3)=P(X3|X1,X2) * P(X1,X2)=P(X3|X1,X2) * P(X2|X1) * P(X1).
以此类推,就能得到公式。
然而,如果我们让这个公式成立:
马卡洛夫链
由此,随机变量形成马尔可夫链,作为结果马尔科夫链变为:
马尔科夫链
这样的一个随机过程就有最简单的记忆: 时间 i 的值仅取决于前一时间的值,而与发生的任何事情无关
在之前。
如果无视时间下标i的值,马尔科夫链是时不变(time invariant)的和齐次(homogeneous)的。
时不变:系统不随时间而变化,输出只由输入的值决定。
齐次:次数相等。
所以我们可以得到以下公式:
马尔科夫链公式
注:x, x’ 都属于之前提到的有限字母表集合中的值。
p(x’|x)被叫做转移函数(transition function),它可以被表示为一个 c x c 的矩阵。这个转移函数必须满足以下条件:
转移函数的条件
我们可以把Xi的值考虑为状态(states),这样马尔科夫链就可以被看作一个用转移函数p(x’|x)表示的在状态之间转移的有限状态过程(finite state process)。如果状态的数量不很大,那么链就可以用图表来表示,如下图所示,是一个状态空间大小为 c = 3的马尔科夫链。图中带有状态转移概率指的箭头表示状态的转换。没有表明的转移概率为0,如p(1|2) = p(2|2) = p(3|3)。
三状态马尔科夫链
对于马尔科夫链的一站式记忆(只保存上一个状态作为输入)的限制其实是有欺骗性的,原则上马尔科夫链能够建模任意复杂程度的过程。比如下面这个例子,我们首先考虑一个记忆长度为k的过程,然后可以得到下面这个公式:
马尔科夫链限制记忆例子
P(Z1,Z2,…,Zn,…)=∏iP(Zi∣Zi−k,Zi−k+1,…,Zi−1)P(Z_1, Z_2, \ldots, Z_n, \ldots) = \prod_{i} P(Z_i \mid Z_{i-k}, Z_{i-k+1}, \ldots, Z_{i-1}) P(Z1,Z2,,Zn,)=iP(ZiZik,Zik+1,,Zi1)

我们可以看出这个过程的当前状态是由上k个状态决定的,现在我们来定义一个新的变量X,让它等于k个Z状态。我们就可以得到下面的公式:X和Z表示的公式
这样我们就可以得到,Zi+1状态可以由Xi状态作为输入得到,这就又变回马尔科夫链了。

HMM

HMM和MM的不同: 隐式马尔科夫链可以在不改变马尔科夫链基本结构的前提下允许随机过程拥有更多的自由度。
隐式马尔科夫链的原理:首先让链的状态产生观察数据,然后隐藏状态序列本身。
因此,我们可以定义:

  1. 一个可以观察到的输出集合:y = {0,1,…,b-1}
  2. 一个状态空间 S = {1,2,…,c} 带有一个单独的不重复初始状态s0。
  3. 一个状态之间的概率分布转移p(s’|s)。
  4. 一个和状态从s转移到状态s’关联的输出观察状态概率分布q(y|s,s’)。
    这样,观察到一个HMM的输出序列 y1, y2, … , yk的可能性为以下公式:
    HMM公式
    P(y1,y2,…,yk)=∑s1,...,sk∏i=1kp(si∣si−1)q(yi∣si−1,si)P(y_1, y_2, \ldots, y_k) = \sum_{s1,...,sk}\prod_{i=1}^{k} p(s_i \mid s_{i-1}) q(y_i \mid s_{i-1}, s_i)P(y1,y2,,yk)=s1,...,ski=1kp(sisi1)q(yisi1,si)
    P(O,s1,s2,...,sT∣λ)=πs1⋅Bs1(O1)⋅∏t=2TAst−1,st⋅Bst(Ot)P(O, s_1, s_2, ..., s_T | \lambda) = \pi_{s_1} \cdot B_{s_1}(O_1) \cdot \prod_{t=2}^T A_{s_{t-1}, s_t} \cdot B_{s_t}(O_t)P(O,s1,s2,...,sTλ)=πs1Bs1(O1)t=2TAst1,stBst(Ot)

下面我们来解析一下这个公式:
首先,p(si∣si−1)p(s_i \mid s_{i-1})p(sisi1) 代表的是状态 si−1s_{i-1}si1 到状态 sis_isi 的可能性, q(yi∣si−1,si)q(y_i \mid s_{i-1}, s_i)q(yisi1,si) 代表的是观察状态概率分布中从状态 si−1s_{i-1}si1 到状态 sis_isi 发生的情况下, 观察状态 yiy_iyi 发生的可能性。所以,∏i=1kp(si∣si−1)q(yi∣si−1,si)\prod_{i=1}^{k} p(s_i \mid s_{i-1}) q(y_i \mid s_{i-1}, s_i)i=1kp(sisi1)q(yisi1,si) 就表示一条隐藏的状态序列发生后,得到观察序列y1,y2,…,yky_1, y_2, \ldots, y_ky1,y2,,yk的可能性是多少,能得到这种观察状态序列的隐藏状态序列可能不止一种,所以把所有可能的状态序列加起来,就得到了当我们拥有这些隐藏状态时生成这个观察序列的可能性。
如果我们看下面这个公式,可能会更清晰一些:

OOO 成为长度为 TTT 的观测序列,QQQ 成为长度为 TTT 的隐藏状态序列。观测序列和隐藏状态序列的联合概率可以表示为:

P(O,Q∣θ)=πq1bq1(O1)∏t=2Taqt−1,qtbqt(Ot)P(O, Q | \theta) = \pi_{q_1} b_{q_1}(O_1) \prod_{t=2}^T a_{q_{t-1}, q_t} b_{q_t}(O_t)P(O,Qθ)=πq1bq1(O1)t=2Taqt1,qtbqt(Ot)

其中,θ=(A,B,π)\theta=(A, B, \pi)θ=(A,B,π) 为HMM参数集,qtq_tqt 是时间 ttt 的隐藏状态,πq1\pi_{q_1}πq1 是开始于隐藏状态 q1q_1q1 的初始概率,aqt−1,qta_{q_{t-1}, q_t}aqt1,qt 是从隐藏状态 qt−1q_{t-1}qt1 转移至隐藏状态 qtq_tqt 的转移概率,bqt(Ot)b_{q_t}(O_t)bqt(Ot) 是在给定隐藏状态 qtq_tqt 的情况下观测到 OtO_tOt 的观测概率。

给定 HMM 模型 θ\thetaθ,观测序列 OOO 的概率可以通过对所有可能的隐藏状态序列进行边缘化计算得到:

P(O∣θ)=∑QP(O,Q∣θ)P(O | \theta) = \sum_{Q} P(O, Q | \theta)P(Oθ)=QP(O,Qθ)

其中,求和是对所有可能的隐藏状态序列 QQQ 进行的。

如果换个思路,将HMM看作是在多个状态对之间的多个转换,每个转换都输出一个不同的观察状态,一个状态转换为其他状态的总可能性为1,就会方便很多。

下面,我们用格架(trellis)图来举个例子:
HMM状态格架图
从图上我们可以看出,状态1,转变为状态1,2,3时,可能会输出观察状态0,从状态1转为状态2时,可能会输出观察状态1。
所以如果我们要输出观察状态序列0110,就会有下图这些可能的路径状态转换序列。
路径状态转移序列格架图

维特比(Viterbi)算法

当我们已知观察序列,想要找到最大可能的路径时会使用这个算法。
首先根据联合概率密度公式可推出:

P(s1,s2,…,sk∣Y1,Y2,…,Yk,s0)=P(s1,s2,…,sk,Y1,Y2,…,Yk∣s0)P(Y1,Y2,…,Yk∣s0)P( s_1, s_2, \dots, s_k\mid Y_1, Y_2, \dots, Y_k, s_0) = \frac{P(s_1, s_2, \dots, s_k, Y_1, Y_2, \dots, Y_k \mid s_0)} {P( Y_1, Y_2, \dots, Y_k \mid s_0)} P(s1,s2,,skY1,Y2,,Yk,s0)=P(Y1,Y2,,Yks0)P(s1,s2,,sk,Y1,Y2,,Yks0)

当我们想找到最大可能的路径时,我们需要找到一个隐藏状态序列s1,s2,…,sks_1, s_2, \dots, s_ks1,s2,,sk来实现最大化分子。
这是我们需要求出每一个时间点的所有状态的可能性,一直算到最后一个时间,得到所有状态的可能性后选择其中最大的状态,向前反推出每个时间点选择的状态,最后就可以得出可能性最大的路径。

维特比算法路径例子图像

例如上面观察序列为0110的图像,加入我们算到最后一个时间发现状态3的可能性最大。我们就可以反推出最大可能性的路径为12323。

空(Null)转移

空转移代表状态发生了变化但是却没有输出观察数据,一般用虚线表示。
下图是一个空转移的例子:

马尔科夫链空转移的例子

令 q(s’ls) 为从 s 到 s’ 的空转移的概率。让r(y, s’ls) 是从 s 到 s’ 的(非空)转换产生输出 y 的概率:
∑y,s′r(y,s∣s′)+∑s′q(s′∣s)=1\sum_{y, s'}r(y, s \mid s') +\sum_{s'}q(s' \mid s) = 1y,sr(y,ss)+sq(ss)=1

HMM的三种情况

  1. 评估:给定HMM模型(初始状态概率,状态转移矩阵,观测概率矩阵),求某一个观察数据序列的概率。
    解答算法:向前算法,向后算法。
    举例:
    有这样一个HMM模型如下图所示:
    HMM向前算法例子
    可以看出HMM模型有三个状态S = {1, 2, 3},有两个输出数据Y = {0, 1}。
    现在给出下面的条件:输出观察数据的转移矩阵和空转移矩阵分别为:
    p(s′∣s)=[121616001334140],q(s′∣s)=[001613013000],s,s′∈Sp(s' | s) = \begin{bmatrix} \frac{1}{2} & \frac{1}{6} & \frac{1}{6} \\ 0 & 0 & \frac{1}{3} \\ \frac{3}{4} & \frac{1}{4} & 0 \end{bmatrix}, \qquad q(s' | s) = \begin{bmatrix} 0 & 0 & \frac{1}{6} \\ \frac{1}{3} & 0 & \frac{1}{3} \\ 0 & 0 & 0 \end{bmatrix}, \qquad s, s' \in S p(ss)=210436104161310,q(ss)=031000061310,s,sS
    输出观察数据的矩阵转移概率为:
    q(0∣s→s′)=[11210013000],q(1∣s→s′)=[01201123111],q(0 | s \rightarrow s') = \begin{bmatrix} 1 & \frac{1}{2} & 1 \\ 0 & 0 & \frac{1}{3} \\ 0 & 0 & 0 \end{bmatrix}, \qquad q(1 | s \rightarrow s') = \begin{bmatrix} 0 & \frac{1}{2} &0 \\ 1 & 1 & \frac{2}{3} \\ 1 & 1 & 1 \end{bmatrix}, q(0∣ss)=10021001310,q(1∣ss)=01121110321,
    注意:q(1∣s→s′)q(1 | s \rightarrow s')q(1∣ss)就是1−q(0∣s→s′)1-q(0 | s \rightarrow s')1q(0∣ss)。初始状态为s0=1s_0=1s0=1,也就是π={1,0,0}\pi=\{1, 0, 0\}π={1,0,0}
    使用前向算法计算观察序列为0110的可能性。

首先可以画出观察序列的状态格架图:
向前算法例子格架图

然后可以开始计算:
由于空转移是在状态转移的开始阶段发生的,所以要先计算空转移,之后才是观察数据的状态转移。我们使用r(y, s’|s)表示非空输出的状态转移概率,q(s’|s)表示空转移的概率。
初始状态:
α0(1)=1\alpha_0(1)=1α0(1)=1
第一次状态转移:
α1(1)=α0(1)r(0,1∣1)=α0(1)p(1∣1)q(0∣1→1)=1×12×1=12\alpha_1(1)=\alpha_0(1)r(0, 1|1)=\alpha_0(1)p(1|1)q(0 | 1 \rightarrow 1)=1\times\frac{1}{2}\times1=\frac{1}{2}α1(1)=α0(1)r(0,1∣1)=α0(1)p(1∣1)q(0∣11)=1×21×1=21
α1(2)=α0(1)r(0,2∣1)=α0(1)p(2∣1)q(0∣1→2)=1×16×12=112\alpha_1(2)=\alpha_0(1)r(0, 2|1)=\alpha_0(1)p(2|1)q(0 | 1 \rightarrow 2)=1\times\frac{1}{6}\times\frac{1}{2}=\frac{1}{12}α1(2)=α0(1)r(0,2∣1)=α0(1)p(2∣1)q(0∣12)=1×61×21=121
α1(3)=α0(1)r(0,3∣1)=α0(1)p(3∣1)q(0∣1→3)=1×16×1=16\alpha_1(3)=\alpha_0(1)r(0, 3|1)=\alpha_0(1)p(3|1)q(0 | 1 \rightarrow 3)=1\times\frac{1}{6}\times1=\frac{1}{6}α1(3)=α0(1)r(0,3∣1)=α0(1)p(3∣1)q(0∣13)=1×61×1=61
第二次状态转移:
先计算空转移:
α1(2)=α1(2)=112\alpha_1(2)=\alpha_1(2)=\frac{1}{12}α1(2)=α1(2)=121 (没有空转移从别的状态变为状态2)。
α1(1)=α1(1)+α1(2)q(1∣2)=12+112×13=1936\alpha_1(1)=\alpha_1(1)+\alpha_1(2)q(1|2) =\frac{1}{2}+\frac{1}{12}\times\frac{1}{3}=\frac{19}{36}α1(1)=α1(1)+α1(2)q(1∣2)=21+121×31=3619 (空转移从状态2转变为状态1)
α1(3)=α1(3)+α1(1)q(3∣1)+α1(2)q(3∣2)=16+1936×16+112×13=61216\alpha_1(3)=\alpha_1(3)+\alpha_1(1)q(3|1)+\alpha_1(2)q(3|2) =\frac{1}{6}+\frac{19}{36}\times\frac{1}{6}+\frac{1}{12}\times\frac{1}{3}=\frac{61}{216}α1(3)=α1(3)+α1(1)q(3∣1)+α1(2)q(3∣2)=61+3619×61+121×31=21661
观测数据转移:
α2(1)=α1(3)r(1,1∣3)=61216×34×1=0.212\alpha_2(1)=\alpha_1(3)r(1, 1|3)=\frac{61}{216}\times\frac{3}{4}\times1=0.212α2(1)=α1(3)r(1,1∣3)=21661×43×1=0.212
α2(2)=α1(1)r(1,2∣1)+α1(3)r(1,2∣3)=1936×16×12+61216×14×1=0.115\alpha_2(2)=\alpha_1(1)r(1, 2|1)+\alpha_1(3)r(1, 2|3)=\frac{19}{36}\times\frac{1}{6}\times\frac{1}{2}+\frac{61}{216}\times\frac{1}{4}\times1=0.115α2(2)=α1(1)r(1,2∣1)+α1(3)r(1,2∣3)=3619×61×21+21661×41×1=0.115
α2(3)=α1(2)r(1,3∣2)=112×13×23=0.019\alpha_2(3)=\alpha_1(2)r(1, 3|2)=\frac{1}{12}\times\frac{1}{3}\times\frac{2}{3}=0.019α2(3)=α1(2)r(1,3∣2)=121×31×32=0.019
第三次状态转移:
先计算空转移:
α2(2)=α2(2)=0.115\alpha_2(2)=\alpha_2(2)=0.115α2(2)=α2(2)=0.115 (没有空转移从别的状态变为状态2)。
α2(1)=α2(1)+α2(2)q(1∣2)=0.212+0.115×13=0.250\alpha_2(1)=\alpha_2(1)+\alpha_2(2)q(1|2) =0.212+0.115\times\frac{1}{3}=0.250α2(1)=α2(1)+α2(2)q(1∣2)=0.212+0.115×31=0.250
α2(3)=α2(3)+α2(1)q(3∣1)+α2(2)q(3∣2)=0.019+0.250×16+0.115×13=0.099\alpha_2(3)=\alpha_2(3)+\alpha_2(1)q(3|1)+\alpha_2(2)q(3|2) =0.019+0.250\times\frac{1}{6}+0.115\times\frac{1}{3}=0.099α2(3)=α2(3)+α2(1)q(3∣1)+α2(2)q(3∣2)=0.019+0.250×61+0.115×31=0.099
观测数据转移:
α3(1)=α2(3)r(1,1∣3)=0.099×34×1=0.074\alpha_3(1)=\alpha_2(3)r(1, 1|3)=0.099\times\frac{3}{4}\times1=0.074α3(1)=α2(3)r(1,1∣3)=0.099×43×1=0.074
α3(2)=α2(1)r(1,2∣1)+α2(3)r(1,2∣3)=0.250×16×12+0.099×14×1=0.046\alpha_3(2)=\alpha_2(1)r(1, 2|1)+\alpha_2(3)r(1, 2|3)=0.250\times\frac{1}{6}\times\frac{1}{2}+0.099\times\frac{1}{4}\times1=0.046α3(2)=α2(1)r(1,2∣1)+α2(3)r(1,2∣3)=0.250×61×21+0.099×41×1=0.046
注:因为在下一次的状态转移中p(0∣3→1),p(0∣3→2),p(0∣3→3)p(0 | 3 \rightarrow 1), p(0 | 3 \rightarrow 2), p(0 | 3 \rightarrow 3)p(0∣31),p(0∣32),p(0∣33)的值都为0,所以就不计算α3(3)\alpha_3(3)α3(3)的概率。
第四次状态转移:
先计算空转移:
α3(2)=α3(2)=0.046\alpha_3(2)=\alpha_3(2)=0.046α3(2)=α3(2)=0.046 (没有空转移从别的状态变为状态2)。
α3(1)=α3(1)+α3(2)q(1∣2)=0.074+0.046×13=0.089\alpha_3(1)=\alpha_3(1)+\alpha_3(2)q(1|2) =0.074+0.046\times\frac{1}{3}=0.089α3(1)=α3(1)+α3(2)q(1∣2)=0.074+0.046×31=0.089
观测数据转移:
α4(1)=α3(1)r(0,1∣1)=0.089×12×1=0.045\alpha_4(1)=\alpha_3(1)r(0, 1|1)=0.089\times\frac{1}{2}\times1=0.045α4(1)=α3(1)r(0,1∣1)=0.089×21×1=0.045
α4(2)=α3(1)r(0,2∣1)=0.089×16×12=0.007\alpha_4(2)=\alpha_3(1)r(0, 2|1)=0.089\times\frac{1}{6}\times\frac{1}{2}=0.007α4(2)=α3(1)r(0,2∣1)=0.089×61×21=0.007
α4(3)=α3(1)r(0,3∣1)+α3(2)r(0,3∣2)=0.089×16×1+0.046×13×13=0.020\alpha_4(3)=\alpha_3(1)r(0, 3|1)+\alpha_3(2)r(0, 3|2)=0.089\times\frac{1}{6}\times1+0.046\times\frac{1}{3}\times\frac{1}{3}=0.020α4(3)=α3(1)r(0,3∣1)+α3(2)r(0,3∣2)=0.089×61×1+0.046×31×31=0.020

所以我们可以得到观察序列为0110时,边际概率为:
P(y1y2y3y4=0110∣s0=1)=∑sα4=α4(1)+α4(2)+α4(3)=0.045+0.007+0.020=0.072P(y_1y_2y_3y_4=0110|s_0=1)=\sum_{s}\alpha_4=\alpha_4(1)+\alpha_4(2)+\alpha_4(3)=0.045+0.007+0.020=0.072P(y1y2y3y4=0110∣s0=1)=sα4=α4(1)+α4(2)+α4(3)=0.045+0.007+0.020=0.072
注:边际概率为P(A),只和一个变量有关系,所以为所有状态能得到观察数据序列0110的概率之和。根据联合概率密度公式,条件概率,联合概率,和边际概率的关系为:
P(A, B)=P(A|B) * P(B)

  1. 解码:给定HMM模型(初始状态概率,状态转移矩阵,观测概率矩阵),和某一个观察序列,推测最大可能的状态转移路径。
    解答算法:维特比(Viterbi)算法
    还是上一个例子的HMM模型,观察到一个观察序列为0110,求可能性最大的状态转移路径。
    γi(si)=max⁡s1,s2,…,si−1P(s1,s2,…,si,y1,y2,…,yi∣s0)=max⁡si−1p(yi,si∣si−1)max⁡s1,s2,…,si−2P(s1,s2,…,si−1,y1,y2,…,yi∣s0)=max⁡si−1p(yi,si∣si−1)γi−1(si−1)\gamma_i(s_i) = \max_{s_1, s_2, \dots, s_{i-1}}P(s_1, s_2, \dots, s_i, y_1, y_2, \dots, y_i \mid s_0) \\ =\max_{s_{i-1}}p( y_i, s_i \mid s_{i-1}) \max_{s_1, s_2, \dots, s_{i-2}}P(s_1, s_2, \dots, s_{i-1}, y_1, y_2, \dots, y_i \mid s_0) \\ = \max_{s_{i-1}}p( y_i, s_i \mid s_{i-1})\gamma_{i-1}(s_{i-1})γi(si)=maxs1,s2,,si1P(s1,s2,,si,y1,y2,,yis0)=maxsi1p(yi,sisi1)maxs1,s2,,si2P(s1,s2,,si1,y1,y2,,yis0)=maxsi1p(yi,sisi1)γi1(si1)
    所以,γi(s)\gamma_i(s)γi(s)指代的就是每次转移的最大可能性的状态的概率。
    初始状态:
    γ0(1)=1\gamma_0(1)=1γ0(1)=1
    注:(r(0, 2|1) = q(0|1, 2)p(2|1))
    求第一层所有状态的概率:
    γ1(2)=γ0(1)r(0,2∣1)=112\gamma_1(2)=\gamma_0(1)r(0, 2|1)=\frac{1}{12}γ1(2)=γ0(1)r(0,2∣1)=121
    γ1(1)=max⁡{γ0(1)r(0,1∣1),γ1(2)q(1∣2)}=12\gamma_1(1)=\max\{\gamma_0(1)r(0, 1|1), \gamma_1(2)q(1|2)\}=\frac{1}{2}γ1(1)=max{γ0(1)r(0,1∣1),γ1(2)q(1∣2)}=21
    γ1(3)=max⁡{γ0(1)r(0,3∣1),γ1(2)q(3∣2),γ1(1)q(3∣1)}=16\gamma_1(3)=\max\{\gamma_0(1)r(0, 3|1), \gamma_1(2)q(3|2), \gamma_1(1)q(3|1)\}=\frac{1}{6}γ1(3)=max{γ0(1)r(0,3∣1),γ1(2)q(3∣2),γ1(1)q(3∣1)}=61
    求第二层所有状态的概率:
    γ2(2)=max⁡{γ1(1)r(1,2∣1),γ1(3)r(1,2∣3)}=124\gamma_2(2)=\max\{\gamma_1(1)r(1, 2|1), \gamma_1(3)r(1, 2|3)\}=\frac{1}{24}γ2(2)=max{γ1(1)r(1,2∣1),γ1(3)r(1,2∣3)}=241
    γ2(1)=max⁡{γ1(3)r(1,1∣3),γ2(2)q(1∣2)}=18\gamma_2(1)=\max\{\gamma_1(3)r(1, 1|3), \gamma_2(2)q(1|2)\}=\frac{1}{8}γ2(1)=max{γ1(3)r(1,1∣3),γ2(2)q(1∣2)}=81
    γ2(3)=max⁡{γ1(2)r(1,3∣2),γ2(2)q(3∣2),γ2(1)q(3∣1)}=148\gamma_2(3)=\max\{\gamma_1(2)r(1, 3|2), \gamma_2(2)q(3|2), \gamma_2(1)q(3|1)\}=\frac{1}{48}γ2(3)=max{γ1(2)r(1,3∣2),γ2(2)q(3∣2),γ2(1)q(3∣1)}=481
    求第三层所有状态的概率:
    γ3(2)=max⁡{γ2(1)r(1,2∣1),γ2(3)r(1,2∣3)}=196\gamma_3(2)=\max\{\gamma_2(1)r(1, 2|1), \gamma_2(3)r(1, 2|3)\}=\frac{1}{96}γ3(2)=max{γ2(1)r(1,2∣1),γ2(3)r(1,2∣3)}=961
    γ3(1)=max⁡{γ2(3)r(1,1∣3),γ3(2)q(1∣2)}=164\gamma_3(1)=\max\{\gamma_2(3)r(1, 1|3), \gamma_3(2)q(1|2)\}=\frac{1}{64}γ3(1)=max{γ2(3)r(1,1∣3),γ3(2)q(1∣2)}=641
    求最后一层所有状态的概率:
    γ4(2)=γ3(1)r(0,2∣1)=1768\gamma_4(2)=\gamma_3(1)r(0, 2|1)=\frac{1}{768}γ4(2)=γ3(1)r(0,2∣1)=7681
    γ4(1)=γ3(1)r(0,1∣1)=1128\gamma_4(1)=\gamma_3(1)r(0, 1|1)=\frac{1}{128}γ4(1)=γ3(1)r(0,1∣1)=1281
    γ4(3)=max⁡{γ3(1)r(0,3∣1),γ3(2)r(0,3∣2)}=1384\gamma_4(3)=\max\{\gamma_3(1)r(0, 3|1), \gamma_3(2)r(0, 3|2)\}=\frac{1}{384}γ4(3)=max{γ3(1)r(0,3∣1),γ3(2)r(0,3∣2)}=3841
    第四层可能性最大的是状态1的1128\frac{1}{128}1281所以由此可以向前推出最有可能的路径是1→3→1→3(发生空转移)→1→11\rightarrow3\rightarrow1\rightarrow3(发生空转移) \rightarrow1\rightarrow11313(发生空转移)11
    注:时间点为2的时候的那一列, 因为空转移从1到3的概率大于了其他状态转移概率,所以发生了从1到3的空转移。
  2. 学习问题
    到目前为止,我们解决问题的时候都给出了HMM的参数。但是在大部分情况下,我们并没有转换和观察的概率。我们想要做的是构建一个模型,用这个模型来解释和这个模型类型相同的未来数据。但是没有一种好的方法来估计HMM的转换结构和统计参数。所以只能利用直觉来设计HMM结构和估计参数值。这就是最大可能性的方法,即极大似然法:
    Pλ(Y){P_\lambda(Y)}Pλ(Y)为由λ{\lambda}λ参数定义的HMM产生观察序列输出Y=y1,y2,…,yk{Y=y_1, y_2, \dots, y_k}Y=y1,y2,,yk的可能性,则可以得到:
    λ^=argmaxλPλ(Y){\hat{\lambda}=arg max_\lambda P_\lambda(Y)}λ^=argmaxλPλ(Y)
    即找到参数λ\lambdaλ使得模型HMM输出观察序列Y=y1,y2,…,yk{Y=y_1, y_2, \dots, y_k}Y=y1,y2,,yk的可能性最大。
    其中Y为训练数据,最好让训练数据足够具有代表性,这样得到的参数λ\lambdaλ对于未来的数据也能处理的比较让人满意。
    注:最大似然方法会给人一个错误的暗示,那就是训练观察数据Y是由带有参数λ\lambdaλ的HMM产生的。实际上我们并不知道Y是由哪个HMM模型产生的,我们只是用给出的训练数据Y去尽可能的估计出一个HMM。
    为了方便理解最大似然方法,我们作出以下假设:
    任何一对状态s和s’之间的转移t最多只有一个输出, L(t)=s, R(t)=s’, 和最多一个空转移t’, L(t’)=s,R(t’)=s’。
    我们仍然使用简化符号:
    q(y∣t)=q(y∣s,s′)q(y|t)=q(y|s, s')q(yt)=q(ys,s)
    (注: L(t)=s为转移左边的状态, R(t)=s’为转移右边的状态)
    我们先看一个例子:
    HMM最大似然方法学习例子
    我们可以看出图中一共有3个状态和6个转移,包含一个t3空转移。假设这个HMM可以输出二进制的观察序列。并且从状态s1s_1s1开始,即s0=1s_0=1s0=1
    我们想要估计具体的转移矩阵概率p(ti)p(t_i)p(ti)和输出矩阵概率q(y∣ti)q(y|t_i)q(yti)。我们还不知道这些参数,但我们可以得出:
    p(t1)+p(t2)+p(t3)=1;p(t5)+p(t6)=1p(t_1)+p(t_2)+p(t_3)=1; p(t_5)+p(t_6)=1p(t1)+p(t2)+p(t3)=1;p(t5)+p(t6)=1
    注: 此处还有一个知识点,即如果HMM模型有观察序列Y=y1,y2,…,yk{Y=y_1, y_2, \dots, y_k}Y=y1,y2,,yk,隐藏状态序列:T=t1,t2,…,tm{T=t_1, t_2, \dots, t_m}T=t1,t2,,tm,则m>=km>=km>=k,因为m还有空转移。
    在这个例子里,我们假设输出序列为Y=y1,y2,y3,y4{Y=y_1, y_2, y_3, y_4}Y=y1,y2,y3,y4,并且图中加上上标,代表来源为第几阶段。
    接下来我们定义指标函数:
    Ii(t)={1如果一个状态的状态转移序列的集合 T中存在一个在第 i个阶段的转移 t0其他情况I_i(t) = \begin{cases} 1 & \text{如果一个状态的状态转移序列的集合 } T \text{ 中存在一个在第 } i \text{ 个阶段的转移 } t \\ 0 & \text{其他情况} \end{cases} Ii(t)={10如果一个状态的状态转移序列的集合 T 中存在一个在第 i 个阶段的转移 t其他情况
    然后我们可以画出下面的格架图:
    HMM最大似然方法学习格架图例子
    所以我们可以得到下面的公式:
    c(t)=∑i=0k−1Ii(t)c(t)=\sum_{i=0}^{k-1}I_i(t)c(t)=i=0k1Ii(t)
    对于非空转移t,我们可以得到:
    c(y,t)=∑i=0k−1Ii(t)δ(yi+1,y)c(y, t)=\sum_{i=0}^{k-1}I_i(t)\delta(y_{i+1}, y)c(y,t)=i=0k1Ii(t)δ(yi+1,y)
    第一个公式表示转移t在所有阶段一共出现的次数。第二个公式表示非空转移t,在输出观察的值为y时总共出现的次数。
    这样我们就可以用下面的式子估计参数:
    q^(y∣t)=c(y,t)c(t),t属于非空转移\hat{q}{(y|t)}=\frac{c(y, t)}{c(t)}, t属于非空转移q^(yt)=c(t)c(y,t),t属于非空转移
    p^(ti)={c(ti)c(t1)+c(t2)+c(t3)i = 1,2,31i = 4c(ti)c(t5)+c(t6)i = 5,6\hat{p}{(t_i)} = \begin{cases} \frac{c(t_i)}{c(t_1)+c(t_2)+c(t_3)} & \text{i = 1,2,3} \\ 1 & \text{i = 4} \\ \frac{c(t_i)}{c(t_5)+c(t_6)} & \text{i = 5,6} \end{cases} p^(ti)=c(t1)+c(t2)+c(t3)c(ti)1c(t5)+c(t6)c(ti)i = 1,2,3i = 4i = 5,6
    但是我们对于求转移次数的公式 c(t)=∑i=0k−1Ii(t)c(t)=\sum_{i=0}^{k-1}I_i(t)c(t)=i=0k1Ii(t), 和c(y,t)=∑i=0k−1Ii(t)δ(yi+1,y)c(y, t)=\sum_{i=0}^{k-1}I_i(t)\delta(y_{i+1}, y)c(y,t)=i=0k1Ii(t)δ(yi+1,y)还有一些问题。那就是我们不知道隐藏状态转移序列 T=t1,t2,…,tm{T=t_1, t_2, \dots, t_m}T=t1,t2,,tm,但是我们知道观察输出序列Y=y1,y2,…,yk{Y=y_1, y_2, \dots, y_k}Y=y1,y2,,yk,所以我们可以计算转移t在i阶段发生的可能性P{ti=t}P\{t^i=t\}P{ti=t},所以公式变成下面这样的新"计数" 公式:
    c(t)=∑i=0k−1P{ti=t}c(t)=\sum_{i=0}^{k-1}P\{t^i=t\}c(t)=i=0k1P{ti=t}
    c(y,t)=∑i=0k−1P{ti=t}δ(yi+1,y)c(y, t)=\sum_{i=0}^{k-1}P\{t^i=t\}\delta(y_{i+1}, y)c(y,t)=i=0k1P{ti=t}δ(yi+1,y)
    其中δ\deltaδ的定义为:
    δ(y,y′)={1y = y’,即当前的y和要找的y′是一样的0其他情况\delta(y, y') = \begin{cases} 1 & \text{y = y'},即当前的y和要找的y'是一样的 \\ 0 & \text{其他情况} \end{cases} δ(y,y)={10y = y’,即当前的y和要找的y是一样的其他情况
    由于阶段从i-1转换到i必然发生一次非空转换,所以对于非空转换t’',就有∑P{ti=t′′}=1{\sum{P}\{t^i =t^{''}\}=1}P{ti=t′′}=1

http://www.ppmy.cn/news/42021.html

相关文章

R语言算法丨批量查找SNP位点连锁区内对应的QTL以及基因

批量查找SNP位点连锁区内对应的QTL以及基因 如果已知SNP位点的物理位置和其LDblock区间的端点,想要快速找到该区间内的QTL,之后根据参考基因组找到与连锁区域存在交集的基因,最终得到与SNP和QTL相匹配的基因集 通常的做法是在Excel中先对每个…

ASP.NET 记录 HttpRequest HttpResponse HttpServerUtility

纯属个人记录,会有错误 HttpRequest Browser是获取客户端浏览器的信息 Cookies是获取客户端的Cookies QueryString是获取客户端提交的数据 ServerVariables是获取服务器端或客户端的环境变量信息 Browser 语法格式: Request.Browser[“浏览器特性名”] 常见的特性名 名称说…

【Linux】Centos安装mvn命令(maven)

🍁博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录一、下载maven包方法一:官…

Flink 优化 (三) --------- 反压处理

目录一、概述1. 反压的理解2. 反压的危害二、定位反压节点1. 利用 Flink Web UI 定位2. 利用 Metrics 定位三、反压的原因及处理1. 查看是否数据倾斜2. 使用火焰图分析3. 分析 GC 情况4. 外部组件交互一、概述 Flink 网络流控及反压的介绍:https://flink-learning.…

[2019.01.24]JNI经验积累

[1 jobject<--->jclass|jstring](1)jobject向上转型jclass|jstring:jclass jcls static_cast<jclass>(jobject);jstring jstr static_cast<jclass>(jobject);(2)jclass|jstring向下转型jobject:默认情况下是自动转换的[2 jstring<--->const char*](1…

(排序6)快速排序(小区间优化,非递归实现)

TIPS 快速排序本质上是一个分治递归的一个排序。快速排序的时间复杂度是NlogN&#xff0c;这是在理想的情况之下&#xff0c;但是它最坏可以到达N^2。决定快速排序的效率是在单趟排序之后这个key最终落在的位置&#xff0c;越落在中间就越接近二分&#xff0c;越接近2分就越接…

手写vuex4源码(六)命名空间实现

一、命名空间使用 在子模块对象中添加 namespaced&#xff1a;true&#xff0c;为模块开启命名空间功能&#xff1b; 开启命名空间功能&#xff0c;相当于为每个模块添加独立的作用域&#xff0c;实现模块间状态和事件的隔离&#xff1b; 二、命名空间实现逻辑 在模块注册阶…

【神经网络】tensorflow实验5--数字图像基础

目录 1. 实验目的 2. 实验内容 3. 实验过程 题目一&#xff1a; ① 代码 ② 实验结果 题目二&#xff1a; ① 代码 ② 实验结果 4. 实验小结&讨论题 1. 实验目的 ①了解数字图像基本属性&#xff1b; ②掌握Pillow图像处理库的基本操作。 2. 实验内容 ①使用Pill…