1.sigmoid
函数图像:
上图分别为其函数图像和导函数图像 .
优点:
1. 函数平滑,易于求导
缺点:
1. 梯度值均小于1,容易梯度消失
2.使用指数运算,计算耗时
3.输出数据不是0均值的,收敛缓慢(模型的梯度值恒为正或者恒为负,导致会呈现Z字形的收缩方式)
收敛缓慢的图像。
2. tanh
函数图像:
导函数为
优点:
1. 是0均值的,收敛较快
2.类似于sigmoid,曲线平滑,易于求导
缺点:
1.指数运算,计算耗时
2. 只是将导数范围由(0, 0.25)放大到了(0, 1),仍然存在梯度消失问题
3. Relu
函数图像:
左侧为原函数,右侧为导数,其中在x=0处不可导。
优点:
1.计算速度快
2.在x>0时,导数恒为1, 解决了梯度消失问题(正区间上的)
注:此时在正方向上的梯度则全部取决于权重值,激活函数的输出是无上限的,可能出现梯度爆炸的问题。因此需要保证权重值在(0,1), 或者使用梯度裁剪: g=min(6,max(0, x))。
3.由于导数为1,故而收敛的比sigmoid和tanh更快
缺点:
1.存在deadly relu,即当输入为负时,某些神经元不更新
注:deadly relu也有好处,即带来了输出的稀疏性,能够提高时间和空间效率
尽可能避免deadly relu的策略:不要过大的学习率;Xavier参数初始化;自适应调节学习率
2.输出不是0均值的
4.leaky Relu:
函数图像类似于Relu,只不过在负区间上的导数为0.01。
优点:
1.解决了deadly relu的问题
2.收敛较快
3.计算速度快
缺点:
1.不是0均值的
5. ELU(Exponential Linear Units):
函数图像及导函数图像:
优点:
1.解决了Relu的deadly relu问题
2. 是0均值的
缺点:
1.使用了指数运算,计算耗时
其中leaky Relu的参数人工设定,P Relu的参数是可学习的,而Random Relu中的参数在训练时随机抽取,而在测试时是固定的。
6. maxout
主要思想:
类似于池化层,其中有k组w和b,k是一个人工设定的参数,相当于做了k个不同的线性变换得到k中feature map,然后做最大池化。
7. Selu:扩展型指数线性激活函数
函数图像:
导函数及其图像: (0, lambda * alpha)
其中: lambda = 1.05, alpha=1.673
优点:
1.输出是自归一化的, 因此收敛更快
2. 不会出现梯度消失和梯度爆炸的问题
缺点:
1. 指数运算,计算耗时
2. 在CNN和RNN中目前用的还是较少,具体怎么更好地应用效果仍然值得研究
8. Gelu:高斯误差线性单元激活函数
优点:
1. 不会出现梯度消失问题
2. 引入了随机正则(依据输入数据的概率分布)
具体函数的由来:
对于一个输入x,它服从于标准正态分布N(0,1), 然后乘一个伯努利分布。得到:
逼近后即为上式的数值函数。
函数思想是:
类似于dropout,将输入较小的值认为是不重要的额,因此倾向于将其归整为0。
注: Gelu用于transformer、bert和gpt中,是目前最好的激活函数。