神经网络-激励函数

1、前言

激励函数在神经网络的做用通俗上讲就是讲多个线性输入转换为非线性的关系。不使用激励函数的话,神经网络的每层都只是作线性变换,多层输入叠加后也仍是线性变换。由于线性模型的表达能力不够,激励函数能够引入非线性因素。html

1.1 单一的神经网络

若是没有激励函数,在单层神经网络中,咱们的输入和输出关系以下图:web

这里写图片描述

这是一个线性方程的直观表示,若是咱们增长感知机,以下图: 
这里写图片描述网络

其中结果输出就是右边的绿色区域,可是本质上仍是各类线性方程的组合,对于非线性数据则没法很好的处理。以下数据:
这里写图片描述
上图数据你就没有办法画出一条直线来将数据区分开.
这时候有两个办法,第一个办法,是作线性变换(linear transformation),好比讲x,y变成x^2,y^2,这样能够画出圆形。如图所示:
这里写图片描述
若是将坐标轴从x,y变为以x^2,y^2为标准,你会发现数据通过变换后是线性可分的了。大体示意图以下:
这里写图片描述
app

1.2 含有激励函数的神经网络

此处输入图片的描述

加入非线性激励函数后,神经网络就有可能学习到平滑的曲线来分割平面,而不是用复杂的线性组合逼近平滑曲线来分割平面。 这就是为何咱们要有非线性的激活函数的缘由。以下图所示说明加入非线性激活函数后的差别,上图为用线性组合逼近平滑曲线来分割平面,下图为平滑的曲线来分割平面:
这里写图片描述dom

2、激励函数

一、激活函数一般有以下一些性质:

  • 非线性: 当激活函数是线性的时候,一个两层的神经网络就能够逼近基本上全部的函数了。可是,若是激活函数是恒等激活函数的时候(即f(x)=x),就不知足这个性质了,并且若是MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的。
  • 可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
  • 单调性: 当激活函数是单调的时候,单层网络可以保证是凸函数。
  • f(x)≈x: 当激活函数知足这个性质的时候,若是参数的初始化是random的很小的值,那么神经网络的训练将会很高效;若是不知足这个性质,那么就须要很用心的去设置初始值。
  • 输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,由于特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种状况小,通常须要更小的learning rate.

二、经常使用的激励函数


一、单极性 sigmod函数,

图形为:ide

sigmod激励函数符合实际,当输入很小时,输出接近于0;当输入很大时,输出值接近1函数


但sigmod函数存在较大的缺点:学习

一、当输入值很小时或很大时,输出曲线基本就是直线了,回想一下反向传播的过程,咱们最后用于迭代的梯度,是由中间这些梯度值结果相乘获得的,所以若是中间的局部梯度值很是小,直接会把最终梯度结果拉近0,意味着存在梯度趋向为0优化

二、非零中心化,也就是当输入为0时,输出不为0,,由于每一层的输出都要做为下一层的输入,而未0中心化会直接影响梯度降低,咱们这么举个例子吧,若是输出的结果均值不为0,举个极端的例子,所有为正的话(例如f=wTx+b中全部x>0),那么反向传播回传到w上的梯度将要么所有为正要么所有为负(取决于f的梯度正负性),这带来的后果是,反向传播获得的梯度用于权重更新的时候,不是平缓地迭代变化,而是相似锯齿状的突变。影响梯度降低的动态性url

二、双极性sigma函数,

图形为:

三、双曲正切函数,

图形为:

与sigmoid相比,输出至的范围变成了0中心化[-1, 1]。但梯度消失现象依然存在。因此在实际应用中,tanh激励函数仍是比sigmoid要用的多一些的

4.ReLu 函数

全称是rectified linear unit,它被普遍应用到了卷积神经网络中,而且出现了一些变体。

函数基本形式是:f(x) = max(0,x), smooth approxiation形式为:

函数的样子所示:

两种变体是:

noisy Relu

也就是在原来的Relu分类部分添加均值为0,方差为sigma的高斯噪声

leaky Relu

这个leaky ReLu的好处是当神经元处于非激活状态是,容许一个非0的梯度存在。


优势:(1)不会出现梯度消失,收敛速度快;

          (2)前向计算量小,只须要计算max(0, x),不像sigmoid中有指数计算;

         (3)反向传播计算快,导数计算简单,无需指数、出发计算;

         (4)有些神经元的值为0,使网络具备saprse性质,可减少过拟合。

缺点:(1)比较脆弱,在训练时容易“die”,反向传播中若是一个参数为0,后面的参数就会不更新。使用合适的学习固然,这和参数设置有关系,因此咱们要特别当心,

再举个实际的例子哈,若是学习速率被设的过高,结果你会发现,训练的过程当中可能有高达40%的ReLU单元都挂掉了。因此咱们要当心设定初始的学习率等参数,在必定程度上控制这个问题。率会减弱这种状况。



五、径向基函数,

,g表示的就是径向基函数,绝对值表达的是径向距离。

图形为:

六、one-side hyperbolic ratio function,

图形为:



那咱们咋选用神经元/激励函数呢?通常说来,用的最多的依旧是ReLU,可是咱们确实得当心设定学习率,同时在训练过程当中,还得时不时看看神经元此时的状态(是否还『活着』)。固然,若是你很是担忧神经元训练过程当中挂掉,你能够试试Leaky ReLU和Maxout。额,少用sigmoid老古董吧,有兴趣却是能够试试tanh,不过话说回来,一般情况下,它的效果不如ReLU/Maxout。

3、损失函数和激活函数的选择

具体内容能够参考:深度神经网络(DNN)损失函数和激活函数的选择

4、参考文献

一、通俗理解神经网络之激励函数(Activation Function)

二、[深度学习]人工神经网络中激励函数做用详解

三、神经网络激励函数综合

四、深度学习与计算机视觉系列(6)_神经网络结构与神经元激励函数