写在前面:此文只记录了下本人感觉需要注意的地方,不全且不一定准确。详细内容可以参考文中帖的链接,比较好!!!
常用激活函数(激励函数)理解与总结
激活函数的区别与优点
梯度消失与爆炸
1. 激活函数是什么?
在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。
2. 激活函数的用途
如果不用激活函数,每一层的输入都是上一层输出的线性函数,而多层线性函数与一层线性函数的功能是等价的,网络的逼近能力就相当有限,因此引入非线性函数作为激励函数,使得深层神经网络的可以更好的逼近任意函数。
3. 常见的激活函数:
Sigmoid 函数:
- 表达形式:
- 函数图像:
- 导数图像:
- 优缺点:
优点
- 能够把输入的连续值压缩到【0~1】之间,可解释性强,0为不活跃,1为活跃
缺点
- 梯度反向传递时,容易导致梯度的爆炸和消失(大概率梯度消失,有时梯度爆炸)。
而由于最大值为0.25,且通常初始| w | < 1 ,则有:
极易出现梯度消失;当初始化 |w| > 4 时,w * > 1 ,才会产生梯度爆炸。 - sigmoid函数的输出不是0均值。若该层神经元得到上一层的非0输出作为输入,产生的回传梯度的符号就会相同,或者都为正或者都为负,导致捆绑效果,使结果收敛变慢(例如,当x>0时,y = w*x + b,对w求导,得到的梯度全为正)
- 解析式中有幂运算,计算量相对较大
tanh 函数:
- 表达式:
- 函数图像及导数图像:
- 特点:解决了sigmoid函数中的输出非0均值,但梯度消失或爆炸、及计算量较大的问题仍存在
Relu 函数:
- 表达式:
- 函数图像及导数图像:
- 优缺点:
优点
- 在正区间上解决了梯度消失或爆炸问题
- 计算梯度时只需判断是否大于0,而不用幂函数,计算速度快,收敛速度快
缺点
- ReLU的输出非0均值,导致某些神经元永远不会被激活,相应参数永远不会被更新(非正部分)
Leaky Relu 函数(PReLU):
- 表达式
- 解决了ReLU非正梯度为0,导致有些参数永远不会被更新的问题
来源:CSDN
作者:一只帅气的小菜鸡
链接:https://blog.csdn.net/weixin_42028608/article/details/104156848