Deep Learning中常用的激活函数(activation)
1. sigmoid
表达式:
函数图像:
适用范围:
函数适用于刚接触机器学习的同学,使用
函数可以很容易的与逻辑回归等算法结合,进行代价损失函数
的优化。
对于高阶的深度学习开发者而言, 会很少使用
函数作为激活函数,因为有很多其他激活函数,比如,
的表现几乎总是要比
好。
只有在二分类时,最后的输出层才会用
函数,因为其函数取值范围为:
。
2. tanh(双曲正切函数)
表达式:
函数图像:
适用范围:
是较为常用的激活函数,但它的缺点是在导数值接近“0”时,学习速率会降低,这会直接导致更长的训练时间。
3. ReLU(修正线性单元)
表达式:
函数图像:
适用范围:
ReLU线性修正单元是目前最为常用和流行的激活函数,尤其是其大量的应用于卷积神经网络中,还有就是,ReLU函数构成简单,易于实现。
我们从它的函数图像可以看出,在z > 0时,其导数值恒为1,所以,相较于其他激活函数而言,它可以极大的提高训练速度,降低算法的运行时间。
注
: 当z = 0时,由于此点导数未定义,所以将此点的导数值赋为0或1。
4. Leaky-ReLU(带泄露的ReLU)
表达式:
函数图像:
适用范围:
Leaky-ReLU能够出现原因是因为,当z < 0时,ReLU的导数值为0,这不利于神经网络进行学习。所以,在z < 0时,为其赋予一定的斜率(导数)。
如果你问,为什么在z < 0时取斜率值 = 0.01?
实际上,你可以把这个斜率作为参数输入,但是实际上,很少有人会这么做;所以,如果你想用Leaky-ReLU,那么在z < 0时,取斜率值 = 0.01,即可。
注
:但,实际上,神经网络中有足够多的隐藏单元使z > 0,所以,在大多数情况下,还是ReLU更加常用。
最后,还要说明的一点是,为什么神经网络一定要使用非线性激活函数?
答:
根据吴恩达(Andrew Ng)老师的神经网络与深度学习课程中讲到的,如果使用线性激活函数(activation)或者不使用激活函数(activation),那么神经网络只是对输入做线性组合,则只会得到经线性变换
后的函数,无法很好的拟合数据集,无法通过反向传播学习到有趣的函数。
而且,若习得的函数为线性函数,那么实际上隐藏层并没有做什么,莫不如去除隐藏层,降低训练时间。