温故知新
每次学会的知识过了几天就忘了,这样不行,每看一篇论文都要学会总结!!!比看更重要
例子
隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别,地图匹配,这里主要介绍隐马尔可夫模型和维比特算法
假设我有三种类型的骰子:
- 正四面体的骰子,我们将其简称为 D4,可以随机投出 1,2,3,4 中的任意一个数字。
- 正六面体的骰子,也就是立方体的骰子,我们将其简称为 D6,可以随机投出 1,2,3,4,5,6 中的任意一个数字。
- 正八面体的骰子,我们将其简称为 D8,可以随机投出 1,2,3,4,5,6,7,8 中的任意一个数字
假设我们开始掷骰子,我们先从三个骰子里挑一个,挑到每一个骰子的概率都是1/3。然后我们掷骰子,得到一个数字,1,2,3,4,5,6,7,8中的一个。不停的重复上述过程,我们会得到一串数字,每个数字都是1,2,3,4,5,6,7,8中的一个。例如我们可能得到这么一串数字(掷骰子10次):1 6 3 5 2 7 3 5 2 4
隐马尔可夫模型
- 上面提到的骰子序列,我们称之为隐藏序列;
- 上面提到的数字序列,我们称之为观测序列;
- 上面提到的骰子的投掷概率,我们称之为观测概率;
- 上面提到的骰子的选择概率,我们称之为转换概率(发射概率);
- 观测概率和转换概率我们将其称之为模型参数。
从该例出发一共有三种情况:
- decoding 知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据掷骰子掷出的结果(可见状态链),我想知道每次掷出来的都是哪种骰子(隐含状态链)
- evaluation 还是知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据掷骰子掷出的结果(可见状态链),我想知道掷出这个结果的概率。
- learning知道骰子有几种(隐含状态数量),不知道每种骰子是什么(转换概率),观测到很多次掷骰子的结果(可见状态链),我想反推出每种骰子是什么(转换概率)。
维比特算法
一个简单的动态规划问题
首先,如果我们只掷一次骰子:
看到结果为1.对应的最大概率骰子序列就是D4,因为D4产生1的概率是1/4,高于1/6和1/8.
把这个情况拓展,我们掷两次骰子:
结果为1,6.这时问题变得复杂起来,我们要计算三个值,分别是第二个骰子是D6,D4,D8的最大概率。显然,要取到最大概率,第一个骰子必须为D4。这时,第二个骰子取到D6的最大概率是
同样的,我们可以计算第二个骰子是D4或D8时的最大概率。我们发现,第二个骰子取到D6的概率最大。而使这个概率最大时,第一个骰子为D4。所以最大概率骰子序列就是D4 D6。
继续拓展,我们掷三次骰子:同样,我们计算第三个骰子分别是D6,D4,D8的最大概率。我们再次发现,要取到最大概率,第二个骰子必须为D6。这时,第三个骰子取到D4的最大概率是
同上,我们可以计算第三个骰子是D6或D8时的最大概率。我们发现,第三个骰子取到D4的概率最大。而使这个概率最大时,第二个骰子为D6,第一个骰子为D4。所以最大概率骰子序列就是D4 D6 D4。
算法步骤
- 初始化第一个观测点的所有可能状态(对应于骰子问题,状态就指选用哪个骰子)概率。
- 从前往后遍历每一个状态,对于每一个状态,用以下方法计算当前观测点的所有可能状态的概率:遍历当前观测可能对应的所有状态;对每个状态,遍历所有上一状态,通过公式 P(当前状态) = P(上一状态) * P(上一状态转移到当前状态) * P(当前状态观测) 来计算当前状态的概率。
- 当所有观测点都遍历完之后,查找概率值最大的那个状态,然后查找这个概率值对应的上一状态,就这样一路往回找,所找到的序列(倒序的)就是最大概率的隐藏序列。
(全是抄袭,没有原创)