谈谈交叉熵损失函数

简介: 一.交叉熵损失函数形式现在给出三种交叉熵损失函数的形式,来思考下分别表示的的什么含义。--式子1--式子2--式子3解释下符号,m为样本的个数,C为类别个数。上面三个式子都可以作为神经网络的损失函数作为训练,那么区别是什么?■1》式子1,用于那些类别之间互斥(如:一张图片中只能保护猫或者狗的其中一个)的单任务分类中。

一.交叉熵损失函数形式

现在给出三种交叉熵损失函数的形式,来思考下分别表示的的什么含义。

--式子1

--式子2

--式子3

解释下符号,m为样本的个数,C为类别个数。上面三个式子都可以作为神经网络的损失函数作为训练,那么区别是什么?

■1》式子1,用于那些类别之间互斥(如:一张图片中只能保护猫或者狗的其中一个)的单任务分类中。连接的 softmax层之后的概率分布。
tensorflow中的函数为: tf.nn.softmax_cross_entropy_with_logits

■2》式子2,用于那些类别之间不存在互斥关系(如:一张图片中可有猫和狗两种以上的类别同时存在)的多任务学习分类中。最后一层的每个节点不在是softmax函数的输出了,而是sigmoid。把每个节点当成一个完整的分布,而式子1是所有节点组合程一个完整分布。
tensorflow中的函数为:tf.nn.sigmoid_cross_entropy_with_logits

■3》式子3,用于最后一层只有一个节点的二分类任务

二.交叉熵损失意义

要解释交叉熵损失函数的意义,我认为应该从熵的根源说起。这里我不介绍熵作者呀,来源呀什么的不再介绍了(主要是懒),哈哈!)这里讲的顺序是:信息量--》信息熵--》交叉熵

1.信息量

意义:
如果一个事件发生的概率为p,那么获知该信息发生能给到我们 的信息量(可以理解为意外程度)

例子:巴西跟中国乒乓球比赛,历史上交手64次,其中中国获胜63次,那么63/64是赛前普遍认为中国队获胜的概率,那么这次中国获胜的信息量有多大?

如果这次是巴西获胜,那么带给我们的信息量为:

单位:bit

如果一件事件的发生概率为:100%,带给我们的信息量为:0
通俗点讲就是,如果一件事情,本身发生的概率很大,如果再次发生,我们并没有觉得有什么好奇的。但是一件发生概率很小的事情发生了,我们就会非常惊讶,它能给到我们的信息就越有价值。例如:太阳每天都是从东边出来,这个概率几乎是1,所以我们都其以为常,没什么好惊讶的,但是某天太阳从西边出来了,这个时候,打破了我们的常识,这个概率非常小的事件居然发生了,我们就会非常惊讶,它给我们信息量是非常大的,也许我们可以根据这个现象发现一种新的东西。

2.信息熵

意义:
用来做信息的杂乱程度的量化描述。
定义:

1.中国队获胜概率: 63/64,巴西获胜概率:1/64,那么信息熵为:

2.中国队获胜概率: 1/2,巴西获胜概率:1/2,那么信息熵为:

3.中国队获胜概率: 1,巴西获胜概率:0,那么信息熵为:

结论:
信息越确定,越单一,信息熵就越小,
信息越不确定,越混乱,信息熵就越大。

注意:这里的log以2为底,实际上可以与e,10等其他为底,主要对比的时候统一就好。从计算机角度来看,计算机只有0,1两位,用2比较符合。

3.交叉熵

意义:
衡量真实分布和预测的分布的差异情况
离散形式为:

其中,p(x)为真实概率,q(x)为预测概率
从信息量的角度,如果是真是真实的概率,那么给到我们的信息熵为:

如果是预测分布,改到我们信息熵(可以简单理解为信息量)为:

信息熵的差异为:

这也叫:K-L散度

可以看出,只有当q(x)=p(x)时候差异为:0

K-L散度始终是>=0,但是不知道怎么证明(我还没推导出来惭愧,以后推导出来再补充,如果有读者推出来,麻烦评论,非常感谢!)

问题:

为什么大多数情况,我们都用交叉熵而不是K-L散度作为损失函数?

我来分析下:仔细观察k-l散度,如果是多分类时候,one-hot形式【0,1,0,0】,那么把p(x)=0,1,0,0,带入K-L散度函数,那么其实跟交叉熵形式是一样的。

例如:在多一个4分类任务时候,计算其中一个样本的第2个类别损失,其one-hot形式,【0,1,0,1】,模型预测出来的概率分布为:【0.1,0.6,0.2,0.1】
那么如果是K-L散度作为损失,那么:

实际就是:-p(x)*log(q(x))

这下明白了吧。

参考:
1.https://en.wikipedia.org/wiki/Kullback–Leibler_divergence
2.https://www.reddit.com/r/MachineLearning/comments/4mebvf/why_train_with_crossentropy_instead_of_kl/
3.书籍《白话大数据》第六章信息论

https://www.cnblogs.com/aijianiula/p/9460842.html

目录
相关文章
|
7月前
|
机器学习/深度学习
为什么在二分类问题中使用交叉熵函数作为损失函数
为什么在二分类问题中使用交叉熵函数作为损失函数
223 2
|
2月前
|
机器学习/深度学习 自然语言处理
交叉熵损失
【10月更文挑战第2天】
|
5月前
|
机器学习/深度学习
交叉熵损失函数的使用目的(很肤浅的理解)
交叉熵损失函数的使用目的(很肤浅的理解)
|
7月前
|
机器学习/深度学习 JavaScript Python
熵、联合熵、相对熵、交叉熵、JS散度、互信息、条件熵
熵、联合熵、相对熵、交叉熵、JS散度、互信息、条件熵
107 1
“交叉熵”反向传播推导
“交叉熵”反向传播推导
138 0
|
机器学习/深度学习
损失函数:均方误和交叉熵,激活函数的作用
损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数。
192 1
损失函数:均方误和交叉熵,激活函数的作用
|
机器学习/深度学习
Lesson 4.2 逻辑回归参数估计:极大似然估计、相对熵与交叉熵损失函数-2
Lesson 4.2 逻辑回归参数估计:极大似然估计、相对熵与交叉熵损失函数-2
|
机器学习/深度学习 算法
Lesson 4.2 逻辑回归参数估计:极大似然估计、相对熵与交叉熵损失函数-1
Lesson 4.2 逻辑回归参数估计:极大似然估计、相对熵与交叉熵损失函数-1
|
机器学习/深度学习 算法 数据挖掘
深度学习相关概念:交叉熵损失
 我在学习深度学习的过程中,发现交叉熵损失在分类问题里出现的非常的频繁,但是对于交叉熵损失这个概念有非常的模糊,好像明白又好像不明白,因此对交叉熵损失进行了学习。
183 0
|
机器学习/深度学习 人工智能 JavaScript
【Pytorch神经网络理论篇】 21 信息熵与互信息:联合熵+条件熵+交叉熵+相对熵/KL散度/信息散度+JS散度
对抗神经网络(如DIM模型)及图神经网络(如DGI模型)中,使用互信息来作为无监督方式提取特征的方法。
913 0