最大熵模型
| 2023-8-6
0  |  阅读时长 0 分钟
type
Post
status
Published
date
Sep 30, 2021
slug
summary
tags
Scikit-Learn
category
数据分析
icon
password
Property

原理

直观理解

如果手里拿着一个骰子,扔下去后是每一面朝上的概率是多少? 1/6。
为什么是1/6呢?为什么不是1/2或者1/3?如果再告诉你1朝上的概率是1/2呢?
当我们在猜测概率时,不确定的部分我们都认为是等可能的,就好像骰子一样,知道有六个面,那么在概率的猜测上会倾向于1/6,也就是等可能,换句话讲,也就是倾向于均匀分布。为什么倾向均匀分布?因为这样最保险呀!当被告知1朝上的概率是1/2时,剩下的我们仍然会以最保险的形式去猜测是1/10。
最大熵就是这样一个朴素的道理:凡是我们知道的,就把它考虑进去,凡是不知道的,通通均匀分布!
 

熵和条件熵

熵度量了事物的不确定性,越不确定的事物,它的熵就越大。具体的,随机变量的熵的表达式如下:
代表种不同的离散取值,代表了取值为的概率, 为以2或者e为底的对数。
 
例如:有2个可能的取值,而这两个取值各为时熵最大,此时具有最大的不确定性,值为。如果一个值概率大于,另一个值概率小于,则不确定性减少,对应的熵也会减少。比如一个概率,一个概率,则对应熵为
 
熟悉了一个变量的熵,很容易推广到多个个变量的联合熵,这里给出两个变量的联合熵表达式:
有了联合熵,可以得到条件熵的表达式,条件熵类似于条件概率,度量了在知道以后剩下的不确定性:
度量了的不确定性,条件熵度量了在知道以后剩下的不确定性,那么呢?从上面的描述可以看出,它度量了在知道以后不确定性减少程度,这个度量在信息论中称为互信息或者信息增益,记为
用下图很容易明白他们的关系,左边的椭圆代表,右边的椭圆代表,中间重合的部分就是互信息或者信息增益 ,左边的椭圆去掉重合部分就是,右边的椭圆去掉重合部分就是 ,两个椭圆的并就是
notion image
 
 

最大熵模型的定义

最大熵原理是概率模型学习的一个准则。最大熵原理认为,学习概率模型时,在所有可能的概率模型(分布) 中,熵最大的模型是最好的模型。通常用约束条件来确定概率模型的集合,所以,最大熵原理也可以表述为在满足约束条件的模型集合中选取熵最大的模型。
 
最大熵模型假设分类模型是一个条件概率分布为特征,为输出
给定一个训练集,其中维特征向量,为类别输出。目标是用最大熵模型选择一个最好的分类类型。
在给定训练集的情况下,可以得到总体联合分布 的经验分布 和边缘分布的经验分布即为训练集中同时出现的次数除以样本总数即为训练集中出现的次数除以样本总数
用特征函数描述输入和输出之间的关系,定义为:
可以认为只要出现在训练集中出现的,其 。同一个训练样本可以有多个约束特征函数。
特征函数关于经验分布 的期望值,用表示为:
特征函数关于条件分布和经验分布的期望值,用表示为:
如果模型可以从训练集中学习,就可以假设这两个期望相等:
上式就是最大熵模型学习的约束条件,假如有个特征函数就有个约束条件。可以理解为如果训练集里有 个样本,就有和这个样本对应的M个约束条件(不一定等于样本的数量,取决于特征函数的构造)。
 
这样就得到了最大熵模型的定义如下:
假设满足所有约束条件的模型集合为:
定义在条件概率分布上的条件熵为:
加了一个 是什么意思?就是说我在求每种对应的时,要考虑到出现的概率进行相乘。换句话说,也可以认为是当前 的权值。因为我们要保证在所有情况下总的熵是最大的,所以每个部分单独的熵乘以权值后再相加,就是整个事件的熵。
 
我们的目标是得到使最大的时候对应的,这里可以对加了个负号求极小值,这样做的目的是为了使为凸函数(不加负号就是凹函数了),方便使用凸优化的方法来求极值。
 

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

最大熵模型的函数的损失函数 定义为:
约束条件为:
由于它是一个凸函数,同时对应的约束条件为仿射函数,根据凸优化理论,这个优化问题可以用拉格朗日函数将其转化为无约束优化函数,此时损失函数对应的拉格朗日函数定义为:
其中为拉格朗日乘子
我们的拉格朗日函数,即为凸优化的原始问题:
其对应的拉格朗日对偶问题为:
由于原始问题满足凸优化理论中的KKT条件,因此原始问题的解和对偶问题的解是一致的,这样损失函数的优化变成了拉格朗日对偶问题的优化。
求解对偶问题的第一步就是求 , 这可以通过求导得到。这样得到的 是关于的函数,记为:
即为对偶函数,将其解记为:
具体的是求关于的偏导数:
因为是一个概率表达式,那么:
所以:
令偏导数为0,可以解出关于的表达式如下:
由于 ,可以得到的表达式如下:
其中, 为规范化因子,定义为:
这样就得出的关系,从而可以把对偶函数里的所有的替换成用表示,这样对偶函数就全部用表示了。接着对 求极大化,就可以得到极大化时对应的向量的取值,带入的关系式, 从而也可以得到的最终结果。
求极大化,由于它是连续可导的,所以优化方法有很多种,比如梯度下降法,牛顿法,拟牛顿法都可以。对于最大熵模型还有一种专用的优化方法,叫做改进的迭代尺度法(improved iterative scaling, IIS)。
IIS也是启发式方法,它假设当前的参数向量是,我们希望找到一个新的参数向量,使得对偶函数增大。如果能找到这样的方法,就可以重复使用这种方法,直到找到对偶函数的最大值。
IIS使用的方法是找到的一个下界,通过对极小化来得到对应的 的值,进而来迭代求解。对于 ,它的极小化是通过对求偏导数而得到的。
 

最大熵模型小结

最大熵模型在分类方法里算是比较优的模型,但是由于它的约束函数的数目一般来说会随着样本量的增大而增大,导致样本量很大的时候,对偶函数优化求解的迭代过程非常慢。
优点:
  • 最大熵统计模型获得的是所有满足约束条件的模型中信息熵极大的模型,作为经典的分类模型时准确率较高
  • 可以灵活地设置约束条件,通过约束条件的多少可以调节模型对未知数据的适应度和对已知数据的拟合程度
缺点:
  • 由于约束函数数量和样本数目有关系,导致迭代过程计算量巨大,实际应用比较难
 

补充

为什么如果模型可以从训练集中学习,就可以假设这两个期望相等?

数据集全体概率分布是未知的,而训练集的分布是已知的。监督学习就是要从训练集去拟合模型,期望训练集和全体数据集的差异尽可能的小。如果可以做到差异很小,那么说明训练集的分布和全体数据集的分布很接近了。因此对于两个很接近的概率分布,可以假设它们的期望相等。真实情况是相差的非常小。
同时因为假设了概率分布期望相等,那么特征函数关于这两个分布的期望也就是相等的了假设分布有相同的期望,那么对于特征函数来说,有相同的期望。个人理解,用特征函数的目的是要利用训练集特征样本的信息。否则不容易直接去学习概率分布本身

对偶函数 的极大化等价于最大熵模型的极大似然估计

 

代码

下面给出的是大佬们基于李航的统计学习方法从零实现的代码
 
 
 
 
 
 
目录