一. 激活函数
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
1. Sigmoid
Sigmoid非线性函数的数学表达式是 σ ( x ) = 1 1 + e − x \sigma (x)=\frac{1}{1+e^{-x}} σ(x)=1+e−x1,其图形如下图所示:
我们知道Sigmoid函数是将一个实数输入转化到0-1之间的输出,具体来说越小的负数转化到越靠近0,越大的正数越靠近1。
历史上Sigmoid函数频繁的使用,因为其具有良好的可解释性。但最近这些年,Sigmoid函数已经很少被人使用了,主要是因为Sigmoid函数有以下两大缺点。
(1)Sigmoid函数会造成梯度损失。一个非常不好的地方在于Sigmoid在靠近1和0的两端时梯度几乎为0,而反向传播算法的梯度向下传播时,每过一层就会增加一个 g ′ ( z ) g^{'}(z) g′(z)项(Sigmoid关于每一层线性组合值的导数),且Sigmoid函数的导数满足 f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f^{'}(x)=f(x)(1-f(x)) f′(x)=f(x)(1−f(x)),又f(x)的值在(0, 1)之间,故 f ′ ( x ) f^{'}(x)