神经网络中的激活函数

文章目录

  • 1. 什么是激活函数?
  • 2. Sigmoid函数
  • 3. Tanh函数
  • 4. Relu函数
  • 5. Softplus函数
  • 6. Softmax函数
  • 参考

1. 什么是激活函数?

激活函数: 就是在神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

常见的激活函数包括

  • Sigmoid
  • TanHyperbolic(tanh)
  • ReLu
  • softplus函数
  • softmax

2. Sigmoid函数

在逻辑回归中我们介绍过sigmoid函数,该函数是将取值为 (−∞,+∞) 的数映射到 (0,1) 之间。sigmoid函数的公式以及图形如下:

在这里插入图片描述
神经网络中的激活函数_第1张图片
对sigmoid函数进行求导,得:
神经网络中的激活函数_第2张图片
神经网络中的激活函数_第3张图片
sigmoid函数作为非线性激活函数,但是其并不被经常使用,它具有以下几个缺点:

(1)容易出现梯度消失(gradient vanishing)的现象:当激活函数接近饱和区时,变化太缓慢,导数接近0,根据后向传递的数学依据是微积分求导的链式法则,当前导数需要之前各层导数的乘积,几个比较小的数相乘,导数结果很接近0,从而无法完成深层网络的训练。

(2)Sigmoid的输出不是0均值(zero-centered):这会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响。以 f=sigmoid(wx+b)为例, 假设输入均为正数(或负数),那么对w的导数总是正数(或负数),这样在反向传播过程中要么都往正方向更新,要么都往负方向更新,导致有一种捆绑效果,使得收敛缓慢。

(3)幂运算相对耗时

3. Tanh函数

tanh函数相较于sigmoid函数要常见一些,该函数是将取值为 (−∞,+∞) 的数映射到 (−1,1) 之间,其公式与图形为:
在这里插入图片描述

神经网络中的激活函数_第4张图片
Tanh函数的导数:
神经网络中的激活函数_第5张图片
Tanh函数及其导数图像:
神经网络中的激活函数_第6张图片
tanh:有数据中心化的效果,让均值接近于0,而不是0.5,这实际让下一层的学习更方便点。tanh几乎在所有场合都更优越,一个例外是输出层,因为y如果真实值为0或1,那么我们希望y帽介于0和1之间,而不是-1和1之间,这时sigmoid更适合。

Tanh和sigmoid的一个共同缺点:当z很大或很小时,那么这个函数的斜率会很小,很接近于0,这样会拖慢梯度下降法。

tanh函数将输入值压缩到 -1~1 的范围,因此它是0均值的,解决了Sigmoid函数的非zero-centered问题,但是它也存在梯度消失和幂运算的问题。

其实 tanh(x)=2sigmoid(2x)-1

4. Relu函数

ReLu函数的全称为Rectified Linear Units,称为修正线性单元,是一种分段线性函数,其弥补了sigmoid函数以及tanh函数的梯度消失问题。

函数表达式为:
在这里插入图片描述
其导数为:
在这里插入图片描述
神经网络中的激活函数_第7张图片
优点:
(1)SGD算法的收敛速度比 sigmoid 和 tanh 快;(梯度不会饱和,解决了梯度消失问题)
(2)计算复杂度低,不需要进行指数运算;
(3)适合用于后向传播。

缺点:
(1)ReLU的输出不是zero-centered;
(2)Dead ReLU Problem(神经元坏死现象):某些神经元可能永远不会被激活,导致相应参数永远不会被更新(在负数部分,梯度为0)。产生这种现象的两个原因:参数初始化问题;learning rate太高导致在训练过程中参数更新太大。 解决方法:采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。
(3)ReLU不会对数据做幅度压缩,所以数据的幅度会随着模型层数的增加不断扩张。

ReLu函数的其他变体
神经网络中的激活函数_第8张图片

5. Softplus函数

softplus函数是平滑版的ReLu函数,其函数表达式如下:
在这里插入图片描述
其函数图像ReLu函数图像
神经网络中的激活函数_第9张图片
可以看到,softplus可以看作是ReLu的平滑。根据神经科学家的相关研究,softplus和ReLu与脑神经元激活频率函数有神似的地方。也就是说,相比于早期的激活函数,softplus和ReLu更加接近脑神经元的激活模型,

而神经网络正是基于脑神经科学发展而来,这两个激活函数的应用促成了神经网络研究的新浪潮。

softplus和ReLu相比于Sigmoid的优点在哪里呢?

采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练。
Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。
神经网络中的激活函数_第10张图片
神经网络中的激活函数_第11张图片
需要注意的是:tanh特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果显示出来,但有是,在特征相差比较复杂或是相差不是特别大时,需要更细微的分类判断的时候,sigmoid效果就好了。

还有一个东西要注意,sigmoid 和 tanh作为激活函数的话,一定要注意一定要对 input 进行归一话,否则激活后的值都会进入平坦区,使隐层的输出全部趋同,但是 ReLU 并不需要输入归一化来防止它们达到饱和。

6. Softmax函数

Softmax - 用于多分类神经网络输出
神经网络中的激活函数_第12张图片
神经网络中的激活函数_第13张图片
下面为大家解释一下为什么softmax是这种形式。我们知道指数函数的值域取值范围是零到正无穷。与概率取值相似的地方是它们都是非负实数。那么我们可以利用指数函数将多分类结果映射到零到正无穷。然后进行归一化处理,便得到了近似的概率。

总结一下softmax如何将多分类输出转换为概率:

1)分子:通过指数函数,将实数输出映射到零到正无穷。

2)分母:将所有结果相加,进行归一化。

Sigmoid 和 Softmax 区别:

sigmoid将一个real value映射到(0,1)的区间,用来做二分类。
而 softmax 把一个 k 维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4….)其中 bi 是一个 0~1 的常数,输出神经元之和为 1.0,所以相当于概率值,然后可以根据 bi 的概率大小来进行多分类的任务。
二分类问题时 sigmoid 和 softmax 是一样的,求的都是 cross entropy loss,而 softmax 可以用于多分类问题
softmax是sigmoid的扩展,因为,当类别数 k=2 时,softmax 回归退化为 logistic 回归。具体地说,当 k=2 时,softmax 回归的假设函数为:
在这里插入图片描述
利用softmax回归参数冗余的特点,从两个参数向量中都减去向量θ1 ,得到:
神经网络中的激活函数_第14张图片

最后,用 θ′ 来表示 θ2−θ1,上述公式可以表示为 softmax 回归器预测其中一个类别的概率为:
在这里插入图片描述
另一个类别概率的为
在这里插入图片描述

这与 logistic回归是一致的。
softmax建模使用的分布是多项式分布,而logistic则基于伯努利分布
  
多个logistic回归通过叠加也同样可以实现多分类的效果,但是 softmax回归进行的多分类,类与类之间是互斥的,即一个输入只能被归为一类;多个logistic回归进行多分类,输出的类别并不是互斥的,即"苹果"这个词语既属于"水果"类也属于"3C"类别。

参考

神经网络常见的激活函数汇总
神经网络中常用的几种激活函数的理解
激活函数的比较和优缺点,sigmoid,tanh,relu,softmax
激活函数—Sigmoid、Tanh、ReLu、softplus、softmax
深度学习中激活函数的优缺点
非线性激励函数sigmoid,tanh,softplus,Relu
常用激活函数比较

你可能感兴趣的:(自然语言处理,神经网络)