深度学习-激活函数目录
前言
本深度学习系列是根据paddle飞浆所简单整理的,需要可自行跳转学习。本节是关于深度学习-激活函数的相关内容。这是只简单记录部分知识,目的是方便以后复习。
激活函数
什么是激活函数
- 激活函数是人工神经网络的一个极其重要的特征
- 激活函数决定一个神经元是否被激活
- 激活函数对输入信息进行非线性变换,然后将变换后的输出信息作为输入信息传给下一个神经元。
激活函数的作用
作用:使线性组合变成非线性组合, 激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数。
激活函数的种类
identity
函数定义:f(x) = x
导数: f ’ (x)=1
monotonic:单调性
continuity:连续性
identity at origin:源头
symmetry:对称性
anti-symmetrical:反对称、斜对称
asymmetrical: 不对称
saturation:饱和,当网络的输入非常大或非常小时神经元的梯度接近于0(斜率几乎为零),往往与vanishing gradient是同时出现。
dead neurons: 死亡神经元,导数为0
优点:适合于潜在行为是线性(与线性回归相似)的任务。
缺点:无法提供非线性映射,当多层网络使用identity激活函数时,整个网络就相当于一个单层模型。
step
函数定义:
导数:
优点:激活函数 Step 更倾向于理论而不是实际,它模仿了生物神经元要么全有要么全无的属性。
缺点:它无法应用于神经网络因为其导数是 0(除了零点导数无定义以外),这意味着基于梯度的优化方法并不可行
sigmoid
函数定义:
导数:
优点:
sigmoid 函数的输出映射在 (0,1) 之间,单调连续,输出范围有限,优化稳定,可以用作输出层;
求导容易;
缺点:
由于其软饱和性,一旦落入饱和区梯度就会接近于0,根据反向传播的链式法则,容易产生梯度消失,导致训练出现问题;
Sigmoid函数的输出恒大于0。非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢;
原因:https://www.cnblogs.com/alan-W/p/13756947.html
计算时,由于具有幂运算,计算复杂度较高,运算速度较慢。
tanh
函数定义:
导数:
优点:
tanh 比 sigmoid 函数收敛速度更快;
相比 sigmoid 函数,tanh 是以 0 为中心的;
缺点:
与 sigmoid 函数相同,由于饱和性容易产生的梯度消失;
与 sigmoid 函数相同,由于具有幂运算,计算复杂度较高,运算速度较慢。
ReLU
优点:
收敛速度快;
相较于 sigmoid 和 tanh 中涉及了幂运算,导致计算复杂度高, ReLU可以更加简单的实现;
当输入 x>=0 时,ReLU 的导数为常数,这样可有效缓解梯度消失问题;
当 x<0 时,ReLU 的梯度总是 0,提供了神经网络的稀疏表达能力;
缺点:
ReLU 的输出不是以 0 为中心的;
神经元坏死现象,某些神经元可能永远不会被激活,导致相应参数永远不会被更新;
不能避免梯度爆炸问题;
LReLU
PReLU
RReLU
ELU
SELU
softsign
softplus
softmax
用于多分类问题上求概率
swish
hswish
激活函数的选择
- 浅层网络使用sigmoid及其组合通常效果更好
- 由于梯度消失问题,有时需要避免使用sigmoid和tanh函数
- relu是一个通用函数,在大多数情况下都可以使用
- 如果神经网络中出现死神经元,那么 prelu 函数就是最好的选择
- relu 函数只能在隐藏层中使用
- 通常,可以从 relu 函数开始,如果 relu 函数没有提供最优结果,再尝试其他激活函数
激活函数相关问题
- 为什么 relu 不是全程可微/可导也能用于基于梯度的学习?
- 为什么 tanh 的收敛速度比 sigmoid 快?
- sigmoid 和 softmax 有什么区别?