马可夫的有关知识整理
1.马可夫性
就是强调一个将来的状态和现在状态的一种无关性。“将来”和“过去”无关的这种特性就是强马尔科夫性。
2.马可夫夫过程
既然上面已经说出来了马尔科夫性的定义了,这里我们就来搞懂马尔科夫过程的事,马尔科夫过程就是一个符合马尔科夫性的过程。例如,我们已知一只青蛙是没有记忆的,那么这个青蛙下一步跳向什么地方就一定是和之前跳过的地方是没有关系的,那么青蛙第i次跳的位移就是一个马尔科夫过程。
但是,这里我们只强调了一件事情就是将来和过去是没有关系的,但是将来和现在可是有关系的哇,这就要求我们只要是知道了现在的过程就可以推出将来的情况,而不用关注过去的状态中,到底经历了什么东西。大致的过程我们可以描述为下图:
也就是说我们只要是知道了当前我们处于一种什么状态,接下来指向各种状态的概率我们就知道了。
当然,说到这里我们熟知的泊松过程和维纳过程自然而然就是马尔科夫过程了。
3.隐马可夫链
我们知道了上面的内容那么什么是隐马可夫链呢?这里我们首先要理解这个隐的含义,所谓的隐,就是这种我们在马可夫链上传递的过程是我们并不能直接进行观测的,而是隐藏在我们观测值得背后的。例如我们用股票来进行举例,我们直接观测到的是今天的结算价格是多少,但是我们并不能观测到今天是处于一个熊市还是一个牛市,这就是一个隐状态,隐藏在我们的观测值之后。
这样就产生了两种不同的概率:1.transition Probabilities和emmission Probabilities也就是传递概率和发射概率,传递概率指的是隐状态之间相互传递的一个过程,另外一个就是从这个隐状态转化到我们观测状态的概率的问题。
说到这里我们注意一个问题就是我们只要可以预测出隐状态是什么情况,那么我们推算出我们当前的观测状态是什么的时候,我们就变得和其他时间节点没有关系了。
总结一下,隐式马可夫链的内容当中,我们其实有的是两个内容:
1.我们在计算隐状态的时候,就算我们知道所有的状态,我们计算当前状态也仅仅需要用到上一个状态。
2.我们在计算观测状态的时候,就算我们知道所有状态,我们计算当前状态的观测状态也仅仅需要用到这个观测状态的隐状态。
3.1哪些需要是离散的?
这里我们还要额外注意一个离散性的问题到底哪些是需要离散的?哪些不需要?:
1.隐状态必须是一个离散的,如果不离散那么就不是我们当前的模型了。
2.但是我们的观测状态不一定是离散的,观测状态可能是连续的一个状态。
3.2怎么记录隐状态之间的转移概率
我们注意这样的一个问题,我们不可能在计算的时候也画一个图,所以我们需要使用其他方式来记录这种转化关系,这就出现了一个新的东西,那就是转移矩阵,需要我们转移矩阵来存储这种传递的关系。这里肯定是我们需要一个A(k×k)的矩阵来表示我们的转化过程,这里的k自然而然就是我们隐状态的种类数了。
3.3怎么记录隐状态到观测值的转移概率
这里有了之前的前车之鉴,我们处理起来就变得比较自然了。如果是离散的观测值那么我们就直接使用一个矩阵就完成任务了。当然这里就变成了B(k×l)这里的k还是隐状态的个数,l就成了观测值的种类了。
当然还有很多情况是并不离散的,是一个连续的,这就要求我们使用连续的操作来完成了。
3.4有了上面的内容,我们又该怎么表示某个观测值为Yi序列的概率呢?
我们这个上面所定义的一切,到底是为了什么?还不是为了写出某个确定的序列观测值的一个可能性问题。这就要求我们使用如下的方式:
我们看我们上面得到的式子:
1.第一个主要的问题就是,我们想要表示出这个序列的概率,我们遇见的第一个问题就是我们并不知道这个序列对应的隐状态到底是哪些隐状态,所以我们就得把所有的隐状态都尝试一次也就是上面所述的三个连加符号。
2.第二个问题就是P(y1,y2,y3,q1,q2,q3)这个东西没有办法进行直接计算,所以这就要求我们另外再进行一次操作,对这个东西进行化简,这里我们只需要使用条件概率的计算式子拆开来进行计算,这里我们就可以使用上面说道的马可夫链的性质进行化简,这样我们就可以完成化简了。当然,上述其实只是完成了一个递推的操作,这里我们显然可以继续推算完成。
好了这里,我们就顺利完成了应该具有的推算,但是这里我们发现这里最后我们必须是使用一个P(q1)也就是一个初始状态的概率。这个我们记成π。
所以我们这里要更新一下参数表,使其成为:
如下的三个参数。
3.5HMM可以做什么?(先感受一下)
我们先来简单的看第一个例子,我们粗犷的理解一下这个东西的使用范围,但是这个东西理解的也就是凭借感觉理解一下就好。
1.这样,我们就可以想到类似的东西,我们可以将其应用在NLP当中进行使用,在NLP的过程中,我们说的内容就是观测值,我们当前可能在表述的种类例如:一个原因、结果、逻辑等等,也就是我们的隐状态了。
3.6HMM具体可以做什么?
好了我们应该从马可夫的三个主要运算来理解一下这个东西,也就是下面的三个东西:
1.Evaluate评估的过程,这里就要求我们根据我们训练完成的参数来选择到底哪个更好?所谓哪个更好自然是谁的概率更加高一点的意思。
2.我们理解一下上面的东西:MLE(Maximum Likelihood Estimate,极大似然估计)当然这里写的arg max也是相同的意思,我们这里我们可以理解为一个训练的过程,因为当时的训练的方法比较不发达,所以只能使用这个来进行训练了。我们可以理解这个东西是一个训练参数λ的过程。
3.第三个过程还是一个最大似然估计的过程,这个过程当中,我们是对Q(这个过程中的隐状态)来完成,也就是我们找到的是一个对于当前情况下,最有可能的一个隐状态序列。
谈到这里我们搞一个实际的例子来感受一下,我们如何识别一个人说了什么?我们只实现一个比较简单的情况,我们让所有人都说一个单词,之后对这个单词进行训练,找出这个单词对应的参数λ,之后遇见需要判断的数据集,我们只需要使用λ来完成对其的评估就行了。将所有单词的λ代入都算一次,看看最后哪个高,自然而然就是哪个了。当然这个东西已经有点太老了,但是其想法对于我们今天的试验还是具有很好的指导意义。
3.7参数矩阵对应关系的问题
我们应当注意在i的基础上转化为j我们应当让i为行号j为列号,这个不是我们人为定义的情况,而是必须这样进行操作,如果不这样进行操作,那么我们将不能使用矩阵乘法来快速完成状态转化的操作。
所以这里的初始状态i为行号,转化状态j为列号是被迫为之,而不是我们想这样进行定义。
3.8计算的时候还有什么需要注意的
看到这里我们已经可以顺利理解下面的例子了。但是我们仔细一看这里的计算量是非常巨大的,其计算量的级别大约是k的t(马可夫链隐状态传递的次数)次方的大小,也就是随着传递次数的增加会进行指数级别的增长。当然这里我们处理的是评估的问题,当然其实这里不仅仅是一个评估的问题,我们其实在进行最大似然的时候也得使用这个评估。
3.8.1 forward algorithm
这里我们思考一下为什么这个东西会有这么大的计算量,那当然是我们重复计算了非常多的问题,没有很好的利用之前的计算成功,这时候我们就应当想到我们的动态规划操作。
说到动态规划,我们其实最主要的任务就是寻找两个问题之间的推导过程,也就是递归的方式。我们需要找两个内容的推算方法。
这里我们定义一个α来帮助我们代替后面繁杂的概率式子,这样我们经过推算就很简答的可以获得下面的内容,当然这里还有一个问题,就是我们概率和参数矩阵的对应关系的问题,对应关系是概率在后的表示行,概率在前的表示列。这个原因我们前面已经说过了。
当然我们就可以顺利获得我们需要的内容了,这里是在末尾状态为i的情况下,我们获得这个序列的可能性,我们接下来需要获得整个序列的可能性,我们只需要进行一个累加就完事了。
3.8.2 backward algorithm
我们之前的推算是正向进行推算,其实反向也可以进行推算,所谓反向就是从后面开始推算,推算的内容是下面这个:
先理解一下这个东西干什么,这个东西就是我们需要使用在t处的隐状态已知,来推算后面这一系列观测状态的概率问题,我们这里思考一下,其实这个过程也可以直接推算出来只是比较复杂,我们也应当使用上面的动归思想,只是这次是从后向前进行动归。
还是找一个递归的关系,我们之前是前向递归,我们需要的是利用之前的计算结果,我们这里是反向传播,我们需要的是怎么把我们现在做的事情交给后面的人来做。
所以我们就得想一下怎么交给后面的人,我们自然而然需要将后面一个可以做的事情写下来,看看我们还需要做什么事情,发现只需要完成下面两个传递,我们就可以把任务交给下一个人了。
那么写出推导的过程就比较自然了:
好了这样就开始传递起来了。
3.8.3 forward和backward可以完成什么
当然这里和我们现在深度学习的backward和forward不是一个东西,这个是这里面专有的一个东西,大致将其理解成局部变量就可以吧。
这样的话,我们就可以在λ确定的情况下,在第t个隐状态为i的情况下,获得这个序列的概率。其实就是序列和λ第t个状态为i的该率为多少。