一、Swish 函数
Swish 函数是一种较新的激活函数,由 Ramachandran 等人在 2017 年提出,其数学表达式通常为

其中 σ(x) 是 Sigmoid 函数(Logistic 函数)。
如何理解 Swish 函数
-
自门控特性
- Swish 函数可以看作是对输入 x 进行"自门控"的机制:输入 x 乘以其经过 Sigmoid 函数的值,相当于让 x 自己决定通过的比例。
- 当 x 较大时,σ(x) 趋近于1,此时 Swish 函数近似为 x;当 x 较小时,σ(x) 会使 x 被适当缩放,从而调整激活值。
-
平滑与非单调性
- Swish 函数是一条平滑、连续且处处可微的曲线。与 ReLU 等激活函数相比,它没有突然的断点。
- 同时,Swish 函数是非单调的,即在某些区间内函数值可能先增加后减少,这种非单调性有时能够让网络学习到更复杂的特征表示。
-
改进训练效果
- 研究表明,在某些深度学习任务中,使用 Swish 作为激活函数可以比使用 ReLU 带来更好的训练性能和泛化效果。
- 这种性能提升可能归因于其平滑和非单调的特性,使得梯度传播更加稳定,降低梯度消失或爆炸的风险(参考下面对应的解释)。
-
扩展形式
- Swish 函数有一个扩展形式: Swish(x)=x⋅σ(βx), 其中 β是一个可调参数,甚至可以作为可学习参数。不同的 β值会影响激活函数在负区间和正区间的斜率,从而让模型更灵活地适应不同的数据分布。
- 其中 𝜎(⋅) 为 Logistic 函数,𝛽 为可学习的参数或一个固定超参数。𝜎(⋅) ∈ (0, 1) 可 以看作一种软性的门控机制。当 𝜎(𝛽𝑥) 接近于 1 时,门处于"开"状态,激活函数的 输出近似于 𝑥 本身;当 𝜎(𝛽𝑥) 接近于 0 时,门的状态为"关",激活函数的输出近似 于0。
Swish 函数的图示如下:

当𝛽 = 0时,Swish函数变成线性函数𝑥/2;
当𝛽 = 1时,Swish函数在𝑥 > 0 时近似线性,在𝑥 < 0时近似饱和,同时具有一定的非单调性;
当𝛽 → +∞时,𝜎(𝛽𝑥) 趋向于离散的 0-1 函数,Swish 函数近似为 ReLU 函数。
因此,Swish 函数可以看作线性函数和 ReLU 函数之间的非线性插值函数,其程度由参数 𝛽 控制。
举例说明
例子:比较 Swish 与 ReLU 在激活上的差异
假设某神经元计算出的线性组合 x 为 -2, -1, 0, 1, 2。
-
ReLU 的输出:
- 当 x = -2 或 -1 时,输出0;
- 当 x = 0 时,输出0;
- 当 x = 1 时,输出1;
- 当 x = 2 时,输出2。
-
Swish 的输出(假设 β=1):
- 当 x = -2 时,σ(−2)≈0.12,输出 −2×0.12≈−0.24;
- 当 x = -1 时,σ(−1)≈0.27,输出 −1×0.27≈−0.27;
- 当 x = 0 时,σ(0)=0.5,输出 0×0.5=0;
- 当 x = 1 时,σ(1)≈0.73,输出 1×0.73≈0.731;
- 当 x = 2 时,σ(2)≈0.88,输出 2×0.88≈1.762 。
从上面可以看出,与 ReLU 相比,Swish 函数在负数区域并不是完全为0,而是保留了负值(尽管较小),而在正数区域输出接近于线性。这样的行为使得网络在训练过程中能保留更多信息,梯度传播更平滑。
Swish 函数将输入 x 与 Sigmoid 函数 σ(x) 的输出相乘,实现了一个平滑且非单调的激活函数。这种设计不仅允许网络在负区域保留部分信息,还提供了平滑的梯度,有助于稳定训练过程并提高模型的泛化能力。其扩展形式中引入的参数 β 进一步增强了模型适应数据的灵活性。
梯度消失或爆炸的风险
梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)是深度神经网络训练中常见的两大问题,主要与反向传播过程中的梯度计算方式(链式法则)有关。它们会导致模型无法有效学习或训练不稳定。以下是它们的定义、原因及影响:
1. 梯度消失(Vanishing Gradient)
-
定义:在反向传播过程中,梯度(损失函数对参数的导数)逐层传递时逐渐减小,甚至趋近于零,导致浅层网络的权重几乎无法更新。
-
原因:
-
链式法则的连乘效应:梯度通过反向传播逐层计算时,每一层的梯度都会被前一层的梯度相乘。如果每层的梯度值小于1,多次连乘后会指数级趋近于零。
-
激活函数的选择:例如 Sigmoid 或 Tanh 函数在输入较大时导数接近零(饱和区),导致梯度消失。
-
-
后果:
-
浅层网络参数几乎不更新,模型无法学习底层特征。
-
模型收敛缓慢或完全停止训练,性能显著下降。
-
2. 梯度爆炸(Exploding Gradient)
-
定义 :梯度在反向传播过程中逐层增大,最终导致权重更新幅度过大,甚至数值溢出(如
NaN
)。 -
原因:
-
链式法则的连乘效应:如果每层的梯度值大于1,多次连乘后会指数级增长。
-
权重初始化不当:例如初始权重过大,或网络层数过深。
-
-
后果:
-
参数更新不稳定,损失剧烈震荡甚至发散。
-
权重值变为
NaN
,训练完全失败。
-
3. 为什么梯度问题危害大?
-
深层网络更脆弱:网络层数越多,梯度连乘的效应越明显,问题越严重。
-
影响模型表达能力:梯度消失导致浅层无法学习,深层网络退化为浅层网络。
-
训练效率低下:需要更复杂的调参(如学习率调整)或更长的训练时间。
4. 常见解决方案
-
激活函数改进:
- 使用 ReLU、Leaky ReLU 等非饱和激活函数,避免梯度消失。
-
权重初始化:
- 使用 Xavier初始化 或 He初始化,根据激活函数调整初始权重的分布。
-
归一化技术:
- 批量归一化(Batch Normalization):缓解梯度对参数尺度的依赖。
-
残差结构(ResNet):
- 通过跳跃连接(Skip Connection)绕过梯度消失的层,直接传递梯度。
-
梯度裁剪(Gradient Clipping):
- 对过大的梯度设定阈值,防止梯度爆炸(常用于RNN)。
-
优化算法:
- 使用 Adam、RMSProp 等自适应优化器,动态调整学习率。
-
网络结构设计:
- 在RNN中使用 LSTM 或 GRU,通过门控机制缓解梯度问题。
5.示例说明
-
梯度消失:一个10层的全连接网络使用 Sigmoid 激活函数,反向传播时梯度可能在第5层之后趋近于零,导致前5层无法更新。
-
梯度爆炸:一个未做梯度裁剪的RNN模型,在长序列训练时梯度可能迅速增大,导致参数溢出。
二、GELU 函数
GELU(Gaussian Error Linear Unit,高斯误差线性单元)也是一种通过门控机制来调整其输出值的激活函数,和 Swish 函数比较类似。
GELU(Gaussian Error Linear Unit,正态误差线性单元)是一种激活函数,它将输入值 x 与 x 取正态累积分布函数(CDF)的值相乘,从而实现非线性变换。其数学表达式通常写为:

其中,Φ(x) 是标准正态分布的累积分布函数,表示一个标准正态随机变量小于 x 的概率。
𝜇, 𝜎 为超参数,一般设 𝜇 = 0, 𝜎 = 1 即可。由于高斯分布的累积分布函数为 S 型函数,因此 GELU 函数可 以用 Tanh 函数或 Logistic 函数来近似,
为了便于计算,实际应用中常使用以下近似公式:

或 GELU(𝑥) ≈ 𝑥𝜎(1.702𝑥).
当使用 Logistic 函数来近似时,GELU 相当于一种特殊的 Swish 函数。
(参考下面第三部分,概率密度函数和累积分布函数的概念)
如何理解 GELU 函数
-
概率视角
- GELU 函数的核心思想是"概率性激活":将输入 x 与其"被激活"的概率(由正态累积分布 Φ(x) 表示)相乘。这意味着,一个神经元的激活不仅依赖于输入的大小,还依赖于该输入在统计意义上有多大可能被视为"正向贡献"。
-
平滑性和非线性
- 与 ReLU 相比,GELU 是一种平滑且处处可微的函数,没有硬性截断,从而有助于梯度更平稳地传递,降低梯度消失的风险。
- 同时,GELU 是非单调的(在某些区间内可能出现非单调性),这种特性使得网络可以捕捉更复杂的模式。
-
实际应用中的优势
- 在许多自然语言处理和计算机视觉任务中,GELU 函数表现出比 ReLU 更好的性能。例如,BERT 和其他 Transformer 模型中就使用了 GELU 作为激活函数,因为它能更细腻地调节信息流。
举例说明
例子:Transformer 中的 GELU
在 Transformer 模型中,隐藏层通常使用 GELU 激活函数来处理输入。假设某层神经元计算得到一个值 x:
- 当 x 较大时,Φ(x) 接近于1,因此 GELU 输出近似于 x;
- 当 x 较小或为负时,Φ(x) 会相应较小,从而使输出趋于较小的值或接近于0。
这种设计允许模型在处理不同尺度的输入时,能根据统计概率自动调节激活程度,从而捕捉更多细微特征,提高模型的表现。
GELU 函数通过将输入与正态累积分布的概率相乘,实现了一种基于概率视角的平滑激活机制。它既能保留输入的线性特性,又能通过平滑非线性变换提供更稳定的梯度传递和更强的表达能力,这使得它在现代深度学习模型中(如 Transformer)得到广泛应用。
三、附加:概率密度函数、累积分布函数的区别和联系
概率密度函数(PDF)和累积分布函数(CDF)是描述随机变量分布的重要工具,它们既有区别又密切相关:
区别
-
定义不同
-
概率密度函数(PDF) :
适用于连续随机变量。它描述了随机变量在某个取值附近出现的"相对可能性"。注意,单个点的 PDF 值本身不是概率,必须通过积分计算某个区间内的概率。例如,对于连续随机变量 X,其 PDF 表示为 f(x),某个区间 [a, b] 内的概率为
-
累积分布函数(CDF) :
表示随机变量小于或等于某个特定值的概率。对于随机变量 X,其 CDF 表示为 F(x),定义为
CDF 对于连续和离散随机变量都适用,且其取值范围在 [0, 1]。
-
-
数值与物理意义
-
PDF :
描述的是相对密度,给出的是"密度"而不是直接的概率值。比如,f(x) 的值可能大于1,但只要积分结果在某个区间内小于1,就表示该区间内的概率。
-
CDF :
直接反映概率。它是一个从 −∞到 +∞单调非减的函数,且满足 F(−∞)=0 和 F(+∞)=1。
-
联系
-
数学关系
对于连续随机变量,CDF 和 PDF 之间存在密切联系:
- 积分关系 :
CDF 是 PDF 的积分,即 - 微分关系 :
如果 CDF F(x) 在 x 处可导,那么其导数就是 PDF:
- 积分关系 :
-
用途上的互补
- 使用 PDF,我们可以分析随机变量在某个区间的"密度"或"强度",并通过积分得到区间概率。
- 使用 CDF,我们可以直接了解随机变量在某个值以下的累积概率,这在统计推断和概率计算中非常直接和方便。
举例说明
例子:标准正态分布

从这个例子可以看出,CDF 给出了累积概率,而 PDF 则描述了概率"分布的浓度"。
总结
- 概率密度函数(PDF):描述连续随机变量在各个点附近的相对概率密度,需要通过积分才能得到具体区间的概率。
- 累积分布函数(CDF):直接表示随机变量小于或等于某个值的累计概率,具有直观的概率意义,并且可以通过积分(或求导)与 PDF 互相转换。
理解这两者的区别和联系对于掌握概率分布、进行概率计算以及进行统计推断非常重要。