最大熵模型原理小结

最大熵模型原理小结最大熵模型 MaximumEntro 是一种很经典的分类算法 理解它有助于加深我们对逻辑回归 支持向量机 决策树等算法的理解 最大熵模型是将最大熵原理应用到分类任务得到的模型 在解释最大熵原理和最大熵模型之前 先简单对熵的概念进行一下回顾 1 熵 信息论的基本想法是发生一个不太可能发生的事件比发生一个非常可能发生的事件能提供更多的信息 比如说 今天早上太阳升起

  最大熵模型(Maximum Entropy Model,MaxEnt)是一种很经典的分类算法,理解它有助于加深我们对逻辑回归、支持向量机、决策树等算法的理解。最大熵模型是将最大熵原理应用到分类任务得到的模型。在解释最大熵原理和最大熵模型之前,先简单对熵的概念进行一下回顾。

1. 信息熵,联合熵,条件熵

  信息论的基本想法是发生一个不太可能发生的事件比发生一个非常可能发生的事件能提供更多的信息。比如说,“今天早上太阳升起”几乎一定会发生的,这句话包含的信息量很少;如果说“今天早上有日食”,日食是非常罕见的,那么这句话包含的信息量就很多了。一个事件 x=x x = x 包含的信息量称为自信息(Self-information),自信息也可以理解为事件发生之前的不确定性:

I(x)=logP(x) I ( x ) = − log ⁡ P ( x )

其中log以2为底时,

I(x) I ( x )
的单位是比特或香农;log以

e e
为底时,


I(x)

I ( x )

单位是奈特,为了计算方便,本文都是自然对数。

  自信息只能处理单个的输出。我们可以用香农熵(也叫 信息熵)来对整个概率分布中的不确定性总量进行量化:

H(x)=ExP[I(x)]=ExP[logP(x)](1) (1) H ( x ) = E x ∼ P [ I ( x ) ] = − E x ∼ P [ log ⁡ P ( x ) ]

对于离散变量

H(x)=ExP[logP(x)]=i=1NP(xi)logP(xi)(2) (2) H ( x ) = − E x ∼ P [ log ⁡ P ( x ) ] = − ∑ i = 1 N P ( x i ) log ⁡ P ( x i )

换而言之,一个分布的信息熵是遵循这个分布的事件所产生信息总量的期望,即所有自信息的加权平均。信息熵满足下列不等式:

0H(P)log|X| 0 ≤ H ( P ) ≤ log ⁡ | X |

其中 |X| | X | X X 取值的个数。那些接近确定的分布(输出几乎可以确定)具有较低的熵;那些接近均匀分布的概率具有较高的熵。当且仅当
X

X
的分布是均匀分布事上式右边的等号成立,所以 X X 服从均匀分布时熵最大
  以二值随机变量为例,说明更接近确定性的分布是如何具有较低的信息熵。下图中
x

x
轴是 p p ,表示二值随机变量等于1的概率,其信息熵由
(plogp+(1p)log(1p))

( p log p + ( 1 p ) log ( 1 p ) )
给出。当 p p 接近0或者1时,分布几乎是确定的,当
p=0.5

p = 0.5
时,是一个均匀分布,熵达到最大值1。这正好符合 ln2=0.693 ln ⁡ 2 = 0.693 (二值变量只有2个取值)。

最大熵模型原理小结

该部分测试代码如下:

import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 1, 0.01) # 这里就没额外考虑log的值域了,会有个warning entropy = -1 * (x * np.log(x) + (1 - x) * np.log(1 - x)) # ∑ p(x)logp(x) plt.plot(x, entropy) plt.xlabel('p'), plt.ylabel('entropy') plt.grid(), plt.show()

  推广到多个变量的联合熵

H(X,Y)=i=1NP(xi,yi)logP(xi,yi)(3) (3) H ( X , Y ) = − ∑ i = 1 N P ( x i , y i ) log ⁡ P ( x i , y i )

联合熵是是在联合自信息 I(X,Y) I ( X , Y ) 的期望。
   条件熵是已知随机变量 X X 的条件下随机变量
Y

Y
的不确定性:

H(Y|X)=xXP(x)H(Y|X=x)=xXP(x)yYP(y|x)logP(y|x)=xXyYP(x,y)logP(y|x)(4) H ( Y | X ) = ∑ x ∈ X P ( x ) H ( Y | X = x ) = − ∑ x ∈ X P ( x ) ∑ y ∈ Y P ( y | x ) log ⁡ P ( y | x ) (4) = − ∑ x ∈ X ∑ y ∈ Y P ( x , y ) log ⁡ P ( y | x )

2. 最大熵原理

  最大熵原理是概率模型学习的一个准则。最大熵原理认为,学习概率模型时,在所有可能的概率模型(分布)中,熵最大的模型是最好的模型。如果有约束条件,最大熵原理也可以表述为在满足约束条件的模型集合中选取熵最大的模型。
  参考第1节,假设离散随机变量 X X 的概率分布是
P(X)

P ( X )
,则其熵为:

H(x)=i=1NP(xi)logP(xi) H ( x ) = − ∑ i = 1 N P ( x i ) log ⁡ P ( x i )

熵满足下列不等式:

0H(P)log|X| 0 ≤ H ( P ) ≤ log ⁡ | X |

X X 服从均匀分布时,右边等号成立,熵最大。
  直观上来说,最大熵原理认为要选择的概率模型首先必须满足已有的事实,即约束条件。在没有更多信息的情况下,那些不确定的部分都是“等可能”的。最大熵原理通过熵的最大化来表示等可能性。别看说的有点玄乎,其实这在我们生活中也经常见到:比如给你一个6个面的色子,很自然的我们会认为每个面出现的概率都是
16

1 6
。如果已经告诉你出现“1”的概率为 12 1 2 ,那么我们一般推测剩下5个面出现的概率都是 110 1 10 。做出这样推测的潜在逻辑就是,对于一个事件,不作出任何主观假设(不引入不可信的先验信息)往往是最可信的。
  最大熵的思想在其他地方其实也能见到,比如我们建模选择概率分布默认比较好的选择是正态分布。其一,我们想要建模的很多分布的真实情况是比较接近正态分布的(中心极限定理,这里不展开了)。其二,在具有相同方差的所有可能的概率分布中,正态分布在实数上具有最大的不确定性,即正态分布是对模型加入的先验知识量最少的分布,这正是最大熵的思想。

3. 最大熵模型

  上面讲到的最大熵原理是统计学习中的一般原理,如果将它应用到分类,就得到了最大熵模型。简单来说,最大熵模型做的事就是假设分类模型是一个条件概率分布 P(Y|X) P ( Y | X ) ,然后利用最大熵原理选择最好的分类模型。
  假设分类模型是一个条件概率分布 P(Y|X) P ( Y | X ) XRn X ∈ R n 表示输入, YR Y ∈ R 表示输出。这个模型表示的是对于给定的输入 X X ,以条件概率
P(Y|X)

P ( Y | X )
输出 Y Y
  给定数据集
T={(x1,y1),(x2,y2),,(xN,yN)}

T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , , ( x N , y N ) }
,首先考虑模型应该满足的条件。给定训练集,就可以确定联合分布 P(X,Y) P ( X , Y ) 的经验分布和边缘分布 P(X) P ( X ) 的经验分布,分别以 P~(X,Y) P ~ ( X , Y ) P~(X) P ~ ( X ) 表示:

P~(X,Y)P~(X)=v(X=x,Y=y)N=v(X=x)N P ~ ( X , Y ) = v ( X = x , Y = y ) N P ~ ( X ) = v ( X = x ) N

其中 v(X=x,Y=y) v ( X = x , Y = y ) 表示训练集中样本 (x,y) ( x , y ) 出现的频数, v(X=x) v ( X = x ) 表示训练集中输入 x x 出现的频数,
N

N
表示训练集样本总数。
  用特征函数 f(x,y) f ( x , y ) 描述输入 x x 和输出
y

y
之间的关系:

f(x,y)={
1,  xy0,  else
f ( x , y ) = { 1 ,     x 和 y 满 足 某 一 事 实 0 ,     e l s e

可以认为出现在训练集中的 (xi,yi) ( x i , y i ) ,全部有 f(xi,yi)=1 f ( x i , y i ) = 1 ,对于一个训练样本可以有多个特征函数。
  特征函数 f(x,y) f ( x , y ) 关于经验分布 P~(X,Y) P ~ ( X , Y ) 的期望用 EP~(f) E P ~ ( f ) 表示:

EP~(f)=x,yP~(x,y)f(x,y)(5) (5) E P ~ ( f ) = ∑ x , y P ~ ( x , y ) f ( x , y )

特征函数 f(x,y) f ( x , y ) 关于模型 P(Y|X) P ( Y | X ) 和经验分布 P~(X) P ~ ( X ) 的期望用 EP(f) E P ( f ) 表示:

EP(f)=x,yP~(x)P(y|x)f(x,y)(6) (6) E P ( f ) = ∑ x , y P ~ ( x ) P ( y | x ) f ( x , y )

如果模型能够从训练集中学习,那么可以假设这两个期望值相等,即

EP~(f)=EP(f) E P ~ ( f ) = E P ( f )

不知道对不对,我认为这个其实就是根据联合分布的经验分布 P~(x,y) P ~ ( x , y ) 去估计真实联合分布 P(x,y) P ( x , y ) ,根据贝叶斯概率公式:

P(x,y)=P(x)P(y|x) P ( x , y ) = P ( x ) P ( y | x )

其中 P(y|x) P ( y | x ) 是我们的模型假设,是需要求的东西, P(x) P ( x ) x x 的边缘分布,但真实的边缘分布无从得知,所以这里用
P~(x)

P ~ ( x )
来近似 P(x) P ( x ) ,所以对于(6)式有:

EP~(f)=x,yP~(x,y)f(x,y)x,yP(x,y)f(x,y) E P ~ ( f ) = ∑ x , y P ~ ( x , y ) f ( x , y ) ≈ ∑ x , y P ( x , y ) f ( x , y )

现在得到模型的约束条件(如果有 n n 个特征函数,约束条件就有
n

n
个)

x,yP~(x,y)f(x,y)=x,yP~(x)P(y|x)f(x,y)(7) (7) ∑ x , y P ~ ( x , y ) f ( x , y ) = ∑ x , y P ~ ( x ) P ( y | x ) f ( x , y )

后,我们只要找到满足(7)的模型 P(y|x) P ( y | x ) 就大功告成。
  但显然 P(y|x) P ( y | x ) 的选取不止一种,那么如何才能确定最优的模型呢?这时就要用到第2节的最大熵原理了。最大熵原理认为熵最大的模型是最好的模型,条件分布 P(Y|X) P ( Y | X ) 对应的条件熵为

H(Y|X)=x,yP(x,y)logP(y|x)x,yP~(x)P(y|x)logP(y|x)(8) H ( Y | X ) = − ∑ x , y P ( x , y ) log ⁡ P ( y | x ) (8) ≈ − ∑ x , y P ~ ( x ) P ( y | x ) log ⁡ P ( y | x )

  于是我们的目标转化为求使 H(Y|X) H ( Y | X ) 最大时对应的 P(y|x) P ( y | x ) ,求得的 P(y|x) P ( y | x ) 称为最大熵模型。

4. 最大熵模型的学习

maxPs.t.H(P)=x,yP~(x)P(y|x)logP(y|x)EP(fi)=EP~(fi), i=1,2,,nyP(y|x)=1 max P H ( P ) = − ∑ x , y P ~ ( x ) P ( y | x ) log ⁡ P ( y | x ) s . t . E P ( f i ) = E P ~ ( f i ) ,   i = 1 , 2 , … , n ∑ y P ( y | x ) = 1

可以改写为等价的求最小值问题:

minPs.t.H(P)=x,yP~(x)P(y|x)logP(y|x)EP(fi)EP~(fi)=0, i=1,2,,nyP(y|x)=1(9) (9) min P − H ( P ) = ∑ x , y P ~ ( x ) P ( y | x ) log ⁡ P ( y | x ) s . t . E P ( f i ) − E P ~ ( f i ) = 0 ,   i = 1 , 2 , … , n ∑ y P ( y | x ) = 1

求解约束最优化问题(9)所得出的解,就是最大熵模型学习的解。下面给出具体推导。
  按照惯例,引入拉格朗日乘子 w0,w1,,wn w 0 , w 1 , … , w n ,定义拉格朗日函数为:

L(P,w)=H(P)+w0(1yP(y|x))+i=1nwi(EP~(fi)EP(fi))=x,yP~(x)P(y|x)logP(y|x)+w0(1yP(y|x))+i=1n(x,yP~(x,y)fi(x,y)x,yP~(x)P(y|x)fi(x,y))(10) L ( P , w ) = − H ( P ) + w 0 ( 1 − ∑ y P ( y | x ) ) + ∑ i = 1 n w i ( E P ~ ( f i ) − E P ( f i ) ) (10) = ∑ x , y P ~ ( x ) P ( y | x ) log ⁡ P ( y | x ) + w 0 ( 1 − ∑ y P ( y | x ) ) + ∑ i = 1 n ( ∑ x , y P ~ ( x , y ) f i ( x , y ) − ∑ x , y P ~ ( x ) P ( y | x ) f i ( x , y ) )

对偶问题是

maxwminPL(P,w)(11) (11) max w min P L ( P , w )

首先求解对偶问题(11)内部的极小化问题,记

Ψ(w)=minPL(P,w)=L(Pw,w) Ψ ( w ) = min P L ( P , w ) = L ( P w , w )

同时将其解记为

Pw=argminPL(P,w)=Pw(y|x) P w = arg ⁡ min P L ( P , w ) = P w ( y | x )

  求 L(P,w) L ( P , w ) P(y|x) P ( y | x ) 的偏导数并令其等于0,有:

L(P,w)P(y|x)=x,yP~(x)(logP(y|x)+1)yw0x,y(P~(x)i=1nwifi(x,y))=x,yP~(x)(logP(y|x)+1w0i=1nwifi(x,y))=0 ∂ L ( P , w ) ∂ P ( y | x ) = ∑ x , y P ~ ( x ) ( log ⁡ P ( y | x ) + 1 ) − ∑ y w 0 − ∑ x , y ( P ~ ( x ) ∑ i = 1 n w i f i ( x , y ) ) = ∑ x , y P ~ ( x ) ( log ⁡ P ( y | x ) + 1 − w 0 − ∑ i = 1 n w i f i ( x , y ) ) = 0

解得

Pw(y|x)=exp(i=1nwifi(x,y)+w01)=exp(ni=1wifi(x,y))exp(1w0)(12) (12) P w ( y | x ) = exp ⁡ ( ∑ i = 1 n w i f i ( x , y ) + w 0 − 1 ) = exp ⁡ ( ∑ i = 1 n w i f i ( x , y ) ) exp ⁡ ( 1 − w 0 )

又因为 yP(y|x)=1 ∑ y P ( y | x ) = 1 ,得

Pw(y|x)=exp(ni=1wifi(x,y))Zw(x)(13) (13) P w ( y | x ) = exp ⁡ ( ∑ i = 1 n w i f i ( x , y ) ) Z w ( x )

其中 Zw Z w 为规范化因子

Zw(x)=yexp(i=1nwifi(x,y))(14) (14) Z w ( x ) = ∑ y exp ⁡ ( ∑ i = 1 n w i f i ( x , y ) )

这样就得到了 P(y|x) P ( y | x ) w w 之间的关系,将(13-14)反代回
Ψ(w)

Ψ ( w )
,这样 Ψ(w) Ψ ( w ) 就是全部用 w w 表示了。接着对
Ψ(w)

Ψ ( w )
求极大,就可以得到极大化时对应的 w w 向量的取值
w

w
,代入(13-14)就能得到 Pw(y|x) P w ( y | x ) 的最终结果。
  由于 Ψ(w) Ψ ( w ) 是连续可导的,所以对 Ψ(w) Ψ ( w ) 求极大化有很多种方法,比如梯度下降、牛顿法、拟牛顿法都可以。最大熵模型求解还有一种专用的优化方法,叫做改进的迭代尺度法(Improved Iterative Scaling, IIS)。

5. 极大似然估计

  这里先简单上个结论:最大熵模型学习中的对偶函数极大化等价于最大熵模型的极大似然估计。至于证明日后再补上来,最近开始秋招实在有点忙。

6. 小结












版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232643.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • DeepLink的实现原理「建议收藏」

    DeepLink的实现原理「建议收藏」前言之前我们又是看源码又是研究动画,今天分享一个比较简单的技术点:DeepLink。DeepLink,深度链接技术,主要应用场景是通过Web页面直接调用Android原生app,并且把需要的参数通过Uri的形式,直接传递给app,节省用户的注册成本。简单的介绍DeepLink概念之后,我们看一个实际的例子:朋友通过京东分享给我一个购物链接:于是我通过微信打开了这条链接:…

    2022年6月23日
    64
  • day23 Pythonpython 本文re模块

    day23 Pythonpython 本文re模块

    2021年6月30日
    98
  • libtorch-resnet18

    libtorch-resnet18与大家分享一下自己在学习使用libtorch搭建神经网络时学到的一些心得和例子,记录下来供大家参考首先我们要参考着pytorch版的resnet来搭建,这样我们可以省去不必要的麻烦,上代码:1、首先是pytorch版残差模块classResidualBlock(nn.Module):def__init__(self,inchannel,outchannel,stride=1,shortcut=None):super(ResidualBlock,self).__

    2022年5月23日
    32
  • 测试一下博客行吗

    测试一下博客行吗;;;;;;;;;——————-iK7VUYG0yF6lS3QNNmW4Gw==tRymiHsi9AbKpr3tTFXxup1GFhuX0czs73gSv/E7b5c=uk29oXxJxAg+D0WGWLg/LaJ5+a4y4SSHbrMB4JywbGg=eIWSkIow/vo+D0WGWLg/LaJ5+a4y4SSHbrMB4JywbGg=pcL609

    2022年7月11日
    17
  • 外汇交易平台怎么选,安全正规的外汇平台怎么选不了_比较靠谱的外汇平台有哪些

    外汇交易平台怎么选,安全正规的外汇平台怎么选不了_比较靠谱的外汇平台有哪些外汇交易平台怎么选,安全正规的外汇平台怎么选虽然这两年外汇市场一直火爆发展,但也催生了很多黑平台,给投资者在选择外汇交易平台时带来了很多风险和困难,对于投资者来说,进入外汇市场前期除了掌握必要的基础知识,最重要的就是选择一个安全可靠的平台。业内分析师提示广大投资者:在国内,外汇保证金交易目前暂时没有官方的金融监管机构和机制,炒外汇时一定要选择尽量国际外汇交易平台,而要判断一…

    2025年10月22日
    2
  • display:flex垂直居中

    display:flex垂直居中布局说明:1.场次为一场比赛     2.比赛双方是交战的两个队伍        3.一场比赛可以有多种玩法,所以场的每个玩法的布局的高度都不确定。主要说下我学到的垂直居中的flex。1.第一次尝试。1divclass=”parent”>2h1>我是通过flex的水平垂直居中噢h1>3h1>我是通过fl

    2022年6月14日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号