Activation Functions in Deep Learning.

激活函数(activation function)是神经网络中重要的非线性来源。它的形式看起来微不足道(通常只是一个作用在标量上的一元函数),但它决定了网络能否被优化、梯度能否传播、表示能力有多强,甚至决定了模型能否部署到低精度硬件上。

本文首先讨论激活函数的意义与设计准则,然后按设计思路把主流激活函数组织成不同族系统梳理,并在最后给出一份速查表和实践选型建议。

  1. 激活函数的意义
  2. 激活函数的设计准则
  3. 常见的激活函数
    • 3.1 S型激活函数
    • 3.2 ReLU族激活函数
    • 3.3 自动搜索的激活函数
    • 3.4 周期性激活函数
    • 3.5 通用近似激活函数
    • 3.6 上下文相关的激活函数
    • 3.7 门控激活函数
  4. 速查表与选型建议

符号约定:全文用$\sigma(\cdot)$专门表示Sigmoid函数$\sigma(x)=1/(1+e^{-x})$;用$s$表示光滑化核的宽度;用$\mathbb{E}[\cdot]$与$\text{Var}[\cdot]$表示期望与方差。

📕 综述可参考:

1. 激活函数的意义

(1) 从生物学的角度理解激活函数

早期激活函数的设计受到生物神经网络中神经元的启发,即对神经元进行简单的建模。

大脑中的神经元(neuron)通过树突(dendrites)接收其他神经元的输入信号,在胞体中进行信号的处理,通过轴突(axon)分发信号。当神经元中的信号累积达到一定阈值时产生电脉冲将信号输出,这个阈值称为点火率(firing rate)

因此激活函数最初的作用是模拟“信号累积达到阈值并产生电脉冲”这一过程。

值得一提的是,这种对神经元的建模是非常粗糙(coarse)的:真实神经元有很多不同的种类;突触是一个复杂的非线性动态系统;树突进行的是复杂的非线性运算;轴突的输出时刻(而非仅仅输出强度)也携带信息。因此近些年来神经网络中神经元的生物可解释性(biological plausibility)被逐渐弱化,激活函数的设计更多地由优化性质、表示能力和计算效率驱动。

(2) 从非线性的角度理解激活函数

在神经网络中,使用激活函数能够为网络引入非线性,增强网络的表示能力。当不使用激活函数时(或激活函数为恒等函数 identity function),多层神经网络会退化为单层网络:

\[\begin{aligned} W_2\left(W_1x+b_1\right)+b_2 &= W_2W_1x+W_2b_1+b_2 \\ &= \left(W_2W_1\right)x+\left(W_2b_1+b_2\right) \\ &= W'x+b' \end{aligned}\]

即无论堆叠多少层,整个网络仍然只能表达输入的仿射变换。通过引入非线性的激活函数,能够为神经网络带来非线性表示能力。

(3) 从通用近似的角度理解激活函数

通用近似定理(universal approximation theorem)指出:只要激活函数是非常数、有界、单调递增的连续函数(后续工作把条件放宽到非多项式函数),具有一个隐藏层的前馈网络就可以在紧集上以任意精度逼近任意连续函数。

这个定理说明了两件事:其一,激活函数的“非线性”本身就是网络表示能力的来源;其二,几乎任何非线性函数都可以作为激活函数,因此激活函数的设计空间极大。这也解释了为什么激活函数的研究会分化出如此多的路线:真正的约束不来自表示能力,而来自可优化性计算效率

2. 激活函数的设计准则

既然理论上任何非线性函数都可以作为激活函数,那么在实践中选择或设计激活函数时,需要考虑以下性质。这七条准则也构成了后文各族激活函数的设计动机。

⚪ 准则1:连续可导

激活函数需要参与反向传播过程,因此需要计算激活函数的导数,这就要求激活函数连续可导

例如ReLU族激活函数在$x=0$处不可导。处理方式有两种:既可以人工指定该点处的梯度(工程实现中的常见做法),也可以选用形状接近的连续函数进行近似,如用Softplus替代ReLU、用CELU替代ELU

事实上,“为非光滑激活函数寻找光滑近似”后来发展成了一条独立的研究路线(见3.5节的ACONSMUSAU)。更多关于不可导函数光滑化的内容可参考光滑化方法

⚪ 准则2:计算量小

激活函数会作用在网络的每一个激活值上,调用次数极多,因此应具有尽可能小的计算量。通常线性运算(如ReLU族)比指数运算(如S型曲线)具有更低的计算量;而在指数运算与平方根运算之间,平方根通常更快(ISRLU的论文报告在Intel Xeon Platinum 8160上逆平方根比指数运算快约$2.2$倍)。

降低计算量的常见手段包括:

在低精度部署场景下,还需要考虑激活函数的值域是否适合量化(比如ReLU6)。

⚪ 准则3:没有饱和区

饱和是指导数很接近$0$。若激活函数存在饱和区,则会使反向传播的梯度接近$0$,从而导致梯度消失(gradient vanishing)现象。

早期的激活函数通常使用S型函数,如SigmoidTanh;这类函数会把输出挤压到一个有界区域内,两端不可避免地产生饱和区,因此也被称为squashing function

ReLU等无上界、有下界的激活函数,在正半轴没有饱和区,显著减缓了梯度消失现象;但在负半轴会置零(产生dead ReLU现象,即梯度恒为$0$阻断了反向传播)或趋于饱和。后续的LeakyReLUPReLUELU等改进都是围绕负半轴展开的。

⚪ 准则4:没有偏置偏移

若激活函数的输出不是zero-centered的,会使得后一层神经元的输入产生偏置偏移(bias shift),从而减慢梯度下降的收敛速度。

对于某一层神经元的计算,假设具有两个参数$w_1,w_2$,则$y=f(w_1x_1+w_2x_2+b)$,反向传播时两个参数的梯度为:

\[\begin{aligned} \nabla_{w_1}L &= \frac{\partial L}{\partial w_1} = \frac{\partial L}{\partial y}\frac{\partial y}{\partial w_1} = \nabla_yL \cdot f' \cdot x_1 \\ \nabla_{w_2}L &= \frac{\partial L}{\partial w_2} = \frac{\partial L}{\partial y}\frac{\partial y}{\partial w_2} = \nabla_yL \cdot f' \cdot x_2 \end{aligned}\]

若上一层的激活函数使得该层神经元的输入值恒大于$0$,则$\text{sign}(\nabla_{w_1}L)=\text{sign}(\nabla_{w_2}L)$,梯度只能沿着$w_1,w_2$同时增大或同时减小的方向更新,参数更新路径呈Z字形,从而减慢收敛速度。

当激活函数的值域同时包含正值和负值时,能够有效缓解偏置偏移现象。这是Tanh优于SigmoidELU族优于ReLU的重要原因之一。

⚪ 准则5:具有生物可解释性

生物神经元通常具有单侧抑制(即输入大于阈值才会被激活)、宽兴奋边界(即输出范围较宽,如$[0,+\infty)$)、稀疏激活(即同时被激活的神经元较少)等特性。ReLU恰好同时满足这三条,这也是它在提出时被广泛接受的原因之一。

不过后续研究(如RReLU)通过实验表明,稀疏性并不是激活函数性能的决定性因素。因此ReLU之后的激活函数在设计时逐渐淡化了生物可解释性。

⚪ 准则6:能够提取上下文信息

通常的激活函数是标量函数,如ReLU对神经元输入的每一个标量值分别独立计算。如果能够将激活函数拓展为多输入函数,则能够捕捉输入的上下文信息,增强神经元的表达能力。

某个特征位置的上下文信息既可以从所有输入特征中获取(如maxoutDynamic ReLU),也可以在该特征的一个邻域上获取(如Dynamic Shift-MaxFReLU)。详见3.6节。

⚪ 准则7:具有通用近似性

直观上,神经网络每一层的每个神经元都应具有不同的激活曲线。可以设计一些由参数控制的通用近似激活函数,使得每个神经元学习不同的激活曲线,这些激活参数与网络权重一起参与反向传播。

设计通用近似激活函数主要有两种思路,详见3.5节:

3. 常见的激活函数

本节把主流激活函数分成七个族。前两族(S型、ReLU族)是手工设计的固定形状函数,构成了深度学习早期实践中的主流;后五族分别代表五条不同的改进思路:用搜索代替手工设计、换用周期性的函数基、让激活曲线可学习、让激活函数看到上下文、以及把激活函数升级为一种网络结构。

3.1 S型激活函数

S型激活函数是形如S型曲线(sigmoidal curve)的一类激活函数,其特点是单调有界、处处光滑,因此天然满足准则1;但由于有界,两端必然饱和,违背准则3。这类函数是神经网络早期的主流选择,如今主要用于门控机制概率输出

⚪ Step:阶跃函数

表达式 函数图像
\(\text{Step}(x) = \begin{cases} 1, & x\geq 0 \\ 0, & x<0 \end{cases}\)

阶跃函数(Heaviside函数)直接对应生物神经元“达到阈值即点火”的建模,是感知机(perceptron)使用的激活函数。但它在$x=0$处不连续、其余各处导数恒为$0$,无法用于反向传播,因此只有历史意义。后续的S型函数都可以看作阶跃函数的光滑近似。

⚪ Sigmoid

表达式 函数图像
\(\begin{aligned} \text{Sigmoid}(x)&=\sigma(x)=\frac{1}{1+e^{-x}} \\ \sigma'(x)&=\sigma(x)\left(1-\sigma(x)\right) \end{aligned}\)

Sigmoidlogistic函数)把实数域压缩到$(0,1)$,因此可以解释为概率,至今仍是二分类输出层和门控单元的标准选择。它的导数具有优美的自表达形式,这也是它在早期被广泛使用的原因之一。

Sigmoid的主要缺点:

⚪ Tanh

表达式 函数图像
\(\begin{aligned} \tanh(x)&=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} = 2\sigma(2x)-1 \\ \tanh'(x)&=1-\tanh^2(x) \end{aligned}\)

TanhSigmoid的缩放平移版本,值域为$(-1,1)$,因此是zero-centered的,缓解了偏置偏移;其导数在原点处取到$1$,梯度衰减问题也弱于Sigmoid。但它仍然两端饱和、仍然包含指数运算。在LSTM/GRU中,Tanh用于生成候选状态,Sigmoid用于生成门控信号。

⚪ HardSigmoid 与 HardTanh:分段线性近似

表达式 函数图像
\(\text{HardSigmoid}(x)=\begin{cases} 1, & x\geq 1 \\ (x+1)/2, & -1<x<1 \\ 0, & x\leq -1 \end{cases}\)
\(\text{HardTanh}(x)=\begin{cases} 1, & x>1 \\ x, & -1\leq x\leq 1 \\ -1, & x<-1 \end{cases}\)

SigmoidTanh在原点处作一阶Taylor展开并把结果截断到值域内,即可得到分段线性的HardSigmoidHardTanh。它们只需加法、乘法和截断,完全避免了指数运算,是移动端和量化部署的常见替代品;代价是在$x=\pm 1$处不可导,且在$|x|>1$时梯度严格为$0$(饱和区比原函数更“硬”)。

⚪ ISRU:逆平方根单元

表达式 函数图像
\(\begin{aligned} \text{ISRU}(x)&= \frac{x}{\sqrt{1 + \alpha x^2}} \\ \text{ISRU}'(x)&=\left(\frac{1}{\sqrt{1 + \alpha x^2}}\right)^3 \end{aligned}\)

ISRU(inverse square root unit)代数运算近似Tanh:它的曲线形状与TanhSigmoid相似,但只需一次逆平方根运算。相比HardTanh这种分段线性近似,ISRU保持了处处光滑;相比Tanh,它的计算显著更快。作者建议在LSTM/GRU中用ISRU替换TanhSigmoid以加速循环网络。超参数$\alpha$控制曲线的饱和速度。

⚪ Softsign:多项式饱和的Tanh替代

表达式 函数图像
\(\begin{aligned} \text{Softsign}(x)&= \frac{x}{1 + \lvert x\rvert} \\ \text{Softsign}'(x)&=\frac{1}{(1+\lvert x\rvert)^2} \end{aligned}\)

Softsign是一个更早的代数型S型函数。它与ISRU属于同一思路:用有理式代替指数式。

SoftsignTanh最本质的差别在饱和速度Tanh的尾部以$e^{-2x}$指数衰减,而Softsign以$1/x$多项式衰减,因此其导数在远处按$1/x^2$而非指数级衰减:尾部“更肥”,梯度消失来得更晚。两者在原点处的导数都等于$1$,但Softsign因含$|x|$而在原点处二阶不可导(一阶导数连续,二阶导数有跳变)。它在现代网络中很少使用,主要作为Tanh的廉价替代出现在早期工作和一些序列模型中。

3.2 ReLU族激活函数

ReLU族是当前最主流的激活函数家族。它们的共同点是:正半轴保持(近似)恒等映射,从而在正半轴不饱和、梯度不衰减;差别主要在于如何处理负半轴,以及如何处理原点处的不可导。近年还出现了一条相反的思路:让正半轴增长得比线性更快。

(1) ReLU 及其光滑与有界变体

⚪ ReLU

表达式 函数图像
\(\text{ReLU}(x)=\max(x,0)=\begin{cases} x, & x\geq 0 \\ 0, & x<0 \end{cases}\)

ReLU(rectified linear unit)是深度学习中最重要的激活函数。它的优点几乎覆盖了准则2、3、5:

它的缺点集中在负半轴与原点:

⚪ Softplus:ReLU的光滑近似

表达式 函数图像
\(\text{Softplus}(x)=\ln\left(1+e^x\right) = \int_{-\infty}^{x}\sigma(t)dt\)

SoftplusReLU处处可导的光滑上界,其导数恰为Sigmoid。但它牺牲了ReLU的两大优势:输出恒大于$0$(失去了稀疏性),且引入了指数与对数运算(计算量大)。因此实践中Softplus很少直接用作激活函数,更多用于约束参数为正(如输出方差)。

⚪ Squareplus:Softplus的代数近似

表达式 函数图像
\(\text{Squareplus}(x;b)=\frac{1}{2}\left(x+\sqrt{x^2+b}\right)\)

Squareplus只用加法、乘法和平方根实现了与Softplus几乎相同的曲线。超参数$b$控制函数在$x=0$处的弯曲程度,其一阶、二阶导数为:

\[\begin{aligned} \text{Squareplus}'(x;b) &= \frac{1}{2}\left(1+\frac{x}{\sqrt{x^2+b}}\right) \\ \text{Squareplus}''(x;b) &= \frac{b}{2\left(x^2+b\right)^{3/2}} \end{aligned}\]

两者的对应关系相当整齐:Softplus的一阶导数是S型曲线(logistic分布的CDF),二阶导数是logistic分布的概率密度;而Squareplus的一阶导数是代数S型曲线,二阶导数是student-t分布的概率密度。

当$b=0$时Squareplus精确退化为ReLU

\[\text{Squareplus}(x;0) =\frac{x+|x|}{2} = \text{ReLU}(x)\]

为了确定与Softplus最接近的$b$,可以把问题建模成min-max形式,即最小化两个函数在全局的最大差异:

\[\mathop{\min}_{b} \mathop{\max}_{x} \left|\frac{1}{2}\left(x+\sqrt{x^2+b}\right)-\ln\left(1+e^x\right)\right|\]

上式可以通过非线性规划求解:

import numpy as np
from scipy.optimize import minimize

def f(x, b):
    return np.abs(0.5*(x+np.sqrt(x**2+b))-np.log(1+np.exp(x)))

def g(b):
    return np.max([f(x, b) for x in np.arange(-2, 4, 0.001)])

options = {'xtol': 1e-10, 'ftol': 1e-10, 'maxiter': 100000}
result = minimize(g, 0, method='Powell', options=options)
print(result.x) # [1.52382104]

注意到SquareplusSoftplus都是ReLU的上界;如果进一步希望SquareplusSoftplus的上界,则应有:

\[\frac{1}{2}\left(x+\sqrt{x^2+b}\right) \geq \ln\left(1+e^x\right) \\ \downarrow \\ b \geq 4\ln\left(1+e^x\right)\left[\ln\left(1+e^x\right)-x\right]\]

右式在$x=0$处取极大值,因此应有$b\geq 4 \ln^2 2$。

此外,当输入值较大时Softplus的数值稳定性较差($e^x$会溢出)而偏离ReLUSquareplus则不存在这一问题:

实测在CPUSquareplusSoftplus快约$6$倍、与ReLU相当;在GPU上由于受显存带宽限制,加速并不明显。因此Squareplus是计算资源受限场景下Softplus的理想替代品。

⚪ ReLU6:为低精度部署设计

表达式 函数图像
\(\text{ReLU6}(x)=\min\left(\max(x,0),6\right) =\begin{cases} 6, & x\geq 6 \\ x, & 0\leq x<6 \\ 0, & x<0 \end{cases}\)

ReLU6(由MobileNet引入)把ReLU的最大输出限制为$6$。这样做并非为了优化性质,而是为了量化:在移动端使用低精度数据类型(float16/int8)时,无上界的激活值可能分布在一个很大的动态范围内,导致量化时精度损失严重;限定上界后可以获得更好的数值分辨率。上界取$6$是经验选择,它足够大以至于不损害表示能力,又足够小以适配定点表示。

(2) 修正负半轴斜率

⚪ LeakyReLU

表达式 函数图像
\(\text{LeakyReLU}(x)=\max(x,0.01x)=\begin{cases} x, & x\geq 0 \\ 0.01x, & x<0 \end{cases}\)

LeakyReLU为负半轴引入一个很小的固定斜率,使得负输入的梯度不再为$0$,从而根治了dead ReLU问题:即使神经元当前输出为负,它仍能继续接收梯度并有机会“复活”。

LeakyReLU的论文还给出了一组有价值的分析:作者定义激活的稀疏性(sparsity)为激活值为$0$的比例,离散性(disperseness)为不同神经元激活概率的差异程度。实验发现,使用ReLULeakyReLU时神经元激活概率的标准差约为$0.04$,而使用Tanh时约为$0.14$。也就是说,ReLU族激活函数使得各个神经元的激活频率更加均匀,避免了少数神经元长期主导表示,这被认为是ReLU族激活函数优于S型函数的一个重要原因。

⚪ PReLU:可学习的负半轴斜率

表达式 函数图像
\(\begin{aligned} \text{PReLU}(x)&=\max(x,\alpha x) =\begin{cases} x, & x\geq 0 \\ \alpha x, & x<0 \end{cases} \\ \frac{\partial \text{PReLU}(x)}{\partial \alpha} &= \begin{cases} 0, & x\geq 0 \\ x, & x<0 \end{cases} \end{aligned}\)

PReLU(parametric ReLU)LeakyReLU中固定的斜率$\alpha$变成可学习参数,与网络权重一起用反向传播更新。$\alpha$可以按层共享,也可以按通道独立(channel-wise,实践中更常用,额外参数量仅等于通道数,可忽略)。

从几何上看,PReLU可以写成$y=\max\left(\alpha(Wx+b),Wx+b\right)$的形式:网络学到的超平面把空间分成两半,$\alpha$控制了负侧空间被压缩的程度。$\alpha=0$对应ReLU(负侧完全压扁到$0$),$\alpha=1$对应线性映射(不压缩),因此$\alpha$实际上在“非线性强度”这一维度上给了网络自由度。

需要注意,PReLU的论文同时提出了配套的Kaiming初始化,两者是一起工作的:使用整流类激活函数时,为保持前向传播中激活值方差不变,第$l$层的权重方差应取$\text{Var}\left[w^{(l)}\right]=2/d_{l-1}$($d_{l-1}$为输入神经元个数);若使用PReLU/LeakyReLU,则应修正为$\text{Var}\left[w^{(l)}\right]=2/\left[\left(\alpha^2+1\right)d_{l-1}\right]$。推导详见参数初始化部分。

⚪ RReLU:随机采样的负半轴斜率

表达式 函数图像
\(\text{RReLU}(x)=\max(x,\alpha x), \quad \begin{cases} \alpha \sim U(l,u), & \text{during training} \\ \alpha = \dfrac{l+u}{2}, & \text{during test} \end{cases}\)

RReLU(randomized ReLU)在训练阶段从均匀分布中随机采样负半轴斜率,测试阶段则使用其期望。这与Dropout的“训练加噪、测试取期望”思想完全一致,因此RReLU本质上是一种正则化手段,在小数据集上尤其有效。

这篇论文的另一项贡献是通过系统的对比实验说明:LeakyReLU/PReLU/RReLU普遍优于ReLU,因此稀疏性并不是整流类激活函数性能的关键因素;恰恰相反,允许负值通过反而更好。这一结论直接推动了后续ELUGELUSwish等允许负输出的激活函数。

⚪ CReLU:拼接正负两路整流

表达式 函数图像
\(\text{CReLU}(x)= \left[\text{ReLU}(x), \text{ReLU}(-x)\right]\)

前面几种方法都试图给负半轴一个“小一点”的输出,CReLU则换了一个角度:既然负半轴的信息有用,为什么不干脆把它完整保留

作者的出发点是一个实验观察:卷积网络(尤其是低层)的滤波器往往成对出现且方向近似相反——同一组卷积核中存在大量负相关的“相位对”$w$与$-w$。这意味着网络实际上在用两个滤波器学习同一个模式的正负两个相位,而ReLU又把其中一半的响应抹成$0$,造成了双重浪费。

CReLU把$\text{ReLU}(x)$与$\text{ReLU}(-x)$在通道维拼接输出。这一变换是信息保持的:由两路输出可以完整恢复$x$(也可以恢复$|x|$),没有任何信息损失,同时输出仍然是稀疏的(每个位置恰有一路为$0$)。代价是输出通道数翻倍,因此实践中通常把滤波器数量减半以保持计算量不变;这样反而用一半的参数达到了更好的效果。

⚪ SReLU:双侧可学习阈值

表达式 函数图像
\(\text{SReLU}(x)=\begin{cases} a^r\left(x-t^r\right)+t^r, & x\geq t^r \\ x, & t^l < x < t^r \\ a^l\left(x-t^l\right)+t^l, & x\leq t^l \end{cases}\)

SReLU(S-shaped ReLU)三段线性函数拼接而成,四个参数$t^r,a^r,t^l,a^l$全部可学习($t^l,t^r$为左右转折点,$a^l,a^r$为两端斜率)。

SReLU的意义在于突破了凸性限制:ReLU/LeakyReLU/PReLU无论参数取何值都是凸函数(准确地说是两段线性的凸组合),而SReLU通过三段的不同斜率可以表示非凸S型映射,从而能拟合诸如Webber定律、Stevens幂律这类心理物理学中的非凸响应曲线。它是手工设计走向可学习分段线性激活函数(3.5节的APLPWLU)的一个前身。

⚪ SUGAR:只替换反向梯度

表达式 函数图像
\(\begin{aligned} \text{forward}:&\quad \text{ReLU}(x) \\ \text{backward}:&\quad \text{B-SiLU}'(x) \\ \text{B-SiLU}(x)&= (x+\alpha)\sigma(x) - \frac{\alpha}{2}, \quad \alpha = 1.67 \end{aligned}\)

前面所有方法为了修好负半轴的梯度,都改变了前向输出,因而牺牲了ReLU的稀疏性与低廉的推理成本。SUGAR(surrogate gradient)指出这两件事其实可以解耦:激活函数同时承担了“前向的函数形状”和“反向的梯度形状”两个角色,而它们不必由同一个函数提供。

具体做法是:前向传播完全保留ReLU,反向传播时把负半轴恒为$0$的梯度替换为某个光滑替代函数(作者提出的B-SiLU是其中效果最好的一个)的导数。这样既保住了ReLU的稀疏激活与硬件友好性,又消除了dead ReLU。这种“前向硬、反向软”的思路来自脉冲神经网络(SNN)中处理不可导脉冲函数的标准技巧。

(3) 负半轴指数饱和

⚪ ELU

表达式 函数图像
\(\begin{aligned} \text{ELU}(x) &=\begin{cases} x, & x\geq 0 \\ \alpha\left(e^x-1\right), & x<0 \end{cases} \\ \text{ELU}'(x) &=\begin{cases} 1, & x\geq 0 \\ \text{ELU}(x)+\alpha, & x<0 \end{cases} \end{aligned}\)

ELU(exponential linear unit)的设计目标是准则4:使激活函数的输出均值接近$0$,从而消除偏置偏移。它在负半轴取负值,且饱和到$-\alpha$。

这里的“饱和”是刻意设计的:ELU认为负半轴的饱和是一个优点而非缺点。当输入是较大的负值(通常意味着该特征“不存在”)时,函数输出趋于常数$-\alpha$,导数趋于$0$,因此对输入噪声不敏感;这被称为对噪声的鲁棒性。相比之下,LeakyReLU/PReLU在负半轴无界,噪声会被线性地传递下去。

注意ELU的一阶导数仅在$\alpha=1$时于$x=0$处连续(函数值的左极限$\alpha\left(e^0-1\right)=0$恰好等于右极限$0$,但导数的左极限为$\alpha$、右极限为$1$),因此$\alpha=1$是默认取值。

⚪ CELU:连续可微的ELU

表达式 函数图像
\(\text{CELU}(x) =\begin{cases} x, & x\geq 0 \\ \alpha\left(e^{x/\alpha}-1\right), & x<0 \end{cases}\)

ELU的一阶导数在$x=0$处的左右极限分别是$\alpha$和$1$,只有$\alpha=1$时才连续,这限制了$\alpha$的取值。CELU(continuously differentiable ELU)把指数项的自变量缩放为$x/\alpha$,使得负半轴导数为$e^{x/\alpha}$,在$x=0$处恒为$1$,从而对任意$\alpha>0$都连续可微。这带来了三个良好性质:

因此$\alpha$在CELU中扮演了“从ReLU平滑过渡到线性函数”的插值参数。

⚪ SELU:自标准化的ELU

表达式 函数图像
\(\text{SELU}(x) =\begin{cases} \lambda x, & x\geq 0 \\ \lambda\alpha\left(e^x-1\right), & x<0 \end{cases}\)

SELU(scaled ELU)的设计思路是让激活函数本身承担归一化的功能:若激活函数的输入是均值为$0$、方差为$1$的独立同分布随机变量,则希望通过激活函数后的输出仍然保持均值为$0$、方差为$1$。

激活函数处的数据流如上图所示。记$a_1,\cdots,a_K$为网络上一层的输出,假设它们是独立同分布的随机变量(不必服从Gaussian),求和后得到$z=\sum_{k=1}^{K}a_kw_k$;由中心极限定理$z$近似服从Gaussian。若能通过设计激活函数的参数使得本层输出$a=f(z)$仍然服从$\mathcal{N}(0,1)$,则该性质会逐层自动传递下去,网络具有自标准化(self-normalizing)性质。

① 让输出服从$\mathcal{N}(0,1)$。写出一阶统计量(均值$=0$)和二阶统计量(方差$=1$)对应的积分方程:

\[\begin{aligned} \int_{-\infty}^{0} \frac{\lambda\alpha\left(e^x-1\right)}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}dx + \int_{0}^{+\infty} \frac{\lambda x}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}dx &= 0 \\ \int_{-\infty}^{0} \frac{\lambda^2\alpha^2\left(e^x-1\right)^2}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}dx + \int_{0}^{+\infty} \frac{\lambda^2x^2}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}dx &= 1 \end{aligned}\]

使用sympy可以快速求解上述方程组:

import sympy
from sympy import Symbol, nsolve, integrate

x = Symbol('x')
a = Symbol('a')
l = Symbol('l')
int1 = integrate(sympy.exp(-x**2/2)*(sympy.exp(x)-1), (x,-sympy.oo,0))
int2 = integrate(sympy.exp(-x**2/2)*x, (x,0,sympy.oo))
fn1 = a*l/sympy.sqrt(2*sympy.pi)*int1 + l/sympy.sqrt(2*sympy.pi)*int2 - 0
int3 = integrate(sympy.exp(-x**2/2)*(sympy.exp(x)-1)**2, (x,-sympy.oo,0))
int4 = integrate(sympy.exp(-x**2/2)*x**2, (x,0,sympy.oo))
fn2 = a**2*l**2/sympy.sqrt(2*sympy.pi)*int3 + l**2/sympy.sqrt(2*sympy.pi)*int4 - 1
z = nsolve([fn1,fn2], [a,l], [1,1])
print(z) # Matrix([[1.67326324235438], [1.05070098735548]])

即$\alpha=1.6732632423543772$,$\lambda=1.0507009873554805$。

② 让输入服从$\mathcal{N}(0,1)$。激活函数的输入为$z=\sum_{k=1}^{K}a_kw_k$。假设上一层输出独立同分布且$\mathbb{E}[a_k]=0$、$\mathbb{E}\left[a_k^2\right]=1$,则:

\[\begin{aligned} \mathbb{E}[z] &= \sum_{k=1}^{K}w_k\mathbb{E}[a_k] = 0 \\ \text{Var}[z] &= \mathbb{E}\left[\left(\sum_{k=1}^{K}a_kw_k\right)^2\right] = \sum_{k=1}^{K}w_k^2\mathbb{E}\left[a_k^2\right] = \sum_{k=1}^{K}w_k^2 = K \cdot \text{Var}[w] \end{aligned}\]

因此只需取$\mathbb{E}[w]=0$、$\text{Var}[w]=1/K$(即LeCun初始化),就有$\text{Var}[z]=1$。

综上,若所有隐藏层都使用SELU,则隐藏层的输入自动近似服从$\mathcal{N}(0,1)$;对输入层只需对数据做标准化;每一层的参数从$\mathcal{N}(0,1/K)$中采样即可。实验表明SELU具有类似BatchNorm的效果,能在不使用任何归一化层的情况下训练很深的全连接网络。这也是SELU最主要的应用场景。注意它对初始化方式和网络结构的要求较严格,在卷积网络中通常不如ReLU族$+$BatchNorm的组合。

⚪ ISRLU:ELU的代数近似

表达式 函数图像
\(\begin{aligned} \text{ISRLU}(x) &= \begin{cases} x, & x \geq 0 \\ \dfrac{x}{\sqrt{1 + \alpha x^2}}, & x < 0 \end{cases} \\ \text{ISRLU}'(x) &= \begin{cases} 1, & x \geq 0 \\ \left(\dfrac{1}{\sqrt{1 + \alpha x^2}}\right)^3, & x < 0 \end{cases} \end{aligned}\)

ISRLU(inverse square root linear unit)用逆平方根替代ELU中的指数运算。它与ELU的曲线非常相似(负半轴饱和、输出均值接近$0$),但有两个优势:

超参数$\alpha$控制负半轴的饱和值($\alpha=1$时饱和值接近$-1$,$\alpha=3$时饱和值更小、向下层传递的误差信号更少),并且可以像PReLU一样通过反向传播学习。

⚪ PELU:参数化的ELU

表达式 函数图像
\(\text{PELU}(x) =\begin{cases} \dfrac{a}{b}x, & x\geq 0 \\ a\left(e^{x/b}-1\right), & x<0 \end{cases}, \quad a,b>0\)

PReLUReLU做的事情(把固定超参数变成可学习参数)同样可以对ELU做。但PELU(parametric ELU)PReLU更彻底:它不只参数化负半轴,而是同时控制三件事:正半轴的斜率$a/b$、负半轴的饱和值$-a$、以及负半轴的衰减速率$1/b$。

正半轴的斜率之所以被写成$a/b$这个看似别扭的耦合形式,是为了保证函数在原点处可导:负半轴导数在$x\to 0^-$时为$(a/b)e^{0}=a/b$,与正半轴斜率恰好相等。若正半轴直接取$x$(斜率$1$),则只有$a=b$时才可导,参数就失去了自由度。

训练时需要保证$a,b>0$(原论文通过重参数化或截断实现)。其效果是把ELU中“偏置偏移修正的强度”从固定的$\alpha=1$交给网络自己决定,不同层可以学到差别很大的曲线形状。

(4) 概率视角

⚪ GELU

表达式 函数图像
\(\text{GELU}(x)= x\Phi(x)=x\int_{-\infty}^{x} \frac{1}{\sqrt{2\pi}}e^{-\frac{t^2}{2}}dt = \frac{x}{2}\left(1+\text{erf}\left(\frac{x}{\sqrt{2}}\right)\right)\)

GELU(Gaussian error linear unit)Transformer时代最重要的激活函数,其设计动机来自一个全新的视角:把激活函数与随机正则化统一起来

考虑一个随机的输入自适应掩码:以概率$\Phi(x)=P(X\leq x),X\sim \mathcal{N}(0,1)$保留输入、以概率$1-\Phi(x)$置零,即$x\cdot \text{Bernoulli}(\Phi(x))$。这个掩码同时具有Dropout的随机性和ReLU的门控性,但与两者不同的是:Dropout的保留概率与输入无关,ReLU的门控是确定性的$\mathbb{1}[x>0]$,而这里的门控概率由输入本身的大小决定:输入越大越可能被保留。GELU就是这个随机变换的期望

\[\mathbb{E}\left[x\cdot \text{Bernoulli}(\Phi(x))\right] = x\Phi(x)\]

从这个视角看,ReLU是$x\mathbb{1}[x>0]$,即把$\Phi$替换成阶跃函数的极限情形;GELU则是它的“概率化”推广,因此天然带有正则化效果。GELU的曲线是非单调的(在负半轴有一个极小值),这与后文SwishMish的形状一致。

由于$\text{erf}$函数计算代价较高,实践中常用两种近似:

\[\begin{aligned} \text{GELU}(x) &\approx \frac{x}{2}\left(1+\tanh\left(\sqrt{\frac{2}{\pi}}\left(x+0.044715x^3\right)\right)\right) \\ \text{GELU}(x) &\approx x\cdot \sigma(1.702x) \end{aligned}\]

其中的常数可以通过min-max拟合(最小化近似式与精确式的全局最大误差)确定,求解方式与前文Squareplus中的非线性规划完全相同。注意第二个近似恰好是$\beta=1.702$的Swish函数——这暗示了GELUSwish之间的深刻联系,3.5节会从光滑化的角度给出解释。

(5) 幂与多项式

到目前为止,所有整流类变体都在负半轴上做文章,而正半轴一律保持恒等映射。$2021$年之后,随着大语言模型的兴起,一条相反的路线浮现出来:修改正半轴,让它比线性增长得更快。这类激活函数几乎构成了近年大模型前馈层的全部进展。

⚪ Squared ReLU:搜索出来的平方整流

表达式 函数图像
\(\text{ReLU}^2(x)= \left(\text{ReLU}(x)\right)^2 = \max(x,0)^2\)

Primer进化式结构搜索TensorFlow原语组成的空间中搜索更高效的Transformer,搜出的若干改动中,把前馈层的ReLU换成它的平方是单项收益最大、也最容易迁移的一个。

从传统设计准则看,ReLU$^2$是相当反常的:它上无界,且导数$2\text{ReLU}(x)$随输入线性增长而非趋于常数或饱和,理论上有梯度爆炸的风险。但它在Transformer前馈层中表现稳定,且比GELU便宜得多(一次乘法,不含$\exp$或$\text{erf}$)。

它的另一个性质在大模型时代变得格外重要:平方放大了大激活值、压低了小激活值,使得前馈层的激活分布远比GELU稀疏且集中ReLU$^2$ Wins: Discovering Efficient Activation Functions for Sparse LLMs 据此论证ReLU$^2$是稀疏化推理的最佳选择:可以只计算少数被激活的神经元。目前Nemotron-H等生产级模型即使用ReLU$^2$作为前馈层激活。

⚪ StarReLU:把平方整流标准化

表达式 函数图像
\(\text{StarReLU}(x)= s\cdot\left(\text{ReLU}(x)\right)^2 + b\)

ReLU$^2$有一个直接的问题:它的输出既非零均值也非单位方差(平方使分布严重右偏)。StarReLU用一个缩放$s$和一个偏移$b$把它标准化回来。

这两个常数可以精确算出。设$x\sim \mathcal{N}(0,1)$,则:

\[\begin{aligned} \mathbb{E}\left[\left(\text{ReLU}(x)\right)^2\right] &= \mathbb{E}\left[x^2\mathbb{1}[x>0]\right] = \frac{1}{2} \\ \mathbb{E}\left[\left(\text{ReLU}(x)\right)^4\right] &= \mathbb{E}\left[x^4\mathbb{1}[x>0]\right] = \frac{3}{2} \\ \text{Var}\left[\left(\text{ReLU}(x)\right)^2\right] &= \frac{3}{2}-\left(\frac{1}{2}\right)^2 = \frac{5}{4} \end{aligned}\]

要使输出零均值、单位方差,只需取:

\[s = \frac{1}{\sqrt{5/4}} \approx 0.8944, \quad b = -\frac{1/2}{\sqrt{5/4}} \approx -0.4472\]

$s$与$b$也可以设为可学习参数(按层或按通道),此时上述值作为初始化。

StarReLU的另一个优势是计算量。GELU的$\text{erf}$或$\tanh$形式需要多次超越函数运算,而StarReLU只需一次乘法和一次加法;论文统计其激活函数部分的FLOPs比GELU减少约71%

⚪ xIELU:正半轴二次、负半轴指数

表达式 函数图像
\(\text{xIELU}(x) =\begin{cases} \alpha_p x^2 + 0.5x, & x> 0 \\ \alpha_n\left(e^x-1\right)-\alpha_n x + 0.5x, & x\leq 0 \end{cases}\)

xIELU的推导方式本身就很有启发性:与其直接设计激活函数$f$,不如设计它的导数$f’$,因为我们真正关心的性质(梯度是否消失、是否饱和、是否有界)全都是关于导数的;然后对$f’$积分得到$f$。这样所需的梯度行为是构造性地保证的,而不是事后验证的。作者取$f’$为ELU的可训练仿射变换,积分后即得到上式。

从形式上看,xIELU把两条路线拼在一起:正半轴借用ReLU$^2$的增长型导数($2\alpha_p x + 0.5$随输入增大),负半轴借用ELU的饱和($\alpha_n\left(e^x-1\right)$),$\alpha_p$与$\alpha_n$均可学习。

式中的$0.5x$项与$-\alpha_n x$修正项不是随意添加的,它们的作用恰好是保证原点处的连续可导:$x\to 0^+$与$x\to 0^-$的函数值都是$0$;导数方面,右导数为$2\alpha_p\cdot 0+0.5=0.5$,左导数为$\alpha_n e^0-\alpha_n+0.5=0.5$,两者相等。因此无论$\alpha_p,\alpha_n$学成什么值,xIELU始终是$C^1$的。

xIELU已被用于Apertus 8B/70B开源模型(Apertus: Democratizing Open and Compliant LLMs for Global Language Environments)。

⚪ PolyCom:多项式组合

表达式 函数图像
\(\begin{aligned} \text{PolyReLU}(x) &= \sum_{i=0}^{r} a_i \left(\text{ReLU}(x)\right)^i \\ \text{PolyNorm}(x) &= \sum_{i=0}^{r} a_i \frac{x^i}{\left\Vert x^i \right\Vert_2} \end{aligned}\)

既然二次项有效,为什么不用任意阶多项式PolyCom给出上述两个变体,其中系数$a_i$可学习,实践中取$r=3$。

表达能力是这项工作的核心论证:$r$阶多项式组合可以达到Sobolev空间中的最优逼近速率$O\left(\epsilon^{-d/n}\right)$,而纯ReLU网络要达到同样的速率需要多得多的层数。也就是说,把非线性做得“更强”可以换取深度。

PolyNorm中的$\left| x^i \right|_2$是让多项式激活在大模型规模下真正可训练的关键:高次项的数值范围随$i$急剧膨胀($x^3$的尺度远大于$x$),直接相加会让高次项完全主导并溢出;除以各自的$L_2$范数后,每一项都被归一化到可比的尺度,训练才能稳定。

⭐ 讨论:为什么“不饱和”反而更好

这一族的共同特征是正半轴的导数随输入增长而非饱和,这与第2章设计准则中的一个隐含期待(导数有界)正好相反。

一个合理的解释是:这类激活函数几乎只出现在Transformer的前馈层中,而该模块的输入已经被LayerNorm/RMSNorm归一化、输出又紧接着残差连接与下一个归一化层。激活值的尺度问题在块的层面上已经由归一化解决了,因此激活函数本身可以“放开手脚”去追求更强的非线性与更稀疏的表示。换句话说,激活函数的设计准则并不是绝对的,它依赖于激活函数所处的结构上下文。

3.3 自动搜索的激活函数

手工设计激活函数依赖直觉和经验。一个自然的想法是:既然网络结构可以用神经结构搜索(NAS)自动设计,激活函数为什么不能?这条路线产生了目前实际效果最好的几个激活函数。

⚪ Swish:强化学习搜索

表达式 函数图像
\(\text{Swish}(x)=x\cdot\sigma(\beta x)=\frac{x}{1+e^{-\beta x}}\)

Swish是用自动搜索技术找到的激活函数。首先需要设计合适的搜索空间

该搜索空间由core unit递归地构造而成。core unit接收两个输入(其中一个可以是上一个core unit的输出),分别经过两次一元(unary)操作后使用一个二元(binary)操作进行组合,并得到输出。作者选用的一元操作和二元操作如下:

搜索使用一个RNN控制器,在每个时间步预测激活函数的一个组成部分。当搜索出一个完整的激活函数后,构造对应的ResNet-20子网络,在CIFAR-10上训练$10K$步并记录验证准确率;该准确率作为reward通过强化学习更新控制器。

搜索得到的表现较好的激活函数如上图所示,从中可以总结出几条经验规律(这些规律对手工设计激活函数同样有指导意义):

搜索得到的最好的激活函数被命名为Swish(在PyTorch中称为SiLU),即本节开头的$x\cdot\sigma(\beta x)$。

Swish具有一系列良好性质。首先它是ReLU与线性函数之间的光滑插值:当$\beta=0$时退化为线性函数$x/2$;当$\beta\to +\infty$时$\sigma(\beta x)$趋于阶跃函数,Swish退化为ReLU。因此$\beta$控制了函数的非线性程度。

ReLU相同,Swish无上界、有下界;不同于ReLUSwish处处光滑非单调的(负半轴存在一个极小值)。其导数为:

\[\begin{aligned} \text{Swish}'(x) &= \sigma(\beta x) + \beta x \cdot \sigma(\beta x)\left(1-\sigma(\beta x)\right) \\ &= \beta\,\text{Swish}(x) + \sigma(\beta x)\left(1-\beta\,\text{Swish}(x)\right) \end{aligned}\]

不同于ReLU在$x>0$时导数恒为$1$,Swish的导数是随输入连续变化的。

LSTM门控(gating)机制的启发,Swish可以理解为一种自门控(self-gating)机制:使用自身的值作为门控信号,当$\sigma(\beta x)$接近$1$时门“开”,接近$0$时门“关”。

参数$\beta$也可以通过学习得到,此时网络中每个神经元的激活函数形状都可以不同。作者统计了训练后$\beta$的取值分布,大多数集中在$1$附近,因此实践中通常直接固定$\beta=1$:

⚪ HardSwish:Swish的分段线性近似

表达式 函数图像
\(\text{HardSwish}(x) = x \cdot \frac{\text{ReLU6}(x+3)}{6} = \begin{cases} x, & x \geq 3 \\ \dfrac{x(x+3)}{6}, & -3 \leq x <3 \\ 0, & x < -3 \end{cases}\)

Swish中的指数运算在嵌入式环境中成本较高,MobileNet V3因此提出用$\text{ReLU6}(x+3)/6$(即HardSigmoid的一种形式)替代Sigmoid,得到只含加法、乘法和截断的HardSwish。由于Swish在深层网络中收益更明显,而深层特征图的分辨率更低、激活函数调用次数更少,MobileNet V3只在网络的深层使用HardSwish,浅层仍使用ReLU

⚪ Mish

表达式 函数图像
\(\text{Mish}(x) = x\cdot \tanh\left(\text{Softplus}(x)\right) =x\cdot \tanh\left(\ln\left(1+e^x\right)\right)\)

Mish是在Swish周边的函数空间中进一步手工搜索得到的:作者设计了一批与Swish形式相似的候选函数并逐一实验,最终选出表现最好、训练最稳定的一个。Mish具有四个特点:

Mish最有说服力的证据来自损失平面(loss landscape)的可视化。所谓输出平面(output landscape)是指随机初始化一个网络,将可视化空间的坐标输入网络并输出相应标量;Mish对应的输出平面比ReLU更加平滑,而更平滑的输出平面会产生更平滑的损失平面:

上图对比了ReLUMishSwish对应的损失平面。Mish的损失平面更平滑、具有更宽的最小值区域、取得的损失值也更小;而其余两个损失平面存在多个局部极小值。

MishSwish之间存在直接联系。对Mish求导:

\[\begin{aligned} \text{Mish}'(x) &= \tanh\left(\text{Softplus}(x)\right) +x\cdot \text{sech}^2\left(\text{Softplus}(x)\right)\cdot \sigma(x) \\ &= \text{sech}^2\left(\text{Softplus}(x)\right)\cdot\left(x\cdot \sigma(x)\right) + \tanh\left(\text{Softplus}(x)\right) \\ &= \Delta(x)\,\text{Swish}(x)+\frac{\text{Mish}(x)}{x} \end{aligned}\]

其中$\Delta(x)=\text{sech}^2\left(\text{Softplus}(x)\right)$相当于一个预条件算子(preconditioner),使得梯度更加平滑并提供更强的正则化效果。这被认为是Mish在更深、更复杂的网络中表现优于Swish的原因。

⚪ ELiSH 与 HardELiSH:遗传算法搜索

表达式 函数图像
\(\begin{aligned} \text{ELiSH}(x) &=\text{ELU}(x)\cdot \sigma(x) \\&= \begin{cases} \dfrac{x}{1+e^{-x}}, & x\geq 0 \\ \dfrac{e^x-1}{1+e^{-x}}, & x<0 \end{cases} \\ \text{HardELiSH}(x) &=\text{ELU}(x)\cdot \text{HardSigmoid}(x) \\&= \begin{cases} x, & x\geq 1 \\ x(x+1)/2, & 0 \leq x<1 \\ \left(e^x-1\right)(x+1)/2, & -1\leq x<0 \\ 0, & x\leq -1 \end{cases} \end{aligned}\)

ELiSH(exponential linear sigmoid squashing)沿用了Swish的“自门控”结构,但把被门控的对象从$x$换成$\text{ELU}(x)$:当$x>0$时它与Swish完全相同;当$x<0$时它继承了ELU减少偏置偏移、对噪声鲁棒的特点。HardELiSH则进一步把Sigmoid替换为HardSigmoid以降低计算量。

这篇论文更重要的贡献是提出用遗传算法(genetic algorithm)为特定任务搜索激活函数。遗传算法维护一个个体(individual)总体,每个个体由若干基因(gene)描述,通过迭代执行以下操作进化:

关键在于如何把激活函数编码为基因。作者观察到常用的激活函数大多是分段(piece-wise)的,即可以拆分为左右两部分(或两个因子的乘积),于是把每一部分指定为一个基因,并设计了两种交叉方式:遗传(inheritance)(随机取一个个体的左半与另一个体的右半)和杂交(hybrid)(对两个个体的左右部分分别做某种运算再组合);变异则是随机替换其中一个部分。相比Swish使用的强化学习搜索,遗传算法的搜索成本更低,代价是搜索空间受编码方式的限制更强。

⚪ 手工设计的自门控变体:E-Swish、LiSHT、TanhExp

表达式 函数图像
\(\text{E-Swish}(x) = \beta x\sigma(x), \quad \beta \in [1,2]\)
\(\text{LiSHT}(x) = x\tanh(x)\)
\(\text{TanhExp}(x) = x\tanh\left(e^x\right)\)

搜索给出了$x\cdot g(x)$这一自门控模板之后,手工设计的空间就变成了“换一个$g$”。上表中的三个是最常见的变体。

E-Swish只是给Swish乘上一个常数$\beta$(推荐$\beta=1.75$),看起来微不足道,但它改变的是函数的最大导数:$\beta>1$使正半轴的梯度整体放大,等价于把该层的有效学习率调高。作者据此建议按网络深度选取不同的$\beta$:浅层用较大的$\beta$,深层用较小的$\beta$。

LiSHT是这一组中最特殊的:$x\tanh(x)$是一个偶函数恒非负(可以写成$|x|\tanh |x|$),形状是一条V型曲线。它完全丢弃了输入的符号而只保留幅值,这与前面所有激活函数都不同。它以一种独特的方式满足准则4:输出虽然全为正,但函数关于$y$轴对称,正负输入被同等对待,因此不存在方向性的偏置偏移。代价是符号信息的丢失必须由后续层从其他通道恢复。

TanhExp面向轻量级网络设计。它在原点附近的过渡比SwishMish都更陡(因为$e^x$在$0$附近变化快,使$\tanh$迅速接近饱和),从而在小模型上收敛更快;同时它只需一次$\exp$和一次$\tanh$。

⚪ GELUSine:LLM搜索出来的激活函数

表达式 函数图像
\(\text{GELUSine}(x) = \text{GELU}(x) + 0.1\sin(x)\)

激活函数搜索的第三代工具是大语言模型驱动的进化式搜索智能体:不再由人设计搜索空间或基因编码,而是让模型直接提出、评估并改写候选程序(该工作使用的是AlphaEvolve)。GELUSine是这类方法给出的结果之一。

有意思的是它恰好闭合了一个从$2017$年打开的循环:Swish的原始论文在报告搜索结果时就注意到,含周期性成分的候选函数表现出乎意料地好,但作者没有深究。GELUSine几乎就是这一观察的兑现:在标准激活函数上叠加一个幅度很小的周期扰动。周期性为什么有帮助,见下一节3.4。

3.4 周期性激活函数

前面所有激活函数都是非周期的、并且大体上是单调递增的。由它们堆叠出的网络有一个被反复观察到的固有偏好:谱偏差(spectral bias),也称频率原则(frequency principle):网络总是先拟合目标函数的低频成分,而高频细节要么学得极慢,要么根本学不出来。

对分类任务而言这甚至是好事(相当于一种隐式正则化),但对隐式神经表示(implicit neural representation)是致命的:这类任务要求一个小型MLP坐标映射到信号值(图像的像素、音频的采样、形状的符号距离、场景的辐射亮度),而目标信号本身就充满高频结构。

周期性激活函数直接从根源上解决这个问题:让函数基本身就是振荡的。

⚪ SIREN:正弦激活的隐式神经表示

表达式 函数图像
\(\Phi_i(x) = \sin\left(\omega_0\left(W_i x + b_i\right)\right)\) -

SIREN(sinusoidal representation network)就是把MLP每一层的激活函数换成正弦。这个改动看似简单,却带来一个其他激活函数都没有的性质:

SIREN的导数仍然是一个SIREN。因为$\sin$的导数是相移后的$\sin$,逐层求导后网络的结构形式不变。这使得SIREN可以被导数约束监督:可以只用图像的梯度Laplacian去拟合图像本身,可以求解符号距离场的Eikonal方程,也可以求解Poisson方程和Helmholtz方程。ReLU网络做不到这一点:ReLU网络的二阶导数几乎处处为$0$,任何涉及二阶导数的监督信号都会直接消失。

超参数$\omega_0$(论文取$30$)控制网络能够表示的频带:$\omega_0$越大,可表示的细节越精细,但也越容易过拟合噪声。它是SIREN中最重要的单个超参数。

SIREN能否训练起来强烈依赖于一套配套的初始化方案。隐藏层权重需要从下面的均匀分布中采样($n$为该层输入维度):

\[w \sim U\left(-\sqrt{\frac{6}{n}}, \sqrt{\frac{6}{n}}\right)\]

这样做的目的是使激活前的分布在深度方向上保持不变(否则正弦的周期性会让分布迅速退化);第一层则额外乘以$\omega_0$。缺少这套初始化,SIREN可能根本训练不出来。

⚪ Snake:周期性与单调性的折中

表达式 函数图像
\(\begin{aligned} \text{Snake}_a(x) &= x + \frac{1}{a}\sin^2(ax) \\ \text{Snake}_a'(x) &= 1+\sin(2ax) \end{aligned}\)

纯正弦激活放弃了单调性,这让优化变得困难(存在大量局部极小)。Snake给出一个折中:一个单调的恒等项加上一个有界的周期项

这个组合的好处从导数上看得最清楚:$\text{Snake}_a’(x) \in [0,2]$,恒非负,因此Snake单调不减的,优化行为接近ReLU族;同时周期项又赋予它表示与外推周期结构的能力。系数$1/a$的作用是把周期项的振幅与频率绑定:频率$a$越高,振幅越小,从而保证无论$a$取何值,函数都不会偏离恒等映射太远。

这篇论文的核心观察是:标准网络在周期信号上的插值几乎完美,但外推(超出训练区间)会灾难性失败:它们学到的是训练区间内的一段曲线,而不是“周期”这个概念。Snake及其按通道可学习的变体snakebeta如今是现代神经声码器(如BigVGAN)的标准激活函数,原因很直接:音频波形本质上是周期的。

⚪ GCU:余弦门控单元

表达式 函数图像
\(\text{GCU}(x) = x\cos(x)\)

GCU(growing cosine unit)是自门控模板$x\cdot g(x)$的周期版本:把门控函数换成$\cos$。它是非单调的,并且有无穷多个零点

作者对此的解释是:由于每个零点都对应一个决策边界,单个GCU神经元就可以表示XOR这类非线性可分问题;而任何单调激活函数的单个神经元只能给出一个超平面。

⭐ 讨论:周期性激活的适用范围

周期性激活函数基本上是领域专用工具。它们在隐式神经表示音频合成物理信息神经网络(PINN)中占据主导地位,但在图像分类和语言模型的骨干网络中很少使用;因为那里的输入不是坐标,目标函数也不具有真正的周期结构。GELUSine是一个有意思的例外:它不改变主干激活函数的形状,只是叠加一点微量的周期性(幅度$0.1$),试图在通用任务上取得谱偏差与优化难度之间的平衡。

3.5 通用近似激活函数

前面所有激活函数都是固定形状的(PReLU只有一个自由度)。一个更激进的想法是:让每个神经元自己学出它需要的激活曲线。这要求激活函数是一个具有足够表达能力的参数化函数族,且参数可以通过梯度更新。

这类方法有三条技术路线:直接用通用逼近器参数化(下面的(1)分段线性、(2)有理函数、(3)样条),对已有的非光滑激活函数做参数化的光滑近似(下面的(4)),以及用一个参数族统一多个已知激活函数(下面的(5))。

(1) 分段线性参数化

⚪ Maxout

表达式 函数图像
\(h_i(x)=\mathop{\max}_{j\in [1,k]}\left(x^\top W_{i,j}+b_{i,j}\right)\)

Maxout是最早的可学习激活函数。它把$k$个线性函数取最大值作为激活输出,因此maxout单元本身就是一个分段线性凸函数,并且可以逼近任意凸函数(只要$k$足够大)。更进一步,作者证明两个maxout单元的差可以逼近任意连续函数,因此maxout网络具有通用近似性。

ReLULeakyReLU都是maxout的特例($k=2$,其中一支为$0$或$\alpha x$),这也说明整流类激活函数本质上是分段线性的。maxout的代价与缺点是:

注意maxout同时也是第一个多输入的激活函数(它作用在整个输入向量上,而非单个标量),因此也可归入3.6节。

⚪ APL:用ReLU拼出分段线性

表达式 函数图像
\(\text{APL}(x)=\max(0,x)+\sum_{s=1}^{S}a^s\max\left(0,-x+b^s\right)\)

APL(adaptive piecewise linear unit)换了一种参数化方式:以ReLU为主干,叠加$S$个带有可学习斜率$a^s$和折点$b^s$的hinge项。它相比maxout有两个优势:

同时它是单输入的标量函数,可以直接替换任何现有网络中的ReLU,无需改动网络结构。

⚪ PWLU:直接参数化分段线性函数

表达式 函数图像
\(\text{PWLU}_N(x) = \begin{cases} \left(x-B_L\right)K_L+Y^0, & x<B_L \\ \left(x-B_R\right)K_R+Y^N, & x\geq B_R \\ \left(x-B_i\right)K_i+Y^i, & B_L\leq x<B_R \end{cases}\)

PWLU(piecewise linear unit)是分段线性路线的集大成者,它直接用“区间$+$端点值”来参数化函数:上式中$N$为区间数量,$B_L,B_R$为左右边界,$Y^0,\cdots,Y^N$为$N+1$个分界点的函数值,$K_L,K_R$为最左端与最右端的斜率。

区间$[B_L,B_R]$被均分为$N$份,因此子区间宽度为$d$,$x$所属子区间的索引$i$及该区间的左端点与斜率都可以$O(1)$地算出:

\[\begin{aligned} d &= \frac{B_R-B_L}{N}, \quad i = \left\lfloor \frac{x-B_L}{d} \right\rfloor \\ B_i &= B_L+i\cdot d, \quad K_i = \frac{Y^{i+1}-Y^{i}}{d} \end{aligned}\]

PWLU具有以下性质:

PWLU的关键实践问题是输入边界不对齐(input-boundary misalignment):函数的主要自由度分布在$[B_L,B_R]$内,如果输入数据的分布与该区间交集很小,则大部分参数对网络几乎没有贡献。

作者提出了一种基于统计的两阶段对齐方法

首先把所有PWLU初始化为ReLU(取$N$为偶数,此时$K_L=0,K_R=1,B_L=-B_R,Y^i=\text{ReLU}(B_i)$)。第一阶段(前$T’$轮,实验中$T’=5$)不更新PWLU的参数,只统计输入数据的均值与标准差并滑动更新:

\[\mu \leftarrow 0.9\mu+0.1\cdot\text{mean}(x), \quad s \leftarrow 0.9s+0.1\cdot\text{std}(x)\]

第二阶段把每个PWLU的参数按统计量重置,使有效区间覆盖输入分布的$\pm 3s$:

\[B_L=\mu-3s, \quad B_R=\mu+3s, \quad K_L=0, \quad K_R=1, \quad Y^i=\text{ReLU}(B_i)\]

此后再通过梯度更新PWLU的参数。可视化学到的函数可以发现:浅层的激活函数接近线性函数,而深层的激活函数呈“V”型。

PWLU的论文也总结了自动搜索路线的局限性,这正是通用近似路线的动机所在:搜索空间是受限且离散的,组合的微小变化可能导致完全不同的结果;搜索需要评估大量候选函数,计算成本高;且搜索是在给定数据集和网络结构上进行的,难以迁移。相比之下,通用近似器的参数是连续的、可以随网络一起训练,天然适配不同的数据集和结构。

(2) 有理函数参数化

⚪ PAU:Padé近似

表达式 函数图像
\(\text{PAU}(x) = \frac{\sum_{j=0}^{m}a_jx^j}{1+\sum_{k=1}^{n}\lvert b_k\rvert\lvert x\rvert^k}= \frac{a_0+a_1x+\cdots+a_mx^m}{1+\lvert b_1\rvert\lvert x\rvert+\cdots+\lvert b_n\rvert\lvert x\rvert^n}\)

给定任意函数$f(x)$,Padé近似是指使用给定阶数的有理分式$F(x)$对其进行近似。给定分子$P$和分母$Q$的阶数$m$和$n$:

\[f(x) \approx F(x) = \frac{P(x)}{Q(x)} = \frac{\sum_{j=0}^{m}a_jx^j}{1+\sum_{k=1}^{n}b_kx^k}= \frac{a_0+a_1x+\cdots+a_mx^m}{1+b_1x+\cdots+b_nx^n}\]

通常Padé近似能够给出比Taylor近似更好的结果,且在Taylor级数不收敛的情况下仍然有效。然而有理分式的灵活性也带来风险:它可能拟合出极点(分母为$0$),导致训练和推理时的数值不稳定。作者因此使用一种安全的Padé近似,即上表中的形式:对分母的每一项取绝对值,保证分母不小于$1$。

PAU(Padé activation unit)把这个有理分式作为激活函数,通过梯度下降从数据中学习系数。所需的梯度为:

\[\begin{aligned} \frac{\partial F}{\partial x} &= \frac{1}{Q(x)}\frac{\partial P(x)}{\partial x}-\frac{P(x)}{Q(x)^2}\frac{\partial Q(x)}{\partial x} \\ \frac{\partial F}{\partial a_j} &= \frac{x^j}{Q(x)}, \qquad \frac{\partial F}{\partial b_k} = -\frac{P(x)}{Q(x)^2}\cdot\frac{b_k}{|b_k|}|x|^k \end{aligned}\]

其中分子与分母的导数为:

\[\begin{aligned} \frac{\partial P(x)}{\partial x} &= a_1+2a_2x+\cdots+ma_mx^{m-1} \\ \frac{\partial Q(x)}{\partial x} &= \frac{x}{|x|}\left(|b_1|+2|b_2||x|+\cdots+n|b_n||x|^{n-1}\right) \end{aligned}\]

为了减少参数量,每一层的所有神经元共享一套PAU参数。初始化时用标准的Padé近似去拟合一个已知的激活函数,上表中的图像展示了Padé近似(虚线)对常用激活函数的拟合效果。

⚪ OPAU:正交Padé近似

表达式 函数图像
\(\text{OPAU}(x) = \frac{\sum_{i=0}^{k}c_if_i(x)}{1+\sum_{j=1}^{l}\lvert d_j\rvert\lvert f_j(x)\rvert}= \frac{c_0+c_1f_1(x)+\cdots+c_kf_k(x)}{1+\lvert d_1\rvert\lvert f_1(x)\rvert+\cdots+\lvert d_l\rvert\lvert f_l(x)\rvert}\)

OPAU(orthogonal-Padé activation unit)PAU的基础上,把分子和分母中的幂基$1,x,x^2,\cdots$替换为正交多项式基$f_1,f_2,\cdots,f_l$,同样对分母取绝对值以避免极点。作者考察了六种常用的正交多项式基:

使用正交基的好处是数值条件更好、达到同等拟合精度所需的阶数更低,因此运行时间更短。实践中使用LeakyReLU初始化OPAU

(3) 样条参数化

样条(spline)是与分段线性函数、有理函数并列的第三种经典通用逼近器。把样条用作激活函数,会导出一个与前面所有方法都不同量级的改动:它改变的不是激活函数,而是整个网络的组织方式。

⚪ KAN:把激活函数搬到边上

表达式 函数图像
\(\phi(x) = w_b\cdot \text{silu}(x) + w_s\cdot \sum_i c_i B_i(x)\)

其中$B_i$是定义在某个网格上的B样条基函数,系数$c_i$可学习,$w_b,w_s$是两个可学习的缩放。

KAN与前面所有方法的差别是性质上的MLP固定的激活函数放在节点上、把可学习的权重放在边上KAN则反过来,把可学习的激活函数放在边上,节点只做求和。至此激活函数不再是网络的一个组件,激活函数本身就是网络。

式中两项的分工也值得注意:silu项是一条基础通路(类似残差连接),保证优化行为良好;样条项提供局部表达能力。样条基是局部支撑的:修改一个系数$c_i$只影响一个区间,这既是KAN可解释性的来源,也使得网格扩展(grid extension)成为可能:可以逐步加密样条网格来提升容量,而不必从头重训。

KAN的理论依据是柯尔莫哥洛夫-阿诺德表示定理。代价也要如实说明:KAN的参数量远大于同规模MLP,且单个参数的计算效率低得多(样条求值无法像矩阵乘法那样被硬件充分优化),因此目前主要用于科学计算符号回归这类小规模、重可解释性的问题。详见Kolmogorov-Arnold网络

(4) 非光滑激活函数的光滑化:一个统一视角

回顾一下:ReLULeakyReLUmaxout都可以写成最大值函数的形式,它们的问题都出在$\max$带来的折点不可导(准则1)。因此一个自然的思路是:为最大值函数寻找参数化的光滑近似。不同的近似方式会导出不同的激活函数;而SoftplusSwishGELU这些看似出身各异的函数,其实都落在这个统一框架内。

下面三种方法分别从softmax绝对值函数Dirac函数出发,得到了三条不同的光滑化路径。

⚪ ACON:最大值函数的softmax近似

表达式 函数图像
\(\text{ACON-C}(x)=\left(p_1-p_2\right)x\,\sigma\left(\beta (p_1-p_2)x\right)+p_2x\)

最大值函数$\max(x_1,\cdots,x_n)$的一个经典可微近似是$\alpha$-softmax

\[\max(x_1,x_2,\cdots,x_n) \approx \frac{\sum_{i=1}^{n}x_ie^{\beta x_i}}{\sum_{i=1}^{n}e^{\beta x_i}}\]

其中$\beta$是开关因子:$\beta \to +\infty$时上式趋近于最大值函数,$\beta =0$时上式退化为算术平均。

当$n=2$时可以化简出一个非常简洁的形式:

\[\begin{aligned} \max(x_1,x_2) &\approx \frac{x_1e^{\beta x_1}+x_2e^{\beta x_2}}{e^{\beta x_1}+e^{\beta x_2}} \\ &= x_1\frac{1}{1+e^{-\beta(x_1-x_2)}}+x_2\frac{1}{1+e^{-\beta(x_2-x_1)}} \\ &= x_1\sigma\left(\beta(x_1-x_2)\right)+x_2\left[1-\sigma\left(\beta(x_1-x_2)\right)\right] \\ &= (x_1-x_2)\sigma\left(\beta(x_1-x_2)\right)+x_2 \end{aligned}\]

若自变量为任意函数$\eta_{a}(x)$和$\eta_{b}(x)$,则整个maxout函数族$\max\left(\eta_{a}(x),\eta_{b}(x)\right)$的光滑近似为:

\[\max\left(\eta_{a}(x),\eta_{b}(x)\right) \approx \left(\eta_{a}(x)-\eta_{b}(x)\right)\sigma\left(\beta\left(\eta_{a}(x)-\eta_{b}(x)\right)\right)+\eta_{b}(x)\]

对$\eta_a,\eta_b$赋予不同形式,就得到一系列光滑激活函数,作者称之为ACON(activate or not)族:

论文主要讨论ACON-C,其函数曲线及一阶导数曲线如下:

ACON-C相比Swish的核心优势是梯度界可学习。其梯度为:

\[\begin{aligned} \text{ACON-C}'(x) = &\left(p_1-p_2\right)\sigma\left(\beta (p_1-p_2)x\right) \\ &+ \beta\left(p_1-p_2\right)^2x\,\sigma\left(\beta (p_1-p_2)x\right)\left[1-\sigma\left(\beta (p_1-p_2)x\right)\right]+p_2 \end{aligned}\]

注意到两端的极限:

\[\lim_{x \to +\infty}\text{ACON-C}'(x) = p_1, \quad \lim_{x \to -\infty}\text{ACON-C}'(x) = p_2\]

对其求二阶导数并令其为$0$,可得导数的极值:

\[\begin{aligned} \max\left(\text{ACON-C}'(x)\right) &\approx 1.0998p_1-0.0998p_2 \\ \min\left(\text{ACON-C}'(x)\right) &\approx 1.0998p_2-0.0998p_1 \end{aligned}\]

Swish中(对应$p_1=1,p_2=0$),梯度的上下界固定为$1.0998$和$-0.0998$,超参数$\beta$只决定梯度趋近上下界的速度;而ACON-C的梯度界由可学习的$p_1,p_2$决定。

开关因子$\beta$控制激活函数的非线性程度,也即“是否激活”:$\beta \to +\infty$时ACON-C趋近于$\max(p_1x,p_2x)$,$\beta =0$时退化为线性函数$(p_1-p_2)x/2$(此时该神经元实际上是“未被激活”的)。

作者进一步提出meta-ACON,即把$\beta$表示为输入样本的函数$\beta=G(x)$,从而让网络为每个样本自适应地决定每个神经元是否被激活。对图像数据$x \in \mathbb{R}^{C\times H\times W}$,$\beta$可以有三种粒度:

\[\begin{aligned} \text{layer-wise}: \quad & \beta = \sigma\left(\sum_{c=1}^{C}\sum_{h=1}^{H}\sum_{w=1}^{W}x_{c,h,w}\right) \\ \text{channel-wise}: \quad & \beta_c = \sigma\left(W_1W_2 \sum_{h=1}^{H}\sum_{w=1}^{W}x_{c,h,w}\right) \\ \text{pixel-wise}: \quad & \beta_{c,h,w} = \sigma\left(x_{c,h,w}\right) \end{aligned}\]

作者选用channel-wise版本(形式上与SE模块一致)。注意meta-ACON已经跨入了3.6节“上下文相关激活函数”的范畴。

⚪ SMU:最大值函数的绝对值近似

表达式 函数图像
\(\text{SMU}(x)= \frac{(1+\alpha)x+(1-\alpha)x\,\text{erf}\left(\mu (1-\alpha)x\right)}{2}\)

SMU(smooth maximum unit)从另一个方向出发。最大值函数可以精确地写成:

\[\max(x_1,x_2) = \frac{x_1+x_2+|x_1-x_2|}{2}\]

因此只需光滑化绝对值函数$|x|$。$|x|$常用的两种光滑近似是$x\,\text{erf}(\mu x)$和$\sqrt{x^2+\mu^2}$:前者从下方逼近$|x|$($\mu$越大越逼近),后者从上方逼近($\mu$越小越逼近)。代入得到最大值函数的两种近似:

\[\begin{aligned} f_1(x_1,x_2;\mu) &= \frac{x_1+x_2+(x_1-x_2)\,\text{erf}\left(\mu (x_1-x_2)\right)}{2} \\ f_2(x_1,x_2;\mu) &= \frac{x_1+x_2+\sqrt{(x_1-x_2)^2+\mu^2}}{2} \end{aligned}\]

由此可以直接写出各类基于最大值的激活函数的光滑近似:

\[\begin{aligned} \text{maxout}: \quad & f_1(ax,bx;\mu) = \frac{(a+b)x+(a-b)x\,\text{erf}\left(\mu (a-b)x\right)}{2} \\ \text{ReLU}: \quad & f_1(x,0;\mu) = \frac{x+x\,\text{erf}(\mu x)}{2} \\ \text{LeakyReLU}: \quad & f_1(x,\alpha x;\mu) = \frac{(1+\alpha)x+(1-\alpha)x\,\text{erf}\left(\mu (1-\alpha)x\right)}{2} \end{aligned}\]

其中ReLU的近似在$\mu=1/\sqrt{2}$时恰好就是GELU这解释了GELU的另一重身份:它既是随机正则化的期望(见3.2节),也是ReLU的$\text{erf}$型光滑近似。

作者取LeakyReLU的光滑近似作为SMU,即上表中的形式,其中$\alpha$和$\mu$都通过梯度下降学习:

\[\begin{aligned} \frac{\partial f_1}{\partial \alpha} &= \frac{1}{2}\left[x-x\,\text{erf}\left(\mu (1-\alpha)x\right)-\frac{2\mu(1-\alpha) x^2}{\sqrt{\pi}}e^{-\left(\mu (1-\alpha)x\right)^2}\right] \\ \frac{\partial f_1}{\partial \mu} &= \frac{(1-\alpha)^2x^2}{\sqrt{\pi}}e^{-\left(\mu (1-\alpha)x\right)^2} \end{aligned}\]

其中用到$\text{erf}(x)=\frac{2}{\sqrt{\pi}}\int_{0}^{x}e^{-t^2}dt$及$\text{erf}’(x)=\frac{2}{\sqrt{\pi}}e^{-x^2}$。使用$\sqrt{x^2+\mu^2}$近似的版本称为SMU-1。实验中设$\alpha=0.25$,$\mu$为可训练参数。

⚪ SAU:使用Dirac函数构造光滑近似

表达式 函数图像
\(\text{SAU}(x) = \frac{(1-\alpha)s}{\sqrt{2\pi}} e^{-\frac{x^2}{2s^2}}+ \frac{x}{2} + \frac{(1-\alpha) x}{2}\text{erf}\left(\frac{x}{\sqrt{2}s}\right)\)

SAU(smooth activation unit)给出了最一般的光滑化框架。Dirac函数(单位冲激函数)定义为:

\[\delta(x) = \begin{cases} +\infty, & x =0 \\ 0, & x\neq 0 \end{cases}, \quad \int_{-\infty}^{+\infty}\delta(x)dx = 1\]

它可以看作一个仅在$x=0$处取值的概率密度函数。Dirac函数本身没有明显意义,但作用于其他函数时具有重要性质:

\[\begin{aligned} \int_{-\infty}^{+\infty}f(x)\delta(x)dx &= f(0), & \int_{-\infty}^{+\infty}f(y)\delta(x-y)dy &= f(x) \\ \int_{-\infty}^{+\infty}f(x)\delta'(x)dx &= -f'(0), & \int_{-\infty}^{+\infty}f(x)\delta^{(n)}(x)dx &= (-1)^{n}f^{(n)}(0) \end{aligned}\]

其中第一行右侧的卷积形式是构造光滑近似的关键。由于Dirac函数没有显式表达式,通常采用一些连续函数作为它的光滑近似(文中称approximate identity)。一种思路是构造“钟形曲线”并让其宽度趋于$0$而积分保持为$1$:

\[\begin{aligned} \text{近似①(Gauss核)}: \quad & \delta(x) = \lim_{s \to 0} \frac{1}{\sqrt{2\pi}s}e^{-\frac{x^2}{2s^2}} \\ \text{近似②(Cauchy核)}: \quad & \delta(x) = \frac{1}{\pi}\lim_{a \to 0} \frac{a}{x^2+a^2} \end{aligned}\]

另一种思路是注意到Dirac函数的积分是单位阶跃函数$\theta(x)$,因此$\theta(x)$的光滑近似(S型曲线)的导数即为Dirac函数的光滑近似:

\[\text{近似③(Sigmoid导数)}: \quad \delta(x) = \lim_{t \to +\infty} \frac{d}{dx}\sigma(tx) = \lim_{t \to +\infty} \frac{te^{tx}}{\left(1+e^{tx}\right)^2}\]

于是,对任意具有可数个间断点的函数$f$,只要找到Dirac函数的光滑近似$\phi \approx \delta$,就可以构造$f$的光滑近似:

\[g(x) \approx \int_{-\infty}^{+\infty}f(y)\phi(x-y)dy = (f* \phi)(x)\]

光滑化 $=$ 与一个近似单位元做卷积。这个框架的威力在于:替换$f$和$\phi$就能导出各种已知的激活函数

① 光滑化ReLU(取$\phi$为近似③)

\[\begin{aligned} \max(x,0) &\approx \int_{0}^{+\infty}\frac{yte^{t(x-y)}}{\left(1+e^{t(x-y)}\right)^2}dy = \int_{0}^{+\infty}y\,d\left(\frac{1}{1+e^{t(x-y)}}\right) \\ &= \left.\frac{y}{1+e^{t(x-y)}}\right|_{0}^{+\infty}-\int_{0}^{+\infty}\frac{dy}{1+e^{t(x-y)}} = \frac{\ln\left(1+e^{tx}\right)}{t} \end{aligned}\]

当$t=1$时,上式恰好就是Softplus

② 光滑化阶跃函数(把ReLU写成$x\theta(x)$):若直接取$\theta(x)\approx\sigma(x)$,则$f(x)=x\sigma(x)$,恰好就是Swish;若用近似①作为$\theta(x)$的光滑近似,则

\[\max(x,0) = x\theta(x) \approx x \int_{0}^{+\infty}\frac{1}{\sqrt{2\pi}s}e^{-\frac{(x-y)^2}{2s^2}}dy = \frac{x}{2}\left[1+\text{erf}\left(\frac{x}{\sqrt{2}s}\right)\right]\]

当$s=1$时,上式恰好就是GELU

③ 光滑化LeakyReLU(取$\phi$为近似①),这就是SAU本身:

\[\max(x,\alpha x) \approx \frac{\alpha}{\sqrt{2\pi}s} \int_{-\infty}^{0} ye^{-\frac{(x-y)^2}{2s^2}}dy + \frac{1}{\sqrt{2\pi}s} \int_{0}^{+\infty} ye^{-\frac{(x-y)^2}{2s^2}}dy\]

利用不定积分

\[\begin{aligned} \int ye^{-\frac{(x-y)^2}{2s^2}}dy &= \int (y-x)e^{-\frac{(y-x)^2}{2s^2}}dy + x\int e^{-\frac{(y-x)^2}{2s^2}}dy \\ &= -s^2 e^{-\frac{(y-x)^2}{2s^2}} + \frac{\sqrt{2\pi}sx}{2} \text{erf}\left(\frac{y-x}{\sqrt{2}s}\right) \end{aligned}\]

代入并整理可得上表中的SAU表达式:

\[\text{SAU}(x) = \frac{(1-\alpha)s}{\sqrt{2\pi}} e^{-\frac{x^2}{2s^2}}+ \frac{x}{2} + \frac{(1-\alpha) x}{2}\text{erf}\left(\frac{x}{\sqrt{2}s}\right)\]

其关于$x$和$\alpha$的梯度为:

\[\begin{aligned} \frac{\partial \text{SAU}(x)}{\partial x} &= \frac{1}{2} + \frac{(1-\alpha)}{2}\text{erf}\left(\frac{x}{\sqrt{2}s}\right)-\frac{x(1-\alpha)}{\sqrt{2\pi}s} e^{-\frac{x^2}{2s^2}}+ \frac{(1-\alpha) x}{\sqrt{2\pi}s}e^{-\frac{x^2}{2s^2}} \\ \frac{\partial \text{SAU}(x)}{\partial \alpha} &= -\frac{s}{\sqrt{2\pi}} e^{-\frac{x^2}{2s^2}}- \frac{x}{2}\text{erf}\left(\frac{x}{\sqrt{2}s}\right) \end{aligned}\]

实验中$\alpha$初值取$0.15$并通过梯度更新,$s$固定为$5\times 10^{-5}$。

(5) 统一参数族

(4)中的光滑化视角在概念上统一了一批激活函数;另一条路线更彻底:把多个已知激活函数字面地写进同一个公式里,让网络通过少数几个可学习参数在它们之间插值,而不是由设计者事先挑定一个。

⚪ AGLU:统一的门控激活

表达式 函数图像
\(\begin{aligned} \text{AGLU}(z) &= z\cdot \eta(z;\kappa,\lambda) \\ \eta(z;\kappa,\lambda) &= \left(\lambda e^{-\kappa z}+1\right)^{-1/\lambda} \end{aligned}\)

作者首先把Sigmoid推广为上表中的自适应参数化Sigmoid $\eta(z;\kappa,\lambda)$,再把它套进自门控模板,即得到AGLU(adaptive gated linear unit)

这个两参数族包含了三个熟悉的特例:$\lambda=\kappa=1$时$\eta$退化为普通的Sigmoid;$\kappa\to\infty$时退化为ReLU;而在AGLU的形式下,$\lambda=\kappa=1$给出SiLU/Swish。也就是说,两个可学习标量就跨越了SigmoidReLUSiLU三者。

两个参数的分工是清晰的:$\kappa$控制过渡区的陡峭程度,$\lambda$控制曲线的非对称性。论文的动机来自长尾/不平衡识别:分类器上适合头部类别的激活形状与适合尾部类别的并不相同,因此让每个类别(或每个通道)各自学一组$(\kappa,\lambda)$能带来明显收益。且开销极小(每通道两个标量),该函数已集成进Ultralytics YOLO

3.6 上下文相关的激活函数

前面所有激活函数(除maxout)都是逐元素的标量函数:网络中每个激活值的变换只依赖它自己。这构成了一个信息瓶颈:激活函数完全无法利用上下文

本节的激活函数打破这一限制:它们是多输入函数,输出依赖于一组相关的输入。上下文的来源可以是全部特征Dynamic ReLU)、相邻通道Dynamic Shift-Max)或空间邻域FReLU)。

注意这类方法与注意力机制(尤其是SE模块)的边界是模糊的;它们通常都用“全局池化$+$两层全连接”来生成参数。区别在于:注意力机制生成的是乘性权重,而这里生成的是激活函数的形状参数

⚪ Dynamic ReLU

表达式 函数图像
\(y_c = f_{\theta(x)}(x_c) = \mathop{\max}_{1\leq k \leq K} \left\{a_c^k(x)\,x_c+b_c^k(x)\right\}\)

DY-ReLU把所有输入元素$x$的全局上下文信息编码到一个超函数(hyper function) $\theta(x)$中,并用它决定激活函数$f_{\theta(x)}(x)$的形状。

ReLU可以推广为分段线性函数$y_c=\max_k\left(a_c^kx_c+b_c^k\right)$;DY-ReLU让其中的斜率和截距由输入自适应地计算,即上表中的形式。

超函数$\theta(x)$输出全部$2KC$个参数:

\[\left[a_1^1,\cdots,a_C^1,\cdots,a_1^K,\cdots,a_C^K,b_1^1,\cdots,b_C^1,\cdots,b_1^K,\cdots,b_C^K\right]^\top=\theta(x)\]

$\theta(x)$的实现参考了SENetSE模块:先沿空间维度全局平均池化,再通过两个全连接层输出$2KC$个残差量$\Delta a,\Delta b$,最后与固定初值相加:

\[a_c^k(x)=\alpha^k+\lambda_a \Delta a_{c}^{k}(x), \quad b_c^k(x)=\beta^k+\lambda_b \Delta b_{c}^{k}(x)\]

实验中取$K=2$,$\alpha^1=1$,$\alpha^2=\beta^1=\beta^2=0$,即初始化为ReLU

DY-ReLU是一个相当强的统一框架,许多已有的激活函数都是它的特例:

根据超函数作用粒度的不同,作者设计了三种形式:

⚪ Dynamic Shift-Max

表达式 函数图像
\(y_i= \mathop{\max}_{1\leq k\leq K} \left\{\sum_{j=0}^{J-1} a_{i,j}^k(x)\,x_{C/G}(i,j)\right\}\)

Dynamic Shift-Max(由MicroNet提出)的动机是:当网络层数减少时性能会下降,而改善每一层的非线性可以补偿网络深度的减少。它引入的上下文是相邻通道组

设输入向量$x$具有$C$个通道,划分为$G$组,每组$C/G$个通道。定义第$i$个通道的$N$通道循环移位,以及组循环移位(即取每个组的对应通道位置):

\[\begin{aligned} x_N(i) &= x_{(i+N) \bmod C} \\ x_{C/G}(i,j) &= x_{\left(i+jC/G\right) \bmod C}, \quad j=0,1,\cdots,G-1 \end{aligned}\]

Dynamic Shift-Max对多个组移位的加权和取最大值,即上表中的形式,其中系数$a_{i,j}^k(x)$同样通过类似SE的方式由输入计算。下图展示了只关注该组与下一组的特殊情况:

Dynamic Shift-Max共引入$CJK$个参数(实践中取$J=K=2$)。它的一个附带好处是:由于跨组混合了通道,它提高了不同通道组之间的连通性,可以作为逐点卷积的补充;这在极端轻量化的网络中尤其有价值。

⚪ FReLU:空间邻域上下文

表达式 函数图像
\(\text{FReLU}(x) = \max\left(x, T(x)\right)\)

FReLU(funnel activation)引入的上下文是空间邻域,其设计逻辑是一条清晰的推广链条:

这个改动看起来很小,但它使激活函数具备了空间建模能力。通常的卷积神经网络通过加深网络线性地增加感受野,且感受野形状始终是矩形(下图a);引入FReLU后,每个位置会根据$\max$的结果隐式地在$1 \times 1$与$3 \times 3$感受野之间选择,使得整个网络的有效感受野不再是规则的矩形,从而能够适配物体的不规则形状(下图b、c):

FReLU因此特别适合视觉任务(分类、检测、分割),额外开销仅为一个深度卷积。

3.7 门控激活函数

门控激活函数与前面各族的思路都不同:它不是设计一个更好的一元函数,而是改变前馈层的结构;把一路线性变换的输出作为去调制另一路线性变换的输出。

⚪ GLU 及其变体

表达式 函数图像
\(\text{GLU}(x) = \sigma(xW + b) \otimes (xV + c)\)

上表即GLU(gated linear unit)的基本形式,其中$\otimes$表示逐元素相乘。GLU用一路的Sigmoid输出作为门控信号,控制另一路信息的通过量。相比逐元素激活函数,GLU引入了乘性交互,其表达能力更强,且梯度可以通过线性支路无衰减地传播。

把$\sigma$替换为其他激活函数,可以得到一系列变体(此外还有省略激活函数的Bilinear形式):

\[\begin{aligned} \text{ReGLU}(x) &= \text{ReLU}(xW + b) \otimes (xV + c) \\ \text{GEGLU}(x) &= \text{GELU}(xW + b) \otimes (xV + c) \\ \text{SwiGLU}(x) &= \text{Swish}(xW + b) \otimes (xV + c) \\ \text{Bilinear}(x) &= (xW + b) \otimes (xV + c) \end{aligned}\]

Transformer中,把传统的前馈层(FFN)替换为GLU族即得到:

\[\begin{aligned} \text{FFN}(x) &= \text{ReLU}(xW_1)W_2 \\ \text{FFN}_{\text{SwiGLU}}(x) &= \left(\text{Swish}(xW) \otimes xV\right)W_2 \end{aligned}\]

注意这里有一个重要的工程细节:GLU族的FFN需要三个权重矩阵($W,V,W_2$)而非两个,因此为了保持参数量和计算量与原始模型一致,需要把隐藏维度$d_{ff}$减少为原来的$2/3$(原论文中直接减半)。

T5的预训练与下游微调实验中,GEGLUSwiGLU取得了最低的困惑度和最好的下游任务表现。这一结论影响深远:SwiGLU已成为当前主流大语言模型(PaLMLLaMA系列等)前馈层的标准配置。

⚪ dReLU:为稀疏推理设计的门控

表达式 函数图像
\(\text{FFN}_{\text{dReLU}}(x) = \left(\text{ReLU}(xW_{\text{gate}}) \otimes \text{ReLU}(xW_{\text{up}})\right)W_{\text{down}}\)

SwiGLU虽然效果最好,却对稀疏推理极不友好:Swish永远不会精确等于$0$(只是趋近于$0$),因此前馈层中几乎每一个神经元都是“激活”的,推理时无法跳过任何计算。

dReLU(dual ReLU)的改动很简单:对两路都施加ReLU。这样一个神经元的输出只有在两路同时为正时才非零。稀疏度的提升是相乘的:若两路各有约一半概率为正且相关性不强,联合激活率会急剧下降,远低于只对一路施加ReLU的情形。论文报告在保持模型质量的前提下前馈层稀疏度可达约$90\%$,这直接转化为CPU和显存受限设备上的推理加速。

代价是:dReLU必须在预训练阶段(或大规模持续预训练中)引入,不能对已有的SwiGLU模型直接替换。

⚪ 扩展门控范围:xATLU、xGELU、xSiLU

表达式 函数图像
\(\begin{aligned} \text{ATLU}(x) &= x\cdot \frac{\arctan(x) + \pi/2}{\pi} \\ \text{x-gated}(x) &= x\left[g(x)(1+2\alpha) - \alpha\right] \end{aligned}\)

作者首先用$\arctan$构造了一个新的门控函数ATLU(上表第一行)。更有价值的是文中提出的通用扩展技巧(上表第二行):对任意值域为$(0,1)$的门控函数$g(x)$,用一个可学习的$\alpha$(初始化为$0$)作线性重映射,把门控的值域从$(0,1)$拉伸为$(-\alpha, 1+\alpha)$。于是门控获得了两项新能力:可以取负值(不只是抑制输入,还能翻转输入的符号),也可以大于1(放大输入)。

$\alpha$初始化为$0$意味着训练从未修改的原始激活函数出发,因此这是一个严格安全的推广:最差情况下$\alpha$保持在$0$附近,退化为原函数。把该技巧分别作用于$\arctan$、GELUSiLU的门控,即得到xATLUxGELUxSiLU

⚪ PowLU:一个幂型门控

表达式 函数图像
\(\text{PowLU}(x) =\begin{cases} x\cdot x^{\frac{m}{\sqrt{x}+1}}\cdot \sigma(x), & x> 0 \\ x^2\cdot \sigma(x), & x\leq 0 \end{cases}, \quad 0<m<10\)

PowLU把3.2(5)节的幂型思路与自门控结合起来。正半轴的指数$\frac{m}{\sqrt{x}+1}$随$x$增大从$m$衰减到$0$,因此函数在原点附近是超线性增长的,在远处则趋于近似线性;相当于在幂型激活与普通自门控之间做插值。

有一点必须明确指出(这也是它与本文其他所有激活函数的显著差异):负半轴的$x^2\sigma(x)$是正的而非负的,形成一个小的正向凸包,峰值约为$0.48$、位置在$x\approx -2.4$附近。这个行为相当反常,不过函数在原点处仍然连续且$C^1$。

4. 速查表与选型建议

(1) 速查表

激活函数 表达式
Step \(\begin{cases} 1, & x\geq 0 \\ 0, & x<0 \end{cases}\)
Sigmoid \(\sigma(x)=\frac{1}{1+e^{-x}}\)
HardSigmoid:降低Sigmoid计算量 \(\begin{cases} 1, & x\geq 1 \\ (x+1)/2, & -1<x<1 \\ 0, & x\leq -1 \end{cases}\)
Tanh \(\begin{aligned} &2\sigma(2x)-1 \\ &=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} \end{aligned}\)
HardTanh:降低Tanh计算量 \(\begin{cases} 1, & x>1 \\ x, & -1\leq x\leq 1 \\ -1, & x<-1 \end{cases}\)
ISRU:使用逆平方根近似Tanh \(\frac{x}{\sqrt{1 + \alpha x^2}}\)
Softsign:多项式饱和的Tanh替代 \(\frac{x}{1+|x|}\)
Softplus:ReLU的光滑近似 \(\begin{aligned} &\int_{-\infty}^{x}\sigma(t)dt \\ &=\ln\left(1+e^x\right) \end{aligned}\)
Squareplus:Softplus的代数近似 \(\frac{1}{2}\left(x+\sqrt{x^2+b}\right)\)
ReLU \(\begin{aligned} &\max(x,0) \\ &=\begin{cases} x, & x\geq 0 \\ 0, & x<0 \end{cases} \end{aligned}\)
ReLU6:适配低精度部署 \(\begin{aligned} &\min\left(\max(x,0),6\right) \\ &=\begin{cases} 6, & x\geq 6 \\ x, & 0\leq x<6 \\ 0, & x<0 \end{cases} \end{aligned}\)
LeakyReLU:解决dead ReLU \(\begin{aligned} &\max(x,0.01x) \\ &=\begin{cases} x, & x\geq 0 \\ 0.01x, & x<0 \end{cases} \end{aligned}\)
PReLU:可学习参数$\alpha$ \(\begin{aligned} &\max(x,\alpha x) \\ &=\begin{cases} x, & x\geq 0 \\ \alpha x, & x<0 \end{cases} \end{aligned}\)
RReLU:均匀分布采样$\alpha$ \(\begin{aligned} &\max(x,\alpha x) \\ &=\begin{cases} x, & x\geq 0 \\ \alpha x, & x<0 \end{cases} \end{aligned}\)
CReLU:拼接正负两路整流 \(\left[\text{ReLU}(x), \text{ReLU}(-x)\right]\)
SReLU:双侧可学习阈值 \(\begin{cases} a^r\left(x-t^r\right)+t^r, & x\geq t^r \\ x, & t^l < x < t^r \\ a^l\left(x-t^l\right)+t^l, & x\leq t^l \end{cases}\)
SUGAR:前向ReLU、反向B-SiLU梯度 \(\text{B-SiLU}(x)=(x+\alpha)\sigma(x)-\frac{\alpha}{2}\)
ELU:解决bias shift \(\begin{cases} x, & x\geq 0 \\ \alpha\left(e^x-1\right), & x<0 \end{cases}\)
CELU:连续可微的ELU \(\begin{cases} x, & x\geq 0 \\ \alpha\left(e^{x/\alpha}-1\right), & x<0 \end{cases}\)
SELU:自标准化的ELU \(\begin{cases} \lambda x, & x\geq 0 \\ \lambda\alpha\left(e^x-1\right), & x<0 \end{cases}\)
ISRLU:使用逆平方根近似ELU \(\begin{cases} x, & x\geq 0 \\ \frac{x}{\sqrt{1 + \alpha x^2}}, & x<0 \end{cases}\)
PELU:参数化的ELU \(\begin{cases} \frac{a}{b}x, & x\geq 0 \\ a\left(e^{x/b}-1\right), & x<0 \end{cases}\)
GELU:随机正则化视角 \(\begin{aligned} &x\Phi(x)=x\int_{-\infty}^{x} \frac{1}{\sqrt{2\pi}}e^{-\frac{t^2}{2}}dt \\ &= \frac{x}{2}\left(1+\text{erf}\left(\frac{x}{\sqrt{2}}\right)\right) \end{aligned}\)
Squared ReLU:搜索出的平方整流 \(\left(\text{ReLU}(x)\right)^2=\max(x,0)^2\)
StarReLU:标准化的平方整流 \(\begin{aligned} &s\cdot\left(\text{ReLU}(x)\right)^2+b \\ &s\approx 0.8944,\ b\approx -0.4472 \end{aligned}\)
xIELU:正半轴二次、负半轴指数 \(\begin{cases} \alpha_p x^2 + 0.5x, & x> 0 \\ \alpha_n\left(e^x-1\right)-\alpha_n x + 0.5x, & x\leq 0 \end{cases}\)
PolyCom:多项式组合(PolyReLU形式) \(\sum_{i=0}^{r} a_i \left(\text{ReLU}(x)\right)^i\)
Swish:强化学习搜索 \(\begin{aligned} &x\cdot \sigma(\beta x) \\ &= \frac{x}{1+e^{-\beta x}} \end{aligned}\)
HardSwish:降低Swish计算量 \(\begin{aligned} &x \cdot \frac{\text{ReLU6}(x+3)}{6} \\ &= \begin{cases} x, & x \geq 3 \\ \frac{x(x+3)}{6}, & -3 \leq x <3 \\ 0, & x < -3 \end{cases} \end{aligned}\)
Mish:进一步搜索Swish \(\begin{aligned} &x\cdot \tanh\left(\text{Softplus}(x)\right) \\ &=x\cdot \tanh\left(\ln\left(1+e^x\right)\right) \end{aligned}\)
ELiSH:遗传算法搜索 \(\begin{aligned} &\sigma(x) \cdot \text{ELU}(x) \\ &= \begin{cases} \frac{x}{1+e^{-x}}, & x\geq 0 \\ \frac{e^x-1}{1+e^{-x}}, & x<0 \end{cases} \end{aligned}\)
HardELiSH:降低ELiSH计算量 \(\begin{aligned} &\text{HardSigmoid}(x) \cdot \text{ELU}(x) \\ &= \begin{cases} x, & x\geq 1 \\ x(x+1)/2, & 0 \leq x<1 \\ \left(e^x-1\right)(x+1)/2, & -1\leq x<0 \\ 0, & x\leq -1 \end{cases} \end{aligned}\)
E-Swish:缩放Swish \(\beta x\sigma(x), \quad \beta \in [1,2]\)
LiSHT:偶函数型自门控 \(x\tanh(x)\)
TanhExp:面向轻量级网络 \(x\tanh\left(e^x\right)\)
GELUSine:LLM搜索出的激活函数 \(\text{GELU}(x)+0.1\sin(x)\)
SIREN:正弦激活 \(\sin\left(\omega_0\left(Wx+b\right)\right)\)
Snake:单调项加周期项 \(x+\frac{1}{a}\sin^2(ax)\)
GCU:余弦门控 \(x\cos(x)\)
Maxout:分段线性单元 \(\mathop{\max}_{j\in [1,k]}\left(x^\top W_{i,j}+b_{i,j}\right)\)
APL:通过ReLU构造分段线性 \(\begin{aligned} &\max(0,x) \\ &+\sum_{s=1}^{S}a^s\max\left(0,-x+b^s\right) \end{aligned}\)
PWLU:直接参数化分段线性 \(\begin{cases} \left(x-B_L\right)K_L+Y^0, & x<B_L \\ \left(x-B_R\right)K_R+Y^N, & x\geq B_R \\ \left(x-B_i\right)K_i+Y^i, & \text{其他} \end{cases}\)
PAU:Padé近似 \(\frac{a_0+a_1x+\cdots+a_mx^m}{1+|b_1||x|+\cdots+|b_n||x|^n}\)
OPAU:正交Padé近似 \(\frac{c_0+c_1f_1(x)+\cdots+c_kf_k(x)}{1+|d_1||f_1(x)|+\cdots+|d_l||f_l(x)|}\)
KAN:B样条参数化(作用在边上) \(w_b\cdot \text{silu}(x)+w_s\sum_i c_i B_i(x)\)
ACON:最大值函数的softmax近似 \(\left(p_1-p_2\right)x\sigma\left(\beta (p_1-p_2)x\right)+p_2x\)
SMU:最大值函数的绝对值近似 \(\frac{(1+\alpha)x+(1-\alpha)x\,\text{erf}\left(\mu (1-\alpha)x\right)}{2}\)
SAU:使用Dirac函数近似 \(\frac{(1-\alpha)s}{\sqrt{2\pi}} e^{-\frac{x^2}{2s^2}}+ \frac{x}{2} + \frac{(1-\alpha) x}{2}\text{erf}\left(\frac{x}{\sqrt{2}s}\right)\)
AGLU:统一Sigmoid/ReLU/SiLU的参数族 \(x\left(\lambda e^{-\kappa x}+1\right)^{-1/\lambda}\)
Dynamic ReLU:全局上下文 \(\mathop{\max}_{1\leq k \leq K} \left\{a_c^k(x)\,x_c+b_c^k(x)\right\}\)
Dynamic Shift-Max:循环移位多输入 \(\mathop{\max}_{1\leq k\leq K} \left\{\sum_{j=0}^{J-1} a_{i,j}^k(x)\,x_{C/G}(i,j)\right\}\)
FReLU:卷积窗口输入 \(\max\left(x,T(x)\right)\)
GLU:门控线性单元 \(\sigma(xW+b) \otimes (xV+c)\)
ReGLU:使用ReLU进行门控 \(\text{ReLU}(xW+b) \otimes (xV+c)\)
GEGLU:使用GELU进行门控 \(\text{GELU}(xW+b) \otimes (xV+c)\)
SwiGLU:使用Swish进行门控 \(\text{Swish}(xW+b) \otimes (xV+c)\)
dReLU:两路都用ReLU(稀疏推理) \(\text{ReLU}(xW_{\text{gate}}) \otimes \text{ReLU}(xW_{\text{up}})\)
xATLU / xGELU / xSiLU:扩展门控范围 \(x\left[g(x)(1+2\alpha)-\alpha\right]\)
PowLU:幂型门控 \(\begin{cases} x\cdot x^{\frac{m}{\sqrt{x}+1}}\sigma(x), & x> 0 \\ x^2\sigma(x), & x\leq 0 \end{cases}\)

(2) 选型建议

尽管激活函数的研究已经产生了数百种方案,实践中的选择其实相当收敛。以下建议按场景给出: