PyTorch 深度学习笔记(十一):Softmax 与 Sigmoid 在多分类与二分类任务中的对比
·
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 实现更简单。
关键区别总结
- 输出性质:Softmax 确保输出总和为 1;Sigmoid 独立处理每个输出,总和可能不为 1。
- 任务类型:Softmax 用于互斥多分类;Sigmoid 用于二分类或非互斥多标签分类(如同时包含“猫”和“狗”标签)。
- 梯度计算: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。
更多推荐
所有评论(0)