16. 概率图模型

views 258 words

上篇主要介绍了半监督学习,首先从如何利用未标记样本所蕴含的分布信息出发,引入了半监督学习的基本概念,即训练数据同时包含有标记样本和未标记样本的学习方法;接着分别介绍了几种常见的半监督学习方法:生成式方法基于对数据分布的假设,利用未标记样本隐含的分布信息,使得对模型参数的估计更加准确;TSVM给未标记样本赋予伪标记,并通过不断调整易出错样本的标记得到最终输出;基于分歧的方法结合了集成学习的思想,通过多个学习器在不同视图上的协作,有效利用了未标记样本数据 ;最后半监督聚类则是借助已有的监督信息来辅助聚类的过程,带约束k-均值算法需检测当前样本划分是否满足约束关系,带标记k-均值算法则利用有标记样本指定初始类中心。本篇将讨论一种基于图的学习算法–概率图模型。

15、概率图模型

现在再来谈谈机器学习的核心价值观,可以更通俗地理解为:根据一些已观察到的证据来推断未知,更具哲学性地可以阐述为:未来的发展总是遵循着历史的规律。其中基于概率的模型将学习任务归结为计算变量的概率分布,正如之前已经提到的:生成式模型先对联合分布进行建模,从而再来求解后验概率,例如:贝叶斯分类器先对联合分布进行最大似然估计,从而便可以计算类条件概率;判别式模型则是直接对条件分布进行建模。

概率图模型(probabilistic graphical model)是一类用图结构来表达各属性之间相关关系的概率模型,一般而言:图中的一个结点表示一个或一组随机变量,结点之间的边则表示变量间的相关关系,从而形成了一张“变量关系图”。若使用有向的边来表达变量之间的依赖关系,这样的有向关系图称为贝叶斯网(Bayesian nerwork)或有向图模型;若使用无向边,则称为马尔可夫网(Markov network)或无向图模型。

15.1 隐马尔可夫模型(HMM)

隐马尔可夫模型(Hidden Markov Model,简称HMM)是结构最简单的一种贝叶斯网,在语音识别与自然语言处理领域上有着广泛的应用。HMM中的变量分为两组:状态变量观测变量,其中状态变量一般是未知的,因此又称为“隐变量”,观测变量则是已知的输出值。在隐马尔可夫模型中,变量之间的依赖关系遵循如下两个规则:

1. 观测变量的取值仅依赖于状态变量2. 下一个状态的取值仅依赖于当前状态,通俗来讲:现在决定未来,未来与过去无关,这就是著名的马尔可夫性

iwYPmR.png

基于上述变量之间的依赖关系,我们很容易写出隐马尔可夫模型中所有变量的联合概率分布:

iwY9X9.png

易知:欲确定一个HMM模型需要以下三组参数

iwYi01.png

当确定了一个HMM模型的三个参数后,便按照下面的规则来生成观测值序列:

iwYFTx.png

在实际应用中,HMM模型的发力点主要体现在下述三个问题上:

iwYEtK.png

15.1.1 HMM评估问题

HMM评估问题指的是:给定了模型的三个参数与观测值序列,求该观测值序列出现的概率。例如:对于赌场问题,便可以依据骰子掷出的结果序列来计算该结果序列出现的可能性,若小概率的事件发生了则可认为赌场的骰子有作弊的可能。解决该问题使用的是前向算法,即步步为营,自底向上的方式逐步增加序列的长度,直到获得目标概率值。在前向算法中,定义了一个前向变量,即给定观察值序列且t时刻的状态为Si的概率:

iwYVfO.png

基于前向变量,很容易得到该问题的递推关系及终止条件:

iwYAk6.png

因此可使用动态规划法,从最小的子问题开始,通过填表格的形式一步一步计算出目标结果。

15.1.2 HMM解码问题

HMM解码问题指的是:给定了模型的三个参数与观测值序列,求可能性最大的状态序列。例如:在语音识别问题中,人说话形成的数字信号对应着观测值序列,对应的具体文字则是状态序列,从数字信号转化为文字正是对应着根据观测值序列推断最有可能的状态值序列。解决该问题使用的是Viterbi算法,与前向算法十分类似地,Viterbi算法定义了一个Viterbi变量,也是采用动态规划的方法,自底向上逐步求解。

iwYepD.png

15.1.3 HMM学习问题

HMM学习问题指的是:给定观测值序列,如何调整模型的参数使得该序列出现的概率最大。这便转化成了机器学习问题,即从给定的观测值序列中学习出一个HMM模型,该问题正是EM算法的经典案例之一。其思想也十分简单:对于给定的观测值序列,如果我们能够按照该序列潜在的规律来调整模型的三个参数,则可以使得该序列出现的可能性最大。假设状态值序列也已知,则很容易计算出与该序列最契合的模型参数:

iwYm1e.png

但一般状态值序列都是不可观测的,且即使给定观测值序列与模型参数,状态序列仍然遭遇组合爆炸。因此上面这种简单的统计方法就行不通了,若将状态值序列看作为隐变量,这时便可以考虑使用EM算法来对该问题进行求解:

【1】首先对HMM模型的三个参数进行随机初始化; 【2】根据模型的参数与观测值序列,计算t时刻状态为i且t+1时刻状态为j的概率以及t时刻状态为i的概率。

iwYn6H.png iwYdns.png

【3】接着便可以对模型的三个参数进行重新估计:

iwYY9S.png

【4】重复步骤2-3,直至三个参数值收敛,便得到了最终的HMM模型。

15.2 马尔可夫随机场(MRF)

马尔可夫随机场(Markov Random Field)是一种典型的马尔可夫网,即使用无向边来表达变量间的依赖关系。在马尔可夫随机场中,对于关系图中的一个子集,若任意两结点间都有边连接,则称该子集为一个团;若再加一个结点便不能形成团,则称该子集为极大团。MRF使用势函数来定义多个变量的概率分布函数,其中每个(极大)团对应一个势函数,一般团中的变量关系也体现在它所对应的极大团中,因此常常基于极大团来定义变量的联合概率分布函数。具体而言,若所有变量构成的极大团的集合为C,则MRF的联合概率函数可以定义为:

iwYGh8.png

对于条件独立性,马尔可夫随机场通过分离集来实现条件独立,若A结点集必须经过C结点集才能到达B结点集,则称C为分离集。书上给出了一个简单情形下的条件独立证明过程,十分贴切易懂,此处不再展开。基于分离集的概念,得到了MRF的三个性质:

全局马尔可夫性:给定两个变量子集的分离集,则这两个变量子集条件独立。 局部马尔可夫性:给定某变量的邻接变量,则该变量与其它变量条件独立。 成对马尔可夫性:给定所有其他变量,两个非邻接变量条件独立。

iwY07q.png

对于MRF中的势函数,势函数主要用于描述团中变量之间的相关关系,且要求为非负函数,直观来看:势函数需要在偏好的变量取值上函数值较大,例如:若x1与x2成正相关,则需要将这种关系反映在势函数的函数值中。一般我们常使用指数函数来定义势函数:

iwY8tf.png

15.3 条件随机场(CRF)

前面所讲到的隐马尔可夫模型和马尔可夫随机场都属于生成式模型,即对联合概率进行建模,条件随机场则是对条件分布进行建模。CRF试图在给定观测值序列后,对状态序列的概率分布进行建模,即P(y | x)。直观上看:CRF与HMM的解码问题十分类似,都是在给定观测值序列后,研究状态序列可能的取值。CRF可以有多种结构,只需保证状态序列满足马尔可夫性即可,一般我们常使用的是链式条件随机场

iwYt1g.png

与马尔可夫随机场定义联合概率类似地,CRF也通过团以及势函数的概念来定义条件概率P(y | x)。在给定观测值序列的条件下,链式条件随机场主要包含两种团结构:单个状态团及相邻状态团,通过引入两类特征函数便可以定义出目标条件概率:

iwYNcQ.png

以词性标注为例,如何判断给出的一个标注序列靠谱不靠谱呢?转移特征函数主要判定两个相邻的标注是否合理,例如:动词+动词显然语法不通;状态特征函数则判定观测值与对应的标注是否合理,例如: ly结尾的词–>副词较合理。因此我们可以定义一个特征函数集合,用这个特征函数集合来为一个标注序列打分,并据此选出最靠谱的标注序列。也就是说,每一个特征函数(对应一种规则)都可以用来为一个标注序列评分,把集合中所有特征函数对同一个标注序列的评分综合起来,就是这个标注序列最终的评分值。可以看出:特征函数是一些经验的特性

15.4 学习与推断

对于生成式模型,通常我们都是先对变量的联合概率分布进行建模,接着再求出目标变量的边际分布(marginal distribution),那如何从联合概率得到边际分布呢?这便是学习与推断。下面主要介绍两种精确推断的方法:变量消去信念传播

15.4.1 变量消去

变量消去利用条件独立性来消减计算目标概率值所需的计算量,它通过运用乘法与加法的分配率,将对变量的积的求和问题转化为对部分变量交替进行求积与求和的问题,从而将每次的运算控制在局部,达到简化运算的目的。

iwYUXj.png iwYwBn.png

15.4.2 信念传播

若将变量求和操作看作是一种消息的传递过程,信念传播可以理解成:一个节点在接收到所有其它节点的消息后才向另一个节点发送消息,同时当前节点的边际概率正比于他所接收的消息的乘积:

iwYDA0.png

因此只需要经过下面两个步骤,便可以完成所有的消息传递过程。利用动态规划法的思想记录传递过程中的所有消息,当计算某个结点的边际概率分布时,只需直接取出传到该结点的消息即可,从而避免了计算多个边际分布时的冗余计算问题。

1.指定一个根节点,从所有的叶节点开始向根节点传递消息,直到根节点收到所有邻接结点的消息(从叶到根); 2.从根节点开始向叶节点传递消息,直到所有叶节点均收到消息(从根到叶)

iwYgc4.png

15.5 LDA话题模型

话题模型主要用于处理文本类数据,其中隐狄利克雷分配模型(Latent Dirichlet Allocation,简称LDA)是话题模型的杰出代表。在话题模型中,有以下几个基本概念:词(word)、文档(document)、话题(topic)。

:最基本的离散单元; 文档:由一组词组成,词在文档中不计顺序; 话题:由一组特定的词组成,这组词具有较强的相关关系。

在现实任务中,一般我们可以得出一个文档的词频分布,但不知道该文档对应着哪些话题,LDA话题模型正是为了解决这个问题。具体来说:LDA认为每篇文档包含多个话题,且其中每一个词都对应着一个话题。因此可以假设文档是通过如下方式生成:

iwY2jJ.png

这样一个文档中的所有词都可以认为是通过话题模型来生成的,当已知一个文档的词频分布后(即一个N维向量,N为词库大小),则可以认为:每一个词频元素都对应着一个话题,而话题对应的词频分布则影响着该词频元素的大小。因此很容易写出LDA模型对应的联合概率函数:

iwYc3F.png iwYWu9.png

从上图可以看出,LDA的三个表示层被三种颜色表示出来:

corpus-level(红色): α和β表示语料级别的参数,也就是每个文档都一样,因此生成过程只采样一次。 document-level(橙色): θ是文档级别的变量,每个文档对应一个θ。 word-level(绿色): z和w都是单词级别变量,z由θ生成,w由z和β共同生成,一个单词w对应一个主题z。

通过上面对LDA生成模型的讨论,可以知道LDA模型主要是想从给定的输入语料中学习训练出两个控制参数α和β,当学习出了这两个控制参数就确定了模型,便可以用来生成文档。其中α和β分别对应以下各个信息:

α:分布p(θ)需要一个向量参数,即Dirichlet分布的参数,用于生成一个主题θ向量; β:各个主题对应的单词概率分布矩阵p(w|z)。

把w当做观察变量,θ和z当做隐藏变量,就可以通过EM算法学习出α和β,求解过程中遇到后验概率p(θ,z|w)无法直接求解,需要找一个似然函数下界来近似求解,原作者使用基于分解(factorization)假设的变分法(varialtional inference)进行计算,用到了EM算法。每次E-step输入α和β,计算似然函数,M-step最大化这个似然函数,算出α和β,不断迭代直到收敛。

在此,概率图模型就介绍完毕。上周受到协同训练的启发,让实验的小伙伴做了一个HMM的slides,结果扩充了好多知识,所以完成这篇笔记还是花费了不少功夫,还刚好赶上实验室没空调回到解放前的日子,可谓汗流之作…


HMM的三个基本问题

  1. 评估(Evaluation)
    • 给定 HMM,即$\mu = [\pi,A,B]$,求某个观察序列的概率. 可采用前向算法进行解决.
    • 例如:给定一个天气的隐马尔可夫模型,包括第一天的天气概率分布,天气转移概率矩阵,特定天气下树叶的湿度概率分布。求第一天湿度为 1,第二天湿度为 2,第三天湿度为 3 的概率
  2. 解码(Decoding)
    • 给定 HMM,即$\mu = [\pi,A,B]$,以及某个观察序列,求得天气的序列. 可以用Viterbi算法解决.
    • 例如:给定一个天气的隐马尔可夫模型,包括第一天的天气概率分布,天气转移概率矩阵,特定天气下树叶的湿度概率分布。并且已知第一天湿度为 1,第二天湿度为 2,第三天湿度为 3。求得这三天的天气情况
    • 即:发现“最优”状态序列能够“最好地解释”观察序列
  3. 学习(Learning)
    • 给定一个观察序列,求得一个隐马尔可夫模型. 可以用EM算法解决.
    • 例如:已知第一天湿度为 1,第二天湿度为 2,第三天湿度为 3。求得一个天气的隐马尔可夫模型,包括第一天的天气,天气转移概率矩阵,特定天气下树叶的湿度概率分布

隐马尔可夫模型(HMM)

隐马尔科夫模型定义

隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程

隐藏的马尔可夫链随机生成的状态的序列,称为状态序列(state sequence);每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(observation sequence).

序列的每一个位置又可以看作是一个时刻.

下面我们引入一些符号来表示这些定义:

  • 设Q是所有可能的状态的集合,V是所有可能的观测的集合。$Q={q_1,q_2,…,q_N}, V={v_1,v_2,…,v_M}$
    • 其中,N是可能的状态数,M是可能的观测数。
    • 状态q是不可见的,观测v是可见的。
  • I是长度为T的状态序列,O是对应的观测序列。$I=(i_1,i_2,…,i_T), O=(o_1,o_2,…,o_T)$
  • 继续定义A为状态转移概率矩阵:$A = \left[ a{ij} \right]{N \times N}$
    • 其中,$a{ij} = P(i{t+1} = q_j |i_t=q_i), ~~i=1,2,…,N;j=1,2,…,N;$是在时刻t处于状态qi的条件下在时刻t+1转移到状态qj的概率。
  • B是观测概率矩阵: $B = \left[ bj (k) \right]{N \times M}$
    • 其中,$b_j (k) = P(o_t = v_k |i_t=q_j), ~~k=1,2,…,M;j=1,2,…,N;$是在时刻t处于状态qj的条件下生成观测vk的概率(也就是所谓的“发射概率”/生成概率)
  • π是初始状态概率向量:$\pi = (\pi_i)$
    • 其中,$\pi_j = P(i_1 = q_i),~~i=1,2,…,N$

隐马尔可夫模型由初始状态概率向量π、状态转移概率矩阵A和观测概率矩阵B决定。π和A决定状态序列,B决定观测序列。因此,隐马尔可夫模型可以用三元符号表示,即 $\lambda = (A,B,\pi)$, 称为隐马尔可夫模型的三要素

如果加上一个具体的状态集合Q和观测序列V,构成了HMM的五元组,这也是隐马尔科夫模型的所有组成部分。

隐马尔可夫链的三个基本问题:

举例来说明:

考虑一个村庄,所有村民都健康或发烧,只有村民医生才能确定每个人是否发烧。医生通过询问患者的感受来诊断发烧。村民只能回答说他们觉得正常,头晕或感冒。

医生认为,他的患者的健康状况作为离散的马可夫链。 “健康”和“发烧”有两个状态,但医生不能直接观察他们;健康与发烧的状态是隐藏的。每天都有机会根据患者的健康状况,病人会告诉医生他/她是“正常”,“感冒”还是“头昏眼花”。(正常,感冒,还是晕眩是前面说的观测序列)

观察(正常,感冒,晕眩)以及隐藏的状态(健康,发烧)形成隐马尔可夫模型(HMM),并可以用Python编程语言表示如下:

obs = ('normal', 'cold', 'dizzy')
states = ('Healthy', 'Fever')
start_p = {'Healthy': 0.6, 'Fever': 0.4}
trans_p = {
   'Healthy' : {'Healthy': 0.7, 'Fever': 0.3},
   'Fever' : {'Healthy': 0.4, 'Fever': 0.6}
   }
emit_p = {
   'Healthy' : {'normal': 0.5, 'cold': 0.4, 'dizzy': 0.1},
   'Fever' : {'normal': 0.1, 'cold': 0.3, 'dizzy': 0.6}
   }

在这段代码中,start_probability代表了医生对患者首次访问时HMM所处的状态的信念(他知道患者往往是健康的)

transition_probability表示基础Markov链中健康状况的变化

那么用图来表示上面的例子可以如下表示:

概率计算问题

第一个问题是: 给定模型的情况下,求某种观测序列出现的概率. 比如,给定的HMM模型参数已知,求出三天观察是(Dizzy,Cold,Normal)的概率是多少?

对应的HMM模型参数已知的意思,就是说的A,B,pi矩阵是已经知道的

前向算法

学习问题

第二个问题就是: 已经知道了观测序列是(Dizzy,Cold,Normal),需要求出HMM的参数问题. 也就是我们上面说的A,B,PI三个矩阵参数

EM算法

预测问题

第三个问题就是: 知道了观测序列是(Dizzy,Cold,Normal),也知道了HMM的参数,让我们求出造成这个观测序列最有可能对应的状态序列。比如说是(Healthy,Healthy,Fever)还是(Healthy,Healthy,Healthy),等等(这里有2的三次方8个)

Veterbi算法