























Sigmoid 函数的标准形式为:
\[\sigma(x) = \frac{1}{1 + e^{-x}} = \frac{e^x}{1 + e^x} \]
值域为 \((0, 1)\),定义域为 \((-\infty, +\infty)\)。它是一个严格单调递增的 S 形曲线。
在神经网络中,它常被写作:
\[\sigma(z) = \frac{1}{1 + \exp(-z)} \]
其中 \(z = \mathbf{w} \cdot \mathbf{x} + b\) 是神经元对输入的加权求和结果(净输入)。
Thomas Robert Malthus 在《人口论》中提出:在没有约束的条件下,人口以指数速率增长:
\[\frac{dP}{dt} = rP \quad \Rightarrow \quad P(t) = P_0 e^{rt} \]
此模型的问题显而易见——它预测人口会无限增长,这在资源有限的世界中是不可能的。
比利时数学家 Pierre François Verhulst 意识到增长不能永远持续。他假设:
他修改 Malthus 的微分方程为:
\[\frac{dP}{dt} = rP\left(1 - \frac{P}{K}\right) \]
其中 \(r\) 是内禀增长率,\(K\) 是环境承载容量的上限。
这个微分方程的解正是我们今天称为 Logistic 函数的曲线:
\[P(t) = \frac{K}{1 + \left(\frac{K - P_0}{P_0}\right)e^{-rt}} \]
令 \(K = 1\)、\(P_0 = \frac{1}{2}\)(初始人口为承载容量的一半),上式简化为:
\[P(t) = \frac{1}{1 + e^{-rt}} \]
这就是 Sigmoid 函数的原型。Verhulst 称之为 "logistique"(法语),源于希腊语 λογιστικός(logistikos),意为"计算的艺术"。
1920 年,美国生物统计学家 Raymond Pearl 和 Lowell Reed 在不知 Verhulst 工作的情况下重新发现了同一曲线,用于预测美国人口增长。他们的工作使 Logistic 曲线在生物学和统计学中广为人知。
从 Verhulst 方程出发:
\[\frac{dy}{dx} = ry(1 - y) \]
这里 \(y \in (0,1)\) 是归一化后的种群比例。分离变量:
\[\int \frac{dy}{y(1-y)} = \int r\,dx \]
\[\int \left(\frac{1}{y} + \frac{1}{1-y}\right)dy = rx + C \]
\[\ln\frac{y}{1-y} = rx + C \]
\[\frac{y}{1-y} = e^{rx + C} \]
\[y = \frac{1}{1 + e^{-(rx + C)}} \]
这个推导揭示了 Sigmoid 的本质:它是描述"增长率与当前值以及与上限的距离之积成正比"这一自然约束的唯一解。\(\frac{1}{1+e^{-x}}\) 不是人为选择的——它是从 dy/dx = y(1-y) 这个最简自限性微分方程中必然导出的。
从上述推导中间步骤可以看到:
\[\ln\frac{y}{1-y} = rx + C \]
左边 \(\ln\frac{y}{1-y}\) 被称为 logit 函数(log-odds):
\[\text{logit}(p) = \ln\frac{p}{1-p} \]
它是 Sigmoid 的反函数:
\[\sigma^{-1}(p) = \ln\frac{p}{1-p} \]
这建立了 Sigmoid 与统计学的深层联系:
| 概念 | 公式 |
|---|---|
| 概率 | \(p \in (0,1)\) |
| 几率 (odds) | \(\frac{p}{1-p} \in (0, \infty)\) |
| 对数几率 (log-odds / logit) | \(\ln\frac{p}{1-p} \in (-\infty, +\infty)\) |
Sigmoid 函数的本质作用:将实数域 \((-\infty, +\infty)\) 上的任意值(对数几率)映射回 \((0,1)\) 的概率空间。
这就是为什么 Sigmoid 在逻辑回归(Logistic Regression)和神经网络中作为输出层激活函数如此自然——神经网络输出的"分数"(logit)经过 Sigmoid 就变成了可解释的概率。
Sigmoid 有一个极为优雅的性质——它的导数可以用自身表示:
\[\sigma'(x) = \sigma(x)\big(1 - \sigma(x)\big) \]
证明:
\[\sigma(x) = (1 + e^{-x})^{-1} \]
\[\sigma'(x) = -(1 + e^{-x})^{-2} \cdot (-e^{-x}) = \frac{e^{-x}}{(1+e^{-x})^2} \]
\[= \frac{1}{1+e^{-x}} \cdot \frac{e^{-x}}{1+e^{-x}} = \frac{1}{1+e^{-x}} \cdot \left(1 - \frac{1}{1+e^{-x}}\right) \]
\[= \sigma(x)(1 - \sigma(x)) \]
这个性质对反向传播极其重要——计算梯度时无需额外指数运算,只需用前向传播已经算好的 \(\sigma(x)\) 值做一次乘法和一次减法即可。在 nn_train 中:
*d++ = (*t - *o) * *o * (1.0 - *o); // 正是这个公式
因为值域是 \((0, 1)\),Sigmoid 的输出可以直接解释为二分类中"正类"的概率估计:
\[P(y=1 \mid \mathbf{x}) = \sigma(\mathbf{w} \cdot \mathbf{x} + b) \]
真实的生物神经元具有"全或无"的发放特性:当膜电位(输入信号的加权和)超过阈值时,神经元发放动作电位。Sigmoid 提供了一种平滑化的近似:
这种平滑近似保留了生物神经元的定性行为,同时使梯度可以传递,使训练成为可能。
| 年份 | 人物 | 贡献 |
|---|---|---|
| 1798 | Thomas Malthus | 提出指数增长模型 \(\frac{dP}{dt} = rP\) |
| 1838 | Pierre Verhulst | 提出 Logistic 微分方程,首次写出 \(\frac{1}{1+e^{-x}}\) 形式的解 |
| 1847 | Verhulst | 发表第二篇论文,正式命名 "logistique" |
| 1920 | Pearl & Reed | 独立重新发现,推广到生物统计学 |
| 1943 | McCulloch & Pitts | 提出人工神经元模型,使用阶跃函数作为激活 |
| 1958 | Rosenblatt | 感知机(Perceptron),仍用阶跃函数 |
| 1986 | Rumelhart, Hinton, Williams | 反向传播算法(BP),使用 Sigmoid 替代不可微的阶跃函数 |
| 1990s–至今 | — | Sigmoid 成为神经网络标准激活函数,后逐渐被 ReLU 部分取代 |
虽然本文重点在起源与定义,但也应了解为何现代深度学习中 Sigmoid 被部分替代:
exp(-x) 在深层大网络中计算成本高(nn 库中的查表法正是解决此问题)// nn.c — 精确计算(保持数学定义原貌)
double nn_act_sigmoid(const nn *ann unused, double a) {
if (a < -45.0) return 0; // exp(45) 已超出 double 精度,直接返回边界
if (a > 45.0) return 1;
return 1.0 / (1.0 + exp(-a)); // ← 正是 Logistic-Sigmoid 的标准公式
}
查表加速版在 \([-15, 15]\) 区间内用预计算值代替 exp() 调用,因为此区间外函数值已高度饱和(\(\sigma(-15) \approx 3.06 \times 10^{-7}\),\(\sigma(15) \approx 0.9999997\)),边界值可安全返回常数值。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。