激活函数

从函数逼近与梯度传播角度系统分析激活函数的作用、机制与常见形式

什么是激活函数

  • 神经网络中每一层的基本计算形式为:

    z=Wx+ba=ϕ(z)z = W x + b\\ a = \phi (z)
    • zz 为线性变换结果(logits)

    • ϕ(⋅)\phi (\cdot) 为激活函数

    • aa 为该层输出

  • 若网络中所有 ϕ(⋅)\phi (\cdot) 均为线性函数,则多层网络可整体合并为一次线性映射:

    WL⋯W2W1xW_L \cdots W_2 W_1 x
  • 因此,激活函数存在的根本原因在于引入非线性,使模型具备表达复杂函数的能力

  • 从优化角度看,激活函数并不仅决定前向表达能力,还直接控制反向传播中的梯度结构

  • 反向传播的链式法则为:

    ∂L∂W=∂L∂a⋅∂a∂z⋅∂z∂W∂a∂z=ϕ′(z)\frac {\partial L}{\partial W} = \frac {\partial L}{\partial a} \cdot \frac {\partial a}{\partial z} \cdot \frac {\partial z}{\partial W}\\ \frac {\partial a}{\partial z} = \phi'(z)
  • 由此可见,在链式求解过程中,激活函数的导数会影响梯度

    • 若长期接近 0 → 梯度消失
    • 若数值不受控 → 梯度爆炸
  • 一个 “良好” 的激活函数通常需要在以下方面取得平衡:

    • 提供足够的非线性表达能力
    • 在常见输入范围内保持梯度可传播
    • 避免输出长期处于饱和区
    • 计算形式足够简单,适合大规模训练
  • 激活函数并非局部技巧,而是对函数逼近能力、梯度传播稳定性、优化可行性的统一设计

  • 不同激活函数的演化,本质是围绕深层可训练性展开的

Sigmoid / Tanh

Sigmoid

σ(x)=11+e−x\sigma (x) = \frac {1}{1 + e^{-x}}
  • 输出范围为 (0,1)(0, 1),可直接解释为概率
  • 其导数为:
σ′(x)=σ(x)(1−σ(x))\sigma'(x) = \sigma (x)(1 - \sigma (x))
  • 当 ∣x∣|x| 较大时:
σ′(x)≈0\sigma'(x) \approx 0
  • 在深层网络中,梯度在多层相乘后迅速衰减,从而会导致梯度消失问题

Tanh

tanh⁡(x)=ex−e−xex+e−x\tanh (x) = \frac {e^x - e^{-x}}{e^x + e^{-x}}
  • 输出范围为 (−1,1)(-1,1)​,相较 Sigmoid 为零中心

  • 其导数为:

    tanh⁡′(x)=1−tanh⁡2(x)\tanh'(x) = 1 - \tanh^2 (x)
  • 在 ∣x∣|x| 较大时同样进入饱和区:

    tanh⁡2(x)≈1⇒tanh⁡′(x)≈0\tanh^2 (x) \approx 1 \Rightarrow \tanh'(x) \approx 0
  • 仍然无法从根本上解决深层网络的梯度传播问题

ReLU

ReLU

  • ReLU(Rectified Linear Unit)系列激活函数用于解决 “能不能训” 的问题(梯度是否存在)
ReLU(x)=max⁡(0,x)\text{ReLU}(x) = \max (0, x)
  • 其导数为:
ReLU′(x)={1,x>00,x≤0\text{ReLU}'(x) = \begin {cases} 1, & x > 0 \\ 0, & x \le 0 \end {cases}
  • 正区间梯度恒定,使梯度能够在深层网络中传播,从而缓解梯度消失问题
  • 激活稀疏,即部分神经元输出为零,有助于特征选择,有隐式正则化效果
  • 计算简单高效,适合大规模训练
  • 但当神经元长期落在负区间时,梯度会恒为 0,参数无法再更新,这种现象被称为死亡 ReLU

Leaky ReLU / PReLU

ϕ(x)={x,x>0αx,x≤0\phi (x) = \begin {cases} x, & x > 0 \\ \alpha x, & x \le 0 \end {cases}
  • 缓解死亡 ReLU 问题
    • 为负区间保留非零梯度,从机制上缓解死亡 ReLU
    • 同时仍保持 ReLU 的梯度稳定优势
    • α\alpha 可为固定小值(如 0.01)或可学习参数(PReLU)
    • 但引入了额外的超参数,需要调优
  • 整体上,Leaky ReLU 在保持 ReLU 优势的同时,提升了负区间的梯度流动性,因此 Leaky ReLU 成为实际应用中的常用选择

Softmax

  • 多分类任务要求模型输出各类别的相对置信度,且能够被解释为概率分布,即输出需满足:

    pi≥0,∑ipi=1p_i \ge 0,\quad \sum_i p_i = 1
  • Softmax 正是为满足这一建模目标而引入的映射

    Softmax(xi)=exi∑j=1nexj\text{Softmax}(x_i) = \frac {e^{x_i}}{\sum_{j=1}^n e^{x_j}}
    • 指数函数保证输出为正

    • 归一化保证概率和为 1

    • 本质上,Softmax 将 logits 映射为相对权重

指数放大效应

  • 由于指数函数的性质(指数放大效应):

    xi−xj的差异⇒exi/exj的指数级差异x_i - x_j \text{的差异} \Rightarrow e^{x_i} /e^{x_j} \text{的指数级差异}
  • 若存在 xk≫xjx_k \gg x_j:

Softmax(xk)→1,Softmax(xj)→0\text{Softmax}(x_k) \to 1,\quad \text{Softmax}(x_j) \to 0
  • 因此,Softmax天然倾向于产生近似 one-hot 的输出

  • 然而,当 xix_i 较大时:

exi→∞e^{x_i} \to \infty
  • 工程上必须进行等价变换,以在数值层面修正指数的放大副作用:
Softmax(xi)=exi−max⁡(x)∑jexj−max⁡(x)\text{Softmax}(x_i) = \frac {e^{x_i - \max (x)}}{\sum_j e^{x_j - \max (x)}}

Jocobian 矩阵

  • 由于 Softmax 公式的分母中包含所有 xkx_k,所以:

    • p1p_1 依赖 x1,x2,…x_1, x_2, \dots
    • p2p_2 依赖 x1,x2,…x_1, x_2, \dots
    • ……
    • 这说明 Softmax 的归一化导致任一 logit 的变化都会影响全部输出,其输出各分量之间相互耦合
  • 而在链式法则中求解时:

    ∂L∂xi\frac {\partial L}{\partial x_i}
  • 其结构为:

    x;→Softmax;p;→Loss;Lx ;\xrightarrow {\text{Softmax}}; p ;\xrightarrow {\text{Loss}}; L
  • 而 LL 是 所有 pjp_j 的函数,每个 pjp_j 又是 所有 xix_i 的函数,故

    ∂L∂xi=∑j∂L∂pj⋅∂pj∂xi\frac {\partial L}{\partial x_i} = \sum_j \frac {\partial L}{\partial p_j} \cdot \frac {\partial p_j}{\partial x_i}
  • 其中,∂pj∂xi\frac {\partial p_j}{\partial x_i} 的具体形式即为 Jocobian 矩阵:

    ∂pi∂xj={pi(1−pi),i=j−pipj,i≠j\frac {\partial p_i}{\partial x_j} = \begin {cases} p_i (1 - p_i), & i = j \\ - p_i p_j, & i \ne j \end {cases}

引入交叉熵

  • 根据 4.2 所述,Softmax 的梯度这么复杂、各类别还彼此耦合,那为什么它还能在深度网络中稳定训练?

  • 这是因为交叉熵刚好 “对齐” 了 Softmax 的 Jacobian 结构

  • 交叉熵损失:

    L=−∑iyilog⁡piL = - \sum_i y_i \log p_i
  • 对交叉熵损失求偏导:

    ∂L∂xi=∑j∂L∂pj⋅∂pj∂xi∂L∂pj=−yjpj\begin {align*} \frac {\partial L}{\partial x_i} &=\sum_j \frac {\partial L}{\partial p_j} \cdot \frac {\partial p_j}{\partial x_i}\\ \frac {\partial L}{\partial p_j}&=-\frac {y_j}{p_j} \end {align*}
  • 将其与 Softmax 的 Jacobian 结合:

    • 当 j=ij = i 时:

      −yipi⋅pi(1−pi)=−yi(1−pi)-\frac {y_i}{p_i} \cdot p_i (1 - p_i) = - y_i (1 - p_i)
    • 当 j≠ij \ne i 时:

      −yjpj⋅(−pipj)=yjpi-\frac {y_j}{p_j} \cdot (- p_i p_j) = y_j p_i
    • 将所有项合并,有:

      ∂L∂xi=−yi(1−pi)+∑j≠iyjpi\frac {\partial L}{\partial x_i} = - y_i (1 - p_i) + \sum_{j \ne i} y_j p_i
    • 提取公共因子 pip_i,并利用 ∑jyj=1\displaystyle\sum_j y_j = 1:

      ∂L∂xi=−yi+yipi+pi(1−yi)=pi−yi\begin {align*} \frac {\partial L}{\partial x_i} &= - y_i + y_i p_i + p_i (1 - y_i) \\ &= p_i - y_i \end {align*}
  • 可以看到,Softmax 在前向传播中引入的指数放大与全量耦合,在与交叉熵组合后,于反向传播中被完全抵消

  • 最终梯度只保留为:

    ∂L∂xi=pi−yi\frac {\partial L}{\partial x_i} = p_i - y_i
  • 这一结果不再包含指数、归一化或 Jacobian 矩阵,梯度形式极其简洁稳定

  • 这是 Softmax 能在深度学习中成立的决定性原因

Softmax 的 “梯度消失”

  • 当模型预测过于自信:
ptrue≈1p_{\text{true}} \approx 1
  • 梯度自然趋于 0:
pi−yi≈0p_i - y_i \approx 0
  • 这不是数值问题,而是概率模型已 “自认为收敛”,这也说明,不是所有梯度消失都意味着训练失败

GELU

ELU

  • ELU(Exponential Linear Unit) 和 SELU(Scaled ELU)均用于解决 “训练过程中分布会不会崩” 的问题(保证均值、方差稳定)

  • ELU 的基本形式:

    ELU(x)={x,x>0α(ex−1),x≤0\text{ELU}(x) = \begin {cases} x, & x > 0 \\ \alpha (e^x - 1), & x \le 0 \end {cases}
  • 其核心思想并不只是 “给负半轴一点梯度”:

    • 以指数形式组织负区间,使得负区间的输出有界且平滑
    • 使激活输出的均值更接近 0,输出方差更稳定
    • 小负输入会被 “软压缩”,而不是简单缩放
    • 降低了 ReLU 中 “全部非负 → 偏移累积” 的问题

SELU

  • SELU 定义为对 ELU 的线性缩放:

    SELU(x)=λ{x,x>0α(ex−1),x≤0\text{SELU}(x) = \lambda \begin {cases} x, & x > 0 \\ \alpha (e^x - 1), & x \le 0 \end {cases}
    • α,λ\alpha, \lambda 并非可调超参数,而是通过固定点分析精确选定
  • 核心思想:

    • 如果输入分布的均值和方差略有偏移
    • 经过 SELU + 随机连接后
    • 输出会被自动拉回到一个稳定区间,从而提高统计稳定性
  • 这意味着激活函数本身承担了 “归一化” 的角色,在特定条件下(全连接、特定初始化、无 BN),可以不使用 BatchNorm

GELU

  • GELU(Gaussian Error Linear Unit)的定义:

    GELU(x)=x⋅Φ(x)\text{GELU}(x) = x \cdot \Phi (x)
  • 其中 Φ(x)\Phi (x) 是标准正态分布的累积分布函数:

    Φ(x)=∫−∞x12πe−t2/2 dt\Phi (x) = \int_{-\infty}^x \frac {1}{\sqrt {2\pi}} e^{-t^2/2} \, dt
  • 常用近似形式(便于计算):

    GELU(x)≈0.5x(1+tanh⁡ ⁣(2π(x+0.044715x3)))\text{GELU}(x) \approx 0.5x \left (1 + \tanh\!\left (\sqrt {\frac {2}{\pi}} (x + 0.044715 x^3)\right)\right)
  • GELU 的核心思想转变 —— 解决 “表示是否足够细腻、是否与概率建模假设一致” 的问题

    • ReLU 系列的问题设定是:“这个神经元要不要被激活?”
    • GELU 的问题设定是:“这个神经元以多大概率被保留下来?”
    • 具体解释:
      • 假设输入 xx 是带噪声的(近似高斯)
      • Φ(x)\Phi (x) 表示:xx 在噪声扰动下仍为正的概率
      • 激活输出: x⋅P(被保留)x \cdot P (\text{被保留})
    • 因此小正值不会被硬性通过,小负值也不会被直接抹零,其激活是连续、概率化、平滑的
  • 为什么 GELU 特别适合 Transformer?

    • Transformer 的中间表示(尤其是 FFN 层):维度极高,其表示接近连续分布,对 “细微差异” 高度敏感
    • 而 GELU 的优势正好对应这些特性:
      • 无硬阈值 → 梯度始终连续,使得梯度更为平滑
      • 小信号被 “部分保留” 而非直接抹除,表示能力更细腻
      • 不会引入明显分布偏移,与 LayerNorm、残差结构天然兼容
    • 因此 GELU 成为 BERT、GPT、ViT 等 Transformer 架构中的默认激活函数
  • 从 ReLU 到 ELU / SELU,再到 GELU,是从几何可导性 → 统计稳定性 → 表示与建模假设的一致性的演变过程

这篇文档有帮助吗?

On this page

页面信息