关键词:sigmoid、relu、tanh、softmax、激活函数、梯度消失、梯度爆炸
激活函数的作用是实现特征空间的非线性转换,这样模型才可以拟合任何训练数据,使训练数据线性可分。
如果一个函数能提供非线性转换(即导数不恒为常数),可导(可导是从梯度下降方面考虑。可以有一两个不可导点, 但不能在一段区间上都不可导)等性质,即可作为激活函数。在不同网络层(隐藏层、输出层)的激活函数关注的重点不一样,隐藏层关注的是计算过程的特性,输出层关注的输出个数及数值范围。
Sigmoid:取值范围在[0,+1]之间
表达式为,梯度就是该表达式的导数,区间是在【0,0.25】,具体曲线如下所示
如果一个网络有多个神经元,假设有a,b,c,d,当求Loss函数对神经元a的偏导时,根据链式法则如下
梯度经过多次相乘后,会趋于一个很小的值,也就是常说的梯度消失问题,此时网络的更新机制失效。
tanh:取值范围在[-1,+1]之间
跟sigmoid曲线很相似,只是位置变动,且做了一定的线性变换,一般它的效果是优于sigmoid的。
Relu
ReLU激活函数的提出 就是为了解决梯度消失问题,LSTMs也可用于解决梯度消失问题(但仅限于RNN模型)。ReLU的梯度只可以取两个值:0或1,当输入小于0时,梯度为0;当输入大于0时,梯度为1。
好处就是:ReLU的梯度的连乘不会收敛到0 ,连乘的结果也只可以取两个值:0或1 ,如果值为1 ,梯度保持值不变进行前向传播;如果值为0 ,梯度从该位置停止前向传播。对于隐藏层,选择ReLU作为激活函数,能够保证z大于零时梯度始终为1,从而提高神经网络梯度下降算法运算速度。
Sigmoid和ReLU函数对比如下:
但relu的缺点是存在神经元死亡问题,它在反向传播的过程中很快让一些神经元的导数永远是0,于是这些神经元等于被抛弃了,也就是被“谋杀”了。
Softmax
一般在输出层用作激活函数,也称归一化指数函数,它很自然地输出表示具有 n个可能值的离散型随机变量的概率分布。数学函数式如下,公式引入了指数可以扩大类间的差异。
如果是多分类用这个,二分类用sigmiod效果更佳。
参考资料:
relu激活函数比sigmoid效果好为什么还用sigmoid? - 知乎一文搞懂激活函数(Sigmoid/ReLU/LeakyReLU/PReLU/ELU) - 知乎relu激活函数比sigmoid效果好为什么还用sigmoid? - 知乎