机器学习——激活函数sigmoid、tanh、ReLU和softmax

激活函数,就是使得神经网络具有的拟合非线性函数的能力,使得其具有强大的表达能力!

关于激活函数,首先要搞清楚的问题是,激活函数是什么,有什么用?不用激活函数可不可以?答案是不可以

一、激活函数

1.1 什么是激活函数:

在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。具体来说,神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。

如下图,在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function。

1.2 那么激活函数应该具有什么样的性质呢?

可微性: 当优化方法是基于梯度的时候,这个性质是必须的。

单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。

输出值的范围: 当激活函数输出值是 有限 的时候,基于梯度的优化方法会更加 稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是 无限 的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的learning rate。从目前来看,常见的激活函数多是分段线性和具有指数形状的非线性函数。

1.3 激活函数的用途(为什么需要激活函数)?

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。

二、有哪些常见的激活函数,都有什么性质和特点?

激活函数可以分为两大类 :

  • 饱和激活函数: sigmoid、 tanh
  • 非饱和激活函数: ReLU 、Leaky Relu   、ELU【指数线性单元】、PReLU【参数化的ReLU 】、RReLU【随机ReLU】

相对于饱和激活函数,使用“非饱和激活函数”的优势在于两点:
    1.首先,“非饱和激活函数”能解决深度神经网络【层数非常多!!】的“梯度消失”问题,浅层网络【三五层那种】才用sigmoid 作为激活函数。
    2.其次,它能加快收敛速度

在深度学习中,比较常用的激活函数主要有:sigmoid函数tanh函数ReLU函数softmax函数。下面我们将具体介绍。

2.1 Sigmoid函数

Sigmoid 是以前最常用的非线性的激活函数,它能够把输入的 (-∞,+∞)范围内 连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。

此外,(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数。

公式: f(z)=\frac{1}{1+exp(-z)}

函数曲线:

缺点:sigmoid函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它固有的一些缺点。

缺点1:在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。

缺点2:Sigmoid 的 output 不是0均值(即zero-centered)。这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。

缺点3:其解析式中含有幂运算,计算机求解时相对来讲比较耗时。对于规模比较大的深度网络,这会较大地增加训练时间。

2.2 tanh函数

Hyperbolic tangent function 双曲正切函数将一个 (-∞,+∞)范围内 实值输入压缩至 [-1, 1]的范围,这类函数具有平滑和渐近性,并保持单调性。

它解决了Sigmoid函数的不是zero-centered输出问题,与sigmoid相比,它的输出均值是0,使得其收敛速度要比sigmoid快,减少迭代次数,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。

公式f(z)=tanh(z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}}

实际上是Sigmoid的变形,tanh(z)=2Sigmoid(2x)-1 

曲线:

tanh函数也称为双切正切函数,取值范围为[-1,1]。
tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。
与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好。

2.3 Relu函数

Rectified Linear Unit(ReLU)  修正线性单元- 用于隐层神经元输出, 深度学习目前最常用的激活函数,是一种分段线性函数,弥补了sigmoid函数以及tanh函数的梯度消失问题。

公式\phi (x)=max(0,x)

输入信号 <0 时,输出都是0,>0 的情况下,输出等于输入

曲线:Relu函数及其导数的图像

ReLU函数其实就是一个取最大值函数,注意这并不是全区间可导的,但是我们可以取sub-gradient,如上图所示。

ReLU虽然简单,但却是近几年的重要成果,有以下几大优点

1) 解决了gradient vanishing问题 (在正区间)

2)计算速度非常快,只需要判断输入是否大于0

3)使用梯度下降(GD)法时,收敛速度更快 

缺点

1)ReLU的输出不是zero-centered

2)Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。

尽管存在这两个问题,ReLU目前仍是最常用的activation function,在搭建人工神经网络的时候推荐优先尝试!

2.4 Softmax函数

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

公式y_{k}=\frac{exp(a_{k})}{\sum_{i=1}^{n}exp(a_{i})}

exp(x) 是表示 e^{x} 的指数函数(e 是纳皮尔常数 2.7182 …)。上式表示假设输出层共有 n 个神经元,计算第 k 个神经元的输出 y_{k}。如上式所示,softmax 函数的分子是输入信号 a_{k} 的指数函数,分母是所有输入信号的指数函数的和。

Softmax函数是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。对于长度为 K 的任意实向量,Softmax函数可以将其压缩为长度为 K,值在 [0,1] 范围内,并且向量中元素的总和为 1 的实向量。
Softmax函数与正常的max函数不同:max函数仅输出最大值,但Softmax函数确保较小的值具有较小的概率,并且不会直接丢弃。我们可以认为它是arg max函数的概率版本或“soft”版本。Softmax函数的分母结合了原始输出值的所有因子,这意味着Softmax函数获得的各种概率彼此相关。

Softmax激活函数的特点:

  • 在零点不可微。
  • 负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。

此篇博客学习和部分引用以下优秀博客:

机器学习(九):激活函数 - 知乎

各种激活函数_狼刀流的博客-CSDN博客_激活函数

激活函数之softmax函数_小嘿黑15斤的博客-CSDN博客_softmax激活函数

机器学习中的数学——激活函数(七):Softmax函数_von Neumann的博客-CSDN博客_softmax激活函数

如有遗漏,可联系我修正,谢谢~

猜你喜欢

转载自blog.csdn.net/fortune_cookie/article/details/127321274
今日推荐