激活函数

1、怎样选用激活函数    

激活函数选用的两个考虑因素:    

(1) 饱和问题  

如果激活函数的输入值落在饱和区间,梯度值就趋近于0,会发生梯度消失问题(sigmoid和tanh)    

(2)输出值是否关于0对称        

输出值如果关于0对称会加快网络收敛,因为可以避免优化的时候走“之字形”路线



2、sigmoid



    当使用sigmoid作为激活函数时,随着神经网络隐含层(hidden layer)层数的增加,训练误差反而加大。表现为:

(1)靠近输出层的隐含层梯度较大,参数更新速度快,很快就会收敛;

(2)靠近输入层的隐含层梯度较小,参数更新速度慢,几乎和初始状态一样,随机分布;

(3)在含有四个隐藏层的网络结构中,第一层比第四层慢了接近100倍!

    这种现象就是梯度弥散(vanishing gradient)。而另一种情况,梯度爆炸(exploding gradient),则是前面层的梯度,通过训练变大,导致后面层的梯度,以指数级增大。

    由于sigmoid的导数值小于1/4,x变化的速率要快于y变化的速率,随着层数的增加,连续不断执行sigmoid函数,就会导致,前面更新较大的幅度,后面更新较小的幅度,因此,网络在学习过程中,更倾向于更新后面(靠近输出层)的参数,而不是前面的参数(靠近输入层)。

sigmoid缺点:

激活函数的计算量较大,在反向传播中,当求误差梯度时,求导涉及除法;

在反向传播中,容易出现梯度消失,无法完成深层网络的训练;

函数的敏感区间较短,(-1,1)之间较为敏感,超过区间,则处于饱和状态,

3、tanh


导数为: tanh′(x)=1−tanh^2(x)

tanh,即双曲正切(hyperbolic tangent),类似于幅度增大sigmoid,将输入值转换为-1至1之间。

tanh的导数取值范围在0至1之间,优于sigmoid的0至1/4,在一定程度上,减轻了梯度消失的问题

tanh的输出和输入能够保持非线性单调上升和下降关系,符合BP(back propagation)网络的梯度求解,容错性好,有界。

4、relu


优点:

(1)梯度计算简单:既是非线性函数,又避免了像sigmoid函数的指数计算量大的问题

(2)relu的导数,在大于0时,梯度为常数,不会导致梯度弥散。

(3)半饱和,值大于零时,不会因为饱和而导致梯度消失

(4)半区域抑制,既有优点(神经网络稀疏性)又有缺点(如果学习率较大可能会有大量神经元死亡,较小就不会有这种现象),起到了类似L1的正则化作用,可以在一定程度上缓解过拟合。

缺点:

(1)输出值不是0对称,都是正值可能走“之字形”优化路线

(2)如果学习率较大可能会有大量神经元死亡,且不可逆转,导致数据多样性丢失

总结:

在神经网络中,隐含层的激活函数,最好选择ReLU。


5、leaky ReLu

leaky ReLU是解决ReLU的负区间导致神经元dead的问题,但是用的不多,因为ReLU可以实现稀疏性。其中k是leak系数(负区间的斜率),一般选择0.01或者0.02,或者通过学习而来。

6、elu

elu激活函数也是为了解决relu的0区间带来的影响,其数学表达为:


但是elu相对于leakrelu来说,计算要更耗时间一些。

7、softmax函数

Softmax - 用于多分类神经网络输出,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解。多个分类的和为1.



原文链接:

https://blog.csdn.net/hhaowang/article/details/88697786

https://blog.csdn.net/u012370185/article/details/94558437

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容