深度学习 (七)Hidden Markov Model

Summary

       从最开始学习算法的时候就时长听说这个算法,今天抽空我们来系统聊聊这个,如果给HMM归一下类那么它属于概率图模型(PGM)范畴,Probabilistic Graphical Models(PGM)从字意上也能看出来它是概率论和图论相结合起来了,可以看成概率和图结合起来形成了一种新的数据结构来解决新的问题,在处理复杂问题和不确定性问题方面很有优势,目前在图像处理和视频等领域已经有非常广泛的应用,而今天我们要分析的HMM也是概率图的一种,另外还有一种叫贝叶斯网络,以后再说。

theory foundation

       随机过程是依赖于参数的一族随机变量的全体,参数通常是时间维度,随机变量呢即某一现象的体现,如我们每天吃的食物的多少,今天吃了1kg明天如果饿可能吃1.5kg,我们把随时间变化的量抽象出来即随时间变化的一组随机变量,也成为随机过程,这个方向的研究产生于20世纪末,那么这一研究的价值在哪里呢?
       在研究随机过程时人们透过表面的偶然性描述出必然的内在规律并以概率的形式来描述这些规律,从偶然中悟出必然正是这一学科的魅力所在。

Markov process

       这次不拿吃饭了,拿大部分人都参与的事情股票为例,如果我们从一系列的随机过程中能抽象出来必然规则,那么你岂不是发财了,哈哈
       在研究随机过程理论时常常赋予每个随机事件一个概率,我们更关注的是未来某件事发生不发生的概率,随机过程本来是一件普通平常的事情,不过如果对过程里面的概率做各种假设,就会得到各种特殊的随机过程,那时俄国数学家 马尔科夫也假设了一种情况,他认为随机过程中每个时间发生的概率与其它事件无关,只有当前时间或条件有关,来看一下数学表述:
深度学习 (七)Hidden Markov Model_第1张图片
       以后人们就称具有这种性质的过程为马尔科夫过程。

Hidden Markov Model

       以网上经常拿出来说得例子为例,简化假设天气状况有下雨天rainy、晴天sunny两种状态,天气状态相当于一个状态集合,在一个系统中一般事件是有概率的,可以将这一过程称为马尔科夫过程,明天是否下雨只与今天有关,与过去无关,可以用S1 S2 表示这两个状态,其值构成的集合叫做状态空间,马尔科夫过程的假设即当前状态St只与前一个状态St-1有关,与St-2等之前的状态无关,如下:

       最上面为马尔科夫公式,其次为其定义,π表示状态序列的初始概率,N表示初始状态个数,有几个状态即有几个初始概率值,A表示的是随时间t到t+1时状态变换概率叫做转移概率(state transition probability)。

       在实际问题中我们往往不知道隐含状态,但可以通过隐含状态观测到发生一些事件的概率,继续以去超市为例,作为居家男人经常去超市也是常事,买一些大米、菜、油盐酱醋茶啥的,假如今天下雨我可能去超市买东西也可能去上班了work,男人毕竟要挣钱养家嘛 我还可能去健身,于是就有了下雨还是晴天都可能发生这三件事情,发生的这三件事情以及对应概率已经有了,如下图:

       上图可以看到有两个状态序列,一个是隐藏的马尔科夫过程 S = {S(rainy),S(sunny)} ,另一个是可观察到的状态序列集合, O = {O(sport),O(shop),O(work)},两个序列是概率相关的,以及两个概率矩阵,通常我们把类似于这样有一个隐马尔可夫过程和与这个过程概率相关且可观察到的序列构成的问题模型,称为隐马尔可夫模型,其目的是通过现有现象或条件来解决未知参数的马尔科夫过程问题。

Two hypothesis

  • 随机过程假设
    是针对隐含状态序列,每个隐含状态序列发生与否只与前一个有关系,与再前面的状态无关,即马尔科夫过程
  • 观察状态独立假设
    另一个假设是观察状态的序列之间相互独立,每个观察状态只与当前对应的隐含状态有关系,与其它隐含状态无关
    斜体样式

Definition

一个 HMM 模型可以用一个5元组 { N, M, π,A,B } 表示,其中:

  • N 隐藏状态的数量
    表示隐藏状态的数量,可能知道也可能不知道
  • M 观测状态的数量
    表示可观测状态的数量,可以通过训练集获得
  • π={πi} 初始状态概率
    代表的是刚开始的时候各个隐藏状态的发生概率;
  • A={aij} 为隐藏状态的转移矩阵
    N*N维矩阵,代表的是第一个状态到第二个状态发生的概率;
  • B={bij}为混淆矩阵
    N*M矩阵,代表的是处于某个隐状态的条件下,某个观测发生的概率
    在状态转移矩阵和混淆矩阵中的每个概率都是时间无关的,即当系统演化时,这些矩阵并不随时间改变。对于一个 N 和 M 固定的 HMM 来说,用 λ={π, A, B } 表示 HMM 参数

Three Question

evaluation(the probability of the observation)

       该问题是模型相关的参数都已经知道,我们是要求出来得到当前这种观察序列的概率是多少?该问题可以验证我们观察到的概率是否正确,解放一般有三种方法。

iteration

       该方法即算出产生这种序列有多少种可能,该例子中观察序列为t=1 、t=2、t=3三个时刻状态,那么每个时刻隐含状态都有两种情况,为2的3次方8中,假如隐含状态很多计算量将会很大,因此工程师这种方法不适用,计算过程如下:
深度学习 (七)Hidden Markov Model_第2张图片

forward algorithm

       此法为前向计算法,根据时间顺序从t=1时开始计算,一直到最后一个观察序列,前面计算好的值不用重复计算,有效率的提升。
深度学习 (七)Hidden Markov Model_第3张图片
深度学习 (七)Hidden Markov Model_第4张图片
深度学习 (七)Hidden Markov Model_第5张图片
       如上图在计算t=3时,可以将t=2时的结果代入,容易的出来结果。
上述算法也是基于了两个假设,隐层状态只与前一个状态有关,当前观察序列只与当前的隐含状态有关,其它无关。

recognition(corresponding state sequence)

       此类问题是最常用的一个方法,大部分问题都是已经可观察序列去寻找最可能的隐含状态序列,如语音识别、模式识别等都可以用这个猜测隐含状态的方式来解码。
看下图不断解码文字:
深度学习 (七)Hidden Markov Model_第6张图片

Viterbi (dynamic programming)

       动态规划是一种最优化算法技术,由美国数学家Bellman发明,如果一个问题含有重叠子问题求解全局最优,而且可以找到处理子问题一样的递推关系式子,即可以用动态规划技术来解决,viterbi是动态规则典型的例子。
       以上面求天气这一隐藏状态为例,已知的是观察序列以及各个概率参数,求随着时间t变化,最大的隐含状态序列是啥?
       维特比算法过程如下
       当时间t=1时 我们计算出来两种情况概率分别如下图,可以取出来最大值以及将结果缓存起来以后的步骤需要用到。
深度学习 (七)Hidden Markov Model_第7张图片
       按上图可以一次计算出来t=2时 取哪个隐含状态概率最大,t=3 ,t=n等

用动态规划即要抽象出来公式,如下:
深度学习 (七)Hidden Markov Model_第8张图片

       验证公式,t=2代入,上图公式需要理解的是i 、j他们所属的范围都是隐含状态空间,
深度学习 (七)Hidden Markov Model_第9张图片
       上图中过程会有很多重复计算,可以缓存起来避免重复计算,动态规划在很多问题中都很有用。

training(adjust the model parameters)

       这个问题是三个钟最复杂的,即我们在各种模型中训练参数问题,使得我们的模型达到最优,训练又分为了两种情况

  • 已经观测序列和状态序列
    可以求出来各个参数表达式,根据最大似然原理来求解
  • 状态序列未知
    大概过程是假设另一个模型参数,此算法为Baum-Welch保姆韦尔奇,求两个模型参数的期望,然后不过迭代使得期望最大,新模型参数收敛,训练过程需要的样本比较多,先不祥述。

应用

       到目前为止它一直被认为是解决大多数自然语言处理问题最为快速、有效的方法,它还成功的解决了语音识别、词性标注、机器翻译等问题,它的重要程度不言而喻。
       通信的本质是一个编解码和传输的过程,大家可以看一看吴军老师的数学之美第五章关于隐马的描述以及例子。

  • 词性标注
    深度学习 (七)Hidden Markov Model_第10张图片
  • 语音识别
    深度学习 (七)Hidden Markov Model_第11张图片

随笔

维特比算法
       安德鲁维特比发明了维特比算法,并且创办了高通公司,它是通信领域应用最广泛的解码技术,将解码复杂度降低万倍,使得解码真正得到实施和应用,它是现在计算法传输上网等的基础,意义推动了互联网发展。
声波处理步骤一般分为三步
1.抽取特征 去燥
2.将特征转换为音节
3.音节解码为语句
       维特比做的事情主要在第三步将音节字符转为语句,人们可以理解的自然语言文本或声音。
       汉语二义性会有很多歧义,造成解码困难主要是计算量太大,指数爆炸,维特比是将音节看做隐含序列,将对应的语句看做是状态序列,并根据时间从t=1时逐渐解码知道句子长度,t=n,为止,大致和上述类似。

你可能感兴趣的:(算法,机器学习)