专栏算法工具链常见激活函数整理与归纳

常见激活函数整理与归纳

kotei左文亮2024-04-19
51
0

一、神经网络中激活函数定义和作用

主要作用是对所有的隐藏层和输出层添加一个非线性的操作,使得神经网络的输出更为复杂、表达能力更强。下图展示了一个神经元是如何输入激活函数以及如何得到该神经元最终的输出:

在神经网络中,激活函数决定来自给定输入集的节点的输出,如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。

使用激活函数能够给神经元引入非线性因素,使得神经网络可以任意逼近任何非线性函数,使深层神经网络表达能力更加强大,这样神经网络就可以应用到众多的非线性模型中。而非线性激活函数允许网络复制复杂的非线性行为。正如绝大多数神经网络借助某种形式的梯度下降进行优化,激活函数需要是可微分(或者至少是几乎完全可微分的)。此外,复杂的激活函数也许产生一些梯度消失或爆炸的问题。因此,神经网络倾向于部署若干个特定的激活函数。

二、激活函数的分类

激活函数主要分为饱和激活函数和非饱和激活函数。假设H(x)是一个激活函数,当x趋近于正无穷时,激活函数的导数趋近于0,我们称之为右饱和;当x趋近于负无穷的时候,激活函数的导数趋近于0,则称之为左饱和,当函数既满足左饱和又满足右饱和的时候我们就称之为饱和激活函数。典型的饱和激活函数有Sigmoid, Tanh等。非饱和激活函数有ReLU、LeakyReLU、ELU、PReLU等。

三、常见激活函数优缺点

1、逻辑函数Sigmoid激活函数

数学表达式为:

$$f(x)=1/(1+e^x)$$

函数图像如下:


Sigmoid函数在历史上曾非常常用,输出值范围为[0,1]之间的实数。但是现在它已经不太受欢迎,实际中很少使用。

其优点主要是其输出范围是 0 到 1,非常适合作为模型的输出函数用于输出一个0——1范围内的概率值,比如用于表示二分类的类别或者用于表示置信度;还有其梯度平滑,便于求导,也防止模型训练过程中出现突变的梯度

其缺点也比较多。容易造成梯度消失,我们从导函数图像中了解到sigmoid的导数都是小于0.25的,那么在进行反向传播的时候,梯度相乘结果会慢慢的趋向于0。这样几乎就没有梯度信号通过神经元传递到前面层的梯度更新中,因此这时前面层的权值几乎没有更新,这就叫梯度消失。除此之外,为了防止饱和,必须对于权重矩阵的初始化特别留意。如果初始化权重过大,可能很多神经元得到一个比较小的梯度,致使神经元不能很好的更新权重提前饱和,神经网络就几乎不学习;其函数输出不是以 0 为中心的,梯度可能就会向特定方向移动,从而降低权重更新的效率。最后,Sigmoid 函数执行指数运算,计算机运行得较慢,比较消耗计算资源,这点很重要,当我们将深度学习算法部署在边缘设备的时候,例如地平线的J5,J3等,计算资源是相对有限的,应该选用尽量少占资源的算子。

2、双曲正切函数Tanh激活函数

数学表达式为:

函数图像如下:

实际上,Tanh函数是 sigmoid 的变形:Tanh(x) = 2Sigmoid(2x) - 1, 与Sigmoid不同的是,tanh是“零为中心”的。因此在实际应用中,tanh会比sigmoid更好一些。但是在饱和神经元的情况下,tanh还是没有解决梯度消失问题。

优点:输出间隔为 1,并且整个函数以 0 为中心,比 sigmoid 函数更好;在 Tanh 图中,负输入将被强映射为负,而零输入被映射为接近零。

缺点:仍然存在梯度饱和的问题;依然进行的是指数运算。

3、线性整流函数ReLU激活函数

数学表达式为:

函数图像如下:

ReLU优点:ReLU解决了梯度消失的问题,当输入值为正时,神经元不会饱和;由于ReLU线性、非饱和的性质,在SGD中能够快速收敛;计算复杂度低,不需要进行指数运算,在中断部署的时候效率高。

ReLU缺点:与Sigmoid一样,其输出不是以0为中心的;Dead ReLU 问题。当输入为负时,梯度为0。这个神经元及之后的神经元梯度永远为0,不再对任何数据有所响应,导致相应参数永远不会被更新。训练神经网络的时候,一旦学习率没有设置好,第一次更新权重的时候,输入是负值,那么这个含有ReLU的神经节点就会死亡,再也不会被激活。所以,要设置一个合适的较小的学习率,来降低这种情况的发生。

4、带泄露线性整流函数Leaky Relu激活函数

数学表达式为:

函数图像如下:

Leaky ReLU优点:解决了ReLU输入值为负时神经元出现的死亡的问题;Leaky ReLU线性、非饱和的性质,在SGD中能够快速收敛;计算复杂度低,不需要进行指数运算。

Leaky ReLU有缺点:函数中的α,需要通过先验知识人工赋值(一般设为0.01);有些近似线性,导致在复杂分类中效果不好。

从理论上讲,Leaky ReLU 具有 ReLU 的所有优点,而且 Dead ReLU 不会有任何问题,但在实际操作中,尚未完全证明 Leaky ReLU 总是比 ReLU 更好。因此,工程部署时候还是优先推荐使用 ReLU 。

5、参数化线性整流函数PReLU

数学表达式为:

函数图像如下:

PRelu激活函数也是用来解决ReLU带来的神经元坏死的问题。与Leaky ReLU激活函数不同的是,PRelu激活函数负半轴的斜率参数α 是通过学习得到的,而不是手动设置的恒定值。理论上在训练时候效果是高于Leaky ReLU。

6、指数线性函数ELU激活函数

数学表达式为:

函数图像如下:

与Leaky ReLU和PRelu激活函数不同的是,ELU激活函数的负半轴是一个指数函数而不是一条直线。

ELU优点:ELU试图将激活函数的输出均值接近于零,使正常梯度更接近于单位自然梯度,从而加快学习速度;ELU 在较小的输入下会饱和至负值,从而减少前向传播的变异和信息。

ELU缺点:计算的时需要计算指数,计算效率低。

7、扩展指数线性函数SELU激活函数的

数学表达式为:

其中λ = 1.0507 , α = 1.6733 。函数图像如下:

SELU 允许构建一个映射 g,其性质能够实现 SNN(自归一化神经网络)。SNN 不能通过ReLU、sigmoid 、tanh 和 Leaky ReLU 实现。这个激活函数需要有:(1)负值和正值,以便控制均值;(2)饱和区域(导数趋近于零),以便抑制更低层中较大的方差;(3)大于 1 的斜率,以便在更低层中的方差过小时增大方差;(4)连续曲线。后者能确保一个固定点,其中方差抑制可通过方差增大来获得均衡。通过乘上指数线性单元(ELU)来满足激活函数的这些性质,而且 λ>1 能够确保正值净输入的斜率大于 1。

SELU激活函数是在自归一化网络中定义的,通过调整均值和方差来实现内部的归一化,这种内部归一化比外部归一化更快,这使得网络能够更快得收敛。


8、SiLU(Sigmoid Linear Unit)激活函数

也称为 Swish激活函数,是Sigmoid和ReLU的改进版,SiLU具备无上界有下界、平滑、非单调的特性。SiLU在深层模型上的效果优于 ReLU。可以看做是平滑的ReLU激活函数。数学表达式为:

其中 sigmoid(x) 是标准的 sigmoid 函数,它的值在 0 和 1 之间。Swish 函数的特性包括非线性,连续可导,并且在负无穷到正无穷的范围内都有定义。函数图像如下:

Swish激活函数无界性有助于防止慢速训练期间,梯度逐渐接近 0 并导致饱和;同时,有界性也是有优势的,因为有界激活函数可以具有很强的正则化(防止过拟合, 进而增强泛化能力),并且较大的负输入问题也能解决。

Swish激活函数在x=0附近更为平滑,而非单调的特性增强了输入数据和要学习的权重的表达能力。

Swish 函数在实践中已经证明了其有效性,特别是在深度神经网络中。它既有 ReLU(Rectified Linear Unit)激活函数的一些优点(例如,能够缓解梯度消失问题),又能解决 ReLU 函数的一些缺点(例如,ReLU 函数不是零中心的,且在负数部分的梯度为零)。此外,Swish 函数还是平滑函数,这意味着它在整个定义域内都有导数,这有利于优化。

缺点基本就是要进行指数运算,计算机运行得较慢,比较消耗计算资源。在部署时候,要慎重考虑使用。

9、Softmax激活函数

数学表达式为:

函数图像如下:

Softmax函数常在神经网络输出层充当激活函数,将输出层的值通过激活函数映射到0-1区间,将神经元输出构造成概率分布,用于多分类问题中,Softmax激活函数映射值越大,则真实类别可能性越大。

算法工具链
技术深度解析杂谈
评论0
0/1000