Skip to content

Sigmoid 函数

神经网络激活函数之一,3Blue1Brown 课程中用于解释神经元工作原理。


数学定义

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

其中 e ≈ 2.718(自然常数)。


一句话理解

把任意实数「挤压」到 0 到 1 之间。


为什么是 e 而不是别的底数?

你可能想过:用 2^(-x) 或 10^(-x) 不也能把数压到 0~1 吗?为什么一定是 e?

数学起源:logistic regression 的推导

sigmoid 函数不是为神经网络发明的,它来自统计学中的 逻辑斯蒂回归(Logistic Regression)

出发点是把「几率(odds)」取对数,建立线性关系:

         P                          P
odds = ─────        ln(odds) = ln(───────) = w₁x₁ + w₂x₂ + ... + b
        1-P                        1-P

注意左边取的是 ln(自然对数,底数为 e),不是 log₁₀ 或 log₂。把上式反解出 P:

  P
─────── = e^(w₁x₁ + ... + b)
 1 - P

        e^(w₁x₁+...+b)          1
→ P = ───────────────── = ──────────────────
      1 + e^(w₁x₁+...+b)   1 + e^-(w₁x₁+...+b)

e 是被推导出来的,不是被选出来的。

工程理由:导数形式最简洁

对比不同底数:

函数导数
1/(1+e⁻ˣ)σ(x)·(1-σ(x)) ← 一步乘法,完事
1/(1+2⁻ˣ)σ(x)·(1-σ(x))·ln(2)
1/(1+10⁻ˣ)σ(x)·(1-σ(x))·ln(10)

sigmoid 的导数值可以直接用函数值自身表示——正向传播时 σ(x) 已经算出来了,反向传播直接拿来乘,不需要重新算指数。

深层网络每层都要算导数,多了些常数因子虽然不影响结果正确性,但 e 的版本在计算上和数学表达上都最干净。

一句话

不是刻意选了 e,而是从 ln 的自然推导中,e 是那个「恰好」让函数和它的导数长得最像的底数。


输入 → 输出映射

输入 x输出 σ(x)
x → +∞趋近于 1
x = 00.5
x → -∞趋近于 0

形状是一条 S 形曲线,中间陡峭、两端逐渐平缓(饱和)。


在神经网络中的作用

一个神经元的前向传播:

加权和 = w₁x₁ + w₂x₂ + ... + b   ← 任意实数,可能是 -1000 或 +500
输出   = σ(加权和)               ← 压缩到 (0, 1)

sigmoid 把无界的加权和映射为一个 (0,1) 之间的值,可以被解释为:

  • 该神经元的「激活程度」
  • 一个类似于「概率」的输出(接近 1 = 强激活,接近 0 = 抑制)

为什么 3Blue1Brown 用它来讲

  • 曲线光滑连续,数学性质良好
  • S 形符合人对「开关/激活」的直觉
  • 导数有漂亮的形式:σ'(x) = σ(x) · (1 - σ(x)),方便手算反向传播
  • 是理解神经网络逻辑的最佳入口

为什么现代深度学习不用了

两个致命缺陷:

1. 梯度消失(Vanishing Gradient)

两端饱和区导数趋近于 0:

x → +∞:σ'(x) ≈ 0
x → -∞:σ'(x) ≈ 0

深层网络中,反向传播时梯度连乘,经过多层 sigmoid 后梯度指数级衰减 → 前面的层几乎学不到东西。

2. 非零中心(Not Zero-Centered)

sigmoid 输出恒为正(0~1),下一层所有输入的符号相同,导致梯度更新时产生 zigzag 震荡,收敛变慢。


现代替代方案:ReLU

ReLU(x) = max(0, x)
  • 正区间导数恒为 1 → 不衰减 → 深层网络也能训练
  • 计算极快(就是取最大值)
  • 实际效果远超 sigmoid

但 sigmoid 仍然是理解激活函数概念的最好起点。


相关笔记

Built with VitePress