多分类与二分类问题详解

前言

在机器学习和深度学习中,分类问题是核心任务之一。但你是否真正理解:

  • 为什么多分类用 softmax + 交叉熵?
  • 为什么二分类用 sigmoid + 二元交叉熵?
  • 为什么交叉熵损失函数要这样设计?

很多人在写代码时只是简单地调用 CrossEntropyLoss,却不清楚背后的数学原理和逻辑关系。

🎯 本文将为你揭示: 1. Softmax、交叉熵、极大似然估计(MLE)三者的内在联系 2. 从数学原理到实际应用的完整推导过程 3. 二分类作为多分类特例的统一理解

让我们从最基础的概念开始,构建完整的知识体系。

多分类问题

大家都知道做多分类的时候,模型的输出是一个向量,向量的每个元素对应一个类别的分数(logits)。为了将这些分数转换为概率分布,我们通常使用 softmax 函数。为了训练模型,我们需要一个损失函数来衡量预测概率分布与真实标签之间的差异。这里我们使用 交叉熵损失 函数。

从 softmax 到交叉熵损失函数的过程中,我们还需要知道 极大似然估计(MLE) 的概念。下面我们将详细介绍这三者之间的关系。


1. Softmax 函数

作用:将模型输出的原始分数(logits)转换为概率分布。
设模型对样本 的输出为 (称为 logits),其中 是类别数。我们需要将 转换为概率分布

Softmax 的构造逻辑
- 目标:概率 应满足
- 方法:通过指数函数保证正值,再归一化:


2. 极大似然估计(MLE)

目标:找到模型参数,使得观测数据(真实标签)出现的概率最大。 问题设定
假设真实类别为 (one-hot 编码为 ,其中 ,其余为 0),模型预测概率为

似然函数构建
- 单样本的似然是模型对真实类别的预测概率:
(因为 对其他类别,仅 有效)。
- 对数似然(取对数简化计算):
-p_k $$

关键点
- MLE 的假设是样本独立同分布(i.i.d.),对于 个样本,总似然是各样本似然的乘积:
对数似然为:


3. 交叉熵损失

信息论基础
- 交叉熵衡量两个分布 $ 你的理解是正确的!在 类别数 时,多分类交叉熵(CE)二元交叉熵(BCE) 在数学上是等价的,但在实际应用场景(如推荐系统的正负样本、多标签分类等)中,两者的使用逻辑和物理意义可能完全不同。下面我们系统性地补充这一部分内容,完善你的笔记。


新的思考:CE 和 BCE 的本质区别与应用场景

1. 核心区别

维度 多分类交叉熵(CE) 二元交叉熵(BCE)
问题类型 单标签多分类(一个样本仅属于一个类别) 多标签分类 / 二分类(一个样本可属于多个类别)
标签形式 One-hot 向量(如 [0, 1, 0] 多标签向量(如 [1, 0, 1]
概率约束 Softmax:所有类别概率和为 1 Sigmoid:每个类别的概率独立 ∈ [0, 1]
损失计算 只计算真实类别的负对数概率 对每个标签独立计算二元交叉熵并求和 / 平均

2. 推荐系统中的正负样本问题

在推荐系统中,我们常遇到 “用户 - 物品” 交互数据,其中: - 正样本:用户点击 / 购买的物品(标签 )。 - 负样本:未交互的物品(标签 ),可能是随机采样或曝光未点击。

(1)使用 BCE 的逻辑

  • 模型输出:对每个物品 ,输出一个独立的概率
  • 物理意义 表示用户对物品 的偏好概率,各物品之间概率无关
  • 损失函数
  • 适用场景
    • 显式负采样(如推荐系统的负样本构造)。
    • 多标签分类(如一张图片同时包含 “猫” 和 “狗”)。

(2)使用 CE 的逻辑(错误示范)

  • 若错误地使用 Softmax + CE:
    • 模型输出:对所有物品计算 Softmax 概率,强制
    • 问题:Softmax 隐含 “互斥” 假设,即用户只能喜欢一个物品,这与推荐场景矛盾(用户可能喜欢多个物品)。
    • 后果:模型会倾向于打压其他正样本的概率,导致训练不稳定。

3. 多标签分类问题

假设一个任务需要预测样本是否同时属于多个类别(如图像中的多物体识别): - 标签[1, 0, 1](类别 1 和类别 3 共存)。 - BCE 处理: - 对每个类别独立计算 Sigmoid 概率和 BCE 损失。 - 各类别之间无竞争关系。 - CE 的错误使用: - Softmax 会强制模型在类别 1 和类别 3 之间做 “非此即彼” 的选择,违背多标签特性。


4. 数学本质对比

(1)BCE 的独立性假设

BCE 的损失函数可分解为: - 每个类别 的损失 独立计算。 - 适用于类别非互斥的场景。

(2)CE 的互斥性假设

CE 的损失函数为: - 优化目标是最大化真实类别 的概率,同时打压其他类别。 - 仅适用于单标签多分类


5. 实际代码中的选择

(1)PyTorch 实现对比

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import torch
import torch.nn as nn

# 假设 batch_size=2, 类别数=3(多标签)
logits = torch.randn(2, 3) # 模型输出
labels = torch.tensor([[1, 0, 1], [0, 1, 1]]) # 多标签

# BCE 实现(正确)
bce_loss = nn.BCEWithLogitsLoss() # 内置 Sigmoid
loss_bce = bce_loss(logits, labels.float())

# CE 实现(错误!仅适用于单标签)
ce_loss = nn.CrossEntropyLoss()
# 错误:CE 需要单标签的类别索引(非多标签)

(2)何时选择 BCE 或 CE?

场景 选择 原因
二分类(单标签) BCE/CE 两者数学等价,但 BCE 更直观(输出一个概率)。
多分类(单标签) CE Softmax 天然约束概率和为 1,符合单标签假设。
多标签分类 / 推荐系统 BCE 各类别独立判断,不要求概率和约束。
显式负采样(如推荐系统) BCE 正负样本独立计算损失,无需全局归一化。

最终结论

  1. 数学等价性仅限于 的单标签分类,此时 CE 和 BCE 可互换。
  2. 应用场景决定选择
    • CE(Softmax) 当类别互斥(如手写数字识别)。
    • BCE(Sigmoid) 当类别独立(如推荐系统、多标签分类)。
  3. 推荐系统中的正负样本必须用 BCE,因为 Softmax 的归一化假设会引入偏差。

通过这一补充,你的笔记将更完整地覆盖理论等价性和实际应用的差异!(真实)和 (预测)的差异:
- 当 是 one-hot 编码时(仅 ),简化为:

与 MLE 的关系
- 交叉熵的表达式 与负对数似然完全一致。
- 数学本质:最小化交叉熵损失等价于最大化似然函数。

这里非常关键!softmax 和交叉熵损失是通过极大似然估计联系起来的,因为交叉熵损失最小化就是最大化似然函数,所以交叉熵损失可以用于 softmax 模型的训练。

多样本情况
对于批量数据,损失函数为所有样本交叉熵的平均:


4. 三者的联合推导链条

步骤 1:模型输出到概率
模型输出 logits $ $

步骤 2:构建似然函数
对于真实类别 ,似然为 $ p_k $

步骤 3:交叉熵的形式化
直接代入交叉熵定义:

步骤 4:梯度反向传播
通过链式法则计算损失对 logits 的梯度:


5. 总结:三者的核心联系

  1. Softmax:将模型输出 转换为概率分布 ,为似然计算提供基础。
  2. MLE:通过最大化 (似然)指导模型训练,转化为最小化
  3. 交叉熵损失:是 的具体实现形式,直接作为优化目标。

数学一致性

物理意义
- Softmax:概率归一化。
- MLE:统计学最优性保证。
- 交叉熵:衡量信息差异,实现高效优化。

这一链条在分类问题中构成了从模型输出到损失计算的完整闭环。

二分类问题

在二分类问题中,softmax交叉熵损失极大似然估计的联系依然存在,但形式上可以简化为使用 sigmoid 函数二元交叉熵损失(Binary Cross-Entropy, BCE)。下面我们详细推导它们的关系,并与多分类情况对比。


1. 二分类的模型输出

在二分类问题中,通常只需要预测一个类别(如正类)的概率 ,而负类的概率自然就是 。因此: - 模型输出:一个 logit 值 (而不是 维向量)。 - 概率转换:使用 sigmoid 函数(而非 softmax): 其中: - 是正类的概率。 - 是负类的概率。

对比多分类 softmax: - 多分类:softmax 对所有类别归一化,输出 个概率。 - 二分类:sigmoid 仅计算正类的概率,负类概率由 决定。 - sigmoid 可以看作是 softmax 的特例( 时),只需要固定 (负类的 logit),让 代表正类相对于负类的得分


2. 极大似然估计(MLE)

假设真实标签 ,则: - 如果 ,我们希望 尽可能大。 - 如果 ,我们希望 尽可能大。

似然函数(单个样本): 可以统一写成:

对数似然 MLE 目标:最大化对数似然,等价于最小化负对数似然:


3. 二元交叉熵损失(BCE)

交叉熵衡量真实分布 和预测分布 之间的差异: 这与负对数似然完全一致!

对比多分类交叉熵: - 多分类交叉熵: 其中 是 one-hot 向量。 - 二分类交叉熵: 其中


4. 反向传播梯度计算

为了优化模型,我们需要计算损失对 logit 的梯度: 其中: 1. 损失对概率 的梯度 2. sigmoid 梯度 3. 最终梯度 这与多分类 softmax 的梯度 形式一致!


总结:二分类 vs. 多分类

概念 二分类 多分类
模型输出 1 个 logit 个 logits
概率转换 sigmoid softmax
MLE 目标 (one-hot 标签)
损失函数 二元交叉熵 交叉熵
梯度

最终结论

  1. 二分类可以看作是 多分类的特例(,但由于对称性,仅需计算一个概率 ,另一个为
  2. sigmoid + 二元交叉熵 等价于 softmax + 交叉熵 在二分类情况下的简化形式。
  3. MLE 仍然成立,最大化似然等价于最小化交叉熵。
  4. 梯度计算一致,均为预测概率减去真实标签()。

因此,二分类与多分类在数学本质上是统一的,只是实现方式不同。

新的思考:CE 和 BCE 的本质区别与应用场景

1. 核心区别

维度 多分类交叉熵(CE) 二元交叉熵(BCE)
问题类型 单标签多分类(一个样本仅属于一个类别) 多标签分类 / 二分类(一个样本可属于多个类别)
标签形式 One-hot 向量(如 [0, 1, 0] 多标签向量(如 [1, 0, 1]
概率约束 Softmax:所有类别概率和为 1 Sigmoid:每个类别的概率独立 ∈ [0, 1]
损失计算 只计算真实类别的负对数概率 对每个标签独立计算二元交叉熵并求和 / 平均

2. 推荐系统中的正负样本问题

在推荐系统中,我们常遇到 “用户 - 物品” 交互数据,其中: - 正样本:用户点击 / 购买的物品(标签 )。 - 负样本:未交互的物品(标签 ),可能是随机采样或曝光未点击。

(1)使用 BCE 的逻辑

  • 模型输出:对每个物品 ,输出一个独立的概率
  • 物理意义 表示用户对物品 的偏好概率,各物品之间概率无关
  • 损失函数
  • 适用场景
    • 显式负采样(如推荐系统的负样本构造)。
    • 多标签分类(如一张图片同时包含 “猫” 和 “狗”)。

(2)使用 CE 的逻辑(错误示范)

  • 若错误地使用 Softmax + CE:
    • 模型输出:对所有物品计算 Softmax 概率,强制
    • 问题:Softmax 隐含 “互斥” 假设,即用户只能喜欢一个物品,这与推荐场景矛盾(用户可能喜欢多个物品)。
    • 后果:模型会倾向于打压其他正样本的概率,导致训练不稳定。

3. 多标签分类问题

假设一个任务需要预测样本是否同时属于多个类别(如图像中的多物体识别): - 标签[1, 0, 1](类别 1 和类别 3 共存)。 - BCE 处理: - 对每个类别独立计算 Sigmoid 概率和 BCE 损失。 - 各类别之间无竞争关系。 - CE 的错误使用: - Softmax 会强制模型在类别 1 和类别 3 之间做 “非此即彼” 的选择,违背多标签特性。


4. 数学本质对比

(1)BCE 的独立性假设

BCE 的损失函数可分解为: - 每个类别 的损失 独立计算。 - 适用于类别非互斥的场景。

(2)CE 的互斥性假设

CE 的损失函数为: - 优化目标是最大化真实类别 的概率,同时打压其他类别。 - 仅适用于单标签多分类


5. 实际代码中的选择

(1)PyTorch 实现对比

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import torch
import torch.nn as nn

# 假设 batch_size=2, 类别数=3(多标签)
logits = torch.randn(2, 3) # 模型输出
labels = torch.tensor([[1, 0, 1], [0, 1, 1]]) # 多标签

# BCE 实现(正确)
bce_loss = nn.BCEWithLogitsLoss() # 内置 Sigmoid
loss_bce = bce_loss(logits, labels.float())

# CE 实现(错误!仅适用于单标签)
ce_loss = nn.CrossEntropyLoss()
# 错误:CE 需要单标签的类别索引(非多标签)

(2)何时选择 BCE 或 CE?

场景 选择 原因
二分类(单标签) BCE/CE 两者数学等价,但 BCE 更直观(输出一个概率)。
多分类(单标签) CE Softmax 天然约束概率和为 1,符合单标签假设。
多标签分类 / 推荐系统 BCE 各类别独立判断,不要求概率和约束。
显式负采样(如推荐系统) BCE 正负样本独立计算损失,无需全局归一化。

最终结论

  1. 数学等价性仅限于 的单标签分类,此时 CE 和 BCE 可互换。
  2. 应用场景决定选择
    • CE(Softmax) 当类别互斥(如手写数字识别)。
    • BCE(Sigmoid) 当类别独立(如推荐系统、多标签分类)。
  3. 推荐系统中的正负样本必须用 BCE,因为 Softmax 的归一化假设会引入偏差。
正在加载今日诗词....
欢迎关注我的其它发布渠道