机器学习——隐马尔科夫(HHM)模型原理
1 从马尔科夫模型到隐马尔科夫模型
1.1 马尔科夫过程引入
首先,我们先给出一张图:
在上面的图里,给出的是一个链式的结构,结构中的每一个节点称之为一个状态。每一个状态
Qi
Qi的取值是一个范围
[S0,Sn]
[S0,Sn],我们称之为状态空间。并且,每一个状态
Qi
Qi的取值与之前状态的取值有关。也就是说
Qi
Qi在状态空间的和
Q1,Q2,..Qi−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(Qi=Si)=P(Qi=Sj∣Q1=Si∈[S0,Sn],Q2=Si∈[S0,Sn],...,Qi−1=Si∈[S0,Sn])
其中
Qi−1=Si∈[S0,Sn]
Qi−1=Si∈[S0,Sn]表示状态
Qi
Qi的取值
Si
Si属于样本空间的某一个。现在我们做出一个强假设,假设当前状态的取值仅仅和前一个状态的取值有关。用公式表示就是:
P(Qi=Si)=P(Qi=Sj∣Qi−1=Si∈[S0,Sn])
P(Qi=Si)=P(Qi=Sj∣Qi−1=Si∈[S0,Sn])
我们将其称为一阶马尔科夫过程。如果状态空间
Si
Si是离散的值,我们就称其为离散的一阶马尔科夫过程。
或许上面的描述过于抽象化,下面我们举一个例子来解释这个过程,假设有如下三个状态和状态转移矩阵:
首先,我们假设状态空间为
[S1,S2,S3]
[S1,S2,S3]
状态S1:名词(N)
状态S2:动词(V)
状态S3:形容词(adj)
假设状态
Q1
Q1的取值为
S1
S1,状态
Q2
Q2的取值为
S2
S2,状态
Q3
Q3的取值为
S3
S3,状态
Q4
Q4的取值为
S3
S3,那么我们现在要确定
Q5
Q5为状态的
S1
S1的概率就是:
P(Q5=S1)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)
P(Q5=S1)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)
下面,我们在具有给出一个状态转移的矩阵
⎡⎣⎢⎢S1S2S3S10.30.50.4S20.50.30.2S30.20.20.4⎤⎦⎥⎥
⎣⎢⎢⎡S1S2S3S10.30.50.4S20.50.30.2S30.20.20.4⎦⎥⎥⎤
转移矩阵的概念是,从某一个状态
Si
Si转移到另外一个状态
Sj
Sj的概率。在我们上面的式子中:
P(Q5=Sj)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)
P(Q5=Sj)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)
假设
Q1
Q1状态的是确定的
S1
S1,那么从状态值
S1
S1转移的到
Q2
Q2对应的状态值
S2
S2的概率为0.5,同理从
S2
S2转移到
Q3
Q3状态的状态值
S3
S3的概率为0.2,从
S3
S3转移到
Q4
Q4状态的状态值
S3
S3的概率为0.4,则
P(Q5=S1)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)=0.5∗0.2∗0.4
P(Q5=S1)=P(Q5=Sj∣Q1=S1,Q2=S2,Q3=S3,Q4=S3)=0.5∗0.2∗0.4
如果是一阶马尔科夫过程,并且已经确定了
Q4=S3
Q4=S3,则可以确定概率为:
P(Q5=Sj)=P(Q5=Sj∣Q4=S3)=0.4
P(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}
2 HMM模型推导过程
对于HMM模型的求解过程,通常是从三个问题开始的,我们下面分别对这三个问题进行一一的推导和求解。
2.1 估计问题
2.1.1 问题描述
给定一个观察序列
O={O1,O2,...OT}
O={O1,O2,...OT}和HMM模型
μ={π,A,B}
μ={π,A,B},如何计算观察序列O的概率?
对于这个问题,首先我们要明确的是对于每一个可以观测的数据而言,其可以用任何一个状态Si来生成。
2.1.2 问题推导
对于第一个可以观测的数据
O1
O1而言,整个模型生成
O1
O1的概率是各个状态生成
O1
O1的概率之和。也就是
∑SpQ1=S1bQ1(j)
∑Q1=S1SpbQ1(j),同时由于模型是以一定的概率来生成初始状态
Q1
Q1的,那么也就是说,整个模型生成第一个可观测元素的概率为:
P(O1∣μ)=∑SpQ1=S1π(Q1)∗BQ1(O1)
P(O1∣μ)=Q1=S1∑Spπ(Q1)∗BQ1(O1)
对于可观测序列的第二个元素
O2
O2而言,首先是由第一个状态
Q1
Q1转移到第二个状态
Q2
Q2,在有状态
Q2
Q2来生成的。由于状态
Q2
Q2的取值范围是
{S0,S1,...Sp−1}
{S0,S1,...Sp−1},那么,有状态
Q2
Q2生成可以观测的元素
O2
O2的概率就是各个状态生成
O2
O2的概率和,用数学表达式表示就是:
∑SpQ2=S1bQ2(j)
Q2=S1∑SpbQ2(j)。
同时,我们还需要考虑到的时,
Q2
Q2是由
Q1
Q1转移过来的。那么,我们就必须要考虑到状态转移的概率。对于
Q2
Q2状态的任意一个取值
Si
Si而言,产生这个状态的概率是由
Q1
Q1的任意一个取值产生的,那么模型产生
Si
Si的概率,就为:
∑SpQ1=S1π(Q1)AQ1Si
Q1=S1∑Spπ(Q1)AQ1Si
则,由状态
Q1
Q1转移到状态
Q2
Q2的概率为:
∑SpQ1=S1π(Q1)∑SpQ2=S1AQ1Q2
Q1=S1∑Spπ(Q1)Q2=S1∑SpAQ1Q2
则,由μ生成可观测元素
O1,O2
O1,O2的概率为:
∑SpQ1=S1π(Q1)BQ1(O1)∑SpQ2=S1AQ1Q2BQ2(O2)
Q1=S1∑Spπ(Q1)BQ1(O1)Q2=S1∑SpAQ1Q2BQ2(O2)
依次类推,可观测序列的第三个元素
O3
O3产生的概率也是首先状态
Q3
Q3的所有的取值
Si
Si生成
O3
O3的概率和,同时考虑从状态
Q1,Q2
Q1,Q2转移到
Q3
Q3的概率,就可以推导出产生
O1,O2,O3
O1,O2,O3的概率为:
∑SpQ1=S1π(Q1)BQ1(O1)∑SpQ2=S1AQ1Q2BQ2(O2)∑SpQ3=S1AQ2Q3BQ3(O3)
Q1=S1∑Spπ(Q1)BQ1(O1)Q2=S1∑SpAQ1Q2BQ2(O2)Q3=S1∑SpAQ2Q3BQ3(O3)
不断递推之后,我们可以知道生成整个序列的概率为:
∑SpQ1=S1π(Q1)BQ1(O1)∑SpQ2=S1AQ1Q2BQ2(O2).....∑SpQT=S1AQT−1QTBQT(OT)
Q1=S1∑Spπ(Q1)BQ1(O1)Q2=S1∑SpAQ1Q2BQ2(O2).....QT=S1∑SpAQT−1QTBQT(OT)
上面的递推公式我们可以很容易的就确定。但是,这里存在的问题在于,如果我们想要获得观测序列的概率值,我们就必须穷尽所有的状态序列。也就是
(p)T
(p)T。为了更好的解决这个问题,提出了前向算法,过程描述如下:
首先定义:
αt(i)=P(O1,O2,...Ot,Qt=Si∣μ)
αt(i)=P(O1,O2,...Ot,Qt=Si∣μ)
该公式主要描述的是假设已经通过μ生成了{
O1,O2,...Ot−1
O1,O2,...Ot−1}的观测序列,同时在t时刻转移到
Si
Si状态,并由
Si
Si状态生成
Ot
Ot的概率值。
当第一个时刻的时候有:
α1(i)=P(O1,Q1=Si∣μ)=π(Si)Bi(O1)
α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(O1,O2,...Ot,Ot,Qt+1=Sj∣μ)
进一步,我们可以推导出
αt+1(j)=P(O1,O2,...Ot,Ot+1,Qt+1=Sj∣μ)=∑pi=1αt(i)AijBj(Ot+1)
αt+1(j)=P(O1,O2,...Ot,Ot+1,Qt+1=Sj∣μ)=i=1∑pαt(i)AijBj(Ot+1)
根据递推公式,我们可以确定最后一个时刻T的时候,有:
αT(j)=P(O1,O2,...OT,QT=Sj∣μ)=∑pi=1αT−1(i)AijBj(OT)
αT(j)=P(O1,O2,...OT,QT=Sj∣μ)=i=1∑pαT−1(i)AijBj(OT)
最后,对与整可观测序列的概率,就是对于各个
αT(j)
αT(j)求和,用公式表达就是:
P(O∣μ)=∑pj=1P(O1,O2,...OT,QT=Sj∣μ)=∑Pj=1αT(j)
P(O∣μ)=j=1∑pP(O1,O2,...OT,QT=Sj∣μ)=j=1∑PαT(j)
我们用一个图来描述一下上面的过程:
前一列是t时刻所有可能的状态
Si
Si,后一列是t+1时刻的
Sj
Sj状态。也就是我们在计算t+1时刻的
Sj
Sj状态的时候,已经考虑到了t时刻的所有状态。
2.1.3 算法过程
- 初始化第一个时刻的α,也就是:
α1(i)=P(O1,Q1=Si∣μ)=π(Si)Bi(O1)
α1(i)=P(O1,Q1=Si∣μ)=π(Si)Bi(O1)
- 归纳计算
αt+1(j)=P(O1,O2,...Ot,Ot+1,Qt+1=Sj∣μ)=∑pi=1αt(i)AijBj(Ot+1)
αt+1(j)=P(O1,O2,...Ot,Ot+1,Qt+1=Sj∣μ)=i=1∑pαt(i)AijBj(Ot+1)
- 最后求和
P(O∣μ)=∑pj=1P(O1,O2,...OT,QT=Sj∣μ)=∑Pj=1αT(j)
P(O∣μ)=j=1∑pP(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))
maxE(Q)=max(π(SQ1)BSQ1(O1)AQ1Q2BSQ2(O2)AQ2Q3).....AQT−1QTBSQT(OT))
对于每一个
Qi
Qi可以取状态空间S中的某一个状态。
2.2.2 问题推导
对于求解这个问题,我们采用的是维特比算法,其数学推导过程如下:
首先,我们给出如下的递推公式:
δt(i)=max(P(Q1,Q2,....Qt−1,Qt=Si,O1,O2,...Ot))
δt(i)=max(P(Q1,Q2,....Qt−1,Qt=Si,O1,O2,...Ot))
我们来简单的解释以下这个公式,这个公式的意义在于在t时刻的时候,当该时刻取状态
Si
Si的时候能够获取到的关于可观测的序列的最大概率。如下图所示:
如上图所示,前面的一列是t-1时刻的可能取的所有状态,后一列是t时刻的j状态,对于j状态而言,可以由前一个时刻的可以取的任意一个状态转移过来,上述的公式的作用就是用来寻找概率最大的状态。图中所示的就是
S2
S2。
在了解了上述公式的意义之后,我们开始逐步的递推,在这里,我们新增加一个函数用来回溯:
首先是第一步:
δ1(i)=π(Si)BSi(O1)
δ1(i)=π(Si)BSi(O1)
Ψ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)ASiSjBSj(O2)),i∈[1,p]
Ψ2(j)=max(δ1(i)ASiSj),i∈[1,p]
Ψ2(j)=max(δ1(i)ASiSj),i∈[1,p]
依次类推到第t+1步为:
δt+1(j)=max(δt(i)ASiSjBSj(Ot+1)),i∈[1,p]
δt+1(j)=max(δt(i)ASiSjBSj(Ot+1)),i∈[1,p]
Ψt+1(j)=max(δt(i)ASiSj),i∈[1,p]
Ψt+1(j)=max(δt(i)ASiSj),i∈[1,p]
到最后一步的时候:
δT(j)=max(δt−1(i)ASiSjBSj(OT)),i∈[1,p]
δT(j)=max(δt−1(i)ASiSjBSj(OT)),i∈[1,p]
ΨT(j)=max(δt−1(i)ASiSj),i∈[1,p]
ΨT(j)=max(δt−1(i)ASiSj),i∈[1,p]
最后,我们找到概率最大的一条状态链为:
maxE(Q)=max(δT(j)),j∈[1,p]
maxE(Q)=max(δT(j)),j∈[1,p]
2.2.3 算法描述
- 初始化:
δ1(i)=π(Si)BSi(O1)
δ1(i)=π(Si)BSi(O1)
Ψ1(i)=0,i∈[1,p]
Ψ1(i)=0,i∈[1,p]
- 归纳计算:
δt+1(j)=max(δt(i)ASiSjBSj(Ot+1)),i∈[1,p]
δt+1(j)=max(δt(i)ASiSjBSj(Ot+1)),i∈[1,p]
Ψt+1(j)=max(δt(i)ASiSj),i∈[1,p]
Ψt+1(j)=max(δt(i)ASiSj),i∈[1,p]
- 获取最大路径:
δT(j)=max(δt−1(i)ASiSjBSj(OT)),i∈[1,p]
δT(j)=max(δt−1(i)ASiSjBSj(OT)),i∈[1,p]
ΨT(j)=max(δt−1(i)ASiSj),i∈[1,p]
ΨT(j)=max(δt−1(i)ASiSj),i∈[1,p]
maxE(Q)=max(δT(j)),j∈[1,p]
maxE(Q)=max(δT(j)),j∈[1,p]
- 路径回溯
Qt=Ψt+1(Qt+1)
Qt=Ψt+1(Qt+1)
2.3 参数估计问题
2.3.1 问题描述
给定可观测序列
O1,O2,...OT
O1,O2,...OT,如何确定HMM模型中的参数π,A,B来使得产生可观测序列的概率最大?
2.3.2 问题推导
我们首先给出两个定义:
θt(i)=P(O1,O2,...Ot,Qt=Si∣μ)
θt(i)=P(O1,O2,...Ot,Qt=Si∣μ)
βt(i)=P(Ot+1,Ot+1,...OT∣Qt=Si,μ)
βt(i)=P(Ot+1,Ot+1,...OT∣Qt=Si,μ)
根据上面的定义,我们可以确定的是:
βT(i)=1,i∈[1,p]
βT(i)=1,i∈[1,p]
βt(i)=∑pj=1Aijβt+1(j)Bj(Ot+1),t∈[1,T−1]
βt(i)=j=1∑pAijβt+1(j)Bj(Ot+1),t∈[1,T−1]
- 首先,我们随机化HMM的参数π,A
- 然后我们计算:
ξ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,μ)=θ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)∑pi=1∑pj=1θt(i)AijBj(Ot+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)AijBj(Ot+1)βt+1(j)θt(i)Aijβt+1(j)Bj(Ot+1)
则定义:
γt(i)=P(Qt=Si,O∣μ)=∑pj=1ξt(i,j)
γt(i)=P(Qt=Si,O∣μ)=j=1∑pξt(i,j)
3. 根据上面的计算,我们可以计算出:
π(Si)=γ1(i)
π(Si)=γ1(i)
Aij=∑T−1t=1ξt(i,j)∑T−1t=1γt(i)
Aij=∑t=1T−1γt(i)∑t=1T−1ξt(i,j)
4. 对于B矩阵的计算可以采用的是
Bj(Ok)=∑Tt=1γt(j)∗δt(Ok)∑Tt=1γt(j)
Bj(Ok)=∑t=1Tγt(j)∑t=1Tγt(j)∗δt(Ok)
3、总结
在明确了HMM模型的三个问题之后,我们就可以根训练数据来训练HMM的相关参数π,A,B。对于测试数据而言,根据维特比算法,可以确定最优的状态转移序列和整个序列的概率值。
3.1 参考文献
- 浙江大学《机器学习》
- 宗成庆 《统计自然语言处理》
转载:
https://blog.csdn.net/hei653779919/article/details/104227688