深度学习常用激活函数

一、基础概念

激活函数是嵌入神经网络每一层神经元后的非线性变换单元,核心作用是打破线性变换的叠加局限:若无激活函数,多层神经网络等价于单个线性层,无法拟合复杂的非线性关系。同时,激活函数直接决定梯度传播效率、数值稳定性、模型收敛速度与泛化能力。

行业通常按饱和特性对激活函数分类:

  • 饱和激活函数:当输入$x \to \pm\infty$时,导数趋近于0,易引发梯度消失;
  • 非饱和激活函数:仅单侧或无饱和区间,从根源缓解梯度消失,是当前深度学习的主流。

二、经典双侧饱和激活函数

这类是深度学习早期的核心激活函数,目前仅用于特定输出层或门控结构,隐藏层已基本淘汰。

1. Sigmoid(Logistic函数)

公式

$$\sigma(x) = \frac{1}{1+e^{-x}}$$

值域:$(0,1)$

核心特点

优点

  • 输出严格限制在0-1区间,符合概率的物理意义,是二分类任务输出层的标准选择;
  • 全程平滑可导,导数形式简洁:$\sigma'(x)=\sigma(x)(1-\sigma(x))$,可直接用输出值计算,无需额外存储输入;
  • 可将任意实数映射到固定区间,缓解输入数值偏移问题。

缺点

  • 严重的梯度消失问题:当$|x|>5$时,导数趋近于0,反向传播时梯度逐层衰减,深层网络几乎无法训练;
  • 非零均值输出,会导致下一层输入出现正向偏移,梯度更新呈Z型抖动,收敛速度大幅变慢;
  • 包含指数运算,计算开销远高于线性类激活函数。

2. Tanh(双曲正切函数)

公式

$$\text{tanh}(x) = \frac{e^x – e^{-x}}{e^x + e^{-x}}$$

值域:$(-1,1)$

核心特点

优点

  • 零均值输出,彻底解决了Sigmoid的非零均值偏移问题,收敛速度显著快于Sigmoid;
  • 平滑可导,导数形式简洁:$\text{tanh}'(x)=1-\text{tanh}^2(x)$,计算便捷;
  • 输出对称,更适合中间层的特征映射,早期RNN中广泛使用。

缺点

  • 仍未解决梯度消失问题:当$|x|>3$时,导数快速趋近于0,深层网络训练受限;
  • 仍包含指数运算,计算成本较高。

3. Softmax函数

公式

$$\text{softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}}$$

值域:$(0,1)$,所有输出之和为1

核心特点

优点

  • 多分类任务输出层的标准配置,可将多维度输出转化为合法的概率分布,每个值对应对应类别的预测概率;
  • 放大输入差异:对大数值输入做指数级放大,小数值输入做抑制,增强类别区分度;

缺点与注意事项

  • 存在数值溢出风险:$e^x$随x增大快速爆炸,工程上通常先减去输入最大值再计算,保证数值稳定;
  • 类别数极大时,求和运算开销显著上升;
  • 对离群点极度敏感,单个异常值会严重扭曲整体概率分布。

三、ReLU系单侧不饱和激活函数(隐藏层主流)

这类函数彻底解决了正区间的梯度消失问题,计算效率极高,是当前CNN、MLP等网络隐藏层的默认选择。

1. ReLU(修正线性单元)

公式

$$\text{ReLU}(x) = \max(0, x)$$

值域:$[0, +\infty)$

核心特点

优点

  • 彻底解决正区间梯度消失:正区间导数恒为1,反向传播梯度稳定,支持上百层的深层网络训练;
  • 计算效率拉满:仅需简单的数值判断,无指数、三角函数运算,速度远超Sigmoid/Tanh;
  • 天然的稀疏性:负区间输出为0,使网络特征表达更稀疏,降低神经元间的耦合度,缓解过拟合;
  • 收敛速度比Sigmoid/Tanh快数倍,是工业界隐藏层的首选基线。

缺点

  • 死亡ReLU问题(Dead ReLU):负区间导数恒为0,一旦输入持续为负,该神经元的权重永远无法更新,永久失活;学习率过大时,极易出现大量神经元死亡;
  • 非零均值输出,仍存在输入偏移问题;
  • 负区间完全丢弃信息,对输入噪声的鲁棒性较差。

2. Leaky ReLU

公式

$$\text{Leaky ReLU}(x) = \max(\alpha x, x), \quad \alpha为固定小值(通常0.01)$$

值域:$(-\infty, +\infty)$

核心特点
  • 核心改进:为负区间设置一个极小的固定斜率$\alpha$,彻底避免神经元永久失活,解决死亡ReLU问题;
  • 完全保留ReLU的计算高效、无正区间梯度消失的核心优势;
  • 缺点:$\alpha$是手动设置的超参数,无通用最优解,不合适的取值会影响模型效果,泛化性不稳定。

3. PReLU(参数化ReLU)

公式

与Leaky ReLU完全一致,区别是$\alpha$是可学习参数,随网络训练自动优化,而非固定值。

核心特点
  • 自适应调整负区间斜率,无需手动调参,灵活性和拟合能力远超Leaky ReLU;
  • 进一步缓解死亡ReLU问题,在大规模CV任务中效果显著优于基础ReLU;
  • 缺点:增加了少量模型参数,小数据集上易出现过拟合,计算开销略高于ReLU。

4. RReLU(随机化ReLU)

公式

与Leaky ReLU一致,区别是$\alpha$在训练时从预设均匀分布中随机采样,推理时固定为分布的均值。

核心特点
  • 训练时的随机性带来了天然的正则化效果,显著降低过拟合风险,尤其适合小数据集;
  • 兼顾缓解死亡ReLU与泛化能力,调参成本低于Leaky ReLU;
  • 缺点:推理时需固定$\alpha$,部署逻辑略复杂,需提前预设分布区间。

5. ELU(指数线性单元)

公式

$$\text{ELU}(x) =
\begin{cases}
x, & x>0 \\
\alpha(e^x – 1), & x \leq 0
\end{cases}
\quad \alpha通常取1$$

值域:$(-\alpha, +\infty)$

核心特点
  • 核心改进:负区间采用平滑的指数曲线,而非线性折线,输出均值更接近0,大幅缓解输入偏移问题;
  • 负区间有连续梯度,无死亡神经元问题,对输入噪声的鲁棒性显著优于ReLU;
  • 缺点:包含指数运算,计算开销高于ReLU;$\alpha$需手动调优,深层网络中效果提升有限。

6. SELU(缩放指数线性单元)

公式

$$\text{SELU}(x) = \lambda \cdot \text{ELU}(x)$$

其中$\lambda \approx 1.0507$、$\alpha \approx 1.6733$为预计算的固定值,无需手动设置。

核心特点
  • 核心优势:自带自归一化特性,配合LeCun权重初始化与Alpha Dropout时,网络层输出会自动收敛到零均值、单位方差,无需Batch Normalization层;
  • 彻底解决深层全连接网络的梯度消失/爆炸问题,在超深层MLP中效果远超其他激活函数;
  • 缺点:仅在全连接网络中有严格的理论保证,CNN、Transformer中效果不稳定;对初始化和正则化要求极高,不满足前提条件时效果会严重退化。

7. ReLU6

公式

$$\text{ReLU6}(x) = \min(\max(0, x), 6)$$

值域:$[0,6]$

核心特点
  • 专为移动端轻量化模型设计(如MobileNet),将输出上界限制为6;
  • 核心优势:在低精度推理(FP16、INT8)时,保证数值稳定性,避免量化溢出,大幅提升端侧部署效率;
  • 计算效率与基础ReLU一致,无额外开销;
  • 缺点:正区间超过6时进入饱和区,导数为0,存在潜在的梯度消失风险。

四、大模型主流平滑激活函数

这类函数全程平滑可导、无硬拐点,梯度传播更稳定,泛化能力更强,是Transformer、大语言模型(LLM)、视觉大模型(ViT)的标配。

1. GELU(高斯误差线性单元)

公式

$$\text{GELU}(x) = x \cdot \Phi(x)$$

其中$\Phi(x)$是标准正态分布的累积分布函数,工程上常用近似公式:

$$\text{GELU}(x) \approx 0.5x \left(1 + \text{tanh}\left(\sqrt{\frac{2}{\pi}}(x + 0.044715x^3)\right)\right)$$

值域:$(-\infty, +\infty)$

核心特点
  • 是BERT、GPT系列、ViT等大模型的默认激活函数;
  • 全程平滑可导,无ReLU的硬拐点,梯度传播更稳定,无梯度断层;
  • 自带随机正则化特性,等价于对输入做自适应随机掩码,完美适配Transformer的注意力机制;
  • 负区间平滑衰减,不会完全丢弃信息,无死亡神经元问题;
  • 收敛速度和泛化能力显著优于ReLU,在大参数量模型中优势被进一步放大;
  • 缺点:计算复杂度略高于ReLU,当前硬件已做针对性优化,开销可忽略。

2. Swish/SiLU

公式

$$\text{Swish}(x) = x \cdot \sigma(\beta x)$$

其中$\beta$为可学习参数或固定值;当$\beta=1$时,即为SiLU(Sigmoid Linear Unit),是最常用的形式。

核心特点
  • 无上界、有下界,全程平滑可导,无硬拐点,梯度稳定性优于ReLU;
  • 在深层CNN、Transformer中,效果普遍优于ReLU,训练稳定性更强;
  • 可学习的$\beta$让函数具备自适应非线性调整能力,适配不同任务;
  • 缺点:包含Sigmoid运算,计算开销高于ReLU;可学习$\beta$会增加少量参数。

3. Mish

公式

$$\text{Mish}(x) = x \cdot \text{tanh}(\text{softplus}(x)), \quad \text{softplus}(x)=\ln(1+e^x)$$

值域:$(-\infty, +\infty)$

核心特点
  • 全程平滑可导,负区间梯度衰减更平缓,几乎无死亡神经元风险,梯度传播稳定性为当前激活函数第一梯队;
  • 在图像分类、目标检测、语义分割等CV任务中,精度普遍优于ReLU、Swish;
  • 无上界避免饱和,有下界增强正则化效果,泛化能力强;
  • 缺点:包含tanh、对数、指数运算,计算复杂度最高,推理速度慢,端侧部署受限。

4. SwiGLU/GeGLU

公式(以SwiGLU为例)

$$\text{SwiGLU}(x) = (xW_1 + b_1) \odot \text{Swish}(xW_2 + b_2)$$

其中$\odot$为哈达玛积,GeGLU则将Swish替换为GELU。

核心特点
  • 是当前LLM(LLaMA2/3、GPT-NeoX、Qwen等)Feed Forward层的标配激活函数;
  • 结合了门控机制与平滑激活函数,自适应控制信息流动,大幅缓解长序列建模中的梯度消失问题;
  • 相比纯GELU,在大语言模型中能显著提升收敛速度与下游任务效果,同等参数量下精度更高;
  • 缺点:参数量与计算量略高于GELU,更适合大参数量模型。

五、特殊场景专用激活函数

1. Hard系列(Hard Sigmoid/Hard Tanh)

  • 核心设计:用分段线性函数近似Sigmoid/Tanh,完全剔除指数运算,计算效率拉满;
  • 适用场景:移动端、嵌入式等低算力设备的轻量化模型,以及LSTM/GRU的门控结构;
  • 缺点:存在不可导的硬拐点,精度略有损失,饱和区仍有梯度消失风险。

2. GLU(门控线性单元)

公式

$$\text{GLU}(x) = (xW + b) \odot \sigma(xV + c)$$

  • 专为序列模型设计,是Transformer门控结构的基础;
  • 门控机制可自适应过滤无效信息,保留关键特征,完美适配长序列建模;
  • 是SwiGLU、GeGLU、GLU变体的基础框架。

3. Maxout

公式

$$\text{Maxout}(x) = \max(w_1^Tx + b_1, w_2^Tx + b_2, …, w_k^Tx + b_k)$$

  • 通用激活函数族,ReLU、Leaky ReLU均为其特例;
  • 拟合能力极强,无死亡神经元问题;
  • 缺点:参数量与计算量随k值成倍增长,当前已极少使用。

4. Sign函数

公式

$$\text{Sign}(x) =
\begin{cases}
1, & x>0 \\
0, & x=0 \\
-1, & x<0
\end{cases}$$

  • 专为二值神经网络(BNN)设计,激活值仅需1bit存储,极致轻量化;
  • 适用场景:算力极度受限的边缘设备、端侧实时推理;
  • 缺点:几乎处处导数为0,反向传播需用直通估计器(STE),训练难度大,精度损失显著。

六、激活函数选型指南

场景/模型类型 首选激活函数 备选方案
通用CNN/MLP隐藏层 ReLU Leaky ReLU、PReLU
大语言模型/Transformer GELU、SwiGLU SiLU、GeGLU
图像分类/CV高精度任务 Mish、Swish PReLU、GELU
二分类任务输出层 Sigmoid
多分类任务输出层 Softmax
超深层全连接网络 SELU ReLU+BN
移动端/轻量化部署 ReLU6、Hard系列 ReLU
小数据集/防过拟合 RReLU Leaky ReLU

核心选型原则

  1. 优先基线:优先用ReLU验证模型效果,再用复杂激活函数做精度提升;
  2. 硬件适配:端侧部署优先选择低计算开销的线性类激活函数,避免复杂指数/三角函数;
  3. 模型规模:小模型优先简单激活函数避免过拟合,大模型可选择平滑激活函数挖掘性能潜力。

参考链接:(95 封私信 / 82 条消息) 深度学习笔记:如何理解激活函数?(附常用激活函数) – 知乎
深度学习中常见的10种激活函数(Activation Function)总结_激活函数有哪些-CSDN博客
神经网络 – 激活函数(Maxout 单元)_maxout激活函数-CSDN博客

感谢你的阅读


欢迎评论交流


忽如一夜春风来,千树万树梨花开。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇