HMM-读书笔记

news2024/11/16 11:45:25

信息提取基础

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 ( Z 1 , Z 2 , … , Z n , … ) = ∏ i P ( Z i ∣ Z i − k , Z i − k + 1 , … , Z i − 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 ( y 1 , y 2 , … , y k ) = ∑ s 1 , . . . , s k ∏ i = 1 k p ( s i ∣ s i − 1 ) q ( y i ∣ s i − 1 , s i ) 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 , s 1 , s 2 , . . . , s T ∣ λ ) = π s 1 ⋅ B s 1 ( O 1 ) ⋅ ∏ t = 2 T A s t − 1 , s t ⋅ B s t ( O t ) 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 ( s i ∣ s i − 1 ) p(s_i \mid s_{i-1}) p(sisi1) 代表的是状态 s i − 1 s_{i-1} si1 到状态 s i s_i si 的可能性, q ( y i ∣ s i − 1 , s i ) q(y_i \mid s_{i-1}, s_i) q(yisi1,si) 代表的是观察状态概率分布中从状态 s i − 1 s_{i-1} si1 到状态 s i s_i si 发生的情况下, 观察状态 y i y_i yi 发生的可能性。所以, ∏ i = 1 k p ( s i ∣ s i − 1 ) q ( y i ∣ s i − 1 , s i ) \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) 就表示一条隐藏的状态序列发生后,得到观察序列 y 1 , y 2 , … , y k y_1, y_2, \ldots, y_k y1,y2,,yk的可能性是多少,能得到这种观察状态序列的隐藏状态序列可能不止一种,所以把所有可能的状态序列加起来,就得到了当我们拥有这些隐藏状态时生成这个观察序列的可能性。
如果我们看下面这个公式,可能会更清晰一些:

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

P ( O , Q ∣ θ ) = π q 1 b q 1 ( O 1 ) ∏ t = 2 T a q t − 1 , q t b q t ( O t ) 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参数集, q t q_t qt 是时间 t t t 的隐藏状态, π q 1 \pi_{q_1} πq1 是开始于隐藏状态 q 1 q_1 q1 的初始概率, a q t − 1 , q t a_{q_{t-1}, q_t} aqt1,qt 是从隐藏状态 q t − 1 q_{t-1} qt1 转移至隐藏状态 q t q_t qt 的转移概率, b q t ( O t ) b_{q_t}(O_t) bqt(Ot) 是在给定隐藏状态 q t q_t qt 的情况下观测到 O t O_t Ot 的观测概率。

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

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

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

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

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

维特比(Viterbi)算法

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

P ( s 1 , s 2 , … , s k ∣ Y 1 , Y 2 , … , Y k , s 0 ) = P ( s 1 , s 2 , … , s k , Y 1 , Y 2 , … , Y k ∣ s 0 ) P ( Y 1 , Y 2 , … , Y k ∣ s 0 ) 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)

当我们想找到最大可能的路径时,我们需要找到一个隐藏状态序列 s 1 , s 2 , … , s k s_1, s_2, \dots, s_k s1,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) = 1 y,sr(y,ss)+sq(ss)=1

HMM的三种情况

  1. 评估:给定HMM模型(初始状态概率,状态转移矩阵,观测概率矩阵),求某一个观察数据序列的概率。
    解答算法:向前算法,向后算法。
    举例:
    有这样一个HMM模型如下图所示:
    HMM向前算法例子
    可以看出HMM模型有三个状态S = {1, 2, 3},有两个输出数据Y = {0, 1}。
    现在给出下面的条件:输出观察数据的转移矩阵和空转移矩阵分别为:
    p ( s ′ ∣ s ) = [ 1 2 1 6 1 6 0 0 1 3 3 4 1 4 0 ] , q ( s ′ ∣ s ) = [ 0 0 1 6 1 3 0 1 3 0 0 0 ] , s , s ′ ∈ S p(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 ′ ) = [ 1 1 2 1 0 0 1 3 0 0 0 ] , q ( 1 ∣ s → s ′ ) = [ 0 1 2 0 1 1 2 3 1 1 1 ] , 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)。初始状态为 s 0 = 1 s_0=1 s0=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 × 1 2 × 1 = 1 2 \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 × 1 6 × 1 2 = 1 12 \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 × 1 6 × 1 = 1 6 \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 ) = 1 12 \alpha_1(2)=\alpha_1(2)=\frac{1}{12} α1(2)=α1(2)=121 (没有空转移从别的状态变为状态2)。
α 1 ( 1 ) = α 1 ( 1 ) + α 1 ( 2 ) q ( 1 ∣ 2 ) = 1 2 + 1 12 × 1 3 = 19 36 \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 ) = 1 6 + 19 36 × 1 6 + 1 12 × 1 3 = 61 216 \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 ) = 61 216 × 3 4 × 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 ) = 19 36 × 1 6 × 1 2 + 61 216 × 1 4 × 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 ) = 1 12 × 1 3 × 2 3 = 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 × 1 3 = 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 × 1 6 + 0.115 × 1 3 = 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 × 3 4 × 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 × 1 6 × 1 2 + 0.099 × 1 4 × 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 × 1 3 = 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 × 1 2 × 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 × 1 6 × 1 2 = 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 × 1 6 × 1 + 0.046 × 1 3 × 1 3 = 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 ( y 1 y 2 y 3 y 4 = 0110 ∣ s 0 = 1 ) = ∑ s α 4 = α 4 ( 1 ) + α 4 ( 2 ) + α 4 ( 3 ) = 0.045 + 0.007 + 0.020 = 0.072 P(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.072 P(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 ( s i ) = max ⁡ s 1 , s 2 , … , s i − 1 P ( s 1 , s 2 , … , s i , y 1 , y 2 , … , y i ∣ s 0 ) = max ⁡ s i − 1 p ( y i , s i ∣ s i − 1 ) max ⁡ s 1 , s 2 , … , s i − 2 P ( s 1 , s 2 , … , s i − 1 , y 1 , y 2 , … , y i ∣ s 0 ) = max ⁡ s i − 1 p ( y i , s i ∣ s i − 1 ) γ i − 1 ( s i − 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 ) = 1 12 \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 ) } = 1 2 \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 ) } = 1 6 \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 ) } = 1 24 \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 ) } = 1 8 \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 ) } = 1 48 \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 ) } = 1 96 \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 ) } = 1 64 \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 ) = 1 768 \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 ) = 1 128 \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 ) } = 1 384 \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的 1 128 \frac{1}{128} 1281所以由此可以向前推出最有可能的路径是 1 → 3 → 1 → 3 ( 发生空转移 ) → 1 → 1 1\rightarrow3\rightarrow1\rightarrow3(发生空转移) \rightarrow1\rightarrow1 1313(发生空转移)11
    注:时间点为2的时候的那一列, 因为空转移从1到3的概率大于了其他状态转移概率,所以发生了从1到3的空转移。
  2. 学习问题
    到目前为止,我们解决问题的时候都给出了HMM的参数。但是在大部分情况下,我们并没有转换和观察的概率。我们想要做的是构建一个模型,用这个模型来解释和这个模型类型相同的未来数据。但是没有一种好的方法来估计HMM的转换结构和统计参数。所以只能利用直觉来设计HMM结构和估计参数值。这就是最大可能性的方法,即极大似然法:
    P λ ( Y ) {P_\lambda(Y)} Pλ(Y)为由 λ {\lambda} λ参数定义的HMM产生观察序列输出 Y = y 1 , y 2 , … , y k {Y=y_1, y_2, \dots, y_k} Y=y1,y2,,yk的可能性,则可以得到:
    λ ^ = a r g m a x λ P λ ( Y ) {\hat{\lambda}=arg max_\lambda P_\lambda(Y)} λ^=argmaxλPλ(Y)
    即找到参数 λ \lambda λ使得模型HMM输出观察序列 Y = y 1 , y 2 , … , y k {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可以输出二进制的观察序列。并且从状态 s 1 s_1 s1开始,即 s 0 = 1 s_0=1 s0=1
    我们想要估计具体的转移矩阵概率 p ( t i ) p(t_i) p(ti)和输出矩阵概率 q ( y ∣ t i ) q(y|t_i) q(yti)。我们还不知道这些参数,但我们可以得出:
    p ( t 1 ) + p ( t 2 ) + p ( t 3 ) = 1 ; p ( t 5 ) + p ( t 6 ) = 1 p(t_1)+p(t_2)+p(t_3)=1; p(t_5)+p(t_6)=1 p(t1)+p(t2)+p(t3)=1;p(t5)+p(t6)=1
    注: 此处还有一个知识点,即如果HMM模型有观察序列 Y = y 1 , y 2 , … , y k {Y=y_1, y_2, \dots, y_k} Y=y1,y2,,yk,隐藏状态序列: T = t 1 , t 2 , … , t m {T=t_1, t_2, \dots, t_m} T=t1,t2,,tm,则 m > = k m>=k m>=k,因为m还有空转移。
    在这个例子里,我们假设输出序列为 Y = y 1 , y 2 , y 3 , y 4 {Y=y_1, y_2, y_3, y_4} Y=y1,y2,y3,y4,并且图中加上上标,代表来源为第几阶段。
    接下来我们定义指标函数:
    I i ( t ) = { 1 如果一个状态的状态转移序列的集合  T  中存在一个在第  i  个阶段的转移  t 0 其他情况 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 = 0 k − 1 I i ( t ) c(t)=\sum_{i=0}^{k-1}I_i(t) c(t)=i=0k1Ii(t)
    对于非空转移t,我们可以得到:
    c ( y , t ) = ∑ i = 0 k − 1 I i ( t ) δ ( y i + 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 ^ ( t i ) = { c ( t i ) c ( t 1 ) + c ( t 2 ) + c ( t 3 ) i = 1,2,3 1 i = 4 c ( t i ) c ( t 5 ) + c ( t 6 ) 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 = 0 k − 1 I i ( t ) c(t)=\sum_{i=0}^{k-1}I_i(t) c(t)=i=0k1Ii(t), 和 c ( y , t ) = ∑ i = 0 k − 1 I i ( t ) δ ( y i + 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 1 , t 2 , … , t m {T=t_1, t_2, \dots, t_m} T=t1,t2,,tm,但是我们知道观察输出序列 Y = y 1 , y 2 , … , y k {Y=y_1, y_2, \dots, y_k} Y=y1,y2,,yk,所以我们可以计算转移t在i阶段发生的可能性 P { t i = t } P\{t^i=t\} P{ti=t},所以公式变成下面这样的新"计数" 公式:
    c ( t ) = ∑ i = 0 k − 1 P { t i = t } c(t)=\sum_{i=0}^{k-1}P\{t^i=t\} c(t)=i=0k1P{ti=t}
    c ( y , t ) = ∑ i = 0 k − 1 P { t i = t } δ ( y i + 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 ′ ) = { 1 y = 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 { t i = t ′ ′ } = 1 {\sum{P}\{t^i =t^{''}\}=1} P{ti=t′′}=1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/410594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 654 最大二叉树

题目: 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为nums中的最大值。 递归地在最大值左边的子数组前缀上构建左子树。 递归地在最大值右边的子数组后缀上构建右子树。 返回 nums 构建的最大…

VMware ESXi 8.0c Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)

发布 ESXi 8.0 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链接:https://sysin.org/blog/vmware-esxi-8-sysin/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 发布 ESXi 8.0 集成驱动版&am…

在 Python 中计算两个数字之间的百分比

要计算两个数字之间的百分比,请将一个数字除以另一个数字,然后将结果乘以 100,例如 (30 / 75) * 100。这显示第一个数字占第二个数字的百分比。 在示例中,30 是 75 的 40%。 def is_what_percent_of(num_a, num_b):return (num_a…

论Sort()方法在 Python 和 Javascript 中应用的区别

Sort()方法相信大家都熟悉,用于排序,那就是数字从低到高(默认) 和 从高到低。以下对这个排序方法在Python 和 Java Script 中应用的区别作详细的举例说明。 在 Python中,例如有 lst1 : [1,5,8,6,2] ,要对这…

html制作好看的个人简历(附源码)

文章目录1.设计来源1.1 主界面1.2 基本资料页面1.3 个人名言页面1.4 教育经历页面1.5 联系方式页面1.6 自我评价页面1.7 工作经历页面1.8 兴趣爱好页面1.9 沟通交流页面2.效果和源码2.1 动态效果2.2 源代码2.3 相关个人简历源码源码下载作者:xcLeigh 文章地址&#…

java课程设计(学生信息管理系统设计)+数据库

🔍 🔎 本期带领大家一起来学习java课程设计(学生信息管理系统设计)数据库的实现思路 🔍 🔎 文章目录题目要求数据库🌍一 、环境搭建🌍二 、功能实现 🌎 🌍1.学…

重磅!阿里版本【ChatGPT】开放测评!

前两天突然爆出惊人消息:阿里版ChatGPT开放测评了! 在本月初,已经有诸多关于阿里巴巴即将推出类似ChatGPT产品的传闻。 数日前,首批曝光的天猫精灵“鸟鸟分鸟”脱口秀版GPT基于大型模型的“精简版”,凭借其出色的表现吸…

2023-4-11-chrono库用法学习

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥💟💟喜欢的朋友可以关注一下&#xff0…

4.9、字节序

4.9、字节序1.简介2.字节序举例3.判断电脑存储方式代码1.简介 现代 CPU 的累加器一次都能装载(至少)4 字节(这里考虑 32 位机),即一个整数。那么这 4字节在内存中排列的顺序将影响它被累加器装载成的整数的值&#xff…

vue element-ui 暗黑主题应用到若依框架

问题描述 基于若依框架的element-ui,将主题更换为暗黑主题。 问题分析 现有的element-ui框架提供的主题不满足自定义需求,大多数框架,包括若依提供了更换主题色的功能,但也只是更换的primary-color,其他组件的主题还…

算法小课堂(五)贪心算法

一、概述 贪心算法是一种常见的算法思想,用于解决优化问题。其基本思想是在每一步选择中都采取当前状态下最优的选择,从而希望能够获得全局最优解。 具体来说,贪心算法通常分为以下步骤: 定义问题的最优解,通常需要将…

【人生历程】我的创作纪念日

目录 与编程不得不说的爱恨情仇 在csdn的收获: 与csdn的日常 在平凡的日子偶然的成就感: 对未来的憧憬: 今天是2023.4.8号,早上的刚刚参加完蓝桥杯,下午看到csdn官方的活动,心血来潮写下以下内容&…

家政服务小程序实战开发教程018-用户注册

我们在教程的一开始的时候就讲解了用户注册的功能。当初的规划是一进来就让用户自主的选择角色,然后提交用户信息,如果未注册就跳转到注册界面。 随着教程的深入,又参考了很多线上的小程序,发现这种模式也有一定的缺点。因为作为…

Linux网络虚拟化2

Linux网络虚拟化2 今天我们接着上节课介绍的 Linux 网络知识,继续来学习它们在虚拟化网络方面的应用,从而为后续学习容器编排系统、理解各个容器是如何通过虚拟化网络来协同工作打好基础。 这一篇内容较多,可以重点看标红部分和标粗部分​。…

Ubuntu环境下minicom使用

1、minicom的安装 sudo apt-get install minicom2、minicom的配置 sudo minicom -s # 打开minicom配置界面3、配置serial port setup串口信息 使用上下箭头选择,enter进入。 按A修改Serial Device,修改之前可以用命令ls -la /dev/ttyUSB或者ls -la …

java 一文讲透集合框架(10万字博文)

目录 一、前言 二、集合简介 1.定义 : 2.集合与数组的区别 : 3.集合的好处 : 三、集合框架 1.单列集合 2.双列集合 Δ体系图(重要) 四、List集合详解(三万余字) 五、Set集合详解(三万余字) 六、增…

学习实践-Whisper语音识别模型实战(部署+运行)

1、Whisper内容简单介绍 OpenAI的语音识别模型Whisper,Whisper 是一个自动语音识别(ASR,Automatic Speech Recognition)系统,OpenAI 通过从网络上收集了 68 万小时的多语言(98 种语言)和多任务…

论文笔记|CVPR2023:Semantic Prompt for Few-Shot Image Recognition

论文地址:https://arxiv.org/pdf/2303.14123.pdf 这是一篇2023年发表在CVPR上的论文,论文题目是Semantic Prompt for Few-Shot Image Recognitio,即用于小样本图像识别的语义提示。 1 Motivation 第一,最近几项研究利用 语义信…

< Linux >:进程地址空间

目录 一、验证进程地址空间 二、感知进程地址空间的存在 一、验证进程地址空间 我们之前学的 C/C 程序地址空间是物理内存吗? 答:不是物理内存,甚至叫做程序地址空间都不太准确,应该叫做进程地址空间,因此根本就不是…

Notion插件,让你的页面有无限可能

// 你是否觉得notion的极简风格略为单调?是否想用notion实现更多的功能?是否想让notion更为便捷,更为多样化?那今天推荐的几款notion插件绝对不能错过,因为他们也确实不错。 // - ———byFutureForce DAO——— - 你…