Softmax 与 Sigmoid 的基本概念

Softmax 是一种归一化函数,将输入向量映射为概率分布,所有输出值之和为 1。适用于多分类任务,每个类别对应一个独立的概率值。公式如下:
[ \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^K e^{x_j}} ] 其中 ( K ) 为类别总数。

Sigmoid 将单个输入值映射到 (0,1) 区间,常用于二分类任务。公式如下:
[ \sigma(x) = \frac{1}{1 + e^{-x}} ]

多分类任务中的选择

Softmax 是多分类任务的标准选择。输出层的神经元数量等于类别数,每个神经元输出对应类别的概率。例如,手写数字识别(10 类)中,Softmax 直接生成 10 个概率值。

Sigmoid 在多分类任务中不适用。若强行对每个类别独立使用 Sigmoid,输出概率之和可能不为 1,导致模型无法正确反映类别间的竞争关系。

二分类任务中的选择

Sigmoid 是二分类的常见选择。输出层仅需一个神经元,输出值表示正类的概率。例如,猫狗分类中,Sigmoid 输出 0.7 表示 70% 概率为猫。

Softmax 在二分类中可简化为 Sigmoid。当类别数为 2 时,Softmax 等价于对单个 Sigmoid 输出的概率和补概率。实际应用中,两者效果相同,但 Sigmoid 实现更简单。

关键区别总结

  1. 输出性质:Softmax 确保输出总和为 1;Sigmoid 独立处理每个输出,总和可能不为 1。
  2. 任务类型:Softmax 用于互斥多分类;Sigmoid 用于二分类或非互斥多标签分类(如同时包含“猫”和“狗”标签)。
  3. 梯度计算:Softmax 的梯度计算涉及所有类别;Sigmoid 的梯度仅依赖当前输入。

代码实现示例

Softmax 多分类(PyTorch):

import torch.nn as nn
model = nn.Sequential(
    nn.Linear(784, 128),
    nn.ReLU(),
    nn.Linear(128, 10),
    nn.Softmax(dim=1)  # 输出10类概率
)

Sigmoid 二分类(PyTorch):

model = nn.Sequential(
    nn.Linear(784, 1),
    nn.Sigmoid()  # 输出单个概率值
)

注意事项

  • 损失函数:Softmax 通常搭配 CrossEntropyLoss(已包含 Softmax 计算);Sigmoid 搭配 BCELoss
  • 多标签分类:若类别间不互斥(如图像含多个标签),需对每个类别独立使用 Sigmoid,而非 Softmax。

更多推荐