常见激活函数及其用途
Frozen_Ladybug · · 算法·理论
注:本专栏来源于之前的笔记,我对一部分作了归纳总结。
\text{Part I.} 激活函数的概念和用法
激活函数(Activation Function)是一种添加到人工神经网络中的函数,旨在帮助网络学习数据中的复杂模式。类似于人类大脑中基于神经元的模型,激活函数最终决定了要发射给下一个神经元的内容。
在人工神经网络中,一个节点的激活函数定义了该节点在给定的输入或输入集合下的输出。标准的计算机芯片电路可以看作是根据输入得到开(1)或关(0)输出的数字电路激活函数。
激活函数主要用于人工神经元中,其工作原理数学可视化后如下:
\text{Part II. } 常用的激活函数
-
Sigmoid 激活函数
f(z)=\dfrac{1}{1+e^{-z}} 优点:Sigmoid 函数的输出范围是 0 到 1,对每个神经元的输出进行了归一化;用于将预测概率作为输出的模型;可导且可微。
缺点:倾向于梯度消失;不以 0 为中心,会降低权重更新的效率;指数运算运行得较慢。
-
$$\tanh(x)=\dfrac{e^x-e^{-x}}{e^x+e^{-x}}$$ 当输入较大或较小时,输出几乎是平滑的并且梯度较小,这不利于权重更新。二者的区别在于输出间隔,$\tanh$ 的输出间隔为 1,并且整个函数以 0 为中心,比 sigmoid 函数更好; 在 $\tanh$ 函数中,负输入将被强映射为负,而零输入被映射为接近零。 注意:在一般的二元分类问题中,$\tanh$ 函数用于隐藏层,而 sigmoid 函数用于输出层,但这并不是固定的,需要根据特定问题进行调整。 -
ReLU 激活函数
\sigma(x)=\max\{0,x\} 优点:当输入为正时,不存在梯度饱和问题;计算速度快得多。
缺点:当输入为负时,ReLU 完全失效,在正向传播过程中,这不是问题。有些区域很敏感,有些则不敏感。但是在反向传播过程中,如果输入负数,则梯度将完全为零,sigmoid 函数和 tanh 函数也具有相同的问题;ReLU 函数的输出为 0 或正数,这意味着 ReLU 函数不以 0 为中心。
-
Leaky ReLU 函数
x&\text{if }x\ge0\\ ax&\text{if }x<0 \end{cases} Leaky ReLU 通过把
x 的非常小的线性分量给予负输入来调整负值的零梯度问题。通常a 的值为 0.01 左右。这让函数的值域为全体实数(虽然大部分时间用不到很大的负数)。目前尚未发现 Leaky ReLU 函数劣于 ReLU 函数的样例。
-
ELU 函数
x&\text{if }x\ge0\\ \alpha(e^x-1)&\text{if }x<0 \end{cases} ELU 函数输出的平均值接近 0,以 0 为中心;通过减少偏置偏移的影响,使正常梯度更接近于单位自然梯度,从而使均值向零加速学习;ELU 在较小的输入下会饱和至负值,从而减少前向传播的变异和信息。
和 Leaky ReLU 函数一样,目前尚未发现其劣于 ReLU 函数的样例。
-
PReLU 函数
x&\text{if }x>0\\ a_ix&\text{if }x\le0 \end{cases} 如果
a_i=0 ,则f 变为 ReLU。如果a_i>0 ,则f 变为 Leaky ReLU。如果a_i 是可学习的参数,则f 变为 PReLU。在负值域,PReLU 的斜率较小,这也可以避免 ReLU 函数出现的问题。
与 ELU 相比,PReLU 在负值域是线性运算。尽管斜率很小,但不会趋于 0。
-
Softmax 函数
f(i)=\dfrac{e^{z_i}}{\sum^k_{j=1}e^{z_j}} Softmax 是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为
k 的任意实向量,Softmax 可以将其压缩为长度为k ,值在(0,1) 范围内,并且向量中元素的总和为 1 的实向量。Softmax 函数的分母结合了原始输出值的所有因子,这意味着 Softmax 函数获得的各种概率彼此相关。
缺点:在零点不可微;负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。
-
Swish 激活函数
f(x)=x\text{ sigmoid}(x) 优点:有助于防止慢速训练期间,梯度逐渐接近 0 并导致饱和;导数恒大于 0;平滑度在优化和泛化中起了重要作用。
-
Maxout 激活函数
f(x)=\displaystyle\max_i f_i(x) 在 Maxout 层,激活函数是输入的最大值,因此只有 2 个 maxout 节点的多层感知机就可以拟合任意的凸函数。因此,由两个 Maxout 节点组成的 Maxout 层可以很好地近似任何连续函数。
-
Softplus 激活函数
f(x)=\ln(1+e^x) Softplus 函数类似于 ReLU 函数,但是相对较平滑,像 ReLU 一样是单侧抑制。它的接受范围很广,为
(0,+\infin) 。
\text{Part III. } 如何选择激活函数
通常选择一个激活函数并不容易,需要考虑很多因素,最好的做法还是一一实验所有的激活函数,但需要保证其他因素相同。
一些技巧:
如果输出是 0、1 值(二分类问题),则输出层选择 sigmoid 函数,然后其它的所有单元都选择 ReLU 函数。
如果在隐藏层上不确定使用哪个激活函数,那么通常会使用 Relu 激活函数。有时,也会使用 tanh 激活函数,但 ReLU 的一个优点是:当是负值的时候,导数等于 0。
Sigmoid 激活函数:除了输出层是一个二分类问题基本不会用它。
tanh 激活函数:tanh 是非常优秀的,几乎适合所有场合。
ReLU 激活函数:最常用的默认函数,如果不确定用哪个激活函数,就使用 ReLU 或者 Leaky ReLU,再去尝试其他的激活函数。
如果遇到了一些死的神经元,我们可以使用 Leaky ReLU 函数。