【深度学习】损失函数(1):Cross-Entropy Loss 交叉熵损失(代价函数和损失函数的区别+交叉熵与KL散度、信息熵/熵之间的关系)

本文纠正了损失函数和成本函数的常见误解,明确了它们在单个样本和整个训练集上的定义。接着,讨论了KL散度作为衡量两个概率分布相似性的指标,以及它的非对称性和非负性。然后介绍了熵的概念,表示信息的不确定性。最后,重点讲解了交叉熵,它是衡量预测概率分布与真实分布之间差异的常用方法,常用于分类任务的损失函数。文章通过实例展示了如何计算交叉熵,并指出优化交叉熵是神经网络训练的目标。
摘要由CSDN通过智能技术生成

首先纠正一个问题,在之前的内容里不止一次提到两个函数:

  • L ( θ ) L(\theta) L(θ),即loss function,损失函数
  • C ( y , y ^ ) C(y,\hat y) C(y,y^),即cost function,代价函数

我们的推理建立在 L ( θ ) = ∑ C ( y , y ^ ) L(\theta)=\sum C(y,\hat y) L(θ)=C(y,y^)的基础上,即 C C C是针对一个样本的, L L L是针对一组样本的,最终的目标是寻找一个能使 L L L最小的 θ \theta θ

然而上面的定义是有问题的,标准定义如下:

  • 损失函数(loss function) L ( y , y ^ ) L(y,\hat y) L(y,y^)定义在单个样本上的,算的是一个样本的误差
  • 代价函数(cost function) C ( θ ) C(\theta) C(θ)定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均

可以发现正确的定义和我们之前所使用的恰好相反,但是无伤大雅,因为这只是命名上的差异罢了,说白了都是自己折腾自己,在不同的领域相同的东西也有不同的叫法,只要保证在推理过程中的统一就可以了(当然,符合约定俗成的规矩也很重要,但是在理解层面并不影响),所以在以下的内容中改用为标准定义

损失函数是用于衡量模型所作出的预测离真实值(Ground Truth)之间的偏离程度,并没有一种万能的损失函数能够适用于所有的机器学习任务,所以在这里我们需要知道每一种损失函数的优点和局限性,才能更好的利用它们去解决实际的问题。损失函数大致可分为两种:回归损失(针对连续型变量)和分类损失(针对离散型变量)

KL散度(相对熵)

Kullback-Leibler散度(KL散度)用于估计两个分布的相似性,定义如下:

D K L ( P ∣ Q ) = ∑ x i p x i log ⁡ ( p x i q x i ) D_{KL}(P|Q)=\sum_{x_i}p_{x_i}\log\bigl(\frac{p_{x_i}}{q_{x_i}}\bigr) DKL(PQ)=xipxilog(qxipxi)

注意哈,从公式就能看出来 D K L ( P ∣ Q ) ≠ D K L ( Q ∣ P ) D_{KL}(P|Q)\neq D_{KL}(Q|P) DKL(PQ)=DKL(QP),KL散度并不是一个对称的loss

其中 P P P Q Q Q分别是两个概率分布, x i x_i xi表示在这个系统中不同的状态

在深度学习领域中, P P P一般指样本在训练集中的概率分布(这是一个真实分布), Q Q Q一般指样本在网络预测结果中的概率分布(这是一个近似分布),利用KL散度,我们可以精确地计算出当我们近似一个分布与另一个分布时损失了多少信息

KL散度是非负的, Q Q Q越接近 P P P,KL散度就越小,只有当 P P P Q Q Q处处相等时才会等于0

Entropy 熵/信息熵

在物理学有一个概念,就是熵,它表示一个热力学系统的无序程度。为了解决对信息的量化度量问题,香农在1948年提出了“信息熵”的概念,它使用对数函数表示对不确定性的测量。熵越高,表示能传输的信息越多,熵越少,表示传输的信息越少,我们可以直接将熵理解为信息量

按照香农的理论,熵背后的原理是:任何信息都存在冗余,并且冗余大小与信息中每个符号(数字、字母或单词)的出现概率(或者说不确定性)有关。概率大,出现机会多,则不确定性小,这个关系就用对数函数来表征。

机器学习专题中已经提到过信息熵,在这里我们使用样本和训练集来表述即可:

  • 信息熵,也叫熵,衡量由一组样本 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x m , y m ) } \{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\} {(x1,y1),(x2,y2),,(xm,ym)}构成的训练集 D D D整体的不确定性:

    E n t ( D ) = − ∑ x i ∈ D p x i log ⁡ 2 p x i Ent(D)=-\sum_{x_i\in D}p_{x_i}\log_2 p_{x_i} Ent(D)=xiDpxilog2pxi

Cross-Entropy 交叉熵

从上面的定义可以看出, E n t ( D ) Ent(D) Ent(D)是利用真实结果(ground truth)计算出来的,其中的 p x i p_{x_i} pxi训练集反映的真实分布,设其为 P P P

当我们使用网络对某个样本进行分类时,网络预测结果的呈现形式也是一个概率分布(比如经过softmax激活函数后),设其为 Q Q Q,我们希望这个分布和真实分布 P P P越相似越好,考虑上文提到的KL散度,可以进行以下的变形:

D K L ( P ∣ Q ) = ∑ x i ∈ D p x i log ⁡ ( p x i q x i ) = ∑ x i ∈ D p x i log ⁡ p x i − ∑ x i ∈ D p x i log ⁡ q x i = − E n t ( D ) + [ − ∑ x i ∈ D p x i log ⁡ q x i ] \begin{aligned}D_{KL}(P|Q)&=\sum_{x_i\in D}p_{x_i}\log\bigl(\frac{p_{x_i}}{q_{x_i}}\bigr)\\&=\sum_{x_i\in D}p_{x_i}\log p_{x_i}-\sum_{x_i\in D}p_{x_i}\log q_{x_i}\\&=-Ent(D)+\Bigl[-\sum_{x_i\in D}p_{x_i}\log q_{x_i}\Bigr]\end{aligned} DKL(PQ)=xiDpxilog(qxipxi)=xiDpxilogpxixiDpxilogqxi=Ent(D)+[xiDpxilogqxi]

而对于训练集来说, E n t ( D ) Ent(D) Ent(D)是个定值,因此,分布 P P P Q Q Q的相似程度随 − ∑ x i ∈ D p x i log ⁡ q x i -\sum_{x_i\in D}p_{x_i}\log q_{x_i} xiDpxilogqxi的变化而变化,于是,我们将它定义为交叉熵

H ( P , Q ) = − ∑ x i ∈ D p x i log ⁡ q x i H(P,Q)=-\sum_{x_i\in D}p_{x_i}\log q_{x_i} H(P,Q)=xiDpxilogqxi

同时得到KL散度与信息熵、交叉熵之间的关系:

KL散度值=交叉熵-信息熵

交叉熵和kl散度在很多情况下是一样的,即交叉熵从和KL散度描述的数据性质是一样的,但是交叉熵计算起来很简单,因为不需要计算信息熵,因此交叉熵使用更加广泛

由于这个损失函数比较重要哈,因此举个简单的例子来算一下交叉熵:

考虑一个三分类问题,ground truth的概率分布为 p x = [ 1 0 0 ] p_x=\begin{bmatrix}1 \\0 \\0\end{bmatrix} px= 100

  • 若预测结果的概率分布为 q x = [ 0.5 0.4 0.1 ] q_x=\begin{bmatrix}0.5 \\0.4 \\0.1\end{bmatrix} qx= 0.50.40.1 ,则:

    H ( p x , q x ) = − ( 1 ⋅ log ⁡ 0.5 + 0 ⋅ log ⁡ 0.4 + 0 ⋅ log ⁡ 0.1 ) ≈ 0.3 H(p_x,q_x)=-\bigl(1\cdot\log 0.5+0\cdot\log0.4+0\cdot\log0.1\bigr)\approx0.3 H(px,qx)=(1log0.5+0log0.4+0log0.1)0.3

  • 若预测结果的概率分布为 q x = [ 0.8 0.1 0.1 ] q_x=\begin{bmatrix}0.8 \\0.1 \\0.1\end{bmatrix} qx= 0.80.10.1 ,则:

    H ( p x , q x ) = − ( 1 ⋅ log ⁡ 0.8 + 0 ⋅ log ⁡ 0.1 + 0 ⋅ log ⁡ 0.1 ) ≈ 0.1 H(p_x,q_x)=-\bigl(1\cdot\log 0.8+0\cdot\log0.1+0\cdot\log0.1\bigr)\approx0.1 H(px,qx)=(1log0.8+0log0.1+0log0.1)0.1

从直观上可以看到第二个预测的结果要优于第一个,并且通过计算交叉熵,结果和我们的判断也是一致的,那么,我们的最终目标就是优化我们的神经网络,使计算出的交叉熵最小,这就是交叉熵损失的基本思想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值