第 3 步 · 非线性的来源
激活函数Activation Functions
把直线"掰弯"的最小单元 — ReLU、Sigmoid、Tanh
8 分钟
阅读 + 实操
2 个
交互演示
初级
难度
演示一 激活函数展览馆
一道折痕能干什么?把许多道折痕叠在一起,就能拼出任意曲线 ↓
演示二 ReLU 万能逼近实验室
损失--
步数0
为什么学这步?
激活函数是神经网络能"掰弯"直线的秘密武器——没有它,再多层叠加也只是线性组合,永远画不出曲线。从 ReLU(修正线性单元)的"折痕"到 Sigmoid 的"S 形",每个激活函数都有自己的脾气:ReLU 简单高效、Sigmoid 输出概率、Tanh 以 0 为中心。理解它们,你就掌握了神经网络的"非线性之源",也为后续的分类问题和多层网络铺好了路。
📌 发生了什么
- 没有激活函数时,多层线性变换的叠加仍是线性变换。
- ReLU 在 x=0 处制造"折痕",多个 ReLU 叠加可以拟合任意曲线。
- Sigmoid 把输出压到 (0,1),Tanh 压到 (−1,1),各有适用场景。
⚠️ 常见陷阱
- 多层线性网络 = 更强的模型?错,没有激活函数再深也等价于一层。
- Sigmoid 适合所有场景?不是,隐藏层用 Sigmoid 易导致梯度消失。
- ReLU 不会有问题?负区间恒为 0 可能导致"死亡神经元"。
✅ 本章小结
- 非线性来源:没有激活函数,多层网络退化为单层线性模型。
- ReLU:max(0, x) — 简单高效,是隐藏层的默认选择。
- 万能逼近定理:一个隐藏层 + 足够多 ReLU 即可逼近任意连续函数。
📐 激活函数的数学定义与导数
激活函数引入非线性,使多层网络不再等价于单层线性变换。以下是四种常用激活函数及其导数。
Tanh 将输出压缩到 (−1, 1),零中心化,但仍可能饱和:
ReLU 计算高效,正区间梯度恒为 1,缓解梯度消失:
万能逼近定理(Cybenko 1989):一个具有足够多隐藏神经元和 sigmoid 激活的单隐层网络,可以逼近任意连续函数:
🎛 激活函数对比
不同激活函数在梯度传播、计算效率和训练稳定性上差异显著。
| 激活函数 | 表现 | 结果 |
|---|---|---|
| ReLU | 正区间梯度恒为 1,计算极快,深层网络首选 | 推荐 |
| LeakyReLU | 负区间有小梯度,避免死亡神经元 | 稳健 |
| Tanh | 零中心化但两端饱和,深层梯度消失 | 慎用深层 |
| Sigmoid | 输出 (0,1) 适合概率,但梯度消失严重 | 仅输出层 |
💡 隐藏层默认选 ReLU;如果出现死亡神经元,换 LeakyReLU;输出层按任务选 Sigmoid(分类)或恒等(回归)。
💻 四种激活函数实现
四种激活函数及其导数的 Python 实现:
import numpy as np
# Sigmoid 及其导数
def sigmoid(z): return 1 / (1 + np.exp(-z))
def sigmoid_prime(z):
s = sigmoid(z)
return s * (1 - s)
# Tanh 及其导数
def tanh(z): return np.tanh(z)
def tanh_prime(z): return 1 - np.tanh(z) ** 2
# ReLU 及其导数
def relu(z): return np.maximum(0, z)
def relu_prime(z): return (z > 0).astype(float)
# LeakyReLU 及其导数
def leaky_relu(z, alpha=0.01): return np.where(z > 0, z, alpha * z)
def leaky_relu_prime(z, alpha=0.01): return np.where(z > 0, 1.0, alpha)
📚 参考文献与延伸阅读
- Cybenko, G. (1989). Approximation by superpositions of a sigmoidal function. Mathematics of Control, Signals, and Systems — 万能逼近定理的经典证明
- He, K., Zhang, X., Ren, S., & Sun, J. (2015). Delving Deep into Rectifiers. ICCV — ReLU/LeakyReLU 的深度分析及 He 初始化
- Goodfellow, Bengio & Courville, Deep Learning (2016), §6.3 Hidden Units — 各类激活函数的系统综述
- Wikipedia: Universal approximation theorem — 定理的多种变体与证明
📝 课后练习
检验你的理解——答对为止