3 most important points
- 理想的激活函数应该:输出的分布是零均值的,可以加快训练速度;激活函数是单侧饱和的,可以更好的收敛
- 激活函数的选择并非“越复杂越好”,而是“针对模型结构、训练稳定性、计算效率”综合考量
- 随着模型规模越来越大(例如 LLM 、大规模 Transformer 等),激活函数从“简单而快”向“更强表现、更稳定”倾斜
5 thoughts
- 现在在 ReLU 前基本都加了 BN 层处理,极大情况避免了 ReLU 的缺点出现;某些神经元不激活,还可以在一定程度上有降低过拟合的作用,也就是稀疏网络
Notes
Abstract
激活函数 输出特性 负区间表现 梯度特点 适用场景 Sigmoid (0,1) 接近 0 易饱和 → 梯度消失 输出层/旧网络 Tanh (−1,1) 有负输出 仍易饱和 较浅网络 ReLU [0,∞) 输出 0 正区间梯度恒为 1,负区间梯度=0 → “死亡”风险 现代深度隐藏层 Leaky/PReLU/ELU/SELU 多样 负区间有输出 相比 ReLU 更好 有 ReLU 问题时 GELU 平滑近似线性/零区、非零负输出 有一定负输出 平滑良好 Transformer/深度网络 Swish 类似 负区间小输出 平滑、非单调 深度/宽网络 SwiGLU 门控 + Swish 通过门控控制负区间流通 极强表达能力 大语言模型/大规模 Transformer
理想的激活函数应满足两个条件:
- 输出的分布是零均值的,可以加快训练速度。
- 激活函数是单侧饱和的,可以更好的收敛。
Sigmoid 函数
- 公式:
- 原理:将输入 映射到 (0,1) 区间,带有“压缩”与“非线性”特性。激活函数的主要作用就是引入非线性,从而使多层神经网络能拟合复杂函数。
- 优点:
- 输出有界 (0,1),适合做概率输出或二分类场景的输出层。
- 曲线平滑、可微。
- 缺点:
- 梯度会饱和:当 或 时,,导致梯度消失。
- 输出不是“零中心”(zero-centered),即输出始终为正,这可能导致后续层训练时权重更新效率低。
- 适用场景:
- 输出层做概率预测/二分类。
- 隐藏层现代深度网络中不常用了,因为其缺点大。
Tanh 函数(双曲正切)
- 公式:
- 原理:类似 sigmoid,但输出范围是 (–1, +1),有零中心的特点。
- 优点:
- 输出零中心,有利于后续层权重学习(比 sigmoid 好)。
- 缺点:
- 同样存在饱和问题:当输入大(正或负)时,梯度趋近 0 → 梯度消失。
- 适用场景:
- 较浅网络/传统网络中还会用;但在现代深度网络中,主要被 ReLU 及其变种取代。
ReLU 函数(Rectified Linear Unit)
- 公式:
- 原理:当输入为正,直接输出该值;输入为负,输出零。这引入了稀疏激活(部分神经元输出为 0)与“线性部分 + 非线性拐点”的特性。
- 优点:
- 计算简单、速度快。
- 在正区间梯度恒定为 1,有助于缓解“梯度消失”问题。
- 引入稀疏性:一半左右的神经元可能不激活,这从某种角度减少冗余。这使神经元对噪声干扰更具鲁棒性。
- 缺点:
- “死亡 ReLU”问题:如果一个神经元一直输出负值,其梯度永远为 0,可能永远不会被更新。
- 只在负区间输出零,负区间信息完全被屏蔽,可能导致某些特征无法表达。
- 适用场景:
- 现代深度网络隐藏层的默认选择。
- 特别适合卷积网络、视觉任务。
类 ReLU 的变种(Leaky ReLU、PReLU、ELU、SELU 等)
这些激活函数都是对 ReLU 的改进,目的是缓解 ReLU 的缺点。下面列几个代表:
- Leaky ReLU:当 (x<0) 时,不输出 0,而是输出一个很小的斜率 ( 很小)。
- 优点:减少死亡 ReLU 的风险。
- 缺点:仍有部分负区间抑制,且斜率设定可能需调优。
- PReLU (Parametric ReLU):类似 Leaky ReLU,但允许负区间的斜率成为可学习参数。
- 优点:网络可自己学习“负区间输出多少”最优。
- ELU (Exponential Linear Unit):负区间采用指数形式输出而不是线性,输出可负,且趋于一个负常数。
- 优点:负输出可以让神经元输出均值更接近 0,有利于训练稳定。
- 缺点:计算上稍贵一些(指数操作)。
- SELU (Scaled ELU):SELU 是 ELU 的一个变种,带有缩放参数,在特定条件下(适当初始化、Dropout 关闭等)能自动归一化网络(自归一化网络)。适用于:
- 对 ReLU 出现问题(例如梯度消失、神经元死亡)时尝试。
- 某些特殊网络结构(如自归一化网络)中。
GELU 函数(Gaussian Error Linear Unit)
- 公式(一种近似形式):其中 表示误差函数。
- 原理:相比 ReLU 的硬拐点,GELU 提供一种“平滑”近似方式,在输入为负时不是直接 0,而是按照概率(基于高斯分布)让输出处于非零。
- 优点:
- 平滑、可微、非单调(在负区间也有小梯度),有利于训练稳定。
- 曾在很多 Transformer 类模型中被采用(比如 BERT)
- 缺点:
- 计算比 ReLU 复杂(涉及误差函数或近似形式)。
- 在某些任务中优势不显著,需结合任务与模型结构考量。
- 适用场景:
- 高性能深度模型、Transformer /大模型的 FFN 层中。
- 当训练很深或网络很宽、希望激活更平滑时。
Swish 函数(有时称 SiLU)
- 公式: 有时还引入一个可学习参数 :
- 原理:结合了线性 和 sigmoid 形式,使函数在负区间也有非零输出,并且整体上比 ReLU—硬 “负区间=0” 的策略更柔和。
- 优点:
- 平滑、可微、负区间有输出、非单调。
- 在某些实验(尤其较深网络)中优于 ReLU。
- 缺点:
- 计算上比 ReLU 稍复杂(含 sigmoid 运算)。
- 虽然潜力大,但在所有任务上并非总是显著优于 ReLU。
- 适用场景:
- 需要“更好”激活表现的深度/宽网络。
- 如 Transformer/大规模语言模型中的 FFN 层。
GLU (Gated Linear Units)及 GLU 变体
- 公式:
- 是线性部分, 是门控部分
- 是 Hadamard 积,线性部分和门控部分按元素相乘,选择性让信息通过
- 原理:GLU 其实不算是一种激活函数,而是一种神经网络层。它是一个线性变换后面接门控机制的结构。其中门控机制是一个sigmoid函数用来控制信息能够通过多少。
- 变体:更换线性部分激活函数即可 \begin{align}\text{ReGLU}(x, W, V, b, c) &= \max(0, xW + b) \otimes (xV + c)\\[6pt] \text{GEGLU}(x, W, V, b, c) &= \text{GELU}(xW + b) \otimes (xV + c)\\[6pt] \text{SwiGLU}(x, W, V, b, c, \beta) &= \text{Swish}_\beta(xW + b) \otimes (xV + c) \end{align}
- SwiGLU: SwiGLU 是结合 GLU 和 Swish 的机制
- 优点:
- 门控机制: 模型能够“选择”哪些信息通过、哪些信息被抑制。
- 平滑激活 + 非零负区间:比 ReLU 更灵活。
- 在大模型中表现优异,被视为当前主流的大模型激活函数之一(用于 LLaMA-3)
- 缺点:
- 计算更复杂(比 ReLU、甚至 GELU 复杂)
- 实现上稍繁琐(需要拆分输入、做两个线性变换、再做门控运算)
- 适用场景:
- 大规模语言模型(LLM)中的 Transformer 结构,尤其 FFN (前馈)层。
- 当模型很大、网络很宽、希望激活机制更强、更灵活时。
- 优点: