众所周知,在机器学习中的分类任务中,我们最常用的损失函数就是Cross-Entropy-Loss,它是是非常重要的损失函数,也是应用最多的损失函数之一.但是其原理是什么呢?尽管入门机器学习已经有将近一年的时间,但是对于此事并不清楚,说明个人的知识体系还有很多待完善的地方,今天忙中偷闲就把这个坑给填上.
我在油管上找到了一个非常好的视频,今天我就把我理解的这个视频中的东西写下来,为了尊敬原作者,这里先贴上原视频链接https://www.youtube.com/watch?v=ErfnhcEV1O8
信息熵
1. 理解信息熵
先了解信息熵的背景,这里先贴上百度百科对其的解释:
信息熵(information entropy)是信息论的基本概念。描述信息源各可能事件发生的不确定性。20世纪40年代,香农(C.E.Shannon)借鉴了热力学的概念,把信息中排除了冗余后的平均信息量称为“信息熵”,并给出了计算信息熵的数学表达式。
计算公式: H(x) = E[I(xi)] = E[ log(2,1/P(xi)) ] = -∑P(xi)log(2,P(xi)) (i=1,2,…n)
相信第一开始看的人没一个能够看懂的,这是中国百科全书的老毛病了(哈哈)
那我们就从视频中举出的几个小例子入手,一步一步分析
明天是否下雨,我们都不清楚,但是如果我假定晴天和降雨的概率都是50%的话,我们只需要1bit的信息就能传达明天是否下雨的这件事情
同理,如果明天的天气有8种可能,那我们就需要3bit信息来传递(2的3次方是8,正好代表8种,每种发生概率为1/8等可能情况)
如果明天有75%的几率晴天,只有25%的几率会下雨时(不为等可能),这时候就会发生信息的损耗,25和75相当于把信息分成了4份,也就是说我们传递信息的时候需要传2bit(2的2次方=4)
简单的化简就能够得到这个0.41,这个值,这个就代表了传递明天是晴天实际传播的信息容量的大小
我们把实际每种情况上传递的信息量的大小乘以其中的份额,就能得到其接收的每条消息中包含的信息的平均量,也就是信息熵
故我们得出了这个信息熵的公式,我们可以将这个式子解释为:要花费至少多少位的编码来表示此概率分布。从此式也可以看出,信息熵的本质是一种期望。
下面我们就说一下视频中给的另外一个例子
我们按照图中所给的编码方式编码的话每一条消息需要3个bit,但是经我们计算,其信息熵只有2.23,也就是说我们传过去的3bits信息中有0.77bit是多余的的信息
如果改用这种编码的方试,我们的传输平均bit达到了2.42, 对比信息熵2.23,损耗相比上边的编码方式好了很多
但是我们一旦改变一下状态的概率,而依旧上边的编码方式,我们发现传输的平均bit竟然达到了4.58之多,对比信息熵2.23多余的信息多了两倍还多
2. 引入Cross-Entropy
KL散度: 当我们使用一个较简单、常见的分布(如均匀分布、二项分布等)来拟合我们观察到的一个较为复杂的分布时,由于拟合出的分布与观察到的分布并不一致,会有信息损失的情况出现。KL散度就是为了度量这种损失而被提出的。
下边就是一个实际的例子:
我们使用交叉熵计算的时候,因为我们的标签事先已经确定为100%正确,则p=1(真正的分布), 预测的分布中红熊猫的概率为25%,故我们能够算出交叉熵为1.386,我们所知,交叉熵越接近与0则说明识别越准去的(q=1时交叉熵为0),故说明现在预测的结果还有较大的误差.