1.sigmoid
能够将实数域变换到0-1之间,因解释性良好在很早以前广泛使用
但因为它有两个致命缺点所以现在已经很少用了
1)梯度消失
如果输入太大或者太小,sigmoid的梯度会接近于0,那么参数将无法更新,模型就不收敛;另外初始化也需要小心,如果初始化的权重太大,经过激活函数时也会使神经元饱和,无法更新参数
2)输出不是0均值
sigmoid的输出并非0均值,对于后面的层来说,梯度就容易都是正的(对于后面的某个神经元,f(x)=wx+b, 对于参数w,梯度是x,而x是前面的sigmoid的输出,该输出的均值是正的),更新参数的时候永远都用正梯度更新
2.Tanh
将实数域转换到-1~1之间,解决了sigmoid非0均值的问题,但是梯度消失的问题依然存在,所以总是好于sigmoid
3. ReLU
f(x)=max(0,x)
优点:
(1)由于是线性的,不存在梯度消失的问题,加速梯度下降法的收敛速度
(2)仅用阈值判断,不需要像sigmoid,tanh进行计算
缺点:
需要设置较小的学习率来避免神经元“死掉”:如果一个很大的梯度经过ReLU激活函数,参数更新后这个神经元的值会变得非常小(wx+b的b会变得很小,有可能使wx+b变成负值),那么下一轮经过ReLu的梯度就是0,参数就不会更新了,在这之后这个ReLU的梯度永远都会是0,参数也永远无法在更新了
4. Leaky ReLU
为了对付ReLU的缺点,当x<0时也会有一个很小的梯度
有人提出对alpha也可以进行从参数化处理,训练过程中进行更新
5.Maxout
可以发现ReLU只是Maxout的特殊形式,所以它保持了ReLU的优点,
缺点:加倍了模型的参数,导致存储变大
最常用的还是relu,学习率设定不要太大,一定不要使用sigmoid,可以试试tanh
另外,实际使用中也很少使用混合类型的激活函数