Sigmoid函数

Sigmoid函数曾被广泛地应用,但由于其自身的一些缺陷,现在很少被使用了。Sigmoid函数被定义为:

深度学习SiLU激活函数 sigmoid激活函数的缺点_深度学习SiLU激活函数

函数对应的图像是:

深度学习SiLU激活函数 sigmoid激活函数的缺点_无法更新_02

 

优点:
1.Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。
2.求导容易。

缺点:
1.由于其软饱和性,容易产生梯度消失,导致训练出现问题。
2.其输出并不是以0为中心的。

 

tanh函数

现在,比起Sigmoid函数我们通常更倾向于tanh函数。tanh函数被定义为

深度学习SiLU激活函数 sigmoid激活函数的缺点_卷积神经网络_03

函数位于[-1, 1]区间上,对应的图像是:

深度学习SiLU激活函数 sigmoid激活函数的缺点_神经网络_04


优点:

1.比Sigmoid函数收敛速度更快。

2.相比Sigmoid函数,其输出以0为中心。

缺点:

还是没有改变Sigmoid函数的最大问题——由于饱和性产生的梯度消失。

 

ReLU

ReLU是最近几年非常受欢迎的激活函数。被定义为

深度学习SiLU激活函数 sigmoid激活函数的缺点_无法更新_05

对应的图像是:

深度学习SiLU激活函数 sigmoid激活函数的缺点_深度学习SiLU激活函数_06


但是除了ReLU本身的之外,TensorFlow还提供了一些相关的函数,比如定义为min(max(features, 0), 6)的tf.nn.relu6(features, name=None);或是CReLU,即tf.nn.crelu(features, name=None)。其中(CReLU部分可以参考这篇论文)。

优点:

1.相比起Sigmoid和tanh,ReLU(e.g. a factor of 6 in Krizhevsky et al.)在SGD中能够快速收敛。例如在下图的实验中,在一个四层的卷积神经网络中,实线代表了ReLU,虚线代表了tanh,ReLU比起tanh更快地到达了错误率0.25处。据称,这是因为它线性、非饱和的形式。

深度学习SiLU激活函数 sigmoid激活函数的缺点_神经网络_07


2.Sigmoid和tanh涉及了很多很expensive的操作(比如指数),ReLU可以更加简单的实现。

3.有效缓解了梯度消失的问题。

4.在没有无监督预训练的时候也能有较好的表现。

深度学习SiLU激活函数 sigmoid激活函数的缺点_深度学习SiLU激活函数_08


5.提供了神经网络的稀疏表达能力。

 

缺点:
随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。如果发生这种情况,那么流经神经元的梯度从这一点开始将永远是0。也就是说,ReLU神经元在训练中不可逆地死亡了。

 

Softmax - 用于多分类神经网络输出

深度学习SiLU激活函数 sigmoid激活函数的缺点_卷积神经网络_09

为什么要取指数,第一个原因是要模拟 max 的行为,所以要让大的更大。
第二个原因是需要一个可导的函数。