神经网络中常用的激活函数

43人阅读 评论(0) 收藏 举报
分类:

原文地址:http://www.cnblogs.com/rgvb178/p/6055213.html
版权声明:本文为博主原创文章,未经博主允许不得转载。

激活函数的作用

首先,激活函数不是真的要去激活什么。在神经网络中,激活函数的作用是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。
比如在下面的这个问题中:

如上图(图片来源),在最简单的情况下,数据是线性可分的,只需要一条直线就已经能够对样本进行很好地分类。

但如果情况变得复杂了一点呢?在上图中(图片来源),数据就变成了线性不可分的情况。在这种情况下,简单的一条直线就已经不能够对样本进行很好地分类了。

于是我们尝试引入非线性的因素,对样本进行分类。

在神经网络中也类似,我们需要引入一些非线性的因素,来更好地解决复杂的问题。而激活函数恰好能够帮助我们引入非线性因素,它使得我们的神经网络能够更好地解决较为复杂的问题。

激活函数的定义及其相关概念

在ICML2016的一篇论文Noisy Activation Functions中,作者将激活函数定义为一个几乎处处可微的 h : R → R 。

在实际应用中,我们还会涉及到以下的一些概念:
a.饱和
当一个激活函数h(x)满足

limn+h(x)=0limn→+∞h′(x)=0
时我们称之为右饱和

当一个激活函数h(x)满足

limnh(x)=0limn→−∞h′(x)=0
时我们称之为左饱和。当一个激活函数,既满足左饱和又满足又饱和时,我们称之为饱和

b.硬饱和与软饱和
对任意的xx,如果存在常数cc,当x>cx>c时恒有 h(x)=0h′(x)=0则称其为右硬饱和,当x<cx<c时恒 有h(x)=0h′(x)=0则称其为左硬饱和。若既满足左硬饱和,又满足右硬饱和,则称这种激活函数为硬饱和。但如果只有在极限状态下偏导数等于0的函数,称之为软饱和

Sigmoid函数

Sigmoid函数曾被广泛地应用,但由于其自身的一些缺陷,现在很少被使用了。Sigmoid函数被定义为:

f(x)=11+exf(x)=11+e−x
函数对应的图像是:

优点:
1.Sigmoid函数的输出映射在(0,1)(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。
2.求导容易。

缺点:
1.由于其软饱和性,容易产生梯度消失,导致训练出现问题。
2.其输出并不是以0为中心的。


tanh函数

现在,比起Sigmoid函数我们通常更倾向于tanh函数。tanh函数被定义为

tanh(x)=1e2x1+e2xtanh(x)=1−e−2x1+e−2x

函数位于[-1, 1]区间上,对应的图像是:

优点:
1.比Sigmoid函数收敛速度更快。
2.相比Sigmoid函数,其输出以0为中心。
缺点:
还是没有改变Sigmoid函数的最大问题——由于饱和性产生的梯度消失。

ReLU

ReLU是最近几年非常受欢迎的激活函数。被定义为

y={0x(x0)(x>0)y={0(x≤0)x(x>0)
对应的图像是:

但是除了ReLU本身的之外,TensorFlow还提供了一些相关的函数,比如定义为min(max(features, 0), 6)的tf.nn.relu6(features, name=None);或是CReLU,即tf.nn.crelu(features, name=None)。其中(CReLU部分可以参考这篇论文)。
优点:
1.相比起Sigmoid和tanh,ReLU(e.g. a factor of 6 in Krizhevsky et al.)在SGD中能够快速收敛。例如在下图的实验中,在一个四层的卷积神经网络中,实线代表了ReLU,虚线代表了tanh,ReLU比起tanh更快地到达了错误率0.25处。据称,这是因为它线性、非饱和的形式。

2.Sigmoid和tanh涉及了很多很expensive的操作(比如指数),ReLU可以更加简单的实现。
3.有效缓解了梯度消失的问题。
4.在没有无监督预训练的时候也能有较好的表现。

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

缺点:
随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。如果发生这种情况,那么流经神经元的梯度从这一点开始将永远是0。也就是说,ReLU神经元在训练中不可逆地死亡了。


LReLU、PReLU与RReLU

通常在LReLU和PReLU中,我们定义一个激活函数为

f(yi)={yiaiyiif(yi>0)if(yi0)f(yi)={yiif(yi>0)aiyiif(yi≤0)

-LReLU
aiai比较小而且固定的时候,我们称之为LReLU。LReLU最初的目的是为了避免梯度消失。但在一些实验中,我们发现LReLU对准确率并没有太大的影响。很多时候,当我们想要应用LReLU时,我们必须要非常小心谨慎地重复训练,选取出合适的aa,LReLU的表现出的结果才比ReLU好。因此有人提出了一种自适应地从数据中学习参数的PReLU。

-PReLU
PReLU是LReLU的改进,可以自适应地从数据中学习参数。PReLU具有收敛速度快、错误率低的特点。PReLU可以用于反向传播的训练,可以与其他层同时优化。

在论文Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification中,作者就对比了PReLU和ReLU在ImageNet model A的训练效果。
值得一提的是,在tflearn中有现成的LReLU和PReLU可以直接用。

-RReLU
在RReLU中,我们有

yji={xjiajixjiif(xji>0)if(xji0)yji={xjiif(xji>0)ajixjiif(xji≤0)
ajiU(l,u),l<uandl,u[0,1)aji∼U(l,u),l<uandl,u∈[0,1)

其中,ajiaji是一个保持在给定范围内取样的随机变量,在测试中是固定的。RReLU在一定程度上能起到正则效果。

在论文Empirical Evaluation of Rectified Activations in Convolution Network中,作者对比了RReLU、LReLU、PReLU、ReLU 在CIFAR-10、CIFAR-100、NDSB网络中的效果。

ELU

ELU被定义为

f(x)={a(ex1)xif(x<0)if(0x)f(x)={a(ex−1)if(x<0)xif(0≤x)
其中a>0a>0
2.jpg-34.2kB

优点:
1.ELU减少了正常梯度与单位自然梯度之间的差距,从而加快了学习。
2.在负的限制条件下能够更有鲁棒性。

ELU相关部分可以参考这篇论文

Softplus与Softsign

Softplus被定义为

f(x)=log(ex+1)f(x)=log(ex+1)

Softsign被定义为
f(x)=x|x|+1f(x)=x|x|+1

目前使用的比较少,在这里就不详细讨论了。TensorFlow里也有现成的可供使用。激活函数相关TensorFlow的官方文档


总结

关于激活函数的选取,目前还不存在定论,实践过程中更多还是需要结合实际情况,考虑不同激活函数的优缺点综合使用。同时,也期待越来越多的新想法,改进目前存在的不足。


查看评论

CS231n笔记2--Fully Connected Neural Network与Activation Function

Fully Connected Neural Network与Activation Function神经网络–Fully Connect Neural Network一个最简单的神经网络 hw,b=...
  • u012767526
  • u012767526
  • 2016-05-14 01:15:30
  • 3479

LSTM 两个激励函数区别sigmoid 和tanh

sigmoid 用在了各种gate上,产生0~1之间的值,这个一般只有sigmoid最直接了。tanh 用在了状态和输出上,是对数据的处理,这个用其他激活函数或许也可以。...
  • shenxiaoming77
  • shenxiaoming77
  • 2017-08-06 22:58:14
  • 2778

神经网络五:常用的激活函数

本文就现在神经网络中主要的几个激活函数进行分析和讲解,比较几个激活函数的优缺点。...
  • Bixiwen_liu
  • Bixiwen_liu
  • 2016-10-27 21:43:41
  • 4585

神经网络常用激活函数及其应用举例

神经网络中数据从数据层到最后输出层的流动过程其实就是数据从一种形态到另一种形态,从一个维度到另一个维度的变换过程,例如在Minst数据集训练中,就是把28*28维的图像数据经过变换,映射成0~9之间的...
  • dcrmg
  • dcrmg
  • 2017-07-27 23:44:53
  • 1172

【Stanford CNN课程笔记】5. 神经网络解读1 几种常见的激活函数

本课程笔记是基于今年斯坦福大学Feifei Li, Andrej Karpathy & Justin Johnson联合开设的Convolutional Neural Networks for Vis...
  • elaine_bao
  • elaine_bao
  • 2016-03-05 20:40:34
  • 19286

【深度学习技术】卷积神经网络常用激活函数总结

本文记录了神经网络中激活函数的学习过程,欢迎学习交流。 神经网络中如果不加入激活函数,其一定程度可以看成线性表达,最后的表达能力不好,如果加入一些非线性的激活函数,整个网络中就引入了非线性部分,增加...
  • hduxiejun
  • hduxiejun
  • 2017-04-26 19:13:05
  • 5135

神经网络中的激活函数

最近在看深度学习的东西,激活函数是其中的一个环节,就从网上的一搜寻关于激活函数的介绍激活函数是用来加入非线性因素的,因为线性模型的表达能力不够。常用激活函数        激活函数的选择是构建神经网络...
  • Losteng
  • Losteng
  • 2016-03-09 11:17:06
  • 34146

人工神经网络之激活函数总结

激活函数: 传统神经网络中最常用的两个激活函数,Sigmoid系(Logistic-Sigmoid、Tanh-Sigmoid)被视为神经网络的核心所在.从数学上来看,非线性的Sigmoid函数对中央区...
  • qq_36330643
  • qq_36330643
  • 2017-07-05 22:12:13
  • 443

神经网络中激活函数比较

对于训练神经网络来说,为了增强网络表征数据的能力,一般需要引入非线性激活函数,一般有sigmoid tanh relu,今天我们就来分布说明一些这些激活函数的特点。...
  • guoyuhaoaaa
  • guoyuhaoaaa
  • 2016-11-02 11:39:10
  • 1377

几种常见的神经网络激活函数的导数

几种常见的神经网络激活函数cheat sheet。
  • cuoqu
  • cuoqu
  • 2013-12-06 17:48:45
  • 7729
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 67万+
    积分: 6860
    排名: 4268
    博客专栏
    最新评论