1、什么是激活函数?
单一神经元模型展示:
神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传入下一层,输入层神经元节点会将属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又叫激励函数)
2、为什么需要激活函数?
神经网络中,如果不加入激活函数,那么每一层的输入输出都是函数均是线性的,网络的逼近能力有限,于是就引入非线性函数作为激活函数,使网络的表达能力更强。
3、有哪些激活函数?
第一个:sigmoid函数
公式:
图像:
特点:
变换输出区间[0,1],特别的如果出现很大的负数,则输出为0;如果输出很大的正数,则输出为1。
缺点:
1】神经网络在反向传播时,会出现梯度爆炸和梯度消失,梯度爆炸概率小,梯度消失概率大。
如果我们初始化神经网络的权值为 [ 0 , 1 ] [0,1][0,1] 之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层梯度值都会减小为原来的0.25倍,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象;当网络权值初始化为 ( 1 , + ∞ ) (1,+∞)(1,+∞) 区间内的值,则会出现梯度爆炸情况。
2】sigmoid的输出层不是0均值(zero-centered),会导致后一层的神经元将上一层输出的非0均值的信号作为输入。 产生的一个结果就是:那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。 当然了,如果按batch去训练,那么那个batch可能得到不同的信号,所以这个问题还是可以缓解一下的。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的梯度消失问题相比还是要好很多的。
3】含有幂运算,耗时。
第二个:tanh函数
公式:
函数 图像及导数:
tanh全称叫做Hyperbolic Tangent。
tanh的出现解决了sigmoid的非0均值,但是梯度消失和梯度爆炸问题还是没有很好的解决。
第三个:Relu函数
公式:
函数图像和导数图像:
优点:
1) 解决了gradient vanishing问题 (在正区间)
2)计算速度非常快,只需要判断输入是否大于0
3)收敛速度远快于sigmoid和tanh
注意问题:
1)ReLU的输出不是zero-centered
2)Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
尽管存在这两个问题,ReLU目前仍是最常用的activation function,在搭建人工神经网络的时候推荐优先尝试!
第四个:Leaky Relu函数
公式:
函数图像和导数图像:
解决了Dead Relu Promble。
理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。
以上借鉴:
(19条消息) 常用激活函数(激励函数)理解与总结_tyhj_sf的博客空间-CSDN博客_激活函数
感谢大佬分享