机器学习中的交叉熵

本文介绍了熵在信息学中的概念,它衡量的是系统中信息的混乱程度或不确定性。通过举例说明,阐述了信息量的计算方式,以及如何通过概率论方法将其与熵联系起来。接着,讨论了系统的熵是如何通过各事件信息量的期望和来计算的,并解释了相对熵(KL散度)的概念,用于衡量两个系统之间的差异。最后,将熵和相对熵的概念应用于神经网络中的交叉熵,展示了其在模型拟合与评估中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信息量

        熵在信息学中的概念就是一个系统“内在的混乱程度”,也可以理解为系统中所含的信息量大小。比如说一句话:“杨倩在东京奥运会中夺得了金牌”,如果在东京奥运会之前说这句话,那么这句话包含的信息量就很大,因为在赛前杨倩能不能拿金牌是一件非常不确定的事;但是当奥运会结束后,这句话包含的信息量就非常小了,因为杨倩已经确定拿了金牌。所以信息量也可以定义为:事件又不确定变为确定的困难程度。假设将信息量定义为:f(x) := 信息量。

        那么我们可以得到 f(杨倩赢得金牌)= f(杨倩进了决赛)+ f(杨倩赢了决赛)。根据概率论的方法,还可以得到:p(杨倩赢得金牌)= p(杨倩进了决赛)× f(杨倩赢了决赛)。这两个式子应该是等价的,那么 f(x)的表达式中一定含有log,才可以让相乘变相加。且符号为负,因为概率越大,信息量越小。即:

f(x):=-log_{2}x

        底数为2,就可以使计算结果的单位是比特。


        然后看信息量在一个系统中表现:假设在一场篮球比赛中,A队获胜的概率是50%,B队获胜的概率是50%,那这两个事件的信息量分别是:

f(A)=-log_{2}\frac{1}{2}=1        f(B)=-log_{2}\frac{1}{2}=1

        而在另一场篮球比赛中,C队获胜的概率是99%,D对获胜的概率是1%,那这两个时间的信息量分别是:

f(C)=-log_{2}\frac{99}{100}\approx 0.0145        f(D)=-log_{2}\frac{1}{100}\approx 6.6439

        从直观上看,C和D的比赛信息量应该更小,因为C获胜的概率非常大;A和B的比赛信息量应该更大,因为二者谁能赢很难说。但是这两场比赛的信息量该如何计算呢?如果简单的将系统的所有事件的信息量相加,那从上面这个例子来看肯定是不合适的。所以系统整体的信息量应该是每个事件的概率乘上它的信息量,再累加起来。这样计算下来,A和B的比赛的信息量是1,C和D的比赛的信息量大约是0.08079。也就是说A和B的系统的熵为1,C和D的系统的熵为0.08079。

        从这个例子中可以知道熵实质上求的是系统内所有时间信息量的期望和。那么熵的公式就是:

H(p)=\sum_{i=1}^{n}p_{i}\cdot f(p_{i})=\sum_{i=1}^{n}p_{i}\cdot (-log_{2}p_{i})=-\sum_{i=1}^{n}p_{i}\cdot log_{2}p_{i}


相对熵(KL散度)

        现在已经知道了如何求一个系统的熵,那我们就可以用熵来求两个系统的差别,即相对熵。假设有P和Q两个系统,现在以P为基准,考虑Q与P差多少。相对熵公式如下:

D_{KL}(P||Q) \\ :=\sum_{i=1}^{n}p_{i}(f_{Q}(q_{i})-f_{P}(p_{i})) \\ :=\sum_{i=1}^{n}p_{i}((-log_{2}q_{i})-(-log_{2}p_{i})) \\ :=\sum_{i=1}^{n}p_{i}\cdot (-log_{2}q_{i})-\sum_{i=1}^{n}p_{i}\cdot (-log_{2}p_{i})

        现在我们的计算是以P系统为基准的,那么式子最后一行减号后的那一项是固定不变的,现在要想让Q和P最接近,那么减号前一项就要越小越好,而这一项就是交叉熵。

H(P,Q)=\sum_{i=1}^{n}p_{i}\cdot (-log_{2}q_{i})


神经网络中的交叉熵

        在神经网络中,我们要比较的两个模型分别是神经网络所拟合出的模型和神经网络要逼近的那个真实概率模型。那么H(P,Q)中的Q就是神经网络所拟合出的模型,P就是要逼近的那个真实概率模型,现在我们要以神经网络要逼近的那个概率模型为基准,看看当下神经网络所拟合出的模型与真实概率模型的差别。神经网络输入的是一个长长的序列(x_{1},x_{2},x_{3},\cdot \cdot\cdot ,x_{n}),也就是真实概率模型的真实数据,输出的是每个样本对应的输出 y_{i} ,那么交叉熵公式中的 p_{i} 就是 x_{i}q_{i} 就是 y_{i}。如下所示:

H(P,Q)=\sum_{i=1}^{n}p_{i}\cdot (-log_{2}q_{i}) =\sum_{i=1}^{n}x_{i}\cdot (-log_{2}y_{i})

         在二分类问题中,如果x_{i}为1表示是正样本,x_{i}为0表示是负样本,而 y_{i} 表示的是一个概率,那么二者就是不同的事件,所以当x_{i} 为1时, y_{i}要表示是正样本的概率;x_{i}为0时,y_{i}要表示不是正样本的概率。所以交叉熵最后的公式就是:

H(P,Q)=-\sum_{i=1}^{n}(x_{i}\cdot log_{2}y_{i}+(1-x_{i})\cdot log_{2}(1-y_{i}))

        在多分类问题中,只需要计算每个分类的熵的期望即可,此时交叉熵的公式就是:

H(P,Q)=-\sum_{i=1}^{n}x_{i}\cdot log_{2}y_{i}

### 关于机器学习中的交叉熵损失函数 #### 概念解析 交叉熵损失函数是一种广泛应用于分类任务的损失函数,在PyTorch中通过`nn.CrossEntropyLoss`实现[^1]。该函数内部集成了`LogSoftmax`和`NLLLoss`两个功能模块,能够直接作用于未经softmax变换的原始输出(即logits),并据此计算预测分布与目标标签间的差异程度。 对于二元分类问题而言,当样本的真实类别为正类(y=1)时,理想的模型输出应尽可能接近1;反之则趋于0。此时,交叉熵损失可通过最小化\(-\log(p)\)或\(-\log(1-p)\),促使模型调整参数使得预测概率更贴近实际情况[^4]。 #### 使用方法 在实践中应用交叉熵损失函数十分简便: ```python import torch.nn as nn loss_fn = nn.CrossEntropyLoss() output = model(input_data) # 假设model返回的是未经过softmax的操作数 target = target_labels # 需要是LongTensor类型的索引值而非one-hot编码形式 loss_value = loss_fn(output, target) ``` 上述代码片段展示了如何定义一个基于交叉熵的损失计算器实例,并利用其评估给定网络输出与期望结果之间的差距。 #### 实现细节 具体到数学表达上,假设有一个含有C个可能类别的多分类任务,则针对单一样本\(i\),其对应的交叉熵可表示如下: \[H(i)=−∑_{c∈C}y_c⋅\log(\hat{y}_c),\] 其中,\(y_c\)代表第c类的实际标记向量;\(\hat{y}_c=\exp(z_c)/Σ_j{\exp(z_j)}\)是由输入特征经由线性组合后得到并通过softmax映射后的估计概率. 值得注意的是,相较于其他类型的损失衡量方式如均方差(MSE)[^5],由于后者仅关注数值上的绝对偏差而忽略了不同取值范围内的相对重要性变化规律,故而在面对逻辑回归等具有明显界限特性的算法框架下往往表现欠佳;相比之下,前者凭借对错误率敏感度更高的特性成为解决此类难题的理想工具之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值