激活函数#
术语解释#
激活函数(Activation Function) 是深度学习模型中至关重要的组成部分,主要用于对每一层网络输出的线性组合结果进行非线性变换。
在神经网络中,每一层的输出 $z = Wx + b$ 是输入的线性组合。激活函数 $g(\cdot)$ 作用于 $z$,得到该层的最终激活值 $a = g(z)$。 它充当了神经元是否被“激活”的阈值控制单元,模仿生物神经元在达到阈电位时引起离子流动并传递信号的过程。
换句话说,如果没有激活函数函数,那么一个网络无论有多少个线性层,本质上都只等价于一次线性变换。关于这部分内容的详细介绍,可以参见文章「3.1.6 从线性输入到非线性变换」。
出现动机#
-
打破线性限制:如果没有激活函数,多层神经网络在数学上等价于单层线性模型。因为线性的线性组合仍是线性,无法增加模型的复杂度。
-
引入非线性表达能力:非线性变换使得模型能够拟合复杂的现实规律(如解决逻辑上的异或 XOR 问题)。
-
深度特征提取:激活函数与多层结构的配合,使得网络能从原始输入中提取出日益抽象且高级的特征表示。
优点缺点#
常见激活函数的优缺点对比。
Sigmoid 函数#
公式:$g(x) = \frac{1}{1 + e^{-x}}$

优点:连续光滑且处处可导;能将输出映射到 $(0, 1)$ 区间,常用于二分类任务的概率表示。
缺点:梯度消失问题。当输入过大或过小时,函数进入饱和区,梯度趋近于 0,导致参数更新缓慢甚至停止。此外,包含求幂运算,计算开销较大。
Tanh 函数(双曲正切)#
公式:$g(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$。

优点:输出范围为 $(-1, 1)$,具有零中心化特性;相比 Sigmoid,其梯度范围 $(0, 1]$ 更大,训练速度更快。
缺点:在两端依然存在饱和区,容易引起梯度消失。
ReLU 函数(线性修正单元)#
公式:$g(x) = \max(0, x)$

优点:计算效率极高(仅需加法和比较);在 $x > 0$ 时梯度恒为 1,很大程度上缓解了梯度消失问题,显著加速网络收敛。
缺点:“死神经元”现象。在 $x < 0$ 时梯度始终为 0,可能导致部分神经元永远无法被激活更新。
LeakyReLU 函数#
公式:$g(x) = \max(0, x) + \gamma \min(0, x)$。

优点:通过在 $x < 0$ 区域保留一个微小的梯度 $\gamma$,解决了 ReLU 神经元“死亡”的问题。
Swish 函数#
公式:$f(x) = x \cdot \text{sigmoid}(\beta x)$。
优点:具备非单调性(在 $x < 0$ 时先降后升),性能通常略好于 ReLU;$\beta$ 可作为训练参数,让网络根据不同特征图自动调整梯度尺度。
缺点:计算比 ReLU 复杂,包含指数和乘法运算。
更多相关内容可参见「SwiGLU 激活函数原理与 PyTorch 实现:详解为何 LLaMA/DeepSeek 用它取代 ReLU」。
SwiGLU(现代大模型标配)#
动机:专门为提升 Transformer 架构中前馈网络(FFN)的性能而构造。
优点:在 LLaMA、DeepSeek 等大模型中表现出极佳的效果,被认为比标准 ReLU 更能提升模型表达能力。
缺点:参数量增加。相比传统 FFN,SwiGLU 结构需要三个权重矩阵而非两个。其有效性在理论上难以解释,甚至被作者调侃为“神的恩赐”。