Softmax函数:Sigmoid函数从二分类到多分类的推广


文章目录

  • Softmax函数:Sigmoid函数从二分类到多分类的推广
  • 1. Sigmoid与Softmax的关系
  • 2. 二分类场景下的等价性
  • 3. 核心差异对比
  • 4. 多分类实现示例(Python)
  • 5. 应用场景选择建议


1. Sigmoid与Softmax的关系

Softmax函数可以看作是二分类函数Sigmoid在多分类问题上的推广。当处理二分类问题时,两者在数学表达上是等价的。

Sigmoid函数表达式
σ(z)=11+e−z \sigma(z) = \frac{1}{1+e^{-z}} σ(z)=1+ez1

Softmax函数表达式(K分类场景):
Softmax(zi)=ezi∑j=1Kezj \text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^K e^{z_j}} Softmax(zi)=j=1Kezjezi

2. 二分类场景下的等价性

当K=2时,Softmax可以简化为Sigmoid形式:
Softmax(z1)=ez1ez1+ez2=11+e−(z1−z2) \text{Softmax}(z_1) = \frac{e^{z_1}}{e^{z_1}+e^{z_2}} = \frac{1}{1+e^{-(z_1-z_2)}} Softmax(z1)=ez1+ez2ez1=1+e(z1z2)1
此时相当于对特征差值z1−z2z_1-z_2z1z2应用Sigmoid函数。

3. 核心差异对比

特性 Sigmoid Softmax
输出范围 (0,1) (0,1)且概率和为1
适用场景 二分类/多标签分类 互斥多分类
梯度特性 存在梯度消失风险 更稳定的梯度传播
输出独立性 各节点独立计算 输出值相互依赖

4. 多分类实现示例(Python)

import torch.nn as nn

# 定义三层神经网络
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc = nn.Sequential(
            nn.Linear(784, 256),
            nn.ReLU(),
            nn.Linear(256, 10)  # 输出层节点数=类别数
        )
    
    def forward(self, x):
        return self.fc(x)

# 使用交叉熵损失函数(内置Softmax)
criterion = nn.CrossEntropyLoss()

5. 应用场景选择建议

✅ 使用Softmax:手写数字识别(MNIST)、图像分类等互斥类别场景
✅ 使用Sigmoid:多标签分类
⚠️ 二分类时优先使用Sigmoid(计算更简单),但Softmax同样有效

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐