神经网络中的**函数

1、**函数的作用
在神经网络中,**函数的作用是能够给神经网络加入一些非线性因素,使得神经网络能够很好的解决比较复杂的问题。
如果不使用**函数,神经网络中的每一层的输出只是承接了上一层输入函数的线性变换,无论神经网络有多少层,输出都是输入的线性组合。
2、**函数的发展经历了Sigmoid–>Tanh–>ReLU–>Leaky ReLU–>Maxout这样的过程,还有一个特殊的**函数Softmax,因为它只会被应用在网络中的最后一层,用来进行最后的分类和归一化。
3、Sigmoid
公式:
在这里插入图片描述
函数图像:
在这里插入图片描述
Sigmoid函数也叫做Logistic函数,用于隐藏层的输出,输出在(0,1)之间,它可以将一个实数映射到(0,1)的范围内,可以用来做二分类。常用于:在特征相差比较复杂或是相差不是特别大的时候效果比较好。
Sigmoid函数的优点:1.求导容易。 2.Sigmoid函数的输出映射在(0,1)之间,单调连续输出范围有限,优化稳定可以用作输出层。

缺点:1.由于其软饱和性,容易在反向传播的时候造成梯度消失问题。2.其输出没有以0为中心。因为如果输入神经元的数据总是正数,那么关于ω的梯度在反向传播的过程中,将会要么全部是正数,要么全部是负数,这样会导致梯度下降权重更新时出现z字型的下降。

在这里插入图片描述
2、Tanh
公式:
在这里插入图片描述
Tanh函数图像:
在这里插入图片描述
tanh曲线:也称为双切正切曲线,取值范围为[-1,1],tanh在特征相差明显的时候效果会好,在循环过程中,会不断的扩大特征效果,与Sigmoid函数相比,tanh是0均值的,因此实际应用中,tanh要比sigmoid函数更好。
Tanh函数的优点:1.收敛速度比Sigmoid函数快。 2. 其输出以0为中心。
缺点:还是出现软饱和现象,梯度消失问题并没有解决。
为了防止饱和,现在主流的做法会在**函数之前多做一步batch normalization,尽可能保证每一层网络的输入具有均值较小的、零中心的分布。

3、ReLU
公式:
在这里插入图片描述
函数图像:
在这里插入图片描述
由上图可以看到:输入信号<0时,输出都是0,输入信号>0时,输出等于输入。
Relu函数的优点:1.在SGD(随机梯度下降算法)中收敛速度够快。2.不会出现像Sigmoid那样梯度消失问题。3.提供了网络稀疏表达能力。4.在 无监督训练中也有良好的表现。

缺点:1.不以0为中心。2.前向传导(forward pass)过程中,如果 x < 0,则神经元保持非**状态,且在后向传导(backward pass)中「杀死」梯度。这样权重无法得到更新,网络无法学习。神经元死亡是不可逆的。这样会导致数据多样化的丢失。通过合理设置学习率,会降低神经元【死掉】的概率。

4、Leaky ReLU

公式:
在这里插入图片描述
图像:
在这里插入图片描述
其中 ε是很小的负数梯度值,比如0.01,Leaky ReLU非线性函数图像如下图所示。这样做目的是使负轴信息不会全部丢失,解决了ReLU神经元“死掉”的问题。更进一步的方法是PReLU,即把 ε当做每个神经元中的一个参数,是可以通过梯度下降求解的。

5、Maxout
Maxout是对ReLU和leaky ReLU的一般化归纳,函数公式是在这里插入图片描述
Maxout非线性函数图像如下图所示。Maxout具有ReLU的优点,如计算简单,不会 saturation,同时又没有ReLU的一些缺点,如容易go die。在这里插入图片描述
存在问题:

每个神经元的参数double,这就导致整体参数的数量激增。

6、softmax

softmax用于多分类神经网络的输出,目的是让大的更大。公式:

在这里插入图片描述
示意图为:
在这里插入图片描述 Softmax是Sigmoid的扩展,当类别数k=2时,Softmax回归退化为Logistic回归。