惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
Cloudbric
Cloudbric
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
IT之家
IT之家
F
Full Disclosure
B
Blog RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
B
Blog
H
Help Net Security
The Cloudflare Blog
Recorded Future
Recorded Future
P
Proofpoint News Feed
P
Proofpoint News Feed
C
Cisco Blogs
T
Tailwind CSS Blog
P
Palo Alto Networks Blog
D
Docker
爱范儿
爱范儿
Know Your Adversary
Know Your Adversary
博客园 - 聂微东
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Y
Y Combinator Blog
雷峰网
雷峰网
AWS News Blog
AWS News Blog
D
DataBreaches.Net
博客园 - 司徒正美
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - Franky
C
Cybersecurity and Infrastructure Security Agency CISA
Blog — PlanetScale
Blog — PlanetScale
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
MongoDB | Blog
MongoDB | Blog
C
CERT Recently Published Vulnerability Notes
阮一峰的网络日志
阮一峰的网络日志
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
CXSECURITY Database RSS Feed - CXSecurity.com
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Cyber Attacks, Cyber Crime and Cyber Security
腾讯CDC
小众软件
小众软件
G
Google Developers Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Scott Helme
Scott Helme
O
OpenAI News

博客园 - 立体风

github上关于CMD高级命令知识 CMD命令启动模板 brainstorming SKILL技能完整中文翻译版 更新 claude code 官方插件市场 路径在powershell 配置文件 Profile 和 环境变量 PATH 的区别 当AI构建自身 nana gui库的回调函数 Nana c++ gui库的对话框函数 -- 理解 nana 的运行机制 介绍 MSVC 的编译命令/ Zc CMake 变量 ${CMAKE_CURRENT_BINARY_DIR} 学习 nana c++ 库 (一) AutoHotkey v2 的源码学习路线 Visual Studio 中行号右边的黄色竖条 大O表示法推导 allocate 中为什么有两个L vs的cl.exe 编译器 c++20 基本配置 IT高频词 address Python Install Manager (PIM,官方安装管理器)简介 debian 中 contrib 软件仓库 debian 版本号及 apt 命令对软件的区分 sysctl的历史及常用命令 极限运算的法则 TeX 的 ctex 宏包的基本用法 XeLaTeX 的基本用法 XeLaTeX 介绍 为什么梯度向量 ∇f 指向函数值增长最快的方向 三角函数的余弦定理的证明 向量点积的几何定义的证明 方向导数公式的证明 仿射函数的定义及用途 凸集的定义及证明 在 LaTeX 公式中处理英文单词 梯度下降法 (Gradient Descent)的数学原理。 梯度下降法简介 向量形式表达最小二乘法 线性回归模型的核心数学表达式 risidual 音标和本义 coefficients的音标及本义(线性模型)
Sigmoid 函数的数学起源与定义详解
立体风 · 2026-07-17 · via 博客园 - 立体风

Sigmoid 函数的数学起源与定义详解


一、数学定义

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\) 是神经元对输入的加权求和结果(净输入)。


二、历史起源:从人口增长到 Logistic 曲线

2.1 Malthus 的指数增长模型(1798)

Thomas Robert Malthus 在《人口论》中提出:在没有约束的条件下,人口以指数速率增长:

\[\frac{dP}{dt} = rP \quad \Rightarrow \quad P(t) = P_0 e^{rt} \]

此模型的问题显而易见——它预测人口会无限增长,这在资源有限的世界中是不可能的。

2.2 Verhulst 的 Logistic 方程(1838–1847)

比利时数学家 Pierre François Verhulst 意识到增长不能永远持续。他假设:

  • 当人口较小时,增长近似指数
  • 存在一个承载容量(carrying capacity)\(K\),人口趋近它时增长放缓

他修改 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),意为"计算的艺术"。

2.3 Pearl 和 Reed 的重新发现(1920)

1920 年,美国生物统计学家 Raymond Pearl 和 Lowell Reed 在不知 Verhulst 工作的情况下重新发现了同一曲线,用于预测美国人口增长。他们的工作使 Logistic 曲线在生物学和统计学中广为人知。


三、为什么是 \(\frac{1}{1+e^{-x}}\) 这个形式?

3.1 微分方程的直接产物

从 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) 这个最简自限性微分方程中必然导出的。

3.2 Logit 变换与 Odds(几率)

从上述推导中间步骤可以看到:

\[\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 就变成了可解释的概率。


四、在神经网络中为什么用它?

4.1 导数形式简洁(反向传播的关键)

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);  // 正是这个公式

4.2 非线性且光滑可微

  • 非线性的 S 形曲线使神经网络能逼近任意连续函数(万能逼近定理)
  • 处处光滑可微,保证了梯度下降的可行性
  • 其导数 \(\sigma'(x)\)\(x=0\) 处取得最大值 \(0.25\),两端趋近于 \(0\)

4.3 输出天然可解释为概率

因为值域是 \((0, 1)\),Sigmoid 的输出可以直接解释为二分类中"正类"的概率估计:

\[P(y=1 \mid \mathbf{x}) = \sigma(\mathbf{w} \cdot \mathbf{x} + b) \]

4.4 生物学启发

真实的生物神经元具有"全或无"的发放特性:当膜电位(输入信号的加权和)超过阈值时,神经元发放动作电位。Sigmoid 提供了一种平滑化的近似:

  • \(x \ll 0\) → 输出趋近 \(0\)(不发放)
  • \(x \gg 0\) → 输出趋近 \(1\)(充分发放)
  • \(x \approx 0\) → 输出在中间过渡区

这种平滑近似保留了生物神经元的定性行为,同时使梯度可以传递,使训练成为可能。


五、历史时间线总结

年份 人物 贡献
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 的局限

虽然本文重点在起源与定义,但也应了解为何现代深度学习中 Sigmoid 被部分替代:

  1. 梯度消失: 当 \(|x|\) 较大时,\(\sigma'(x) \to 0\),深层网络中梯度在反向传播中指数衰减
  2. 非零中心: 输出恒为正(\((0,1)\)),导致下一层权重的梯度更新方向一致,收敛变慢
  3. 指数计算开销: exp(-x) 在深层大网络中计算成本高(nn 库中的查表法正是解决此问题)

七、在 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\)),边界值可安全返回常数值。


参考文献

  1. Verhulst, P. F. (1838). Notice sur la loi que la population poursuit dans son accroissement. Correspondance mathématique et physique, 10, 113–121.
  2. Verhulst, P. F. (1847). Deuxième mémoire sur la loi d'accroissement de la population. Mémoires de l'Académie Royale des Sciences, des Lettres et des Beaux-Arts de Belgique, 20, 1–32.
  3. Pearl, R. & Reed, L. J. (1920). On the rate of growth of the population of the United States since 1790 and its mathematical representation. Proceedings of the National Academy of Sciences, 6(6), 275–288.
  4. Rumelhart, D. E., Hinton, G. E., & Williams, R. J. (1986). Learning representations by back-propagating errors. Nature, 323, 533–536.
  5. McCulloch, W. S. & Pitts, W. (1943). A logical calculus of the ideas immanent in nervous activity. Bulletin of Mathematical Biophysics, 5, 115–133.