信息量、熵、KL散度、交叉熵
信息量、熵、KL散度、交叉熵
相信很多小伙伴在学习交叉熵时,对交叉熵感觉到非常的迷惑。"交叉熵怎么来的?","为什么交叉熵的表达式是这样婶儿的?","熵和交叉熵到底有什么关系?"。本文通过由浅到深的顺序,来引入交叉熵,希望能对各位学习路上的小伙伴有所帮助,不足的地方恳请批评指正
一、 信息量
1. 何为信息量?
从字面意思来看,直观理解:如果我们知道一件事情,这件事情给我们带来的信息有多少。
2. 信息量如何定义?
让我们想象一个能带给我们信息量的例子:四个人比赛争夺冠军,编编号为1,2,3,4,每个人每场胜利的概率是
选手1、2比赛,1获胜的概率是;选手3、4比赛,4获胜的概率是;1、4再比赛,1获胜的概率还是;我们关注1号选手,并设信息所具有的信息量为,即
设选手1第一场获胜的事件为,选手1第二场获胜的事件为,选手1获得冠军的事件为,表示与同时发生. 为了保证信息量量纲的一致性,我们猜想
之所以是加法而不是乘法,是为了保证量纲的一致性。
根据上式,我们就能断定:信息量的计算一定是一个对数函数。接下来我们猜想下一个问题,一个事情发生的概率越小还是越大,他能带来的信息量越大?思考一下我们就能发现,一个事情发生的概率越小,它所带来的信息量就越大,如中国国足夺冠(手动狗头)。至于对数函数的底数,什么值都没有关系,为了更好的进行运算,信息论中将其定义为以2为底。故信息量定义如下:
为事件,为事件发生的概率,信息量的单位为奈特 nat.
二、熵
熵是衡量一个信息系统的混乱程度,定义为信息量的期望。故其计算表达式为:
其中,的分布为. 熵用来衡量一个信息系统的混乱程度
三、KL散度
有了熵,我们就能衡量一个信息系统或一个概率分布的分布情况,那么肯定会有同学思考,如何衡量两个分布的"距离"呢?
- 对于相同的分布,如高斯分布,我们只需要比较均值与标准差
- 对于不同的分布,我们必须通过一个更高层的指标来比较
由此,我们引入KL散度(Kullback-Leibler Divergence)的概念,用于度量两个分布之间的"距离"。设有两个概率分布与,定义以为基础的之间的KL散度为
四、交叉熵
1. 交叉熵引入
我们观察KL散度的公式:
为了让分布更接近分布. 上式必须趋近于0,但我们并不知道$\sum_{x \in X}[-P(x)logQ(x)] \sum_{x \in X}[-P(x)logP(x)]$谁大谁小。当然已经有人帮我们解决了这个问题,根据吉布斯不等式:
恒成立,所以为了为了让分布更接近分布.我们只需要让尽可能的小即可。
2. 交叉熵定义
为了更方便描述,我们给取了个名字,叫做交叉熵。
在机器学习中,我们常用一个已知数据集来训练一个机器学习模型,故我们想让模型预测的概率分布更接近已知数据集的概率分布,所以我们将已知数据集的分布看作,模型预测的分布看作.
由于数据集已知,则已知,故我们需要优化. 在深度学习神经网络上,我们要做分类任务时,经常用全连接层后的神经元输出,经过得到模型预测的概率分布,所以对分类神经网络来说,交叉熵损失函数即为
其中,为第i个样本预测为标签k的概率,是样本真实的标签的one-hot编码,当样本属于类别时,,即,第位为1,其余位为0.
3. 二分类问题
当分类为二分类问题时,的取值只能为0或1,的输出只有一个值,即预测标签为1的概率。此时,
又因为:
故上式可写为:
即:
其中,为标签的具体值(0或1),为模型的预测值(标签为1的概率).
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理