1
激活函数是什么?
激活函数 是一个应用于神经网络神经元输出的 非线性变换 。它的基本形式是:
output = activation(weighted_sum_of_inputs + bias)通俗地说, 激活函数决定了神经元是否应该被“激活” ——即当前输入的综合信息是否足够重要,值得被传递到下一层。
一个生动的比喻 :
想象你是一个信息处理中心的员工,每天收到大量报告
你需要决定哪些报告值得进一步处理(激活),哪些可以忽略(不激活)
激活函数就是你的 判断标准 ——它根据报告的重要性(加权输入)来决定输出什么
2
为什么需要激活函数?——核心作用
1. 引入非线性
这是激活函数 最根本 的作用。如果没有激活函数,无论神经网络有多少层,最终的输出都只是输入的线性组合。用数学表达:
没有激活函数: 仍然是线性的

有激活函数: 引入非线性

现实意义 :现实世界的问题几乎都是非线性的——图像识别、语音理解、自然语言处理,没有非线性,神经网络就只能解决线性可分的问题,能力非常有限。
2. 增强表达能力
通过堆叠非线性层,神经网络可以学习到越来越抽象的特征:
这个过程依赖于每层的非线性变换。
3. 控制梯度流动
激活函数的导数直接影响梯度在反向传播中的流动:
4. 输出范围控制
某些激活函数将输出限制在特定范围内:
这对特定任务(如二分类)非常有帮助
3
常用的激活函数及其特点
我将按 经典 到 现代 的顺序,为你介绍最重要的几种激活函数。
1. Sigmoid(S型函数)
公式 :







图像 :平滑的S型曲线,将任意实数映射到(0,1)之间。
特点 :
- ❌ 梯度饱和 :当|x|很大时,梯度接近0,导致梯度消失
使用场景 :
2. Tanh(双曲正切)
公式 :
图像 :也是S型,但输出范围是(-1,1)。
特点 :
使用场景 :
3. ReLU(修正线性单元)—— 现代神经网络的基石
公式 :
图像 :负数全压为0,正数保持不变。
特点 :
使用场景 :
4. Leaky ReLU(带泄露的ReLU)
公式 :
通常 $\alpha=0.01$
特点 :
使用场景 :
5. ELU(指数线性单元)
公式 :
$
ELU(x)=
\begin{cases}
x & \text{if } x>0 \\
\alpha(e^x-1) & \text{if } x\leq0
\end{cases}
$
特点 :
6. Swish / SiLU —— 近年来的新星
公式 :
特点 :
使用场景 :
7. GELU(高斯误差线性单元)—— Transformer的标配
公式 :
特点 :
使用场景 :
4
激活函数对比一览表
激活函数 | 输出范围 | 计算复杂度 | 梯度消失问题 | 神经元死亡 | 零中心 | 主要应用场景 |
|---|---|---|---|---|---|---|
Sigmoid | (0,1) | 高 | ❌ 严重 | ❌ | ❌ | 二分类输出层 |
Tanh | (-1,1) | 高 | ❌ 严重 | ❌ | ✅ | 早期RNN |
ReLU | [0,∞) | 极低 | ✅ 缓解 | ❌ 有风险 | ❌ | CNN、通用隐藏层 |
Leaky ReLU | (-∞,∞) | 低 | ✅ 缓解 | ✅ 解决 | ❌ | 避免神经元死亡时 |
ELU | (-α,∞) | 中等 | ✅ 缓解 | ✅ 解决 | ✅ | 需要负值的场景 |
Swish/SiLU | (-0.28,∞) | 中等 | ✅ 缓解 | ✅ 解决 | ❌ | 深层网络、大模型 |
GELU | (-0.17,∞) | 中等 | ✅ 缓解 | ✅ 解决 | ❌ | Transformer、NLP |
5
如何选择激活函数?
通用原则
对于输出层 :
对于RNN :
在机器人应用中的考量