深度学习-激活函数

深度学习-激活函数

一、激活函数介绍

激活函数是对输入信息进行非线性变换, 然后将变换后的输出信息作为输入信息传给下一层神经元。

  1. 当我们不用激活函数时,权重和偏差只会进行线性变换。
  2. 线性方程很简单,但解决复杂问题的能力有限。
  3. 没有激活函数的神经网络实质上只是一个线性回归模型。
  4. 激活函数对输入进行非线性变换,使其能够学习和执行更复杂的任务。
  5. 我们希望我们的神经网络能够处理复杂任务,如语言翻译和图像分类等。线性变换永远无法执行这样的任务。
  6. 激活函数使反向传播成为可能,
  7. 因为激活函数的误差梯度可以用来调整权重和偏差。
  8. 如果没有可微的非线性函数,这就不可能实现。
  9. 总之,激活函数的作用是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。

二、常见的激活函数

1、Sigmoid

  • 1239176-20180118172713662-1469952021.png (561×250)

  • Sigmoid函数作用是将值映射到[0.0 , 1.0]区间,当输入值较大时,sigmoid将返回一个接近于1.0的值,而当输入值较小时,返回值将接近于0.0.

    优点:在于对在真实输出位于[0.0,1.0]的样本上训练的神经网络,sigmoid函数可将输出保持在[0.0,1.0]内的能力非常有用.

    缺点:在于当输出接近于饱和或者剧烈变化时,对输出返回的这种缩减会带来一些不利影响.

    当输入为0时,sigmoid函数的输出为0.5,即sigmoid函数值域的中间点

  • Sigmoid 在特征相差比较复杂或是相差不是特别大时效果比较好

  • Sigmoid不适合用在神经网络的中间层,因为对于深层网络,sigmoid 函数反向传播时,很容易就会出现梯度消失的情况(在 sigmoid 接近饱和区时,变换太缓慢,导数趋于 0,这种情况会造成信息丢失),从而无法完成深层网络的训练。

  • 所以Sigmoid主要用于对神经网络输出层的激活

2、Softmax

在这里插入图片描述

  • sigmoid函数只能处理两个类。当我们想要处理多个类时,该怎么办呢?只对单类进行“是”或“不是”的分类方式将不会有任何帮助。
  • softmax函数将压缩每个类在0到1之间,并除以输出总和。它实际上可以表示某个类的输入概率。
  • 比如,我们输入[1.2,0.9,0.75],当应用softmax函数时,得到[0.42,0.31,0.27]。现在可以用这些值来表示每个类的概率。
  • softmax函数最好在分类器的输出层使用。可以看作是Sigmoid的一般情况,用于多分类问题。
  • Softmax函数将K维的实数向量压缩(映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于 (0,1) 之间,常用于多分类问题。
  • softmax作为输出层的激活函数。

3、tanh函数

tanh函数如下:将值映射到[-1,1]区间

在这里插入图片描述
tanh与sigmoid非常接近,且与后者具有类似的优缺点, sigmoid和tanh的主要区别在于tanh的值为[-1.0,1.0]

优点在于在一些特定的网络架构中,能够输出负值的能力十分有用.

缺点在于注意tanh值域的中间点为0.0,当网络中的下一层期待输入为负值或者为0.0时,这将引发一系列问题.
在这里插入图片描述

4、Relu

Relu(Rectified Linear Units修正线性单元)函数如下:relu函数是目前用的最多也是最受欢迎的激活函数

它的数学表达式是: f(x)=max(0,x)。

1239176-20180118172715474-501941450.png (268×233)

很显然,从上图左可以看出,输入信号 <0时,输出为0,>0时,输出等于输入。ReLU的优缺点如下:

优点:

1.相比起Sigmoid和tanh,ReLU在SGD中能够快速收敛,这是因为它线性、非饱和的形式。

2.Sigmoid和tanh涉及了很多很复杂的操作(比如指数),ReLU实现更加简单

3.有效缓解了梯度消失的问题。

4.在没有无监督预训练的时候也能有较好的表现

5.提供了神经网络的稀疏表达能力

缺点:

  1. 随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。如果发生这种情况,那么流经神经元的梯度从这一点开始将永远是0。也就是说,ReLU神经元在训练中不可逆地死亡了。
  2. ReLU在训练的时候很”脆弱”,一不小心有可能导致神经元”坏死”。举个例子:由于ReLU在x<0时梯度为0,这样就导致负的梯度在这个ReLU被置零,而且这个神经元有可能再也不会被任何数据激活。如果这个情况发生了,那么这个神经元之后的梯度就永远是0了,也就是ReLU神经元坏死了,不再对任何数据有所响应。
  3. 实际操作中,如果你的learning rate 很大,那么很有可能你网络中的40%的神经元都坏死了。 当然,如果你设置了一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁。
  4. relu在x<0时是硬饱和。由于当x>0时一阶导数为1。
  5. 所以,relu函数在x>0时可以保持梯度不衰减,从而缓解梯度消失问题,还可以更快的去收敛。但是,随着训练的进行,部分输入会落到硬饱和区,导致对应的权重无法更新。我们称之为“神经元死亡”。

5、softplus函数

可以看作是relu函数的平滑版本,公式和函数图像如下:
在这里插入图片描述
在这里插入图片描述

6、elu函数

是relu激活函数的改进版本,解决部分输入会落到硬饱和区,导致对应的权重无法更新的问题。计算激活函数relu,即max(features, 0),所有负数都会归一化为0,所以的正值保留为原值不变

​ 优点:在于不受”梯度消失”的影响,且取值范围在[0,+oo)

​ 缺点:在于使用了较大的学习速率时,易受达到硬饱和的神经元的影响

公式和图像如下:左边缩小方差,右边保持方差;方差整体还是缩小的,而均值得不到保障。
在这里插入图片描述
在这里插入图片描述

7、selu函数

​ 左边缩小方差,右边放大方差,适当选取参数alpha和lambda,使得整体上保持方差与期望。如果选取:

​ lambda=1.0506,alpha=1.67326,那么可以验证如果输入的x是服从标准正态分布,那么SELU(x)的期望为0,方差为1.
在这里插入图片描述

三、 如何选择激活函数?

激活函数好或坏,不能凭感觉定论。然而,根据问题的性质,我们可以为神经网络更快更方便地收敛作出更好的选择。

  1. 用于分类器时,Sigmoid函数及其组合通常效果更好。
  2. 由于梯度消失问题,有时隐藏层要避免使用sigmoid和tanh函数
  3. ReLU函数是一个通用的激活函数,目前在大多数情况下使用
  4. 如果神经网络中出现死神经元,那么PReLU函数就是最好的选择
  5. 请记住,ReLU函数只能在隐藏层中使用
  6. 一点经验:你可以从ReLU函数开始,如果ReLU函数没有提供最优结果,再尝试其他激活函数。

的激活函数,目前在大多数情况下使用**。
4. 如果神经网络中出现死神经元,那么PReLU函数就是最好的选择
5. 请记住,ReLU函数只能在隐藏层中使用
6. 一点经验:你可以从ReLU函数开始,如果ReLU函数没有提供最优结果,再尝试其他激活函数。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值