python激活函数

激活函数是什么?

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函数没有提供最优结果,再尝试其他激活函数。

  1. 激活函数相关问题总结
    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"类别。

相关推荐
liu_chunhai1 分钟前
设计模式(3)builder
java·开发语言·设计模式
Mr.D学长6 分钟前
毕业设计 深度学习社交距离检测系统(源码+论文)
python·毕业设计·毕设
姜学迁9 分钟前
Rust-枚举
开发语言·后端·rust
wdxylb10 分钟前
解决Python使用Selenium 时遇到网页 <body> 划不动的问题
python
冷白白11 分钟前
【C++】C++对象初探及友元
c语言·开发语言·c++·算法
凌云行者15 分钟前
rust的迭代器方法——collect
开发语言·rust
代码骑士18 分钟前
【一起学NLP】Chapter3-使用神经网络解决问题
python·神经网络·自然语言处理
It'sMyGo18 分钟前
Javascript数组研究09_Array.prototype[Symbol.unscopables]
开发语言·javascript·原型模式
睡觉然后上课29 分钟前
c基础面试题
c语言·开发语言·c++·面试
qing_04060336 分钟前
C++——继承
开发语言·c++·继承