最大熵模型原理小结

简介:

  最大熵模型(maximum entropy model, MaxEnt)也是很典型的分类算法了,它和逻辑回归类似,都是属于对数线性分类模型。在损失函数优化的过程中,使用了和支持向量机类似的凸优化技术。而对熵的使用,让我们想起了决策树算法中的ID3和C4.5算法。理解了最大熵模型,对逻辑回归,支持向量机以及决策树算法都会加深理解。本文就对最大熵模型的原理做一个小结。

1. 熵和条件熵的回顾

    在决策树算法原理(上)一文中,我们已经讲到了熵和条件熵的概念,这里我们对它们做一个简单的回顾。

    熵度量了事物的不确定性,越不确定的事物,它的熵就越大。具体的,随机变量X的熵的表达式如下:

H ( X ) = i = 1 n p i l o g p i

    其中n代表X的n种不同的离散取值。而 p i 代表了X取值为i的概率,log为以2或者e为底的对数。

    熟悉了一个变量X的熵,很容易推广到多个个变量的联合熵,这里给出两个变量X和Y的联合熵表达式:

H ( X , Y ) = i = 1 n p ( x i , y i ) l o g p ( x i , y i )

    有了联合熵,又可以得到条件熵的表达式H(Y|X),条件熵类似于条件概率,它度量了我们的Y在知道X以后剩下的不确定性。表达式如下:

H ( Y | X ) = i = 1 n p ( x i , y i ) l o g p ( y i | x i ) = j = 1 n p ( x j ) H ( Y | x j )

    用下面这个图很容易明白他们的关系。左边的椭圆代表H(X),右边的椭圆代表H(Y),中间重合的部分就是我们的互信息或者信息增益I(X,Y), 左边的椭圆去掉重合部分就是H(X|Y),右边的椭圆去掉重合部分就是H(Y|X)。两个椭圆的并就是H(X,Y)。

2. 最大熵模型的定义

    最大熵模型假设分类模型是一个条件概率分布 P ( Y | X ) ,X为特征,Y为输出。

    给定一个训练集 ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . ( x ( m ) , y ( m ) ) ,其中x为n维特征向量,y为类别输出。我们的目标就是用最大熵模型选择一个最好的分类类型。

    在给定训练集的情况下,我们可以得到总体联合分布 P ( X , Y ) 的经验分布 P ¯ ( X , Y ) ,和边缘分布 P ( X ) 的经验分布 P ¯ ( X ) P ¯ ( X , Y ) 即为训练集中X,Y同时出现的次数除以样本总数m, P ¯ ( X ) 即为训练集中X出现的次数除以样本总数m。

    用特征函数 f ( x , y ) 描述输入x和输出y之间的关系。定义为:

f ( x , y ) = { 1 x y 0

    可以认为只要出现在训练集中出现的 ( x ( i ) , y ( i ) ) ,其 f ( x ( i ) , y ( i ) ) = 1 .

    特征函数 f ( x , y ) 关于经验分布 P ¯ ( X , Y ) 的期望值,用 E P ¯ ( f ) 表示为: 

E P ¯ ( f ) = x , y P ¯ ( x , y ) f ( x , y )

    特征函数 f ( x , y ) 关于条件分布 P ( Y | X ) 和经验分布 P ¯ ( X ) 的期望值,用 E P ( f ) 表示为:

E P ( f ) = x , y P ¯ ( x ) P ( y | x ) f ( x , y )

    如果模型可以从训练集中学习,我们就可以假设这两个期望相等。即:

E P ¯ ( f ) = E P ( f )
 

    上式就是最大熵模型学习的约束条件,假如我们有M个特征函数 f i ( x , y ) ( i = 1 , 2... , M ) 就有M个约束条件。可以理解为我们如果训练集里有m个样本,就有和这m个样本对应的M个约束条件。

    这样我们就得到了最大熵模型的定义如下:

    假设满足所有约束条件的模型集合为:

E P ¯ ( f i ) = E P ( f i ) ( i = 1 , 2 , . . . M )
 

    定义在条件概率分布 P ( Y | X ) 上的条件熵为:

H ( P ) = x , y P ¯ ( x ) P ( y | x ) l o g P ( y | x )

    我们的目标是得到使 H ( P ) 最大的时候对应的 P ( y | x ) ,这里可以对 H ( P ) 加了个负号求极小值,这样做的目的是为了使 H ( P ) 为凸函数,方便使用凸优化的方法来求极值。

 

3 . 最大熵模型损失函数的优化

    在上一节我们已经得到了最大熵模型的函数 H ( P ) 。它的损失函数 H ( P ) 定义为:

m i n P H ( P ) = x , y P ¯ ( x ) P ( y | x ) l o g P ( y | x )

    约束条件为:

E P ¯ ( f i ) E P ( f i ) = 0 ( i = 1 , 2 , . . . M )

y P ( y | x ) = 1

    由于它是一个凸函数,同时对应的约束条件为仿射函数,根据凸优化理论,这个优化问题可以用拉格朗日函数将其转化为无约束优化函数,此时损失函数对应的拉格朗日函数 L ( P , w ) 定义为:  

L ( P , w ) H ( P ) + w 0 ( 1 y P ( y | x ) ) + i = 1 M w i ( E P ¯ ( f i ) E P ( f i ) )

    其中 w i ( i = 1 , 2 , . . . m ) 为拉格朗日乘子。如果大家也学习过支持向量机,就会发现这里用到的凸优化理论是一样的,接着用到了拉格朗日对偶也一样。、

    我们的拉格朗日函数,即为凸优化的原始问题: m i n P m a x w L ( P , w )

    其对应的拉格朗日对偶问题为: m a x w m i n P L ( P , w )

    由于原始问题满足凸优化理论中的KKT条件,因此原始问题的解和对偶问题的解是一致的。这样我们的损失函数的优化变成了拉格朗日对偶问题的优化。

    求解对偶问题的第一步就是求 m i n P L ( P , w ) , 这可以通过求导得到。这样得到的 m i n P L ( P , w ) 是关于w的函数。记为:

ψ ( w ) = m i n P L ( P , w ) = L ( P w , w )

     ψ ( w ) 即为对偶函数,将其解记为:

P w = a r g m i n P L ( P , w ) = P w ( y | x )

    具体的是求 L ( P , w ) 关于 P ( y | x ) 的偏导数:

L ( P , w ) P ( y | x ) = x , y P ¯ ( x ) ( l o g P ( y | x ) + 1 ) y w 0 x , y ( P ¯ ( x ) i = 1 M w i f i ( x , y ) )

= x , y P ¯ ( x ) ( l o g P ( y | x ) + 1 w 0 i = 1 M w i f i ( x , y ) )

    令偏导数为0,可以解出 P ( y | x ) 关于 w 的表达式如下:

P ( y | x ) = e x p ( i = 1 M w i f i ( x , y ) + w 0 1 ) = e x p ( i = 1 M w i f i ( x , y ) ) e x p ( 1 w 0 )

    由于 y P ( y | x ) = 1 ,可以得到 P w ( y | x ) 的表达式如下:

P w ( y | x ) = 1 Z w ( x ) e x p ( i = 1 M w i f i ( x , y ) )

    其中, Z w ( x ) 为规范化因子,定义为:

Z w ( x ) = y e x p ( i = 1 M w i f i ( x , y ) )

    这样我们就得出了 P ( y | x ) w 的关系,从而可以把对偶函数 ψ ( w ) 里面的所有的 P ( y | x ) 替换成用 w 表示,这样对偶函数 ψ ( w ) 就是全部用 w 表示了。接着我们对 ψ ( w ) 求极大化,就可以得到极大化时对应的w向量的取值,带入 P ( y | x ) w 的关系式, 从而也可以得到 P ( y | x ) 的最终结果。

    对 ψ ( w ) 求极大化,由于它是连续可导的,所以优化方法有很多种,比如梯度下降法,牛顿法,拟牛顿法都可以。对于最大熵模型还有一种专用的优化方法,叫做改进的迭代尺度法(improved iterative scaling, IIS)。

    IIS也是启发式方法,它假设当前的参数向量是 w ,我们希望找到一个新的参数向量 w + δ ,使得对偶函数 ψ ( w ) 增大。如果能找到这样的方法,就可以重复使用这种方法,直到找到对偶函数的最大值。

    IIS使用的方法是找到 ψ ( w + δ ) ψ ( w ) 的一个下界 B ( w | δ ) ,通过对 B ( w | δ ) 极小化来得到对应的 δ 的值,进而来迭代求解 w 。对于 B ( w | δ ) ,它的极小化是通过对 δ 求偏导数而得到的。

    由于IIS一般只用于最大熵模型,适用范围不广泛,这里就不详述算法过程了,感兴趣的朋友可以直接参考IIS的论文The improved iterative scaling algorithm: A gentle introduction

4. 最大熵模型小结

    最大熵模型在分类方法里算是比较优的模型,但是由于它的约束函数的数目一般来说会随着样本量的增大而增大,导致样本量很大的时候,对偶函数优化求解的迭代过程非常慢,scikit-learn甚至都没有最大熵模型对应的类库。但是理解它仍然很有意义,尤其是它和很多分类方法都有千丝万缕的联系。 

    惯例,我们总结下最大熵模型作为分类方法的优缺点:

    最大熵模型的优点有:

    a) 最大熵统计模型获得的是所有满足约束条件的模型中信息熵极大的模型,作为经典的分类模型时准确率较高。

    b) 可以灵活地设置约束条件,通过约束条件的多少可以调节模型对未知数据的适应度和对已知数据的拟合程度

    最大熵模型的缺点有:

    a) 由于约束函数数量和样本数目有关系,导致迭代过程计算量巨大,实际应用比较难。


本文转自刘建平Pinard博客园博客,原文链接:http://www.cnblogs.com/pinard/p/6093948.html,如需转载请自行联系原作者


相关文章
|
存储 算法 开发工具
OpenCV 安卓编程示例:1~6 全
OpenCV 安卓编程示例:1~6 全
338 0
|
安全 网络虚拟化 网络架构
配置通过流策略实现不同网段间限制互访示例
MQC是指通过将具有某类共同特征的报文划分为一类,并为同一类报文提供相同的服务,也可以对不同类的报文提供不同的服务。 高级ACL可以在规则中使用源IP地址和目的IP地址信息来定义允许和拒绝通过的数据流。在流分类中按照ACL对报文进行分类,并指定对匹配的报文采取的动作(允许或拒绝通过)。本例就是使用该方法实现不同网段间的互访限制。
184 6
|
存储 SQL 缓存
Hadoop入门(一篇就够了)
Hadoop入门(一篇就够了)
24628 4
Hadoop入门(一篇就够了)
|
算法 测试技术 Android开发
LeetCode 周赛上分之旅 #45 精妙的 O(lgn) 扫描算法与树上 DP 问题
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
174 2
LeetCode 周赛上分之旅 #45 精妙的 O(lgn) 扫描算法与树上 DP 问题
|
10月前
|
机器学习/深度学习 算法 TensorFlow
基于深度学习的【野生动物识别】系统设计与实现~Python
动物识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对18种动物数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,实现用户上传一张动物图片识别其名称。目前可识别的动物有:'乌龟', '云豹', '变色龙', '壁虎', '狞猫', '狮子', '猎豹', '美洲狮', '美洲虎', '老虎', '蜥蜴', '蝾螈', '蟾蜍', '豹猫', '钝吻鳄', '雪豹','非洲豹', '鬣蜥'。本系统是一个完整的人工智能,机器学习,深度学习项目,包含训练预测代码,训练好的模型,WEB网页端界面,数
692 2
|
XML 分布式计算 资源调度
Hadoop配置文件mapred-site.xml
【7月更文挑战第18天】
980 7
|
存储 索引 Python
【python】——组合数据类型(单选练习题)
【python】——组合数据类型(单选练习题)
|
数据采集 数据挖掘 数据处理
pandas数据清洗之处理缺失、重复、异常数据
在数据分析和建模的过程中,有相当多的时间要用在数据准备上:加载、清理、转换以及重塑。这些工作会占到分析师时间的80%或更多。幸运的是pandas和内置的Python标准库提供了高效、灵活的工具可以帮助我们轻松的做这些事情。 本文重点介绍通过pandas进行数据的清洗。数据处理中的清洗工作主要包括对需要分析的数据集中的缺失值(空值)、重复值、异常值的处理。
737 0
|
存储 SQL 数据库
android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第一部分)
使用嵌入式关系型SQLite数据库存储数据 除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据。
1648 0
|
SQL 消息中间件 算法
智能排班系统 【后端项目结构介绍+开发环境介绍+项目启动】
智能排班系统 【后端项目结构介绍+开发环境介绍+项目启动】
268 0

热门文章

最新文章