
2.2.4 激活函数
在之前的例子中,反复用到了Sigmoid函数,这样的函数被称为激活函数,用来在神经网络中将多个线性输入转换为非线性关系,用在最终的结果输出,或者在多层网络结构中,将结果输出到下一层网络,这在深度学习网络层数很深时,有非常重要的作用。激活函数的种类非常多,不同的应用场景适用不同的激活函数,我们来介绍一下常用的几种激活函数。
Sigmoid函数是历史悠久的激活函数,它的使用场景主要限制在分类任务或者预测任务的输出层。
如图2-33所示,Sigmoid激活函数将输入值映射到区间[0,1](这恰恰和概率值的区间一致,这正是它在输出层中用于分类任务的原因。同时,别忘了给定层的激活值是接下来一层的输入,由于Sigmoid的区间在(0,1),激活值将以0.5为中心,而不是以零为中心。例如,我们神经网络得到了一个值,希望利用这个值得到一个概率结果,此时我们就可以使用Sigmoid函数。

图2-33 Sigmoid激活函数
然后,我们来看看tanh函数,tanh函数是Sigmoid函数的一个演化。
和Sigmoid函数不同,tanh函数其输出值的均值为零。tanh激活函数映射输入区间为(-1,1),中心为零。可以对比看出,tanh和Sigmoid的主要区别在于中心点,以及更快达到极大值、极小值的速度(也就是函数的梯度)。
最后,我们来看下ReLU函数。

图2-34 tanh函数
ReLU函数,是Hinton在2011年提出来的,并在其2012年参加imagenet图像识别比赛的时候为众所周知。它的函数形式比Sigmoid函数和tanh函数都要简单得多,但是其效果却非常好,主要原因就在于这个函数的右端是一个斜率恒为1的直线,所以其在计算梯度的时候会得到恒为1的数值,这样的话就在一定程度上避免了深度神经网络里梯度消失的问题,使得我们训练深度神经网络更加容易收敛。不过很明显,其并不适合用于在输出层。
以上介绍的3个函数是目前最为常用的激活函数。可以发现,其实函数本身都比较简单,困难之处在于在什么场景下使用哪种激活函数。激活函数的作用在于将一些输入映射到另一个区间上去。最终目的都是将线性输入转换为非线性输出,以供下一层网络,或者输出层使用。

图2-35 ReLU函数