交叉熵与 Softmax 在多分类问题中的应用

交叉熵与 Softmax 在多分类问题中的应用




在机器学习和深度学习中,Softmax 函数和交叉熵损失函数是解决多分类问题的关键组成部分。本文将详细介绍这两个概念,并通过一个实际案例来说明它们的应用。

Softmax 函数

Softmax 函数是一个常用的激活函数,用于将一组数值转换为概率分布。假设我们有一个向量 z z z,Softmax 函数定义如下:

softmax ( z ) i = e z i ∑ j = 1 K e z j \text{softmax}(z)_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} softmax(z)i=j=1Kezjezi

这里:

  • z i z_i zi是输入向量中的第 i i i个元素,
  • K K K是向量的长度,
  • e e e是自然对数的底数。

Softmax 函数的主要作用是将每个原始值 z i z_i zi转换为一个介于 0 和 1 之间的值,并且所有这些转换后的值之和为 1,这使得它可以被解释为概率分布。

交叉熵损失函数

交叉熵是一个度量两个概率分布之间差异的方法。在机器学习中,我们通常有一个真实的概率分布 y y y(通常是独热编码形式的一组标签)和模型预测的概率分布 y ^ \hat{y} y^。对于多分类问题,交叉熵损失函数定义如下:

CE ( y ^ , y ) = − ∑ i = 1 K y i log ⁡ ( y ^ i ) \text{CE}(\hat{y}, y) = -\sum_{i=1}^{K} y_i \log(\hat{y}_i) CE(y^,y)=i=1Kyilog(y^i)

这里:

  • y i y_i yi是真实标签向量中的第 i i i个元素,
  • y ^ i \hat{y}_i y^i是预测标签向量中的第 i i i个元素,
  • K K K是类别数量。

实际案例

为了更好地理解这些概念,让我们来看一个实际的多分类问题案例:图像分类。

假设我们正在训练一个卷积神经网络 (CNN) 来识别动物图片中的三种动物:猫、狗和鸟。每张图片都将被分类为这三个类别之一。

数据准备

我们有以下训练数据集:

  • 样本1:猫的图片,标签为 [ 1 , 0 , 0 ] [1, 0, 0] [1,0,0]
  • 样本2:狗的图片,标签为 [ 0 , 1 , 0 ] [0, 1, 0] [0,1,0]
  • 样本3:鸟的图片,标签为 [ 0 , 0 , 1 ] [0, 0, 1] [0,0,1]

模型结构

我们的 CNN 模型结构如下:

  • 输入层:接收图像像素值。
  • 卷积层和池化层:提取特征。
  • 全连接层:最后的全连接层输出一个长度为 3 的向量,表示每个类别的得分或“证据”(logits)。
  • Softmax 层:将 logits 转换为概率分布。

训练过程

  1. 前向传播:对于每个样本,模型产生一个 logits 向量 z z z
  2. Softmax 函数:将 logits 向量 z z z转换为概率分布 y ^ \hat{y} y^
  3. 交叉熵损失:使用 y ^ \hat{y} y^和真实的标签 y y y来计算交叉熵损失。

示例计算

假设模型对于样本1(猫的图片)产生了以下 logits 向量 z z z

z = [ 1.0 , 2.0 , 0.5 ] z = [1.0, 2.0, 0.5] z=[1.0,2.0,0.5]

使用 Softmax 函数得到预测概率分布 y ^ \hat{y} y^

y ^ = [ e 1.0 e 1.0 + e 2.0 + e 0.5 , e 2.0 e 1.0 + e 2.0 + e 0.5 , e 0.5 e 1.0 + e 2.0 + e 0.5 ] ≈ [ 0.245 , 0.665 , 0.090 ] \hat{y} = \left[\frac{e^{1.0}}{e^{1.0} + e^{2.0} + e^{0.5}}, \frac{e^{2.0}}{e^{1.0} + e^{2.0} + e^{0.5}}, \frac{e^{0.5}}{e^{1.0} + e^{2.0} + e^{0.5}}\right] \approx [0.245, 0.665, 0.090] y^=[e1.0+e2.0+e0.5e1.0,e1.0+e2.0+e0.5e2.0,e1.0+e2.0+e0.5e0.5][0.245,0.665,0.090]

对于这个样本,真实的标签 y y y [ 1 , 0 , 0 ] [1, 0, 0] [1,0,0]。因此,交叉熵损失函数计算如下:

CE ( y ^ , y ) = − ( 1 ⋅ log ⁡ ( 0.245 ) + 0 ⋅ log ⁡ ( 0.665 ) + 0 ⋅ log ⁡ ( 0.090 ) ) ≈ 1.38 \text{CE}(\hat{y}, y) = -\left(1 \cdot \log(0.245) + 0 \cdot \log(0.665) + 0 \cdot \log(0.090)\right) \approx 1.38 CE(y^,y)=(1log(0.245)+0log(0.665)+0log(0.090))1.38

平均交叉熵损失

在深度学习中,我们通常使用平均交叉熵损失来计算整个批次的数据损失。对于一个包含 N N N个样本的批次,平均交叉熵损失定义为:

Average CE = − 1 N ∑ i = 1 N ∑ j = 1 K y j ( i ) log ⁡ ( y ^ j ( i ) ) \text{Average CE} = -\frac{1}{N} \sum_{i=1}^{N} \sum_{j=1}^{K} y_j^{(i)} \log(\hat{y}_j^{(i)}) Average CE=N1i=1Nj=1Kyj(i)log(y^j(i))

这里 N N N是批次中样本的数量, K K K是类别数量。

不使用平均交叉熵的影响

如果我们不使用平均交叉熵,而是直接使用交叉熵损失,那么会有以下几个影响:

  1. 不可比较性:每个批次的损失值将取决于批次中样本的数量,使得不同批次之间的损失值不可直接比较。
  2. 不稳定的学习:如果不进行平均,那么每个批次的损失值可能会因为样本数量的变化而波动较大,这可能导致训练过程不稳定。
  3. 难以设置超参数:优化器的学习率等超参数通常需要根据损失函数的规模来调整。如果不使用平均交叉熵,损失函数的规模会随着批次大小的变化而变化,这使得设置合适的超参数变得更加困难。

推荐的做法是在深度学习训练过程中使用平均交叉熵损失,这样可以确保训练过程更加稳定,并且使得不同批次之间的损失值更具可比性。大多数深度学习框架(如 TensorFlow 和 PyTorch)都默认使用平均交叉熵损失。

实例分析

假设我们有一个批次包含 3 个样本的图像分类任务,每个样本都有 3 个可能的类别(猫、狗、鸟)。每个样本的真实标签和预测概率分布如下:

  • 样本1:猫的图片,真实标签 [ 1 , 0 , 0 ] [1, 0, 0] [1,0,0],预测概率 [ 0.2 , 0.5 , 0.3 ] [0.2, 0.5, 0.3] [0.2,0.5,0.3]
  • 样本2:狗的图片,真实标签 [ 0 , 1 , 0 ] [0, 1, 0] [0,1,0],预测概率 [ 0.1 , 0.8 , 0.1 ] [0.1, 0.8, 0.1] [0.1,0.8,0.1]
  • 样本3:鸟的图片,真实标签 [ 0 , 0 , 1 ] [0, 0, 1] [0,0,1],预测概率 [ 0.1 , 0.1 , 0.8 ] [0.1, 0.1, 0.8] [0.1,0.1,0.8]

对于每个样本,我们可以计算交叉熵损失:

  • 对于样本1,交叉熵损失为 − log ⁡ ( 0.2 ) ≈ 1.609 -\log(0.2) \approx 1.609 log(0.2)1.609
  • 对于样本2,交叉熵损失为 − log ⁡ ( 0.8 ) ≈ 0.097 -\log(0.8) \approx 0.097 log(0.8)0.097
  • 对于样本3,交叉熵损失为 − log ⁡ ( 0.8 ) ≈ 0.097 -\log(0.8) \approx 0.097 log(0.8)0.097

接着,我们计算平均交叉熵损失:

Average CE = 1 3 ( 1.609 + 0.097 + 0.097 ) ≈ 0.601 \text{Average CE} = \frac{1}{3} (1.609 + 0.097 + 0.097) \approx 0.601 Average CE=31(1.609+0.097+0.097)0.601

关注真实类别的预测概率

在计算交叉熵损失时,我们只关注模型对于每个样本真实类别的预测概率。例如,当真实标签为“猫”时,我们只关注模型对于“猫”的预测概率 y ^ 1 \hat{y}_1 y^1,而其他类别的预测概率对损失函数没有贡献。

小结

通过结合 Softmax 函数和交叉熵损失函数,我们可以构建出强大的多分类模型,用于解决各种分类任务。平均交叉熵损失函数可以帮助我们更稳定地评估模型的表现,并指导模型学习正确的分类决策。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值