在神经网络和深度学习中,需要通过激活函数使得模型能够解决非线性问题。激活函数是一种非线性函数,其作用在于为神经元引入非线性映射关系,将神经元的加权信息输入进行非线性转换,增强网络的表达能力。如果在网络模型中不使用激活函数,每层节点的输入都是上层节点输出的线性函数,那么,无论网络有多少层,最终输出都是输入的线性组合,整个网络的逼近能力将极其有限。而引入非线性函数作为激励函数,深层神经网络的表达能力就更加强大,不再是输入的线性组合,而是几乎可以逼近任意函数。
常用的激活函数见表2.2,其中sigmoid函数、tanh函数有一个问题,那就是具有饱和性。在误差反向传播的过程中,当输入非常大或者非常小时,其导数会趋近于零,由此会导致向下一层传递时梯度非常小,从而引起梯度消失的问题。ReLU(Rectified Linear Unit)函数是现代神经网络中最常用的激活函数,是大多数神经网络默认使用的激活函数。ReLU函数在 x >0时可以保证梯度不变,从而非常有效地解决了梯度消失的问题,但 x <0时,梯度为0。这个神经元及之后的神经元梯度永远为0,不再对任何数据有所响应,导致相应参数永远不会被更新,因此就有了改进的Leaky-ReLU和ELU激活函数。
表2.2 常用激活函数
(续)
Softmax也是一种激活函数,它可以将一个数值向量归一化为一个概率分布向量,且各个概率之和为1,如图2.8所示。Softmax可以用来作为神经网络的最后一层,用于多分类问题的输出,可以将上一层的原始数据进行归一化,转化为一个(0,1)之间的数值。这些数值可以被当作概率分布,用来作为多分类的目标预测值。Softmax层常和交叉熵损失函数一起结合使用。
图2.8 Softmax函数归一化处理