激活函数是什么?
1.激活函数
1.1激活函数是什么?
激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。 那么激活函数应该具有什么样的性质呢?
可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。
输出值的范围: 当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate
1.2激活函数有什么用?
引入非线性因素。
在我们面对线性可分的数据集的时候,简单的用线性分类器即可解决分类问题。但是现实生活中的数据往往不是线性可分的,面对这样的数据,一般有两个方法:引入非线性函数、线性变换。
线性变换
就是把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。
激活函数
激活函数是如何引入非线性因素的呢?在神经网络中,为了避免单纯的线性组合,我们在每一层的输出后面都添加一个激活函数(sigmoid、tanh、ReLu等等),这样的函数长这样:
1.3激活函数有哪几种?各自特点及其使用场景?
sigmoid函数、tanh函数、.ReLU,P-ReLU, Leaky-ReLU函数、ELU函数、Maxout函数
sigmoid函数
sigmoid 是使用范围最广的一类激活函数,具有指数函数形状,它在物理意义上最为接近生物神经元,是一个在生物学中常见的S型的函数,也称为S型生长曲线。此外,(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数。
可以看出,sigmoid函数连续,光滑,严格单调,以(0,0.5)中心对称,是一个非常良好的阈值函数。
当x趋近负无穷时,y趋近于0;趋近于正无穷时,y趋近于1;x=0时,y=0.5。当然,在x超出[-6,6]的范围后,函数值基本上没有变化,值非常接近,在应用中一般不考虑。
Sigmoid函数的值域范围限制在(0,1)之间,我们知道[0,1]与概率值的范围是相对应的,这样sigmoid函数就能与一个概率分布联系起来了。
Sigmoid函数的导数是其本身的函数,即f′(x)=f(x)(1−f(x))f′(x)=f(x)(1−f(x)),计算非常方便,也非常节省计算时间。
然而,sigmoid也有其自身的缺陷,最明显的就是饱和性。从上图可以看到,其两侧导数逐渐趋近于0
具有这种性质的称为软饱和激活函数。具体的,饱和又可分为左饱和与右饱和。与软饱和对应的是硬饱和, 即
f′(x)=0,当|x|>c,其中c为常数。f′(x)=0,当|x|>c,其中c为常数。
sigmoid 的软饱和性,使得深度神经网络在二三十年里一直难以有效的训练,是阻碍神经网络发展的重要原因。具体来说,由于在后向传递过程中,sigmoid向下传导的梯度包含了一个 f′(x)f′(x) 因子(sigmoid关于输入的导数),因此一旦输入落入饱和区,f′(x)f′(x) 就会变得接近于0,导致了向底层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象
此外,sigmoid函数的输出均大于0,使得输出不是0均值,这称为偏移现象,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。
2.2 tanh
函数定义:
导数:
优点:
tanh比 sigmoid函数收敛速度更快;
相比 sigmoid函数,tanh是以 0为中心的;
缺点:
与 sigmoid函数相同,由于饱和性容易产生的梯度消失;
与 sigmoid函数相同,由于具有幂运算,计算复杂度较高,运算速度较慢。
2.3 ReLU
函数定义:
导数:
优点:
收敛速度快;
相较于 sigmoid和 tanh中涉及了幂运算,导致计算复杂度高, ReLU可以更加简单的实现;
当输入 x>=0时,ReLU 的导数为常数,这样可有效缓解梯度消失问题;
当 x<0时,ReLU 的梯度总是 0,提供了神经网络的稀疏表达能力;
缺点:
ReLU 的输出不是以 0为中心的;
神经元坏死现象,某些神经元可能永远不会被激活,导致相应参数永远不会被更新;
不能避免梯度爆炸问题;
2.4 LReLU
函数定义:
导数:
优点:
避免梯度消失;
由于导数总是不为零,因此可减少死神经元的出现;
缺点:
LReLU 表现并不一定比 ReLU 好;
无法避免梯度爆炸问题;
2.5 PReLU
函数定义 :
导数:
优点:
PReLU 是 LReLU 的改进,可以自适应地从数据中学习参数;
收敛速度快、错误率低;
PReLU 可以用于反向传播的训练,可以与其他层同时优化;
2.6 RReLU
函数定义:
导数:
优点:为负值输入添加了一个线性项,这个线性项的斜率在每一个节点上都是随机分配的(通常服从均匀分布)。
2.7 ELU
函数定义:
导数:
优点:
导数收敛为零,从而提高学习效率;
能得到负值输出,这能帮助网络向正确的方向推动权重和偏置变化;
防止死神经元出现。
缺点:
计算量大,其表现并不一定比 ReLU 好;
无法避免梯度爆炸问题;
2.8 SELU
函数定义:
导数:
优点:
SELU 是 ELU 的一个变种。其中 λ 和 α 是固定数值(分别为 1.0507和 1.6726);
经过该激活函数后使得样本分布自动归一化到 0均值和单位方差;
不会出现梯度消失或爆炸问题;
2.9 softsign
函数定义:
导数:
优点:
softsign是 tanh激活函数的另一个替代选择;
softsign是反对称、去中心、可微分,并返回 −1和 1之间的值;
softsign更平坦的曲线与更慢的下降导数表明它可以更高效地学习;
缺点:
导数的计算比tanh更麻烦;
2.10 softplus
函数定义:
导数:
优点:
作为 relu 的一个不错的替代选择,softplus能够返回任何大于 0的值。
与 relu不同,softplus的导数是连续的、非零的,无处不在,从而防止出现死神经元。
缺点:
导数常常小于 1,也可能出现梯度消失的问题。
softplus另一个不同于 relu的地方在于其不对称性,不以零为中心,可能会妨碍学习。
3.多分类激活函数
3.1 softmax
softmax 函数一般用于多分类问题中,它是对逻辑斯蒂(logistic)回归的一种推广,也被称为多项逻辑斯蒂回归模型(multi-nominal logistic mode)。假设要实现 k 个类别的分类任务,Softmax 函数将输入数据 xi映射到第 i个类别的概率 yi如下计算:
显然, 0 < y i < 1 0<yi<1 0<yi<1。图13 给出了三类分类问题的 softmax 输出示意图。在图中,对于取值为 4、1和-4 的 x1、x2和 x3,通过 变换后,将其映射到 (0,1) 之间的概率值。< p>
由于 softmax 输出结果的值累加起来为 1,因此可将输出概率最大的作为分类目标(图 1 中被分类为第一类)。
也可以从如下另外一个角度来理解图 1 中的内容:给定某个输入数据,可得到其分类为三个类别的初始结果,分别用 x1、x2和 x3来表示。这三个初始分类结果分别是 4、1和-4。通过 Softmax 函数,得到了三个类别分类任务中以概率表示的更好的分类结果,即分别以 95.25%、4.71%和0.04% 归属于类别1、类别2 和类别3。显然,基于这样的概率值,可判断输入数据属于第一类。可见,通过使用 Softmax 函数,可求取输入数据在所有类别上的概率分布。
3.2 swish
函数定义:
其中,σ是 sigmoid函数。
swish激活函数的一阶导数如下
swish激活函数的一阶和二阶导数的图形如
超参数版 swish激活函数:
优点:
当 x>0时,不存在梯度消失的情况;当 x<0时,神经元也不会像 ReLU 一样出现死亡的情况;
swish处处可导,连续光滑;
swish并非一个单调的函数;
提升了模型的性能;
缺点:
计算量大;
3.3 hswish
函数定义:
优点: 与 swish相比 hard swish减少了计算量,具有和 swish同样的性质。
缺点: 与 relu6相比 hard swish的计算量仍然较大。
4.激活函数的选择
浅层网络在分类器时,sigmoid函数及其组合通常效果更好。
由于梯度消失问题,有时要避免使用 sigmoid和 tanh函数。
relu函数是一个通用的激活函数,目前在大多数情况下使用。
如果神经网络中出现死神经元,那么 prelu函数就是最好的选择。
relu函数只能在隐藏层中使用。
通常,可以从 relu函数开始,如果 relu函数没有提供最优结果,再尝试其他激活函数。
- 激活函数相关问题总结
5.1 为什么 relu不是全程可微/可导也能用于基于梯度的学习?
从数学的角度看 relu在 0点不可导,因为它的左导数和右导数不相等;但在实现时通常会返回左导数或右导数的其中一个,而不是报告一个导数不存在的错误,从而避免了这个问题。
5.2 为什么 tanh的收敛速度比 sigmoid快?
由上面两个公式可知 tanh引起的梯度消失问题没有 sigmoid严重,所以 tanh收敛速度比 sigmoid快。
5.3 sigmoid 和 softmax 有什么区别?
二分类问题时 sigmoid和 softmax是一样的,都是求 cross entropy loss,而 softmax可以用于多分类问题。
softmax是 sigmoid的扩展,因为,当类别数 k=2时,softmax回归退化为 logistic回归。
softmax建模使用的分布是多项式分布,而 logistic则基于伯努利分布。
多个 logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多 logistic回归进行多分类,输出的类别并不是互斥的,即"苹果"这个词语既属于"水果"类也属于"3C"类别。