信息量、熵、KL散度、交叉熵

信息量、熵、KL散度、交叉熵

相信很多小伙伴在学习交叉熵时,对交叉熵感觉到非常的迷惑。"交叉熵怎么来的?","为什么交叉熵的表达式是这样婶儿的?","熵和交叉熵到底有什么关系?"。本文通过由浅到深的顺序,来引入交叉熵,希望能对各位学习路上的小伙伴有所帮助,不足的地方恳请批评指正

一、 信息量

1. 何为信息量?

从字面意思来看,直观理解:如果我们知道一件事情,这件事情给我们带来的信息有多少。

2. 信息量如何定义?

让我们想象一个能带给我们信息量的例子:四个人比赛争夺冠军,编编号为1,2,3,4,每个人每场胜利的概率是12

选手1、2比赛,1获胜的概率是12;选手3、4比赛,4获胜的概率是12;1、4再比赛,1获胜的概率还是12;我们关注1号选手,并设信息x所具有的信息量为f(x),即

f(x):=x

设选手1第一场获胜的事件为x1,选手1第二场获胜的事件为x2,选手1获得冠军的事件为x=x1x2,表示x1x2同时发生. 为了保证信息量量纲的一致性,我们猜想

f(x)=f(x1)+f(x2)f(x1x2)=f(x1)+f(x2)

之所以是加法而不是乘法,是为了保证量纲的一致性。

根据上式,我们就能断定:信息量的计算一定是一个对数函数。接下来我们猜想下一个问题,一个事情发生的概率越小还是越大,他能带来的信息量越大?思考一下我们就能发现,一个事情发生的概率越小,它所带来的信息量就越大,如中国国足夺冠(手动狗头)。至于对数函数的底数,什么值都没有关系,为了更好的进行运算,信息论中将其定义为以2为底。故信息量定义如下:

f(x)=log2(px)

x为事件,px为事件x发生的概率,信息量的单位为奈特 nat.

二、熵

是衡量一个信息系统的混乱程度,定义为信息量的期望。故其计算表达式为:

H(X)=inpilog2(pi)

其中,X的分布为{p1,p2,,pn}. 熵用来衡量一个信息系统的混乱程度

三、KL散度

有了熵,我们就能衡量一个信息系统或一个概率分布的分布情况,那么肯定会有同学思考,如何衡量两个分布的"距离"呢?

  • 对于相同的分布,如高斯分布,我们只需要比较均值μ与标准差σ
  • 对于不同的分布,我们必须通过一个更高层的指标来比较

由此,我们引入KL散度(Kullback-Leibler Divergence)的概念,用于度量两个分布之间的"距离"。设有两个概率分布P(X)Q(X),定义以P为基础的P,Q之间的KL散度为

KL[P(X)|Q(X)]=xX[P(x)logQ(x)(P(x)logP(x))]=xX[P(x)logP(x)Q(x)]

四、交叉熵

1. 交叉熵引入

我们观察KL散度的公式:

KL[P(X)|Q(X)]=xX[P(x)logQ(x)(P(x)logP(x))]=xX[P(x)logQ(x)]xX[P(x)logP(x)]

为了让分布Q(x)更接近分布P(x). 上式必须趋近于0,但我们并不知道$\sum_{x \in X}[-P(x)logQ(x)] \sum_{x \in X}[-P(x)logP(x)]$谁大谁小。当然已经有人帮我们解决了这个问题,根据吉布斯不等式:

xX[P(x)logQ(x)]xX[P(x)logP(x)]

恒成立,所以为了为了让分布Q(x)更接近分布P(x).我们只需要让xX[P(x)logQ(x)]尽可能的小即可。

2. 交叉熵定义

为了更方便描述,我们给xX[P(x)logQ(x)]取了个名字,叫做交叉熵

在机器学习中,我们常用一个已知数据集来训练一个机器学习模型,故我们想让模型预测的概率分布更接近已知数据集的概率分布,所以我们将已知数据集的分布看作P(x),模型预测的分布看作Q(x).

由于数据集已知,则P(x)已知,故我们需要优化Q(x). 在深度学习神经网络上,我们要做分类任务时,经常用全连接层后的神经元输出,经过Softmax得到模型预测的概率分布,所以对分类神经网络来说,交叉熵损失函数即为

Loss=xXP(x)log(Softmax(x))=i=0N1k=0K1yi,klog(pi,k)

其中,pi,k为第i个样本预测为标签k的概率,yi,k是样本i真实的标签的one-hot编码,当样本属于类别k时,yk=0,即yi,kRK,第k位为1,其余位为0.

3. 二分类问题

当分类为二分类问题时,x的取值只能为0或1,Softmax的输出只有一个值,即预测标签为1的概率。此时,

Loss=x[0,1]P(x)log(Q(x))=p(0)logQ(0)P(1)logQ(1)

又因为:

P(0)=1P(1),Q(0)=1Q(1)

故上式可写为:

Loss=P(1)logQ(1)(1P(1))log(1Q(1))

即:

Loss=PlogP~(1P)log(1P~)

其中,P为标签的具体值(0或1),P~为模型的预测值(标签为1的概率).

posted @   Aegsteh  阅读(156)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示