1-激活函数

1. 激活函数的定义与作用

神经网络的核心运算是线性组合:设输入向量 ,权重 ,偏置 ,则一个线性层的输出为

如果网络中仅有线性操作, 层网络的整体映射可以写成

即仍然是一个线性映射——多层线性网络在表达能力上与单层线性网络等价,这就是线性退化问题

激活函数(activation function) 在每个线性层之后引入非线性:

正是非线性 的引入,使得深层网络获得了逼近任意非线性函数的能力。从通用逼近定理(Universal Approximation Theorem)的角度来看,单层前馈网络在宽度无限大时已经可以逼近任意连续函数;而深层网络的结构偏好(inductive bias)则允许在有限宽度下以更少的参数量实现同等表达能力。


2. 常见激活函数

2.1 Sigmoid

数学表达式

一阶导数

利用 推导如下:

,则

性质

性质
值域
饱和区间(导数趋于 0)
非零中心(zero-centered)否(输出始终为正)
梯度消失风险严重,尤其在深层网络中

对梯度传播的影响

Sigmoid 的导数最大值为 (在 处取得)。在反向传播中,每经过一层 Sigmoid,梯度被乘以 。设网络有 层,若各层均有 Sigmoid 激活,则梯度量级大约被压缩至 级别——这正是梯度消失(vanishing gradient)的典型成因。以一个 20 层的网络为例,,梯度在bp过程中几乎完全消失。

此外,Sigmoid 输出恒正(0.5~1),导致反向传播时上一层收到的梯度信号始终同号,权重更新方向呈” zig-zag “现象,收敛速度慢。


2.2 Tanh(双曲正切)

数学表达式

一阶导数

,则

性质

性质
值域
饱和区间
非零中心是(输出均值为 0)
梯度消失风险存在,但比 Sigmoid 轻(导数最大值为 1 而非 0.25)

对梯度传播的影响

Tanh 的导数最大值为 1(vs Sigmoid 的 0.25),因此梯度消失问题有所缓解,但仍会在深层网络中累积。由于 Tanh 输出以 0 为中心,反向传播时正负梯度信号均可到达,权重更新的方向更合理。Tanh 曾是 RNN 架构中的标配激活函数。


2.3 ReLU(Rectified Linear Unit)

数学表达式

一阶导数

注意:ReLU 在 处不可导,在亚纯理解中通常约定 ,实践中两种约定差异可忽略。

性质

性质
值域
非饱和区间 时激活不饱和,梯度恒为 1
饱和区间 时梯度严格为 0
稀疏性强制将负值输出为 0,产生结构化稀疏
计算成本极低(仅一次比较运算)

对梯度传播的影响

在正区间,ReLU 的梯度恒为 1,不存在梯度压缩问题,因此深层网络首选 ReLU 系列。然而,在负区间,梯度严格为 0 导致对应神经元永久”死去”——这就是 Dying ReLU 问题。设想一个神经元在训练初期由于初始化偏置过大或梯度更新偏向负值,其输出始终为负,此后无论输入如何变化,其梯度始终为 0,权重再也无法更新。


2.4 Leaky ReLU

数学表达式

其中 为一个小正常数(通常取 ,故亦有 PReLU 之名;但 PReLU 中 可学习)。

一阶导数

性质

性质
负区间梯度(非零)
死神经元风险大幅降低,但无法完全消除
参数 固定(LeakyReLU)或可学习(PReLU)

对梯度传播的影响

负区间保留了微弱梯度 ,使得即使初始阶段神经元输出为负,梯度仍能流过并逐步调整权重,使神经元”复活”。这从根本上消解了 Dying ReLU 问题。


2.5 ELU(Exponential Linear Unit)

数学表达式

其中 为超参数。

一阶导数

性质

性质
负区间行为平滑趋近于 ,输出均值更接近 0
负区间梯度,随 变化(非固定
计算成本涉及指数运算,高于 ReLU / LeakyReLU
自归零倾向 时输出趋近 ,梯度趋近 0——仍存在饱和风险

对梯度传播的影响

ELU 在负区间的输出饱和于 ,导数 时同样趋于 0,因此存在与 Leaky ReLU 类似的饱和风险,但程度较轻。自归零特性使得负值区域的输出被压低,有助于产生更强的稀疏性,但对梯度流的作用是双刃剑。


2.6 GELU(Gaussian Error Linear Unit)

数学表达式

其中 是标准正态分布的累积分布函数(CDF),即 。另有近似形式:

  • 高精度近似(Transformer 标配):

  • 低精度近似(在某些推理场景使用):

一阶导数

求导:

其中 为标准正态分布的概率密度函数(PDF)。

性质

性质
值域近似 ,但 对所有 为正(因
非线性特性类似 ReLU + 概率加权软门控
计算成本涉及误差函数(erf)或双曲正切,高于 ReLU
主导场景NLP(Transformer 系列)、视觉 backbone(如 ViT)

对梯度传播的影响

GELU 的导数 始终为正且有上界——最大约为 )。这意味着 GELU 不存在饱和性的硬区间,梯度流在正向和反向均较为通畅。其门控特性(乘以 )使得不同输入对应的激活量级受到自适应调节,是 BERT / GPT 等大语言模型成功的关键因素之一。


2.7 Swish

数学表达式

其中 为可调超参数( 时退化为 SiLU,即 Sigmoid Linear Unit)。当 ,激活退化为 (近似线性);当 ,退化为近似 ReLU。

一阶导数

性质

性质
自门控特性输入 同时控制门控开关和信号传递
超参数 控制门控平滑度; 即 SiLU
计算成本与 Sigmoid 同量级
特点导数可以大于 1(不饱和且可能放大梯度)

对梯度传播的影响

Swish 的导数包含 项——当 时激活为正,梯度可能大于 1,存在梯度爆炸的潜在风险,尤其在深层网络中。因此实践中 Swish 通常配合 BatchNorm / LayerNorm 使用以稳定数值。


2.8 SiLU(Sigmoid Linear Unit)

的 Swish:

GELU 与 SiLU 在 处行为接近,但在尾部差异显著:GELU 在负区间衰减更快(),SiLU 在负区间衰减更慢()。这是两者在不同架构中被分别偏好的数值原因。


3. 反向传播中激活函数梯度的链式法则

设第 层的激活为 ,损失函数为 。定义反向传播中第 层关于 的梯度为

第 1 步:传播到激活输入

其中 表示逐元素乘法(Hadamard product), 是激活函数对输入的导数向量——激活函数的导数直接进入梯度流,是反向传播的关键因子。

第 2 步:传播到权重

第 3 步:继续反向传播

由此递推至上一层。

从以上推导可以看出:激活函数梯度 决定了损失信号能否顺利传递到浅层网络。若 在饱和区间接近 0,则无论上游传来多大梯度,经过逐元素乘法后都将趋近于零,导致浅层权重几乎无法更新——这正是深层网络训练困难的核心原因之一。


4. 深层网络中 ReLU 系列更常见的原因

深层网络训练面临的核心困难是梯度消失与梯度爆炸的交织。以 Sigmoid 为例:,每层梯度被压缩因子 ,20 层后梯度衰减至 量级,浅层网络几乎无法学习。Tanh 略好(最大梯度 1),但仍会累积衰减。

ReLU 的优势来自其非饱和特性:

  1. 正区间梯度恒为 1,不存在梯度压缩,信号可无损传递至任意深度的网络。
  2. 分段线性的稀疏结构使 GPU/加速器的矩阵运算高度优化(ReLU 可通过掩码操作实现,无需逐点非线性函数求值)。
  3. 死神经元问题可通过 LeakyReLU / PReLU / ELU 等变体缓解。

经验上常见(empirical common practice)的配置是:隐藏层优先选用 ReLU / LeakyReLU / GELU;具体偏好依任务而异——CV 任务中 ReLU 仍为主流(配合 BatchNorm 使用),NLP(Transformer 架构)则以 GELU 为标配。


5. 输出层激活函数与任务匹配

5.1 二分类(Binary Classification)

激活函数: Sigmoid

输出解释: ,可直接解释为概率

损失函数: 二元交叉熵(Binary Cross-Entropy, BCE)

为何不用其他激活: 若使用线性输出,则损失函数退化为均方误差,二分类场景下概率校准效果差;若使用 Softmax(Sigmoid 导数形式),则逻辑过重。


5.2 多分类(Multi-class Classification)

激活函数: Softmax

数学表达式:

其中 为类别数。

输出解释: 输出向量 ,可直接解释为各类别概率。

损失函数: 分类交叉熵(Categorical Cross-Entropy)

梯度推导(关键步骤):

Softmax 的反向传播梯度较为复杂。设 ,对 求偏导:

其中 是克罗内克 。代入交叉熵损失:

即预测概率与真实标签的残差直接作为反向传播的梯度——这一简洁形式是多分类任务中 Softmax + 交叉熵组合被广泛采用的核心原因。


5.3 回归(Regression)

激活函数: 无激活函数(线性输出)或特定非线性激活(如 Sigmoid 用于有界回归)。

损失函数: MSE(Mean Squared Error)或 MAE(Mean Absolute Error)。

要点: 回归任务的输出层不应施加任何非线性压缩,否则输出范围受限。若目标值 ,直接输出 即可;若 (如归一化后的回归目标),可用 Sigmoid 将输出约束至此区间。


5.4 多标签分类(Multi-label Classification)

激活函数: Sigmoid(独立作用)

关键区别于多分类: 多标签问题中每个标签独立存在,不存在互斥假设,因此不适用 Softmax(Softmax 强制输出和为 1,引入标签间的竞争关系)。正确做法是对 个标签分别施加 Sigmoid,输出各标签独立的正类概率:

损失函数: 多标签二元交叉熵(Multi-label Binary Cross-Entropy)


6. 工程实践

6.1 如何根据任务选择激活函数

任务类型隐藏层推荐输出层说明
浅层 CNN(≤ 5 层)ReLU / LeakyReLU取决于任务BatchNorm 配合使用
深层 CNN / ResNetReLU(residual支路中)取决于任务Skip connection 缓解梯度消失
Vision Transformer (ViT)GELU取决于任务GELU 是 ViT 标配
NLP Transformer (BERT, GPT)GELULinear(无激活)或 SoftmaxGELU 是 Transformer 标配
YOLO 等目标检测LeakyReLU / ReLUSigmoid(置信度)/ Softmax(分类)检测头输出需理解任务
生成模型(GAN, VAE)ReLU / LeakyReLU / ELU取决于生成目标范围注意输出层激活与损失函数匹配
回归(有界)ReLU / TanhSigmoid(若需约束至 (0,1))或 Linear优先保证输出范围覆盖目标
回归(无界)ReLU / GELULinear无需约束

6.2 初始化、学习率、归一化与激活函数的耦合关系

初始化

激活函数的非线性特性决定了合适的初始化策略

  • ReLU / LeakyReLU 系列:推荐 He Initialization(Kaiming Initialization),即 。推导依据是 ReLU 在负区间置零后方差收缩, 倍因子补偿了后半周期权重分布的缩减。
  • Sigmoid / Tanh:推荐 Xavier Initialization(Glorot Initialization),即 。理由是 Sigmoid/Tanh 的导数在 区间与输入方差匹配,过大初始化会导致饱和。
  • GELU / Swish:经验上常见(empirical common practice)仍使用 XavierNormal初始化,部分研究使用截断正态分布。

错误的初始化会使网络在训练初期即陷入饱和区间,导致梯度消失。

学习率

  • ReLU 对学习率相对鲁棒,因为梯度不压缩,但大学习率仍可能导致梯度爆炸(尤其配合大的 batch size)。
  • Sigmoid / Tanh 需更小的学习率(通常为 ReLU 的 1/10 ~ 1/5),因为饱和区间的梯度衰减会使参数更新缓慢。
  • GELU / Swish:门控机制使得梯度量级可能大于 1,建议配合 学习率 warmup(如 Transformer 训练常用的 linear warmup + cosine decay)。

归一化(BatchNorm / LayerNorm / RMSNorm)

归一化层与激活函数的耦合是神经网络正则化与激活耦合的核心议题:

  • BatchNorm:在激活函数之前应用( → BatchNorm() → )。这一顺序使得 BatchNorm 的输出分布稳定在激活函数的非饱和区间。
  • LayerNorm / RMSNorm:通常在激活函数之后应用或之前均可(Transformer 中 LayerNorm 在残差之后、全连接层之前),但对 GELU 而言,若 LayerNorm 在前则可稳定输入分布,减少门控信号的波动。
  • 重要经验(empirical common practice):ResNet 中 BatchNorm → ReLU 是标准顺序(BN-ReLU order),而 Transformer 中 GELU 通常在 LayerNorm 之后。顺序差异源于架构中归一化层的位置(残差连接 vs 密集层)。

6.3 常见问题与解决方案

问题 1:死 ReLU(Dying ReLU)

成因: 神经元输出在负区间被置零且梯度为 0,权重无法更新。

诊断方法: 观察训练过程中激活为 0 的神经元比例;若超过 50%~70% 且持续不下降,则存在死 ReLU 问题。

解决方案:

方法说明
LeakyReLU / PReLU负区间保留 梯度,经验上常见(empirical common practice)
ELU平滑负区间,输出趋近
减小学习率避免初始阶段大步长更新导致大负值输出
调整初始化偏置初始化为小正值(如 0.01),避免初始阶段负输出
使用 BatchNormBatchNorm 的可学习缩放偏置可自动调整层输出分布

问题 2:饱和梯度(Saturation Gradient)

成因: 过大时,Sigmoid / Tanh 的导数趋于 0。

诊断方法: 观察激活值分布——若大部分激活值集中在饱和区间(接近 ),则存在饱和问题。

解决方案:

  • 使用 ReLU / LeakyReLU 代替 Sigmoid / Tanh(深层网络首选)。
  • 若必须使用 Tanh(如 RNN),配合 残差连接(skip connection)以维持梯度流。
  • 使用 LSTM / GRU 等带门控机制的 RNN 单元,内部记忆单元设计缓解梯度消失。
  • 配合 BatchNorm 以稳定输入分布。

问题 3:数值不稳定(Numerical Instability)

具体表现为:

  • 上溢(Overflow) 过大时超出浮点表示范围()。
  • 下溢(Underflow) 过大时趋近 0,导致除 0 或

Sigmoid 数值安全实现:

实际框架(PyTorch / TensorFlow)的 Sigmoid 实现均采用此分段逻辑。

Softmax 数值安全实现:

直接计算 会导致上溢。安全做法是利用最大值归约(max-reducing trick):

其中 ,保证 ,防止上溢。

GELU / Swish 的数值实现: 框架通常调用 scipy.special.erf 或其近似;精度要求高的场景使用高精度近似公式。


本章小结

  1. 激活函数是神经网络非线性表达能力的根本来源。没有非线性,多层线性网络退化为单层线性网络。
  2. 激活函数的一阶导数 决定了反向传播中梯度的传递效率:Sigmoid/Tanh 存在饱和区间导致梯度消失;ReLU 在正区间梯度恒为 1,是深层网络的首选。
  3. 链式法则清晰表明:激活函数的导数通过逐元素乘法直接影响梯度流,是深层网络训练的核心瓶颈。
  4. 输出层激活函数必须与任务匹配——二分类用 Sigmoid,多分类用 Softmax,多标签用独立 Sigmoid,回归用线性输出。
  5. 工程中的三大耦合关系:初始化依赖激活函数的饱和特性(He 配 ReLU,Xavier 配 Sigmoid/Tanh);学习率需根据激活饱和程度调整;归一化层的位置(BN-ReLU vs LN-GELU)影响激活分布与梯度流。
  6. 常见工程问题(死 ReLU、饱和梯度、数值不稳定)均有成熟解决方案:变体激活函数、残差连接、安全数值实现。

训练时选择激活函数的实用建议清单

  1. 默认选择:深层网络隐藏层优先用 ReLU,简单架构(≤ 5 层)完全够用。

  2. 深层 / Transformer 架构:用 GELU;NLP 和 Vision Transformer 的经验标准。

  3. 防止死 ReLU:用 LeakyReLU(固定 )或 PReLU 可学习);若有显存和计算余量,直接用 ELU

  4. RNN 架构:优先用 Tanh(LSTM/GRU 内部已使用);Tanh 的输出以 0 为中心,适合时间序列的梯度流。

  5. 生成模型(GAN / VAE):生成器输出层依据目标范围选择激活;隐藏层用 ReLU / LeakyReLU

  6. 输出层不纠结

    • 二分类 → Sigmoid
    • 多分类 → Softmax
    • 多标签 → 独立 Sigmoid
    • 回归 → Linear(无激活)
  7. 配合 BatchNorm 使用:BatchNorm 在激活前时,激活函数可使用更强非线性的变体(如原始 ReLU 而非 LeakyReLU);BatchNorm 的均值方差归一化能自动将输入推入非饱和区间。

  8. 学习率适配:Sigmoid/Tanh 网络用较小学习率(相对 ReLU 的 1/5 ~ 1/10);GELU/Swish 建议配合 warmup。

  9. 数值安全:框架已处理 Sigmoid/Softmax 的数值问题;但若自行实现,务必用 max-reducing trick 处理 Softmax,用分段函数处理 Sigmoid。

  10. 不要过度设计:在绝大多数 CV 任务中,ReLU + BatchNorm 的组合足够稳定高效;过早切换到 GELU/Swish 在小数据集上可能引入过拟合风险。