HMM学习笔记 2.docx
《HMM学习笔记 2.docx》由会员分享,可在线阅读,更多相关《HMM学习笔记 2.docx(14页珍藏版)》请在冰豆网上搜索。
HMM学习笔记2
一、前向算法2013-11-21
Findingtheprobabilityofanobservedsequence
1.Exhaustivesearchforsolution
2.Reductionofcomplexityusingrecursion
2a.Partialprobabilities,(
's)
Section3introducesananimatedexampleofthecalculationoftheprobabilities.2b.Calculating
'sattimet=1
2c.Calculating
'sattime,t(>1)
Werecallthatapartialprobabilityiscalculatedas:
t(j)=Pr(observation|hiddenstateisj)xPr(allpathstostatejattimet)
Wecanassume(recursively)thatthefirsttermoftheproductisavailable,andnowconsiderthetermPr(allpathstostatejattimet).
Tocalculatetheprobabilityofgettingtoastatethroughallpaths,wecancalculatetheprobabilityofeachpathtothatstateandsumthem-forexample,
Thenumberofpathsneededtocalculate
increasesexponentiallyasthelengthoftheobservationsequenceincreasesbutthe
'sattimet-1givetheprobabilityofreachingthatstatethroughallpreviouspaths,andwecanthereforedefine
'sattimetintermsofthoseattimet-1-i.e.,
Thuswecalculatetheprobabilitiesastheproductoftheappropriateobservationprobability(thatis,thatstatejprovokedwhatisactuallyseenattimet+1)withthesumofprobabilitiesofreachingthatstateatthattime-thislattercomesfromthetransitionprobabilitiestogetherwithafromtheprecedingstage.
Noticethatwehaveanexpressiontocalculate
attimet+1usingonlythepartialprobabilitiesattimet.
WecannowcalculatetheprobabilityofanobservationsequencegivenaHMMrecursively-i.e.weuse
'satt=1tocalculate
'satt=2;
'satt=2tocalculate
'satt=3;andsoonuntilt=T.TheprobabilityofthesequencegiventheHMMisthenthesumofthepartialprobabilitiesattimet=T
2d.Reductionofcomputationalcomplexity
Wecancomparethecomputationalcomplexityofcalculatingtheprobabilityofanobservationsequencebyexhaustiveevaluationandbytherecursiveforwardalgorithm.
WehaveasequenceofTobservations,O.WealsohaveaHiddenMarkovModel,l=(
A,B),withnhiddenstates.
Anexhaustiveevaluationwouldinvolvecomputingforallpossibleexecutionsequences
thequantity
whichsumstheprobabilityofobservingwhatwedo-notethattheloadhereisexponentialinT.Conversely,usingtheforwardalgorithmwecanexploitknowledgeoftheprevioustimesteptocomputeinformationaboutanewone-accordingly,theloadwillonlybelinearinT.
3.Summary
OuraimistofindtheprobabilityofasequenceofobservationsgivenaHMM-(Pr(observations|
).
Wereducethecomplexityofcalculatingthisprobabilitybyfirstcalculatingpartialprobabilities(
's).Theserepresenttheprobabilityofgettingtoaparticularstate,s,attimet.
Wethenseethatattimet=1,thepartialprobabilitiesarecalculatedusingtheinitialprobabilities(fromthe
vector)andPr(observation|state)(fromtheconfusionmatrix);also,thepartialprobabilitiesattimet(>1)canbecalculatedusingthepartialprobabilitiesattimet-1.
Thisdefinitionoftheproblemisrecursive,andtheprobabilityoftheobservationsequenceisfoundbycalculatingthepartialprobabilitiesattimet=1,2,...,T,andaddingall
'satt=T.
Noticethatcomputingtheprobabilityinthiswayisfarlessexpensivethancalculatingtheprobabilitiesforallsequencesandaddingthem.
二、ViterbiAlgorithm
6.1Findingmostprobablesequenceofhiddenstates
我们希望使用一个特定的HMM,然后从观察序列中找出产生该序列的最有可能的隐状态序列。
1.一个穷举搜索的方法
我们可以用下面的执行框架(executiontrellis)来表明状态(隐状态)和观察结果的关系。
我们可以通过列出所有可能的隐状态序列和找到每种组合方式所产生观测序列的概率的方法,来找到最有可能的隐状态序列。
最有可能的隐状态序列满足每种组合方式所产生观测序列的概率最大化的条件.
Pr(observedsequence|hiddenstatecombination).
例如,在上面的执行框架图中,最有可能的隐状态序列满足下式最大化:
Pr(dry,damp,soggy|sunny,sunny,sunny),Pr(dry,damp,soggy|sunny,sunny,cloudy),Pr(dry,damp,soggy|sunny,sunny,rainy),....Pr(dry,damp,soggy|rainy,rainy,rainy)
这个方法是可行的,但要通过穷举的方法计算每一种组合来找到最可能的序列,计算复杂度会非常高。
就如前向算法,我们能利用概率随时间恒定的性质来降低计算的复杂度。
6.2使用递归减少复杂性
我们将考虑使用递归的方法来找到最有可能的隐状态序列(给定HMM和观察序列)。
我们首先定义一个部分概率δ,它是在格状图中到达某个特定中间状态的概率。
然后我们来看如何计算在t=1和t=n时的部分概率。
这些部分概率与前向算法中的不同,因为他们代表了在t时刻到达一个状态最可能路径的概率而不是全部。
(局部最优能代表全局?
符合贪心选择性?
)(使用Viterbi来代替前向算法来进行evaluation会怎么样?
)
2a.局部概率(δ's)和局部最优路径
下面的trellis中对应于观察序列(dry,damp,soggy)显示了各个状态以及相应的一阶转换。
对于每一个中间状态和结束状态都有一个最大可能的路径到达该状态。
所以,在t=3时刻的每个状态都有一个最可能的路径到达它,可能是如下的情况:
我们将把这些路径叫做局部最优路径。
每一条这样的局部最优路径都有一个概率:
局部概率或δ。
不像前向算法中的局部概率,δ是到达这个状态最可能的一条路径的概率。
所以δ(i,t)是t时刻所有结束状态在i的序列的最大概率,并且局部最优路径就是产生该最大概率的序列。
对于每一个i,t的可能值对都存在着这样一个概率(和局部路径)。
尤其每一个在t=T时刻的状态,都将有一个局部概率和局部最优路径。
我们通过选择最大局部概率和最大局部概率下的局部最优路径的状态,找到最优的全局路径。
2b.计算在时刻t=1时的δ's
(给定些特定的信息如观察结果和上一状态的概率)我们把局部概率当作是到达我们当前位置的最有可能的路径来计算。
当t=1时到达该状态最可能是不存在的;但是我们可以使用在t=1时刻在某状态的并且观察结果为k1的概率,也就是:
-asintheforwardalgorithm,thisquantityiscompoundedbytheappropriateobservationprobability.
——就像在前向算法中,这个值结合了相应的观察概率。
2c.Calculatingδ'sattimet(>1)
我们现在来看在t时刻的局部概率δ是能够根据t-1时刻的局部概率求出的。
(贪心选择性)
考虑下图:
我们考虑计算t时刻到达状态X的最可能路径;这条路径将必须通过状态A,B或者C中的一个。
因此到达X最有可能的路径将会是下面3条中的一条:
(sequenceofstates),...,A,X
(sequenceofstates),...,B,X
or
(sequenceofstates),...,C,X
我们想要找到在分别以AX,BX和CX结尾的三条路径中哪一条有最大的概率。
回忆一下马尔科夫假设,给定先前的状态序列,一个状态发生的概率仅仅依赖于前n个状态。
特殊的,在一阶马尔科夫假设下,X发生的概率仅仅依赖雨其上一个状态也就是:
Pr(mostprobablepathtoA).Pr(X|A).Pr(observation|X)
按照这种方法,以AX结束有着最大概率的路径也就是到达A具有最大概率的路径。
Pr(mostprobablepathtoA).Pr(X|A).Pr(observation|X)
所以最有可能到达X的路径的概率是:
其中第一部分有t–1时刻的局部概率给出,第二部分是转移概率,第三部分是观察概率。
把上式进行推广,(观察结果是kt)在t时刻到达状态i的局部最优路径的概率是:
这里我们假定上一个的状态,使用转移概率并且乘上相应的观察概率。
然后我们选择一个概率最大的路径。
2d.Backpointers,φ's
考虑这个格状图:
在每一个中间状态和结束状态我们知道了局部概率,δ(i,j)。
然而我们的目的是在给定观察序列时在图中找到最可能的状态序列——因此我们需要一些方法在图中来记住局部最优路径。
往往我们这样写:
回忆如何计算局部概率,在t时刻的δ我们仅仅需要t–1时刻的δ。
在计算出该局部概率之后,就可以记录下那一个前驱的状态产生了δ(i,t)——也就是,如果想要在t时刻用最优的路径到达状态i,这个系统在t–1时刻的状态是哪个。
这个记录通过为每一个状态保存一个后向的指针φ来实现,这个指针指向能够最优的产生当前状态的前驱。
这里argmax操作符选择了最大化括号中表达式的索引j。
注意到这个表达式仅仅用到上一时间步的局部概率和转移概率(和计算局部概率不同)。
这是因为我们想要这些φ回答这样一个问题“如果我在这,我最有可能是从那条路径上过来的”——这个问题关系到隐状态,而对于观察结果我们可以不考虑。
2e.Advantagesoftheapproach
使用viterbi算法去理解一个观察序列有两点重要的好处
1.利用递归(迭代?
)来降低时间复杂度——这个讨论与评价前向算法时完全一样。
2.在给出了整个观察的上下文之后,viterbi算法有着非常有用的性质来提供最佳解释。
另一种方法是,例如,在执行序列上决定。
(?
)
其中
这里对于可能解释的选取是按照从左到右的方式,在给出了前面阶段的一个解释之后猜测出当期的解释。
3.Continued...
这种方法在序列中存在连续的噪声干扰的时候,将会远离正确答案。
相反的,viterbi算法在决定最可能的最后状态之前将会考虑整个序列,并且通过φ指针反向找出产生这个结果的中间步奏。
这对于存在单个噪声(非连续出现)的时候非常有用。
?
3.SectionSummary
TheViterbialgorithmprovidesacomputationallyefficientwayofanalyzingobservationsofHMMstorecapturethemostlikelyunderlyingstatesequence.Itexploitsrecursiontoreducecomputationalload,andusesthecontextoftheentiresequencetomakejudgments,therebyallowinggoodanalysisofnoise.(噪声存在的时候?
)
Inuse,thealgorithmproceedsthroughanexecutiontrelliscalculatingapartialprobabilityforeachcell,togetherwithaback-pointerindicatinghowthatcellcouldmostprobablybereached.Oncompletion,themostlikelyfinalstateistakenascorrect,andthepathtoittracedbacktot=1viathebackpointers.
三、前向算法例子(从一个实例中学习HMM前向算法)
HMM算法想必大家已经听说了好多次了,完全看公式一头雾水。
但是HMM的基本理论其实很简单。
因为HMM是马尔科夫链中的一种,只是它的状态不能直接被观察到,但是可以通过观察向量间接的反映出来,即每一个观察向量由一个具有相应概率密度分布的状态序列产生,又由于每一个状态也是随机分布的,所以HMM是一个双重随机过程。
HMM是语音识别,人体行为识别,文字识别等领域应用非常广泛。
一个HMM模型可以用5个元素来描述,包过2个状态集合和3个概率矩阵。
其分别为
隐含状态S,可观测状态O,初始状态概率矩阵π,隐含状态概率转移矩阵A,观测状态转移概率矩阵B。
HMM在实际应用中主要用来解决3类问题。
1.评估问题。
即给定观测序列O=O1O2O3…Ot和模型参数λ=(A,B,π),怎样有效计算这一观测序列出现的概率
2.解码问题。
即给定观测序列O=O1O2O3…Ot和模型参数λ=(A,B,π),怎样寻找满足这种观察序列意义上最优的隐含状态序列S。
3.学习问题。
即HMM的模型参数λ=(A,B,π)未知,如何求出这3个参数以使观测序列O=O1O2O3…Ot的概率尽可能的大。
这篇文章是针对第一个问题来说的,一般采用的是前向后向算法来解决评估问题。
这里将的是前向算法。
在此之前,先引入几个符号:
at(i):
表示到第t个观察值Ot时处于状态i。
:
表示在状态i下产生观察值的概率。
现在来看一下前向算法的理论来源。
因为我们要解决的是模型估计问题。
即计算概率
。
将其利用如下公式化简:
因此首先要先计算
,
其中Q为一给定的状态序列。
又有
其中
.
所以
。
因此最后求得
由此可以看见其计算复杂度非常大,为
。
为了解决这个问题,前向算法就出现了。
首先定义了一个前向变量。
表示从1到t,输出符号o序列,t时刻处于状态i的累计输出概率。
因为前向变量有如下性质:
初值:
,且
,最后有递推关系:
为什么这样就可以简化计算复杂度呢?
其原因很简单,因为每一次的at(i),我们都可以用at-1(i)来计算,就不用重复计算了。
如下示意图可以帮助我们形象的理解:
看了这么多公式,是不是头晕了?
不急,下面看一个实例就会完全明白的。
题目:
HMM模型如下,试通过前向算法计算产生观察符号序列O={ABAB}时每个时刻的和总概率。
当然初始概率矩阵π=(1,0,0),即开始处于状态1。
按照上面的公式理论,我们的递推依次解出at(i)。
解法如下:
t=1时:
t=2时:
t=3时:
t=4时:
所以有最后的结果:
最后将其计算过程示意图表示如下:
四、Viterbi算法例子(从一个实例中学习Viterbi算法)
在上一篇博客中,我们已经从一个例子中学会了HMM的前向算法,解决了HMM算法的第一个问题,即模型评估问题。
这一讲中我们来解决第二个问题:
HMM的解码问题,即即给定观测序列O=O1O2O3…Ot和模型参数λ=(A,B,π),怎样寻找满足这种观察序列意义上最优的隐含状态序列S,这一步中最常用的算法就是Viterbi算法了。
同样的,我们先引入3个符合:
:
表示在观察时刻t正处在状态j,且沿一条路径q1q2q3..qt,产生出的o1o2o3…ot最大概率。
:
表示的是一个状态值,该状态值产生了上面的,也就是说计算时是由上一次那个状态产生的。
:
表示在观察时刻t中所有的内最大的那个状态,所以它也是一个状态值。
由上面的解释可以得出这3个符合的数学表达式如下:
所有说当已知观察序列,要用viterbi算法求解最优状态序列时与前面一讲中的求最大观察值概率的算法非常相似。
只是在求时不再是将其来源相加,而是取其中最大的那个。
废话少说,还是看刚开始的那个题目:
HMM模型如下,试通过前向算法计算产生观察符号序列O={ABAB}时用Viterbi算法求出最大可能的状态序列。
当然初始概率矩阵π=(1,0,0),即开始处于状态1。
按照上面的公式理论,我们的递推依次解出
,
以及
。
解法如下:
第一次观察时:
第二次观察时:
第三次观察时:
第四次观察时:
其递推结果为:
所以最后的结果状态序列为s1、s2、s2、s2.
其计算结果示意图如下所示:
浅绿色的箭头表示最有可能的状态序列。
写得比较乱,大家随便凑合着看。