常见的激活函数有:
- Sigmoid激活函数
- Tanh激活函数
- Relu激活函数
- Leaky Relu激活函数
- P-Relu激活函数
- ELU激活函数
- R-Relu激活函数
- Gelu激活函数
- swich激活函数
- Selu激活函数
激活函数可以分为两大类 :
- 饱和激活函数:sigmoid、tanh
- 非饱和激活函数: ReLU、Leaky Relu、ELU【指数线性单元】、PReLU【参数化的ReLU 】、RReLU【随机ReLU】
饱和激活函数(sigmoid、tanh):
1. Sigmoid激活函数
sigmoid函数也叫Logistic函数,用于隐藏层的输出,输出在(0,1)之间,它可以将一个实数映射到(0,1)的范围内,可以用来做二分类。常用于:在特征相差比较复杂或是相差不是特别大的时候效果比较好。该函数将大的负数转换成0,将大的正数转换为1。公式描述如下:
Sigmoid函数以及导数:
sigmoid函数的缺点:
- 梯度消失:Sigmoid 函数趋近 0 和 1 的时候变化率会变得平坦,也就是说,Sigmoid 的梯度趋近于 0。神经网络使用 Sigmoid 激活函数进行反向传播时,输出接近 0 或 1 的神经元其梯度趋近于 0。这些神经元叫作饱和神经元。因此,这些神经元的权重不会更新。此外,与此类神经元相连的神经元的权重也更新得很慢。该问题叫作梯度消失。因此,想象一下,如果一个大型神经网络包含 Sigmoid 神经元,而其中很多个都处于饱和状态,那么该网络无法执行反向传播。
- 不以零为中心:Sigmoid 输出不以零为中心的。
- 计算成本高昂:exp() 函数与其他非线性激活函数相比,计算成本高昂。
下一个要讨论的非线性激活函数解决了 Sigmoid 函数中值域期望不为 0 的问题。
2. Tanh激活函数
Tanh 激活函数又叫作双曲正切激活函数(hyperbolic tangent activation function)。
与 Sigmoid 函数类似,Tanh 函数也使用真值,但 Tanh 函数将其压缩至-1 到 1 的区间内。与 Sigmoid 不同,Tanh 函数的输出以零为中心,因为区间在-1 到 1 之间。你可以将 Tanh 函数想象成两个 Sigmoid 函数放在一起。在实践中,Tanh 函数的使用优先性高于 Sigmoid 函数。负数输入被当作负值,零输入值的映射接近零,正数输入被当作正值。
优点:它解决了Sigmoid函数的不是zero-centered输出问题。
缺点:梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。
为了解决梯度消失问题,我们来讨论另一个非线性激活函数——修正线性单元(rectified linear unit,ReLU),该函数明显优于前面两个函数,是现在使用最广泛的函数。
3. Relu(修正线性单元)激活函数
Relu激活函数的解析式:
Relu函数及其导数的图像如下图所示:
Relu激活函数优点:
当输入 x<0 时,输出为 0,当 x> 0 时,输出为 x。该激活函数使网络更快速地收敛。它不会饱和,即它可以对抗梯度消失问题,至少在正区域(x> 0 时)可以这样,因此神经元至少在一半区域中不会把所有零进行反向传播。由于使用了简单的阈值化(thresholding),ReLU 计算效率很高。
Relu激活函数缺点:
- 不以零为中心:和 Sigmoid 激活函数类似,ReLU 函数的输出不以零为中心。
- 前向传导(forward pass)过程中,如果 x < 0,则神经元保持非激活状态,且在后向传导(backward pass)中「杀死」梯度。这样权重无法得到更新,网络无法学习。当 x = 0 时,该点的梯度未定义,但是这个问题在实现中得到了解决,通过采用左侧或右侧的梯度的方式。
尽管存在这两个问题,ReLU目前仍是最常用的activation function,在搭建人工神经网络的时候推荐优先尝试!
为了解决 ReLU 激活函数中的梯度消失问题,当 x < 0 时,我们使用 Leaky ReLU——该函数试图修复 dead ReLU 问题。下面我们就来详细了解 Leaky ReLU。
4. Leaky Relu激活函数
Leaky Relu激活函数的解析式:
Leaky Relu函数及其导数的图像如下图所示:
Leaky ReLU 的概念是:当 x < 0 时,它得到 0.01 的正梯度。
优点:
该函数一定程度上缓解了 dead ReLU 问题。
缺点:
使用该函数的结果并不连贯。尽管它具备 ReLU 激活函数的所有特征,如计算高效、快速收敛、在正区域内不会饱和。
Leaky ReLU 可以得到更多扩展。不让 x 乘常数项,而是让 x 乘超参数,这看起来比 Leaky ReLU 效果要好。该扩展就是 Parametric ReLU。
5. P-Relu(Parametric ReLU)激活函数
P-Relu激活函数的解析式:
P-Relu函数及其导数的图像如下图所示:
其中
是超参数。这里引入了一个随机的超参数
,它可以被学习,因为你可以对它进行反向传播。这使神经元能够选择负区域最好的梯度,有了这种能力,它们可以变成 ReLU 或 Leaky ReLU。
总之,最好使用 ReLU,但是你可以使用 Leaky ReLU 或 Parametric ReLU 实验一下,看看它们是否更适合你的问题。
6. Elu激活函数
Elu激活函数的解析式:
Elu激活函数及其导数的图像如下图所示:
ELU也是为解决ReLU存在的问题而提出。
Elu激活函数有优点:ReLU的基本所有优点、不会有Dead ReLU问题,输出的均值接近0、零中心点问题。
Elu激活函数有缺点:计算量稍大,原点不可导。几种常见激活函数(笔记整理)_u010513327的博客-CSDN博客_激活函数
类似于Leaky ReLU,理论上虽然好于ReLU,但在实际使用中目前并没有好的证据ELU总是优于ReLU。
7. Gelu激活函数
Gelu激活函数的解析式:
Gelu激活函数及其导数的图像如下图所示:
bert中使用的激活函数,作者经过实验证明比relu等要好。原点可导,不会有Dead ReLU问题。值得注意的是最近席卷NLP领域的BERT等预训练模型几乎都是用的这个激活函数。
8. Swich激活函数
该函数又叫作自门控激活函数,它近期由谷歌的研究者发布,数学公式为:
Swich激活函数及其导数的图像如下图所示:
根据上图,从图像上来看,Swish函数跟ReLu差不多,唯一区别较大的是接近于0的负半轴区域,因此,Swish 激活函数的输出可能下降,即使在输入值增大的情况下。大多数激活函数是单调的,即输入值增大的情况下,输出值不可能下降。而 Swish 函数为 0 时具备单侧有界(one-sided boundedness)的特性,它是平滑、非单调的。
缺点: - 只有实验证明,没有理论支持。 - 在浅层网络上,性能与relu差别不大。
9. Selu激活函数
Selu激活函数的解析式:
其实就是ELU乘了个lambda,关键在于这个lambda是大于1的。以前relu,prelu,elu这些激活函数,都是在负半轴坡度平缓,这样在activation的方差过大的时候可以让它减小,防止了梯度爆炸,但是正半轴坡度简单的设成了1。而selu的正半轴大于1,在方差过小的的时候可以让它增大,同时防止了梯度消失。这样激活函数就有一个不动点,网络深了以后每一层的输出都是均值为0方差为1。
当其中参数取为
时,在网络权重服从标准正态分布的条件下,各层输出的分布会向标准正态分布靠拢。这种「自我标准化」的特性可以避免梯度消失和爆炸的问题,让结构简单的前馈神经网络获得甚至超越 state-of-the-art 的性能。
selu的证明部分前提是权重服从正态分布,但是这个假设在实际中并不能一定成立,众多实验发现效果并不比relu好。
与实验室伙伴共同总结,这里写下方便自己复习,伙伴原文连接如下
Reference:
siyuan:人脸识别系统之激活函数篇zhuanlan.zhihu.com