赞
踩
交叉熵是机器学习、深度学习中非常常用的损失函数。本文梳理整合了关于交叉熵的比较好的解释资料。
首先给出交叉熵的维基百科定义:
相对熵又称为KL散度(Kullback-Leibler Divergence),用来衡量两个分布之间的距离,记为:
D
K
L
=
(
p
∣
∣
q
)
D_{KL} = (p||q)
DKL=(p∣∣q)
这里H( p )是p的熵。
假设有两个分布p和q,它们在给定样本集上的交叉熵定义为:
从这里可以看出,交叉熵和相对熵相差了H( p ),而当p已知的时候,H( p )是个常数,所以交叉熵和相对熵在这里是等价的,反映了分布p和q之间的相似程度。
一句话概括的话,交叉熵描述了两个不同的概率分布p和q的差异程度。 交叉熵是不对称的,也就是说Hp( q ) 不等于 Hq( p )。两个分布差异越大,则两个交叉熵的差异越大。
关于交叉熵的信息学理解,下面这篇博客解释的很好,通俗易懂:
看得见的信息论-为什么用交叉熵作为逻辑回归的代价函数
交叉熵来自香农的信息论,简单来说,交叉熵是用来衡量在给定的真实分布p(k)下,使用非真实分布q(k)所指定的策略 f(x) 消除系统的不确定性所需要付出的努力的大小。交叉熵的越低说明这个策略越好,我们总是minimize交叉熵,因为交叉熵越小,就证明算法所产生的策略越接近最优策略,也就间接证明我们的算法所计算出的非真实分布越接近真实分布。交叉熵损失函数从信息论的角度来说,其实来自于KL散度。
在二分的情况下,模型最后需要预测的结果只有两种情况,对于每个类别我们的预测得到的概率为p和1-p。此时表达式为:
其中:
其中:
这个表达式其实就是逻辑回归的损失函数,逻辑回归的损失函数就是交叉熵函数。
多分类的情况实际上就是对二分类的扩展:
其中:
pytorch 中的交叉熵其实已经集成了softmax计算,所以我们的输出不需再手动添加softmax层。pytorch的交叉熵函数中允许我们对不同的类别给予不同的权重。
参考资料:
1.维基百科
2.Softmax函数与交叉熵
3.看得见的信息论-为什么用交叉熵作为逻辑回归的代价函数
4.损失函数——交叉熵损失函数
5.pytorch官网-交叉熵
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。