ML ML Learning Lab
03 / 14
第 3 步 · 非线性的来源

激活函数Activation Functions

把直线"掰弯"的最小单元 — ReLU、Sigmoid、Tanh

8 分钟
阅读 + 实操
2 个
交互演示
初级
难度

演示一 激活函数展览馆

高亮查看:
一道折痕能干什么?把许多道折痕叠在一起,就能拼出任意曲线 ↓

演示二 ReLU 万能逼近实验室

损失--
步数0
ReLU 神经元数量 K 8
学习率 0.05

为什么学这步?

激活函数是神经网络能"掰弯"直线的秘密武器——没有它,再多层叠加也只是线性组合,永远画不出曲线。从 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 — 定理的多种变体与证明

📝 课后练习

检验你的理解——答对为止