激活函数-Sigmoid

理解 Sigmoid 激活函数:公式、特点与应用

  • 基本概念
  • 代码调用

1 什么是Sigmoid?

一个形状像是躺平的S的平滑函数:

$$
\sigma(x) = \frac{1}{1 + e^{-x}}
$$

  • 输出范围(0,1)
  • 常用于将值映射为概率

1.1 常见场景(与Softmax对比)

🔍 Sigmoid vs Softmax:本质区别

特性 Sigmoid Softmax
输出范围 每个神经元输出范围是 (0, 1) 所有输出加起来为 1
激活方式 对每个输出神经元 单独 使用 Sigmoid 对整组输出向量使用 Softmax
标签之间的关系 互相独立,不排斥 互斥,只能属于一个类别
应用场景 多标签分类(multi-label classification) 多类别分类(multi-class classification)
损失函数 Binary Cross Entropy Categorical Cross Entropy
输出解读 每个标签为“是/否”的概率 所有类别中选择概率最大的一个作为预测类别

Sigmoid会将每个标签的raw结果独立转化为概率,所以能得到多个标签的值。

BCE:多标签分类,常与Sigmoid一同使用,对每个标签独立做的二分类损失。nn.BCELoss() + Sigmoid()
CE: 多个类别中 只能选一个,常配合 Softmax 使用。Pytorch 中CE的包含了softmax

2 sigmoid的代码以及可视化

Numpy实现

1
2
3
4
5
6
7
8
9
10
11
12
# 可选Python绘图代码示例(可在Jupyter中运行)
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-10, 10, 100)
y = 1 / (1 + np.exp(-x))
plt.plot(x, y)
plt.title("Sigmoid Function")
plt.xlabel("x")
plt.ylabel("σ(x)")
plt.grid()
plt.show()

sigmoid

Pytorch调用

1
2
3
4
5
6
7
8
9
10
import torch
import torch.nn as nn

# 假设 batch_size = 2,有 3 个标签
logits = torch.tensor([[0.2, -1.5, 3.0], [0.8, 0.4, -2.0]]) # 模型输出的 raw logits

# ✅ 使用 sigmoid 将每个标签输出转为概率(独立计算)
sigmoid = nn.Sigmoid()
probs = sigmoid(logits)
print("Sigmoid 概率输出:\n", probs)
作者

Zhou

发布于

2025-04-14

更新于

2025-04-14

许可协议

评论

+ + +