二分类情况下Softmax函数与Sigmoid函数的等价性 / Softmax函数:Sigmoid函数从二分类到多分类的推广

发布于:2025-02-17 ⋅ 阅读:(113) ⋅ 点赞:(0)

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



1. Sigmoid与Softmax的关系

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

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

Softmax函数表达式(K分类场景):
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(zi)=j=1Kezjezi

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

当K=2时,Softmax可以简化为Sigmoid形式:
Softmax ( z 1 ) = e z 1 e z 1 + e z 2 = 1 1 + e − ( z 1 − z 2 ) \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
此时相当于对特征差值 z 1 − z 2 z_1-z_2 z1z2应用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同样有效


网站公告

今日签到

点亮在社区的每一天
去签到