目录
目录
最大熵定理
所谓的最大熵原理其实就是指包含已知信息,不做任何未知假设,把未知事件当成等概率事件处理。
用一个形象的例子证明:有5个盒子ABCDE,奖品就放在这5个盒子中的一个,请问奖品在ABCDE盒子里的概率分别是多少?
对于奖品在哪个盒子里一点额外的信息也没有,所以只能假设奖品在每个盒子里的概论都只有1/5(等概率)。
这时如果有个人说奖品在A和B盒子里的概率总共是3/10,也就是说此时你知道了额外信息:P(A)+P(B)=3/10。
虽然P(A)+P(B)=3/10,但我们并不知道A和B各自的贡献依然是平均的,所以各自就是3/20。
因为P(A)+P(B)=3/10,所以P(C)+P(D)+P(E)=7/10,但是我们依然不知道这三者的贡献,所以还是假设它们等概率,因此每一项就是7/30。
这就是通过最大熵原理处理概论的问题。
最大熵原理:
- 满足已知信息(约束条件)
- 不做任何未知假设(剩下的等概率)
log如果以2为底数,信息熵的单位就是比特(bit),以e为底数的话,信息熵的单位就是奈特(nat),以10为底数的话单位就是哈托特(hat)。
Lagrange乘子法
拉格朗日乘子法(Lagrange multipliers)是一种寻找多元函数在一组约束下的极值的方法。
通过引入拉格朗日乘子,可将有d个变量与k个约束条件的最优化问题转化为具有d+k个变量的无约束优化问题求解。
1. “无约束" 优化问题
直接对所有m个变量求偏导,令偏导等于0,联立方程组求出来的点就可能是极值点,再带回方程验证是否为所要求的点即可。
2. “等式约束” 优化问题
3. “不等式约束”优化问题
当约束条件是不等式的时候,存在不等式约束时,最优解的位置只有两种情况,一种是最优解在不等式约束的边界上,另一种就是不等式约束的区域内,需要分为两种情况讨论。
本文证明最大熵定理时并没有涉及此类问题,因此不再讨论,有兴趣的学弟学妹可以继续深入研究。
在本次证明中,为了求出满足最大熵的事件概率pi,我们首先构造Lagrange函数:就是把需要满足的约束条件加到H(P)后。
求这个函数的极值,求导等于0。
求解得到的pi具有未知参数λ(来自约束项),于是我们可以利用约束条件进一步求解。
最终发现,对于一个含有n个事件的系统,熵最大时,事件的概率必然满足等概率。
对于一般的求极值问题我们都知道,求导等于0就可以了。但是如果我们不但要求极值,还要求一个满足一定约束条件的极值,那么此时就可以构造Lagrange函数,其实就是把约束项添加到原函数上,然后对构造的新函数求导。如下图:
对于一个要求极值的函数f(x,y),图上的蓝圈就是这个函数的等高图,就是说f(x,y)=C1,C2,…Cn分别代表不同的数值(每个值代表一圈,等高图),我要找到一组(x,y),使它的Ci值越大越好,但是这点必须满足约束条件g(x,y)(在黄线上)。
也就是说f(x,y)和g(x,y)相切,或者说它们的梯度▽f和▽g平行,因此它们的梯度(偏导)成倍数关系(假设为λ倍)。
因此把约束条件加到原函数后再对它求导,其实就等于满足了下图上的式子。
以下以bit为单位为例进行基于拉格朗日乘子的信息熵最大值证明:
信息熵最大值证明
最大熵的应用及拓展
在对最大熵进行推导证明后,我们对其在实际中的应用进行了一些调研,以下是它的一些应用实例:
1. 生物学应用:推断基因互作网络
假设 N个球表示 N 个细胞样本,每个样本有完整的RNA表达谱。而 K 个盒子表示所有可能的表达谱。用向量 x = { x i , i = 1 , 2 , … , R } 表示 R 个基因的表达谱。这样,向量 x所有可能取值数就是 K . 给定数据,即,测量的表达谱,我们要推断一个概率分布 p ( x ) 满足:
(i) 无信息的最小偏差;
(ii) 一致的经验约束。
根据最大熵原理,这样的 p ( x )最大化熵
可以证明,最大熵的概率分布
2. 基于最大嫡的TBS检测算法
下图是最大嫡TBS检测算法的基本模型,从图中可以看到,算法训练过程和测试过程构成的。在训练过程中,一方面,我们先将训练文本进行分词,然后建立基于词的语言模型,计算文本复杂度。另一方面,统计词频信息,包括文本中词的总数、不同词的数目、频次大于5的词总数和频次大于5的不同词个数。然后输入最大嫡模型进行建模。测试的时候将测试文本先分词,然后计算复杂度,统计词频特征,输入到最大嫡分类器便可分出正常文本和载密文本。
3. 用最大熵模型进行中文分词
用最大熵模型进行词语分类,其核心点在于依赖当前字符的上下文特征,计算该字符属于每个类别(B/S/E/M)的概率分布,然后选择分布概率最大的那个类别作为当前字符的类别。这从形式上与朴素贝叶斯是一样的。对于最大熵模型而言,特征的选择在具体问题中比算法本身更为重要。具体步骤如下:
第一步:工具包开发环境搭建
下载MEMM工具包,参照里面的INSTALL步骤安装,同时,参照python文件夹的README安装python相关的包。
第二步:准备语料
利用SIGHAN提供的backoff 2005语料,将熟语料转换成工具包所需格式,即4-tag(BMES)格式。可参考52NLP网站的python代码。
第三步:训练模型
工具包的example目录自带了一个python训练工具。执行:
(注意迭代次数iters前面是两个-号)。
第四步:利用模型执行分词
利用上步得到的tagger.model执行分词。首先,准备所需语料,把生语料进行原子切分,如:“扬帆远东做与中国合作的先行”切分成“扬 帆 远 东 做 与 中 国 合 作 的 先 行”。执行最大熵标注脚本即可得到字标注结果,得到的格式如下:“扬/B 帆/M 远/M 东/M 做/E 与/S 中/B 国/E 合/B 作/E 的/S 先/B 行/E “,最后利用python程序合并成分词结果文件,如:“扬帆远东做 与 中国 合作 的 先行”。
第五步:评测
可以看到召回率是84.4%,准确率是83.6%,不是很高,这和语料规模有关。
总结
本文进行了基于拉格朗日乘子法的信息熵最大值证明,首先提出一个抽奖的例子对最大熵定理进行阐述,接着对拉格朗日乘子做了一定调研并记录了我们的理解,在以上两个概念的基础上我们进行了基于拉格朗日乘子法的信息熵最大值证明,最后对其应用拓展做了调研,了解到它的很多实际用处。在这次大作业中,我们共同调研、推导公式,在这个过程中学习到很多书本上没有的知识,也希望我们对这次调研的一些记录可以对大家有所帮助。