机器学习——隐马尔科夫(HHM)模型原理

1 从马尔科夫模型到隐马尔科夫模型

1.1 马尔科夫过程引入

首先,我们先给出一张图:

在上面的图里,给出的是一个链式的结构,结构中的每一个节点称之为一个状态。每一个状态QiQ_iQi​的取值是一个范围[S0,Sn][S_0,S_n][S0​,Sn​],我们称之为状态空间。并且,每一个状态QiQ_iQi​的取值与之前状态的取值有关。也就是说QiQ_iQi​在状态空间的和Q1,Q2,..Qi−1Q_1,Q_2,..Q_{i-1}Q1​,Q2​,..Qi−1​的取值有关。我们将这种状态随着时间向前推进,状态的取值与之前状态的取值有关的过程称为马尔科夫随机过程。我们用概率来表示一下这个过程就是:
P(Qi=Si)=P(Qi=Sj∣Q1=Si∈[S0,Sn],Q2=Si∈[S0,Sn],...,Qi−1=Si∈[S0,Sn])P(Q_i=S_i)=P(Q_i=S_j|Q_1=S_i∈[S_0,S_n],Q_2=S_i∈[S_0,S_n],...,Q_{i-1}=S_i∈[S_0,S_n])P(Qi​=Si​)=P(Qi​=Sj​∣Q1​=Si​∈[S0​,Sn​],Q2​=Si​∈[S0​,Sn​],...,Qi−1​=Si​∈[S0​,Sn​])

其中Qi−1=Si∈[S0,Sn]Q_{i-1}=S_i∈[S_0,S_n]Qi−1​=Si​∈[S0​,Sn​]表示状态QiQ_iQi​的取值SiS_iSi​属于样本空间的某一个。现在我们做出一个强假设,假设当前状态的取值仅仅和前一个状态的取值有关。用公式表示就是:
P(Qi=Si)=P(Qi=Sj∣Qi−1=Si∈[S0,Sn])P(Q_i=S_i)=P(Q_i=S_j|Q_{i-1}=S_i∈[S_0,S_n])P(Qi​=Si​)=P(Qi​=Sj​∣Qi−1​=Si​∈[S0​,Sn​])
我们将其称为一阶马尔科夫过程。如果状态空间SiS_iSi​是离散的值,我们就称其为离散的一阶马尔科夫过程。

或许上面的描述过于抽象化,下面我们举一个例子来解释这个过程,假设有如下三个状态和状态转移矩阵:
首先,我们假设状态空间为[S1,S2,S3][S_1,S_2,S_3][S1​,S2​,S3​]

状态S1:名词(N)
状态S2:动词(V)
状态S3:形容词(adj)

假设状态Q1Q_1Q1​的取值为S1S_1S1​,状态Q2Q_2Q2​的取值为S2S_2S2​,状态Q3Q_3Q3​的取值为S3S_3S3​,状态Q4Q_4Q4​的取值为S3S_3S3​,那么我们现在要确定Q5Q_5Q5​为状态的S1S_1S1​的概率就是:
P(Q5=S1)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)P(Q_5=S_1)=P(Q_5=S_j|Q_1=S_1,Q_2=S_2,Q_{3}=S_3,Q_4=S_3)P(Q5​=S1​)=P(Q5​=Sj​∣Q1​=S1​,Q2​=S2​,Q3​=S3​,Q4​=S3​)

下面,我们在具有给出一个状态转移的矩阵

[S1S2S3S10.30.50.2S20.50.30.2S30.40.20.4]\left[ \begin{matrix} &S_1&S_2&S_3\\ S_1&0.3 & 0.5 & 0.2 \\ S_2&0.5 & 0.3 & 0.2\\ S_3&0.4 & 0.2 & 0.4 \\ \end{matrix} \right] ⎣⎢⎢⎡​S1​S2​S3​​S1​0.30.50.4​S2​0.50.30.2​S3​0.20.20.4​⎦⎥⎥⎤​
转移矩阵的概念是,从某一个状态SiS_iSi​转移到另外一个状态SjS_jSj​的概率。在我们上面的式子中:
P(Q5=Sj)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)P(Q_5=S_j)=P(Q_5=S_j|Q_1=S_1,Q_2=S_2,Q_{3}=S_3,Q_4=S_3)P(Q5​=Sj​)=P(Q5​=Sj​∣Q1​=S1​,Q2​=S2​,Q3​=S3​,Q4​=S3​)
假设Q1Q_1Q1​状态的是确定的S1S_1S1​,那么从状态值S1S_1S1​转移的到Q2Q_2Q2​对应的状态值S2S_2S2​的概率为0.5,同理从S2S_2S2​转移到Q3Q_3Q3​状态的状态值S3S_3S3​的概率为0.2,从S3S_3S3​转移到Q4Q_4Q4​状态的状态值S3S_3S3​的概率为0.4,则
P(Q5=S1)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)=0.5∗0.2∗0.4P(Q_5=S_1)=P(Q_5=S_j|Q_1=S_1,Q_2=S_2,Q_{3}=S_3,Q_4=S_3)\\ =0.5*0.2*0.4P(Q5​=S1​)=P(Q5​=Sj​∣Q1​=S1​,Q2​=S2​,Q3​=S3​,Q4​=S3​)=0.5∗0.2∗0.4

如果是一阶马尔科夫过程,并且已经确定了Q4=S3Q_4=S_3Q4​=S3​,则可以确定概率为:
P(Q5=Sj)=P(Q5=Sj∣Q4=S3)=0.4P(Q_5=S_j)=P(Q_5=S_j|Q_4=S_3)=0.4P(Q5​=Sj​)=P(Q5​=Sj​∣Q4​=S3​)=0.4

1.2、 隐马尔科夫模型

在上述马尔科夫模型中,每一个状态的代表的是一个可以直接观察的事件(比如,上面的每个状态对应的是一个的词性)。在隐马尔科夫模型中,我们不能知道模型所经过的状态序列,只知道状态转移的概率函数。同时,对于这个状态所产生的事件也是一个随机的函数。还是上面的例子。现在已知的是状态S1,S2,S3转移的概率。但是对于每一个状态的Si,其可以产生多个多种词性。即
状态S1:名词(N)、动词(V)、形容词(A)
状态S2:名词(N)、动词(V)、形容词(A)
状态S3:名词(N)、动词(V)、形容词(A)
HMM的转移过程如图所示:

在这里,我们把由各个状态产生的实际O称为可观测序列。

在HMM模型中,当计算到某一个事件序列产生的概率的时候,我们至少需要到三个部分,第一个部分是初始状态的概率,第二个是状态之间转移的概率,第三个是有状态产生事件的概率。对于以上三个部分,我们分别使用π,A,Bπ,A,Bπ,A,B三个矩阵来表示。那么也就是说,一个常规的隐马尔科夫练可以表示为:
{π,A,B}\{π,A,B\}{π,A,B}

2 HMM模型推导过程

对于HMM模型的求解过程,通常是从三个问题开始的,我们下面分别对这三个问题进行一一的推导和求解。

2.1 估计问题

2.1.1 问题描述

给定一个观察序列O={O1,O2,...OT}O=\{O_1,O_2,...O_T\}O={O1​,O2​,...OT​}和HMM模型μ={π,A,B}μ=\{π,A,B\}μ={π,A,B},如何计算观察序列O的概率?
对于这个问题,首先我们要明确的是对于每一个可以观测的数据而言,其可以用任何一个状态Si来生成。

2.1.2 问题推导

对于第一个可以观测的数据O1O_1O1​而言,整个模型生成O1O_1O1​的概率是各个状态生成O1O_1O1​的概率之和。也就是∑Q1=S1SpbQ1(j)∑_{Q_1=S_1}^{S_{p}}b_{Q_1}(j)∑Q1​=S1​Sp​​bQ1​​(j),同时由于模型是以一定的概率来生成初始状态Q1Q_1Q1​的,那么也就是说,整个模型生成第一个可观测元素的概率为:
P(O1∣μ)=∑Q1=S1Spπ(Q1)∗BQ1(O1)P(O_1|μ)=∑_{Q_1=S_1}^{S_{p}}π(Q_1)*B_{Q_1}(O_1)P(O1​∣μ)=Q1​=S1​∑Sp​​π(Q1​)∗BQ1​​(O1​)

对于可观测序列的第二个元素O2O_2O2​而言,首先是由第一个状态Q1Q_1Q1​转移到第二个状态Q2Q_2Q2​,在有状态Q2Q_2Q2​来生成的。由于状态Q2Q_2Q2​的取值范围是{S0,S1,...Sp−1}\{S_0,S_1,...S_{p-1}\}{S0​,S1​,...Sp−1​},那么,有状态Q2Q_2Q2​生成可以观测的元素O2O_2O2​的概率就是各个状态生成O2O_2O2​的概率和,用数学表达式表示就是:
∑Q2=S1SpbQ2(j)∑_{Q_2=S_1}^{S_{p}}b_{Q_2}(j)Q2​=S1​∑Sp​​bQ2​​(j)。

同时,我们还需要考虑到的时,Q2Q_2Q2​是由Q1Q_1Q1​转移过来的。那么,我们就必须要考虑到状态转移的概率。对于Q2Q_2Q2​状态的任意一个取值SiS_iSi​而言,产生这个状态的概率是由Q1Q_1Q1​的任意一个取值产生的,那么模型产生SiS_iSi​的概率,就为:
∑Q1=S1Spπ(Q1)AQ1Si∑_{Q_1=S_1}^{S_{p}}π(Q_1)A_{Q_1S_i}Q1​=S1​∑Sp​​π(Q1​)AQ1​Si​​

则,由状态Q1Q_1Q1​转移到状态Q2Q_2Q2​的概率为:
∑Q1=S1Spπ(Q1)∑Q2=S1SpAQ1Q2∑_{Q_1=S_1}^{S_{p}}π(Q_1)∑_{Q_2=S_1}^{S_{p}}A_{Q_1Q_2}Q1​=S1​∑Sp​​π(Q1​)Q2​=S1​∑Sp​​AQ1​Q2​​

则,由μ生成可观测元素O1,O2O_1,O_2O1​,O2​的概率为:
∑Q1=S1Spπ(Q1)BQ1(O1)∑Q2=S1SpAQ1Q2BQ2(O2)∑_{Q_1=S_1}^{S_{p}}π(Q_1)B_{Q_1}(O_1)∑_{Q_2=S_1}^{S_{p}}A_{Q_1Q_2}B_{Q_2}(O_2)Q1​=S1​∑Sp​​π(Q1​)BQ1​​(O1​)Q2​=S1​∑Sp​​AQ1​Q2​​BQ2​​(O2​)

依次类推,可观测序列的第三个元素O3O_3O3​产生的概率也是首先状态Q3Q_3Q3​的所有的取值SiS_iSi​生成O3O_3O3​的概率和,同时考虑从状态Q1,Q2Q_1,Q_2Q1​,Q2​转移到Q3Q_3Q3​的概率,就可以推导出产生O1,O2,O3O_1,O_2,O_3O1​,O2​,O3​的概率为:
∑Q1=S1Spπ(Q1)BQ1(O1)∑Q2=S1SpAQ1Q2BQ2(O2)∑Q3=S1SpAQ2Q3BQ3(O3)∑_{Q_1=S_1}^{S_{p}}π(Q_1)B_{Q_1}(O_1)∑_{Q_2=S_1}^{S_{p}}A_{Q_1Q_2}B_{Q_2}(O_2)∑_{Q_3=S_1}^{S_{p}}A_{Q_2Q_3}B_{Q_3}(O_3)Q1​=S1​∑Sp​​π(Q1​)BQ1​​(O1​)Q2​=S1​∑Sp​​AQ1​Q2​​BQ2​​(O2​)Q3​=S1​∑Sp​​AQ2​Q3​​BQ3​​(O3​)

不断递推之后,我们可以知道生成整个序列的概率为:
∑Q1=S1Spπ(Q1)BQ1(O1)∑Q2=S1SpAQ1Q2BQ2(O2).....∑QT=S1SpAQT−1QTBQT(OT)∑_{Q_1=S_1}^{S_{p}}π(Q_1)B_{Q_1}(O_1)∑_{Q_2=S_1}^{S_{p}}A_{Q_1Q_2}B_{Q_2}(O_2).....∑_{Q_T=S_1}^{S_{p}}A_{Q_{T-1}Q_T}B_{Q_T}(O_T)Q1​=S1​∑Sp​​π(Q1​)BQ1​​(O1​)Q2​=S1​∑Sp​​AQ1​Q2​​BQ2​​(O2​).....QT​=S1​∑Sp​​AQT−1​QT​​BQT​​(OT​)

上面的递推公式我们可以很容易的就确定。但是,这里存在的问题在于,如果我们想要获得观测序列的概率值,我们就必须穷尽所有的状态序列。也就是(p)T(p)^T(p)T。为了更好的解决这个问题,提出了前向算法,过程描述如下:
首先定义:
αt(i)=P(O1,O2,...Ot,Qt=Si∣μ)α_t(i)=P(O_1,O_2,...O_t,Q_t=S_i|μ)αt​(i)=P(O1​,O2​,...Ot​,Qt​=Si​∣μ)

该公式主要描述的是假设已经通过μ生成了{O1,O2,...Ot−1O_1,O_2,...O_{t-1}O1​,O2​,...Ot−1​}的观测序列,同时在t时刻转移到SiS_iSi​状态,并由SiS_iSi​状态生成OtO_tOt​的概率值。

当第一个时刻的时候有:

α1(i)=P(O1,Q1=Si∣μ)=π(Si)Bi(O1)α_1(i)=P(O_1,Q_1=S_i|μ)=π(S_i)B_i(O_1)α1​(i)=P(O1​,Q1​=Si​∣μ)=π(Si​)Bi​(O1​)

同理我们可以定义出t+1时刻:
αt+1(j)=P(O1,O2,...Ot,Ot,Qt+1=Sj∣μ)α_{t+1}(j)=P(O_1,O_2,...O_t,O_t,Q_{t+1}=S_j|μ)αt+1​(j)=P(O1​,O2​,...Ot​,Ot​,Qt+1​=Sj​∣μ)

进一步,我们可以推导出
αt+1(j)=P(O1,O2,...Ot,Ot+1,Qt+1=Sj∣μ)=∑i=1pαt(i)AijBj(Ot+1)α_{t+1}(j)=P(O_1,O_2,...O_t,O_{t+1},Q_{t+1}=S_j|μ)=∑_{i=1}^pα_t(i)A_{ij}B_j(O_{t+1})αt+1​(j)=P(O1​,O2​,...Ot​,Ot+1​,Qt+1​=Sj​∣μ)=i=1∑p​αt​(i)Aij​Bj​(Ot+1​)

根据递推公式,我们可以确定最后一个时刻T的时候,有:
αT(j)=P(O1,O2,...OT,QT=Sj∣μ)=∑i=1pαT−1(i)AijBj(OT)α_{T}(j)=P(O_1,O_2,...O_T,Q_{T}=S_j|μ)=∑_{i=1}^pα_{T-1}(i)A_{ij}B_j(O_{T})αT​(j)=P(O1​,O2​,...OT​,QT​=Sj​∣μ)=i=1∑p​αT−1​(i)Aij​Bj​(OT​)

最后,对与整可观测序列的概率,就是对于各个αT(j)α_{T}(j)αT​(j)求和,用公式表达就是:
P(O∣μ)=∑j=1pP(O1,O2,...OT,QT=Sj∣μ)=∑j=1PαT(j)P(O|μ)=∑_{j=1}^pP(O_1,O_2,...O_T,Q_{T}=S_j|μ)=∑_{j=1}^Pα_{T}(j)P(O∣μ)=j=1∑p​P(O1​,O2​,...OT​,QT​=Sj​∣μ)=j=1∑P​αT​(j)

我们用一个图来描述一下上面的过程:

前一列是t时刻所有可能的状态SiS_iSi​,后一列是t+1时刻的SjS_jSj​状态。也就是我们在计算t+1时刻的SjS_jSj​状态的时候,已经考虑到了t时刻的所有状态。

2.1.3 算法过程
  1. 初始化第一个时刻的α,也就是:
    α1(i)=P(O1,Q1=Si∣μ)=π(Si)Bi(O1)α_1(i)=P(O_1,Q_1=S_i|μ)=π(S_i)B_i(O_1)α1​(i)=P(O1​,Q1​=Si​∣μ)=π(Si​)Bi​(O1​)
  2. 归纳计算
    αt+1(j)=P(O1,O2,...Ot,Ot+1,Qt+1=Sj∣μ)=∑i=1pαt(i)AijBj(Ot+1)α_{t+1}(j)=P(O_1,O_2,...O_t,O_{t+1},Q_{t+1}=S_j|μ)=∑_{i=1}^pα_t(i)A_{ij}B_j(O_{t+1})αt+1​(j)=P(O1​,O2​,...Ot​,Ot+1​,Qt+1​=Sj​∣μ)=i=1∑p​αt​(i)Aij​Bj​(Ot+1​)
  3. 最后求和
    P(O∣μ)=∑j=1pP(O1,O2,...OT,QT=Sj∣μ)=∑j=1PαT(j)P(O|μ)=∑_{j=1}^pP(O_1,O_2,...O_T,Q_{T}=S_j|μ)=∑_{j=1}^Pα_{T}(j)P(O∣μ)=j=1∑p​P(O1​,O2​,...OT​,QT​=Sj​∣μ)=j=1∑P​αT​(j)

2.2 最优序列

2.2.1 问题描述

我们知道,每一个可以观测的元素是由一个状态生成的,在已知观测序列和HMM模型的条件下,我们应该如何选择一个最优的状态序列,使得由该状态序列生成的可观测序列的概率最大?用数学的形式描述就是:

maxE(Q)=max(π(SQ1)BSQ1(O1)AQ1Q2BSQ2(O2)AQ2Q3).....AQT−1QTBSQT(OT))max E(Q)=max(π(S_{Q1})B_{S_{Q1}}(O_1)A_{Q_1Q_2}B_{S_{Q2}}(O_2)A_{Q_2Q_3}).....A_{Q_{T-1}Q_T}B_{S_{Q_T}}(O_T))maxE(Q)=max(π(SQ1​)BSQ1​​(O1​)AQ1​Q2​​BSQ2​​(O2​)AQ2​Q3​​).....AQT−1​QT​​BSQT​​​(OT​))

对于每一个QiQ_iQi​可以取状态空间S中的某一个状态。

2.2.2 问题推导

对于求解这个问题,我们采用的是维特比算法,其数学推导过程如下:
首先,我们给出如下的递推公式:
δt(i)=max(P(Q1,Q2,....Qt−1,Qt=Si,O1,O2,...Ot))δ_t(i)=max(P(Q_1,Q_2,....Q_{t-1},Q_t=S_i,O_1,O_2,...O_t))δt​(i)=max(P(Q1​,Q2​,....Qt−1​,Qt​=Si​,O1​,O2​,...Ot​))
我们来简单的解释以下这个公式,这个公式的意义在于在t时刻的时候,当该时刻取状态SiS_iSi​的时候能够获取到的关于可观测的序列的最大概率。如下图所示:

如上图所示,前面的一列是t-1时刻的可能取的所有状态,后一列是t时刻的j状态,对于j状态而言,可以由前一个时刻的可以取的任意一个状态转移过来,上述的公式的作用就是用来寻找概率最大的状态。图中所示的就是S2S_2S2​。

在了解了上述公式的意义之后,我们开始逐步的递推,在这里,我们新增加一个函数用来回溯:
首先是第一步:
δ1(i)=π(Si)BSi(O1)δ_1(i)=π(S_i)B_{S_i}(O_1)δ1​(i)=π(Si​)BSi​​(O1​)
Ψ1(i)=0,i∈[1,p]Ψ_1(i)=0,i∈[1,p]Ψ1​(i)=0,i∈[1,p]
然后是第二步:
δ2(j)=max(δ1(i)ASiSjBSj(O2)),i∈[1,p]δ_2(j)=max(δ_1(i)A_{S_iS_j}B_{S_j}(O_2)),i∈[1,p]δ2​(j)=max(δ1​(i)ASi​Sj​​BSj​​(O2​)),i∈[1,p]
Ψ2(j)=max(δ1(i)ASiSj),i∈[1,p]Ψ_2(j)=max(δ_1(i)A_{S_iS_j}),i∈[1,p]Ψ2​(j)=max(δ1​(i)ASi​Sj​​),i∈[1,p]
依次类推到第t+1步为:
δt+1(j)=max(δt(i)ASiSjBSj(Ot+1)),i∈[1,p]δ_{t+1}(j)=max(δ_t(i)A_{S_iS_j}B_{S_j}(O_{t+1})),i∈[1,p]δt+1​(j)=max(δt​(i)ASi​Sj​​BSj​​(Ot+1​)),i∈[1,p]
Ψt+1(j)=max(δt(i)ASiSj),i∈[1,p]Ψ_{t+1}(j)=max(δ_t(i)A_{S_iS_j}),i∈[1,p]Ψt+1​(j)=max(δt​(i)ASi​Sj​​),i∈[1,p]
到最后一步的时候:
δT(j)=max(δt−1(i)ASiSjBSj(OT)),i∈[1,p]δ_{T}(j)=max(δ_{t-1}(i)A_{S_iS_j}B_{S_j}(O_{T})),i∈[1,p]δT​(j)=max(δt−1​(i)ASi​Sj​​BSj​​(OT​)),i∈[1,p]
ΨT(j)=max(δt−1(i)ASiSj),i∈[1,p]Ψ_{T}(j)=max(δ_{t-1}(i)A_{S_iS_j}),i∈[1,p]ΨT​(j)=max(δt−1​(i)ASi​Sj​​),i∈[1,p]
最后,我们找到概率最大的一条状态链为:
maxE(Q)=max(δT(j)),j∈[1,p]max E(Q)=max(δ_{T}(j)),j∈[1,p]maxE(Q)=max(δT​(j)),j∈[1,p]

2.2.3 算法描述
  1. 初始化:
    δ1(i)=π(Si)BSi(O1)δ_1(i)=π(S_i)B_{S_i}(O_1)δ1​(i)=π(Si​)BSi​​(O1​)
    Ψ1(i)=0,i∈[1,p]Ψ_1(i)=0,i∈[1,p]Ψ1​(i)=0,i∈[1,p]
  2. 归纳计算:
    δt+1(j)=max(δt(i)ASiSjBSj(Ot+1)),i∈[1,p]δ_{t+1}(j)=max(δ_t(i)A_{S_iS_j}B_{S_j}(O_{t+1})),i∈[1,p]δt+1​(j)=max(δt​(i)ASi​Sj​​BSj​​(Ot+1​)),i∈[1,p]
    Ψt+1(j)=max(δt(i)ASiSj),i∈[1,p]Ψ_{t+1}(j)=max(δ_t(i)A_{S_iS_j}),i∈[1,p]Ψt+1​(j)=max(δt​(i)ASi​Sj​​),i∈[1,p]
  3. 获取最大路径:
    δT(j)=max(δt−1(i)ASiSjBSj(OT)),i∈[1,p]δ_{T}(j)=max(δ_{t-1}(i)A_{S_iS_j}B_{S_j}(O_{T})),i∈[1,p]δT​(j)=max(δt−1​(i)ASi​Sj​​BSj​​(OT​)),i∈[1,p]
    ΨT(j)=max(δt−1(i)ASiSj),i∈[1,p]Ψ_{T}(j)=max(δ_{t-1}(i)A_{S_iS_j}),i∈[1,p]ΨT​(j)=max(δt−1​(i)ASi​Sj​​),i∈[1,p]
    maxE(Q)=max(δT(j)),j∈[1,p]max E(Q)=max(δ_{T}(j)),j∈[1,p]maxE(Q)=max(δT​(j)),j∈[1,p]
  4. 路径回溯
    Qt=Ψt+1(Qt+1)Q_t=Ψ_{t+1}(Q_{t+1})Qt​=Ψt+1​(Qt+1​)

2.3 参数估计问题

2.3.1 问题描述

给定可观测序列O1,O2,...OTO_1,O_2,...O_TO1​,O2​,...OT​,如何确定HMM模型中的参数π,A,B来使得产生可观测序列的概率最大?

2.3.2 问题推导

我们首先给出两个定义:

θt(i)=P(O1,O2,...Ot,Qt=Si∣μ)θ_t(i)=P(O_1,O_2,...O_t,Q_t=S_i|μ)θt​(i)=P(O1​,O2​,...Ot​,Qt​=Si​∣μ)
βt(i)=P(Ot+1,Ot+1,...OT∣Qt=Si,μ)β_t(i)=P(O_{t+1},O_{t+1},...O_T|Q_t=S_i,μ)βt​(i)=P(Ot+1​,Ot+1​,...OT​∣Qt​=Si​,μ)

根据上面的定义,我们可以确定的是:
βT(i)=1,i∈[1,p]β_T(i)=1, i∈[1,p]βT​(i)=1,i∈[1,p]
βt(i)=∑j=1pAijβt+1(j)Bj(Ot+1),t∈[1,T−1]β_t(i)=∑_{j=1}^pA_{ij}β_{t+1}(j)B_j(O_{t+1}),t∈[1,T-1]βt​(i)=j=1∑p​Aij​βt+1​(j)Bj​(Ot+1​),t∈[1,T−1]

  1. 首先,我们随机化HMM的参数π,A
  2. 然后我们计算:
    ξt(i,j)=P(Qt=Si,Qt+1=Sj∣O,μ)=θt(i)Aijβt+1(j)Bj(Ot+1)ξ_t(i,j)=P(Q_t=S_i,Q_{t+1}=S_j|O,μ)=θ_t(i)A_{ij}β_{t+1}(j)B_j(O_{t+1})ξt​(i,j)=P(Qt​=Si​,Qt+1​=Sj​∣O,μ)=θt​(i)Aij​βt+1​(j)Bj​(Ot+1​)
    进一步推导之后有:
    ξt(i,j)=P(Qt=Si,Qt+1=Sj,O∣μ)P(O∣μ)=θt(i)Aijβt+1(j)Bj(Ot+1)P(O∣μ)=θt(i)Aijβt+1(j)Bj(Ot+1)∑i=1p∑j=1pθt(i)AijBj(Ot+1)βt+1(j)ξ_t(i,j)=\frac{P(Q_t=S_i,Q_{t+1}=S_j,O|μ)}{P(O|μ)}=\frac{θ_t(i)A_{ij}β_{t+1}(j)B_j(O_{t+1})}{P(O|μ)}\\ =\frac{θ_t(i)A_{ij}β_{t+1}(j)B_j(O_{t+1})}{∑_{i=1}^p∑_{j=1}^pθ_t(i)A_{ij}B_j(O_{t+1})β_{t+1}(j)}ξt​(i,j)=P(O∣μ)P(Qt​=Si​,Qt+1​=Sj​,O∣μ)​=P(O∣μ)θt​(i)Aij​βt+1​(j)Bj​(Ot+1​)​=∑i=1p​∑j=1p​θt​(i)Aij​Bj​(Ot+1​)βt+1​(j)θt​(i)Aij​βt+1​(j)Bj​(Ot+1​)​

则定义:
γt(i)=P(Qt=Si,O∣μ)=∑j=1pξt(i,j)γ_t(i)=P(Q_t=S_i,O|μ)=∑_{j=1}^pξ_t(i,j)γt​(i)=P(Qt​=Si​,O∣μ)=j=1∑p​ξt​(i,j)
3. 根据上面的计算,我们可以计算出:
π(Si)=γ1(i)π(S_i)=γ_1(i)π(Si​)=γ1​(i)
Aij=∑t=1T−1ξt(i,j)∑t=1T−1γt(i)A_{ij}=\frac{∑_{t=1}^{T-1}ξ_t(i,j)}{∑_{t=1}^{T-1}γ_t(i)}Aij​=∑t=1T−1​γt​(i)∑t=1T−1​ξt​(i,j)​
4. 对于B矩阵的计算可以采用的是
Bj(Ok)=∑t=1Tγt(j)∗δt(Ok)∑t=1Tγt(j)B_j(O_k)=\frac{∑_{t=1}^Tγ_t(j)*δ_t(O_k)}{∑_{t=1}^Tγ_t(j)}Bj​(Ok​)=∑t=1T​γt​(j)∑t=1T​γt​(j)∗δt​(Ok​)​

3、总结

在明确了HMM模型的三个问题之后,我们就可以根训练数据来训练HMM的相关参数π,A,B。对于测试数据而言,根据维特比算法,可以确定最优的状态转移序列和整个序列的概率值。

3.1 参考文献

  1. 浙江大学《机器学习》
  2. 宗成庆 《统计自然语言处理》

机器学习——隐马尔科夫(HHM)原理相关推荐

  1. 机器学习-隐马尔科夫python实现及数学原理讲解

    文章目录 1. 隐马尔科夫 2. 直观分析 3. 数学原理 4. 实现 4.1 代码 1. 隐马尔科夫   隐马尔可夫模型(hidden Markov model,HMM)是关于时序的概率模型,描述由 ...

  2. 隐马尔科夫模型原理解析

    隐马尔科夫模型是(hidden Markov model,HMM)是可用于标注问题的统计学习模型,描述由隐藏的马尔科夫链随机生成观测序列的过程. 隐马尔可夫模型(hidden Markov model ...

  3. 视频教程-隐马尔科夫算法:中文分词神器-深度学习

    隐马尔科夫算法:中文分词神器 在中国知网从事自然语言处理和知识图谱的开发,并负责带领团队完成项目,对深度学习和机器学习算法有深入研究. 吕强 ¥49.00 立即订阅 扫码下载「CSDN程序员学院APP ...

  4. 机器学习基础 HMM模型(隐马尔科夫)

    文章目录 一.马尔科夫链 1. 简介 2. 经典举例 3. 小结 二.HMM简介 1. 简单案例 2. 三个基本问题 三.HMM模型基础 1. 什么样的问题需要HMM模型 2. HMM模型的定义 3. ...

  5. 机器学习笔记(十三)——隐马尔科夫模型

    一.隐马尔科夫模型 在马尔科夫模型中,每一个状态代表了一个可以观察的事件,所以,马尔科夫模型有时称为可视马尔科夫模型(visible Markov model,VMM),这在某种程度上限制了模型的适应 ...

  6. 【火炉炼AI】机器学习044-创建隐马尔科夫模型

    [火炉炼AI]机器学习044-创建隐马尔科夫模型 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2 ...

  7. 隐马尔科夫模型模型:原理、实现

    文章目录 引入 盒子模型与盒子问题(urn problem) 随机过程 索引集 状态空间 采样函数 增量 马尔可夫链与马尔可夫过程 隐马尔科夫模型定义 示例--帮助理解 精灵.盒子与球 天气估计 原理 ...

  8. 机器学习-- > 隐马尔科夫模型(HMM)

    博客内容将首发在微信公众号"跟我一起读论文啦啦",上面会定期分享机器学习.深度学习.数据挖掘.自然语言处理等高质量论文,欢迎关注! 本篇博文将详细总结隐马模型相关知识,理解该模型有 ...

  9. 机器学习知识点(二十五)Java实现隐马尔科夫模型HMM之jahmm库

    1.隐马尔可夫模型HMM的应用场景,关乎于序列和状态变化的都可以.    发现java有可库,专为开发HMM,可惜只能在CSDN上有得下载.     2.jahmm是java开发隐马尔科夫模型的一个j ...

最新文章

  1. MySQL基础篇:数据类型
  2. eclipse+webservice开发实例
  3. 介绍一个免费的采用人工智能放大老照片的在线网站
  4. Ubuntu18.04 安装搜狗输入法后无法启动的问题
  5. 同步助手iphone4_88 元淘来的 iPhone 4 降级到 iOS 6,甚至还能跑 “大型游戏”
  6. wcf中如何Host多个WCF服务?
  7. current_session_context_class
  8. php dp0,DOS批处理中%cd%与%~dp0的区别详解
  9. 【BZOJ 1036】树的统计【树链剖分模板】
  10. ImageAI的介绍(2)
  11. Mac上的三款时钟屏保
  12. Issue during builing Android app with ant under Win7
  13. Palantir Gotham初探
  14. Dell服务器进入双系统按键,dell进bios按什么键 戴尔进bios的方法
  15. vlan的几种划分方式
  16. K2P padavan固件下宽带与IPTV融合
  17. 蒲公英wifi怎么卸载干净_蒲公英wifi怎么卸载干净
  18. echarts-箱线图(盒须图)
  19. 性能测试基础及loadRunner的使用(超详细)
  20. Windows Server 远程桌面连接不上问题解决

热门文章

  1. 复现 S2ANet RTX 2080Ti
  2. 智能电网技术:奥克尼群岛电力解决方案
  3. 判断安卓苹果IOS自动跳转到对应链接下载地址升级版
  4. 【有源滤波】滤波基础知识
  5. 周末随笔 | 笔耕者的悲哀 —— 盗亦无道
  6. Android 动态分区详解(七) overlayfs 与 adb remount 操作
  7. 错误ImportError: cannot import name ‘PILLOW_VERSION‘ from ‘PIL‘
  8. 现代中医与传统中医的差别
  9. C++小练习(原题+题解)
  10. springboot+i8n国际化