交叉熵、相对熵(KL散度)的数学原理及在机器学习中应用

1 引言

最近频繁使用交叉熵,虽然之前学习过,但感觉对交叉熵的认识还是不够全面,打算再详细的总结一下。搜索了一番资料发现已经有人对这一块的知识讲解非常全面,所以就不再重复细说,只总结一下我认为比较关键的知识脉络吧。
要全面地搞懂交叉熵得从这一条概念链条着手:信息量—>熵—>KL散度—>交叉熵

2 信息量

假设X是一个离散型随机变量,其取值集合为χ,概率分布函数 p ( x ) = P ( X = x ) , x ∈ χ p(x)=P(X=x),x∈χ p(x)=P(X=x),xχ,则定义事件 X = x 0 X=x_0 X=x0的信息量为
I ( x 0 ) = − l o g ( p ( x 0 ) ) I(x_0)=−log(p(x_0)) I(x0)=log(p(x0))
至于信息量的计算公式为啥是这样?因为-logx这个函数的性质恰好是我们需要的,即随着x增大该函数不断减小,恰如信息量随着发生概率的增大而减小。
信息量描述的是一个事件发生的不确定性的大小。

3 熵

有了上面关于信息量的定义,我们就可以定义熵了,即:
H ( X ) = − ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) H(X)=−∑_{i=1}^np(x_i)log(p(x_i)) H(X)=i=1np(xi)log(p(xi))
为啥上面的式子是求和形式呢?
因为一个事件可能有很多种发生情况,每一种情况的发生都对应着一个发生概率,那么熵就是用来表示一个事件的信息量的期望。

4 KL散度

相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异。
KL散度的计算公式:
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p||q)=\sum_{i=1}^np(x_i)log(\frac{p(x_i)}{q(x_i)}) DKL(pq)=i=1np(xi)log(q(xi)p(xi))
其中,n为事件的所有可能性。
D K L D_{KL} DKL的值越小,表示q分布和p分布越接近。
在机器学习分类任务中(假设分为三类),P往往用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1] 。

5 交叉熵

在机器学习分类任务中,我们需要评估label和predict之间的差距,使用KL散度刚刚好,即 D K L ( y ∣ ∣ y ′ ) D_{KL}(y||y^{'}) DKL(yy),其中 y y y是label值, y ′ y^{'} y是predict值。
但是为啥我们却普遍使用交叉熵呢,而不是使用KL散度呢?
因为根据前面KL散度的公式我们可以继续推导出如下过程:
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) = − H ( p ( x ) ) + [ − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) ] D_{KL}(p||q)=∑_{i=1}^{n}p(x_i)log(p(x_i))−∑_{i=1}^{n}p(x_i)log(q(x_i)) \\ =-H(p(x))+[−∑_{i=1}^{n}p(x_i)log(q(x_i))] DKL(pq)=i=1np(xi)log(p(xi))i=1np(xi)log(q(xi))=H(p(x))+[i=1np(xi)log(q(xi))]
加号的前一部分恰巧就是p的熵,加号的后一部分就是交叉熵,我们将其单独拎出来:
H ( p , q ) = − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) H(p,q)=−∑_{i=1}^{n}p(x_i)log(q(x_i)) H(p,q)=i=1np(xi)log(q(xi))
其中p是样本的label真实概率值,q是对样本predict的概率值。
由于KL散度中的前一部分 − H ( p ( x ) ) -H(p(x)) H(p(x))不变(因为样本的标签不变),故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用用交叉熵做loss,评估模型。

6 交叉熵在机器学习中的应用

假设为二分类任务,在单个样本中的label的真实值确定的y,模型预测值为y’。则单个样本的交叉熵损失函数:
L = − [ y l o g y ^ + ( 1 − y ) l o g ( 1 − y ^ ) ] L=−[ylog \hat y+(1−y)log (1−\hat y)] L=[ylogy^+(1y)log(1y^)]
其中,由于每个样本中的label是真实类别是确定的,那么y在正样本中为1,负样本中取0,而不是取(0,1)区间内的值。

如果训练样本有N个,则在分类任务中的目标损失函数的计算公式为:
L = − ∑ i = 1 N [ y ( i ) l o g   y ^ ( i ) + ( 1 − y ( i ) ) l o g   ( 1 − y ^ ( i ) ) ] L=-\sum_{i=1}^N[y^{(i)}log\ \hat y^{(i)}+(1-y^{(i)})log\ (1-\hat y^{(i)})] L=i=1N[y(i)log y^(i)+(1y(i))log (1y^(i))]

7 推荐资料

本文的总结来自如下这些资料,其中资料[1]给了比较详细的讲解且作者经验丰富,非常阅读。资料[2]给了比较全面的概括。
[1].https://www.zhihu.com/question/65288314/answer/244557337
[2].https://blog.csdn.net/tsyccnh/article/details/79163834
[3].https://blog.csdn.net/red_stone1/article/details/80735068

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值