[模式识别]条件随机场CRF(ConditionalRandomField)

花了将近一个多月的时间,终于把CRF算是入门性的学完了,找了篇比较好的文章(十分简练易懂),帮助以后回顾。中间附上对参数估计的证明。


原链接:http://www.tanghuangwhu.com/archives/162


关联数据有两个特点:第一,我们准备建立模型的实体之间存在统计依赖性,第二,每个实体自身具有丰富的有利于分类的特征例如,当Web文档进行分类时候,网页上的文本类标签提供了很多信息,但超链接定义的页面之间的关系,可以进一步提高分类的准确度,图模型很自然的建立了实体之间的结构化关系。通常来讲,图模型已被用于表示联合概率分布P(Y,X),其中的变量y代表我们希望预测的属性,输入变量X代表获得的实体信息。利用关系数据中的局部特征对联合分布建模非常困难,因为这需要对包含复杂依赖关系的P(X)建模,引入数据之间的关系是把双刃剑,如果模型中引入它,导致模型非常复杂,如果忽略它,那么模型的准确性就会受到影响.对于分类问题来说,直接模拟的条件分布P(Y|X)条件随机场就是这么做的。条件随机场是关联这一个图结构的条件分布P(Y| X),因为直接对条件概率建模,输入变量X之间的关联不需要显示的表达出来

通常我看到一个模型,我总是会试着和我所知道的一些模型去进行比较。CRF算是机器学习模型中比较复杂的一个模型。同输入输出角度, CRF从数据空间来看是一个序列化的输入和序列化的输出, 从函数空间角度,就是一个指数函数,和逻辑回归函数形式一致,只是他的输入使出是一个序列(一条句子)或者一个矩阵(一副图像),损失函数是cross entropy,优化算法一般采用梯度下降类算法(LBFGS),但是在优化的过程中伴随着复杂的inference过程。

判别式模型和产生式模型

朴素贝叶斯和逻辑回归模型之间的一个重要区别是,朴素贝叶斯是产生式模型,它基于联合分布P(X,Y)建模,而逻辑回归是判别式模型,它直接对条件分布P(Y|X)建模,这一段中我们讨论产生式模型和判别式模型的区别和判别式模型在很多应用中的优点,具体来说,我们会集中以朴素贝叶斯和逻辑回归为例,但是这些区别可以推广到一般的产生式模型和判别式模型。
对条件分布p(Y| X)建模,不包括对P(X) 建模(P(X)对分类来说无关紧要),对P(X)建模非常困难,因为P(X)包含很多相互依赖的特征,比如在 NER应用中,HMM只依赖一个特征,这个词本身,但是很多词,特别是一些特定的名字可能没有出现在训练集合中,因此词本身这个特征是未知的,为了标注未登陆词,我们需要利用词的其他的特征,如词性,相邻词,前缀和后缀等。
在产生式模型中包含相互依赖的特征有两种方式,加强模型来表达输入数据之前的关联,或者简单的做独立性假设,比如朴素贝叶斯假设,第一种方法通常很难在提高模型复杂度的同时仍然保持模型优化的简便,比如我们很难建立词性和词的后缀之间的关系,而实际上我们也不是特别愿意去这么做,第二种方法,对输入数据做独立性假设会使得准确性降低,尽管朴素贝叶斯在文本分类应用中表现出其的好,但是在很多其他的应用中都比逻辑回归要逊色虽然朴素贝叶斯的分类准确率较高,但是在概率估计应用方便表现较差。

线性链式CRF模型

模型定义

线性链式的条件随机场如下所示

p(y|x)=1Z(x)exp{k=1Kλkfk(yt,yt1,xt)}


样本级的归一化函数

Z(x)=yexp{k=1Kλkfk(yt,yt1,xt)}

从HMM到CRF

我们已经看到了判别式模型和序列模型的有点,而线性链式条件随机场综合了这两点,我们从HMM引入线性链式CRF,然后在讨论模型的参数估计
通常HMM表达式如下

p(x,y)=t=1Tp(yt|yt1)p(xt|yt)


可以进一步表示成下面这种形式

p(y,x)=1Zexp{ti,jSλijI{yt=i}I{yt1=j}+tisoOμoiI{yt=i}I{xt=o}}


θ={λij,μoj} 为分布的参数,通过引入特征函数的概念来紧凑的来表达,每个特征函数都表达成  fk(yt,yt1,xt) , 需要一个特征函数  fij(y,y,x)=I{y=i}I{y=j}  来表达转移概率(i,j),另外一个特征函数  fio(y,y,x)=I{y=i}I{x=o} 来表达发射概率(i,o),这样可以重写HMM如下所示

p(y,x)=1Zexp(k=1Kλkfk(yt,yt1,xt))


最后从HMM导出条件概率模型如下:

p(y|x)=p(y,x)yp(y,x)=exp{Kk=1λkfk(yt,yt1,xt)}yexp{Kk=1λkfk(yt,yt1,xt)}


这个条件概率是线性链式条件随机场,只是特征只包括词本身这一个,当然线性链式条件随机场可以包含很多其他的特征。
我们已经看到当联合分布为HMM的形式时,相应的条件概率分布为线性链式的CRF,在HMM中状态i 到状态j的转移概率总是相同的,和当前的输入无关,但是在CRF中,我们可以通过加入特征  I{yt=j}I{yt1=i}I{xt=o}  来使得状态i到状态j的转移概率和当前输入有关,

模型优化

这一节我们来讨论如何估计CRF的参数  θ={λk}  给定独立同分布的训练数据  D={x(i),y(j)}Ni=1   x(i)={x(i)1,x(i)2,...,x(i)T}  为序列化输入,  y(i)={y(i)1,y(i)2,...,y(i)T}  为序列化输出
优化采用的是带惩罚项的极大似然估计,注意也基于样本独立这个假设,然后通过也通过对数运算把累积问题转换为累加问题。

l(θ)=i=1Nlogp(y(i)|x(i))


展开之后得到了下面的形式:

l(θ)=i=1Nt=1Tk=1Kλkfk(y(i)t,yit1,xit)i=1NlogZ(x(i))


假设参数的先验分布为高斯分布,得到下式,即加上了一个正则化项:

l(θ)=i=1Nt=1Tk=1Kλkfk(y(i)t,yit1,xit)i=1NlogZ(x(i))k=1Kλ2k2σ2


优化最重要的就是梯度的计算了,梯度本身就是对各参数的求导过程。求导的过程可以抛开对各样本梯度的求和,只需要关注一个样本,然后再求和即可,比较难理解的应该是第二项的求导了,  p(y,y|x(i)) p(y,y′|x(i))  可以这样理解,注意概率是样本级的和位置t无关,log(z(xi)) = z(xi)'/z(xi), z(xi)’是z(xi)基于参数的导数,注意这个导数是三阶导数,最后一步是对exp里面的线性部分求导,得到fk 这项,前面的部分是一个概率,由于只针对第i个样本,第t个节点,因此和他相关的label只有两个,因此对y的求和变成了对yt和yt-1的求和,注意在label独立看待时,他是和位置无关的(不带位置t),因此可以把yt和yt-1的情况聚在一起,得到概率项目,不过这时候yt 和yt-1 改为 y和 y'来表示了。这个公式其实就是最大熵,特征基于训练样本的分布和特征基于测试样本的分布一致,通过下面这个梯度来调整参数,最后可做到这点。

lλk=i=1Nt=1Tfk(y(i)t,y(i)t1,x(i)t)i=1Nt=1Ty,yfk(y,y,x(i)t)p(y,y|x(i))k=1Kλkσ2


关于该式的证明:

CRF的概率模型,给定observations 求某一latent states序列的概率。
其中分母Z(x)是归一因子:
公式(2) 中的y就是所有可能的序列,如果一个序列有个8个latent states,每个state有6个可能的取值,那么所有可能序列就有6的8次方。由此可见计算他时开销是相当大的。给出极大似然函数的对数表达式:
其中N是训练序列的个数,那么梯度下降法的方式大概是这样的(其实是梯度上升发求最大值):
为了简单起见,我们把N去掉,最后加上也一样,变成:
对第k个特征函数求偏导,得到:
好了,我们把主力集中在第二项,因为第一项已经很简单了:
把分母Z(x)带入,得到:
Z(x)对于一个训练序列来讲是常数,所以可以拿到括号里面,化简得到:
这一步很漂亮,接着:

推导完毕,这个式第一项是真实值,第二项是期望值,当俩者相等时,梯度为0,迭代停止。计算p(y|x)比较麻烦,可以用dynamic programming来求解,类似vertebi。也可以用pseudo-likelihood,而不是maximum-likelihood.具体参考:

Zhan, Kai, Steven Faux, and Fabio Ramos. "Multi-scale Conditional Random Fields for first-person activity recognition." Pervasive Computing and Communications (PerCom), 2014 IEEE International Conference on. IEEE, 2014.

Besag, Julian. "Statistical analysis of non-lattice data." The statistician (1975): 179-195.


之后,对式(10)中的项加入样本集中的每个点i,并加入正则化项的求导结果即得到结果。


第一项是特征函数在先验分布(样本)上的期望,第二项是特征函数在当前模型参数下的期望,忽略正则项的情况下,当梯度为零的时候,两项相等。

推理(inference)

对CRF来说通常两类推理问题,

  • 第一,在训练阶段,计算梯度需要每条边的边缘分布  p(y,y|x(i))  ;
  • 第二,在测试阶段,求概率最大的标号序列(viterbi)  y=argmaxyp(y|x)

在CRF中要做的事情就是在上面那个梯度的公式中求出在当前样本及当前的参数下,各个label状态出现的条件概率。然后基于这个分布来计算特征在当前参数下的期望。注意这个计算是对每个样本进行计算。在图像数据中,inference通常只是求近似解,但是在一维问题中可以求的精确解的,HMM中有个问题是在给定参数之后求解最可能的序列和每个序列的概率,,同样  α α 和  β β 的定义如下

我们从HMM的算法出发,然后推广到线性链式CRF,HMM可以看错是一个因子图,

p(y,x)=tψ(yt,yt1,xt),Z=1

因子的定义如下

ψ(yt,yt1,xt)=p(yt=j|yt1=i)p(xt=x|yt=j)


ψ(yt,yt1,xt)  可以理解为状态i到状态j并且观测数据为x的概率。

p(x)=ytψt(yt,yt1,xt)=yTyT1ψT(yT,yT1,xt)yT2ψT1(yT1,yT2,xT1)


α α  表示从头部开始分析,当前节点标号为j的概率,如下式所示

α(j)=p(x1t,yt=j)==y1tψt(j,yt1,xt)t=1t1ψt(yt,yt1,xt)


αt(j)=iSψt+1(j,i,xt)αt1(i)


初始状态  α1(j)=ψ1(j,y0,x1)  
可以看出  p(x)=yTaT(yT)
β β  表示表示从尾部开始分析,当前节点标号为i的概率

β(i)=p(xt+1T|yt=i)=yt+1Tt=t+1Tψt(yt,yt1,xt)


βt(i)=jSψt+1(j,i,xt+1)βt+1(j)


初始状态  βt(i)=1 βt(i)=1  
可以看出  p(x)=β0(y0)=y1ψ1(y1,y0,x1)β1(y1)
条件概率如下,

p(yt1,yt|x)αt1(yt1)ψ(yt,yt1,xt)βt(yt)


推广到线性链式CRF,  ψt(yt,yt1,xt)  的定义如下所示

ψt(yt,yt1,xt)=exp(kλkfk(yt,yt1,xt))

MEMM模型

给定观测序列  x1,...,xn  通过最大化  P(y1,...,yn|x1,...,xn) P       得到标号序列 y1,...,yn  
在MEMM模型中,概率  P(y1,...,yn|x1,...,xn) P表示成了马尔可夫转移概率的连乘,

P(y1,...,yn|x1,...,xn)=

你可能感兴趣的:(模式识别与机器学习,条件随机场,参数估计,推理,产生式模型,判别式模型)