神经网络激活函数的介绍

来源:互联网 发布:淘宝店运营方案 编辑:程序博客网 时间:2024/04/30 11:14

1、Sigmoid
Sigmoid函数在以往的神经网络里是很常用的,但在深度学习里用的并不那么多,它主要有以下不足:
a、容易过饱和并且造成梯度消失。从图中可以看出当Sigmoid函数的值为0或1时,而我们知道sigmoid函数的导数等于其本身乘以1-其本身,那么就导致梯度为0的情况出现,考虑到梯度传播时需要与本地的梯度相乘,那么梯度通过该门函数后几乎没有信号流出。因此,在初始化梯度时一定要很小心,否则很容易使大部分的神经元过饱和。
这里写图片描述
b、Sigmoid函数不是以0为中心的。假设数据全部为正,那么W的梯度一定是全正或者全负的,这样优化W时就会有之子型的线路,寻找最优W可能会很费时。但这个问题不如a问题严重
c、Sigmoid函数包含exp函数,计算exp函数的开销是很大的
2、tanh
tanh函数是对sigmoid函数的改进,他的特性如下:
a、依然有sigmoid函数过饱和的潜在可能,可能会造成梯度消失
b、是以原点为中心的,这是其一个优势
c、依然有指数运算
3、Relu函数
全称是 The Rectified Linear Unit,其函数表达式为f(x) = max(0, x)
这里写图片描述
a、相比于sigmoid和tanh,计算速度大大增加主要得益于其分段线性的特性
b、不是以原点为中心,和sigmoid函数一样有很大缺点
c、没有指数运算、收敛速度快
d、注意当位于负半轴时,会使网络处于‘dead’的状态(在训练过程中不会再激活)。设置合适的学习速率可以避免这个问题。工程中在初始化参数时,往往设置一个很小的bias比如0.01
4、Leaky Relu
既然Relu可能会使神经元失活,那么一种改进方法是,将Relu的负半轴加一个很小的斜率。f(x)=1(x<0)αx+1(x>=0)x 其中α是一个较小的常数。但值得注意的是Leaky Relu的效果还没有持续性。其究竟能带来多少性能的提升还是一个未知数。
5、Maxout
这种方法是对Relu和Leaky Relu的概括,其表达为max(wT1x+b1,wT2x+b2),其中Relu和Leaky Relu均是该方法的特例,因此该方法拥有Relu的优势,同时,没有Relu的不足如神经元失活的情况。但是缺点是相比Relu多了一些参数

  • 值得注意的是很少在实际中将这些激活函数综合使用
  • 在工程使用中,多实用Relu函数,但是需要小心调整学习速率,并且要监控失活神经元的比例。同时,可以尝试Relu和Maxout。但是不要用sigmoid,可以用tanh,但是不要期望效果会比Relu或Maxout好
  • 已经有定理证明,单隐含层的神经网络可以拟合任意曲线。既然这样,为何还要加深神经网络的层数呢?主要原因在于实际中神经网络之所以能够取得不错的效果,就是因为神经网络能够利用平滑的曲线拟合数据的分布,而且很容易去优化。但是,说深层的神经网络比浅层的神经网络效果更好,只是一种经验的观察。尽管他们的表征能力可能相当。
  • 但是,在实际中3层隐含单元的网络可能要好于2层,但是4、5、6层的效果不一定会更好。但在卷积神经网络中是一个例外。深层网络可能会对效果有很大的提升。
  • 隐含层的个数太多的话可能会引起过拟合,但是通常不会因为此来减少隐含层的个数来防止过拟合,通常的做法是使用L2 Regulation
  • 通常来说,较小的神经网络会有较少的局部最优解,但是这些局部最优解是很差的(相对于最优解来说);但较大的神经网络会有非常多的局部最优解,这些局部最优解相对最优解来说差别更小,即使陷入局部最优解,那么性能也不会差太远。
0 0