概述
激活函数(Activation Function)是人工神经网络中用于引入非线性特性的关键数学函数,通常作用于神经元的加权求和输出,决定该神经元是否被激活(即输出值是否传递到下一层)。它使神经网络能够逼近任意复杂的非线性映射,是深度学习模型具备强大表达能力的核心要素之一。常见的激活函数包括Sigmoid、Tanh、ReLU及其改进变体,每种函数在梯度特性、计算成本和适用场景上各有优劣。
1 定义与基本原理
1.1 激活函数的数学定义
在人工神经网络中,一个神经元的计算流程通常分为两步:先对输入进行线性加权求和,再将求和结果通过一个非线性函数进行变换。该非线性函数即为激活函数,记作 \( \sigma(z) \),其中 \( z = \sum w_i x_i + b \) 是加权和(含偏置)。输出 \( a = \sigma(z) \) 被传递到下一层神经元。
1.2 非线性引入的必要性
若网络中不使用激活函数,或使用恒等线性映射(即 \( \sigma(z)=z \)),则无论网络层数多深,整体输出仍是输入的线性组合——任意多层线性变换等价于单层线性变换,无法表示非线性映射。引入非线性激活函数使网络能够拟合复杂的非线性函数,如分类边界、曲线回归等。通用近似定理指出,至少含一个隐藏层且使用非线性激活的前馈神经网络可以逼近任意连续函数。
1.3 激活函数的输入输出范围
不同激活函数的输出值范围各异,这直接影响神经元的响应特性和梯度传播。常见范围包括:
- 有界型:如 (0,1) 或 (-1,1),适合概率输出或中心化表示。
- 无界型:如 \([0, +\infty)\) 或 \((-\infty, +\infty)\),可避免饱和。
- 分段线性型:如 \([0, +\infty)\) 或带有小负斜率的范围。
输出范围的差异也决定了激活函数是否为零中心(zero-centered):零中心输出有助于缓解梯度更新中的振荡,加快收敛。
2 常见激活函数
2.1 Sigmoid函数
2.1.1 数学表达式与图像特征
Sigmoid函数的数学形式为:
\[ \sigma(x) = \frac{1}{1 + e^{-x}} \]
其输出范围是 (0, 1),图像呈S形曲线,在 \( x=0 \) 时输出 \( 0.5 \),当 \( x \) 趋于正无穷时趋近于1,趋于负无穷时趋近于0。函数光滑且单调递增,处处可导。
2.1.2 优点与局限性
优点:
- 输出可解释为概率,适合二分类输出层。
- 函数光滑,导数易于计算(\( \sigma'(x) = \sigma(x)(1-\sigma(x)) \))。
局限性:
| - 梯度饱和:当 \( | x | \) 较大时,导数接近0,导致深层网络梯度消失,训练缓慢。 |
|---|
- 输出非零中心:输出恒为正,导致后层输入全为正,梯度更新时只能同向移动,降低收敛效率。
- 指数运算计算成本较高。
2.2 Tanh函数
2.2.1 数学表达式与图像特征
Tanh(双曲正切)函数的数学形式为:
\[ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \]
输出范围是 (-1, 1),图像也为S形且关于原点中心对称,在 \( x=0 \) 时输出0,导数峰值为1(在 \( x=0 \) 处)。
2.2.2 优点与局限性
优点:
- 零中心输出,有利于梯度更新方向一致,收敛速度优于Sigmoid。
- 在隐藏层中效果好于Sigmoid。
局限性:
| - 仍存在梯度饱和问题,当 \( | x | \) 大时导数趋近0。 |
|---|
- 计算包含指数运算,成本稍高。
2.3 ReLU函数
2.3.1 数学表达式与图像特征
ReLU(Rectified Linear Unit)的数学形式为:
\[ \text{ReLU}(x) = \max(0, x) \]
输出范围是 \([0, +\infty)\),图像在 \( x<0 \) 时恒为0,在 \( x \geq 0 \) 时为线性,原点处不可导但通常取次梯度为0或1。
2.3.2 优点与局限性
优点:
局限性:
- 神经元坏死(Dying ReLU):当输入持续为负时,梯度为0,神经元永久失活,无法更新。
- 输出非零中心,所有激活非负。
- 对学习率敏感,学习率过大易导致大量神经元坏死。
2.4 其他重要变体
2.4.1 Leaky ReLU与PReLU
Leaky ReLU在负半轴引入一个小的固定斜率 \( \alpha \)(通常为 0.01),数学式为:
\[ \text{Leaky ReLU}(x) = \max(\alpha x, x) \]
PReLU(Parametric ReLU)将负轴斜率 \( \alpha \) 作为可训练参数,由网络自动学习。两者均解决了ReLU的神经元坏死问题,在负区间保留小梯度。
2.4.2 ELU与SELU
ELU(Exponential Linear Unit)在负区间使用指数衰减至饱和值:
\[ \text{ELU}(x) = \begin{cases} x & x \ge 0 \\ \alpha (e^x - 1) & x < 0 \end{cases} \]
它使负区间的输出趋于 \( -\alpha \),输出均值接近零,加速收敛。SELU(Scaled ELU)是ELU的缩放版本,在自归一化网络中能使神经元输出自动保持均值0、方差1。
2.4.3 Swish与Mish
Swish定义为 \( x \cdot \sigma(x) \),其中 \( \sigma \) 为Sigmoid。其图像平滑,非单调,在小负区域有轻微下降再上升,优于ReLU。Mish是 \( x \cdot \tanh(\ln(1+e^x)) \),类似Swish但更平滑,在深层网络中被认为有轻微优势。两者均需计算Sigmoid或Tanh,成本略高于ReLU。
3 激活函数的比较与选择
3.1 梯度消失与梯度爆炸问题
梯度消失指反向传播中梯度逐层衰减至0,源于饱和型激活函数(Sigmoid、Tanh)的导数趋近于0,以及深层网络连乘效应。ReLU及其变体因导数恒定(正半轴为1)有效缓解消失,但可能引发梯度爆炸(尤其在深度网络中),需配合梯度裁剪或Batch Normalization。
3.2 零中心性与输出偏移
零中心激活(如Tanh)使后层加权和均值为0,有利于梯度更新方向一致,降低振荡。Sigmoid和ReLU的非零中心输出可能导致梯度更新仅向单一方向移动,收敛变慢。ELU和SELU通过负饱和值使均值接近零。
3.3 计算效率与收敛速度
ReLU计算效率最高,无指数运算;Sigmoid、Tanh、Swish等含指数,计算成本较高。收敛速度上,ReLU系列通常快于Sigmoid/Tanh,但可能因神经元坏死而退化,Leaky ReLU/PReLU在保持速度的同时提升稳定性。
3.4 不同网络结构的适配建议
- 全连接网络:隐藏层偏好ReLU或Leaky ReLU,输出层依任务选择(二分类用Sigmoid,多分类用Softmax,回归用线性)。
- 卷积神经网络:ReLU及其变体为主流,深层网络(如ResNet)普遍使用ReLU,轻量化模型有时用Swish。
- 循环神经网络:RNN中Sigmoid和Tanh因需控制门结构而常用,但易导致梯度消失。LSTM、GRU中使用Sigmoid作为门控,Tanh作为状态更新;现代方案可考虑使用ReLU配合梯度裁剪或Layer Normalization。
4 历史与发展
4.1 早期激活函数(阶跃函数、Sigmoid)
最早的神经网络(如感知机)使用硬限幅阶跃函数(输出0或1),无法实现梯度下降训练。1960年代,Sigmoid被引入作为可微替代,配合反向传播算法(1986年推广)使深层网络训练成为可能。Tanh随后在隐藏层中替代Sigmoid,因零中心性表现更优。
4.2 从Sigmoid到ReLU的转变
2000年代初,ReLU由神经科学启发被提出(如Biological-plausibility),但直至2010年Hinton等人在深度信念网络中使用,其优势才被广泛认可。2012年AlexNet在ImageNet竞赛中使用ReLU取得成功,缓解了梯度消失并使深层CNN训练加速数倍,由此ReLU成为工业界默认激活函数。
4.3 现代激活函数的探索(自适应、学习型)
ReLU的坏死问题催生了Leaky ReLU、PReLU、ELU等变体。2015年后,Swish、Mish等基于自动搜索(如NAS)或数学推导的平滑型激活函数出现,在部分任务上超越ReLU。此外,可学习激活函数(如PReLU、参数化Swish)以及通过强化学习或进化算法搜索的激活函数(如谷歌的Swish)成为研究热点,体现了从人工设计向自动化发现转变的趋势。
5 应用实践
5.1 全连接网络中的激活函数
在全连接(Dense)层中,激活函数选择影响网络的拟合能力。浅层网络可选用Sigmoid或Tanh,深层网络(如多层感知机)通常选用ReLU或Leaky ReLU,若发生神经元坏死则换用ELU/PReLU。输出层按问题类型:二分类用Sigmoid输出概率,多分类用Softmax(属于广义激活函数),回归用线性(无激活)。
5.2 卷积神经网络中的激活函数
CNN中卷积层之后紧跟激活函数,常用ReLU(如VGG、ResNet)或其变体。MobileNet等轻量网络采用ReLU6(将输出限制在0-6之间)以减少量化误差。近年Swish在EfficientNet中取得较好效果,但实验成本较高,需在具体任务中测试。
5.3 循环神经网络中的激活函数
RNN内部通常使用Tanh作为候选记忆激活,Sigmoid用于门控单元(输入门、遗忘门、输出门),因为门控需要输出介于0和1之间。LSTM、GRU的单元状态更新仍以Tanh为主。若使用ReLU直接替换门内激活会导致梯度爆炸,需配合Layer Normalization或梯度裁剪。现代变体如QRNN、SRU采用加性门控或轻量激活,但核心模块仍保留Tanh和Sigmoid。
5.4 激活函数对模型训练的影响案例
一个典型对比实验:在CIFAR-10上训练5层CNN,使用Sigmoid的模型在3层后梯度消失,准确率仅50%左右;换用Tanh提升至65%,但训练缓慢;改用ReLU后准确率突破80%,且收敛步数减少约60%;再换用Leaky ReLU(α=0.01)后准确率稳定在82%,未出现死亡神经元。该案例直观展示激活函数选择对梯度流通与模型性能的关键作用。