深度学习中几种常见的激活函数理解与总结 您所在的位置:网站首页 激活函数分类中包含哪些 深度学习中几种常见的激活函数理解与总结

深度学习中几种常见的激活函数理解与总结

2023-06-01 10:17| 来源: 网络整理| 查看: 265

学习神经网络的时候我们总是听到激活函数这个词,而且很多资料都会提到常用的激活函数,比如Sigmoid函数、tanh函数、Relu函数。肯定很多人刚开始和我一样一头雾水,接下来就让我们详细了解一下激活函数方方面面的知识。

目录

1.激活函数的概念和作用;

2.通俗的理解一下激活函数(图文结合);

3.几种激活函数的对比;

4.如何选择合适的激活函数?

1.激活函数的概念和作用

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

关于神经网络中的激活函数的作用,通常都是这样解释:不使用激活函数的话,神经网络的每层都只是做线性变换,多层输入叠加后也还是线性变换。因为线性模型的表达能力通常不够,所以这时候就体现了激活函数的作用了,激活函数可以引入非线性因素。疑问就来了,激活函数是如何引入非线性因素呢?

2.通俗的理解一下激活函数(图文结合);

为了解释激活函数如何引入非线性因素,接下来让我们以神经网络分割*面空间作为例子。

(1)无激活函数的神经网络

  神经网络最简单的结构就是单输出的单层感知机,单层感知机只有输入层和输出层,分别代表了神经感受器和神经中枢。下图是一个只有2个输入单元和1个输出单元的简单单层感知机。图中x1、w2代表神经网络的输入神经元受到的刺激,w1、w2代表输入神经元和输出神经元间连接的紧密程度,b代表输出神经元的兴奋阈值,y为输出神经元的输出。我们使用该单层感知机划出一条线将*面分割开,如图所示:

同理,我们也可以将多个感知机(注意,不是多层感知机)进行组合获得更强的*面分类能力,如图所示:

 

再看看包含一个隐层的多层感知机的情况,如图所示:

通过对比可以发现,上面三种没有激励函数的神经网络的输出是都线性方程,其都是在用复杂的线性组合来试图逼*曲线。

 (2)带激活函数的神经网络

  让我们在神经网络每一层神经元做完线性变换以后,加上一个非线性激励函数对线性变换的结果进行转换,结果显而易见,输出立马变成一个不折不扣的非线性函数了,如图所示: 

 

拓展到多层神经网络的情况, 和刚刚一样的结构, 加上非线性激励函数之后, 输出就变成了一个复杂的非线性函数了,如图所示: 

 

总结:加入非线性激励函数后,神经网络就有可能学习到*滑的曲线来分割*面,而不是用复杂的线性组合逼**滑曲线来分割*面,使神经网络的表示能力更强了,能够更好的拟合目标函数。 这就是为什么我们要有非线性的激活函数的原因。如下图所示说明加入非线性激活函数后的差异,上图为用线性组合逼**滑曲线来分割*面,下图为*滑的曲线来分割*面:

 

3.几种激活函数的对比;

首先让我们看看激活函数的大分类,如下图所示:

 

首先让我们看看什么是饱和激活函数:

反之,不满足以上条件的函数则称为非饱和激活函数。

sigmoid和tanh是“饱和激活函数”,而ReLU及其变体则是“非饱和激活函数”。使用“非饱和激活函数”的优势在于两点:(1)"非饱和激活函数”能解决所谓的“梯度消失”问题。(2)它能加快收敛速度。

Sigmoid函数需要一个实值输入压缩至[0,1]的范围---------σ(x) = 1 / (1 + exp(−x))

tanh函数需要讲一个实值输入压缩至 [-1, 1]的范围---------tanh(x) = 2σ(2x) − 1

由于使用sigmoid激活函数会造成神经网络的梯度消失和梯度爆炸问题,所以许多人提出了一些改进的激活函数,如:tanh、ReLU、Leaky ReLU、PReLU、RReLU、ELU、Maxout。下面我们具体来分析一下这几个激活函数的区别。

 

(1)Sigmoid

Sigmoid是常用的非线性的激活函数,它的数学形式如公式4:

其函数图像如图所示:

导函数图像如图所示:

Sigmoid函数在历史上曾经非常的常用,输出值范围为[0,1]之间的实数。但是现在它已经不太受欢迎,实际中很少使用。原因是sigmoid存在3个问题:

sigmoid函数饱和使梯度消失(Sigmoidsaturate and kill gradients)。我们从导函数图像中可以看出sigmoid的导数都是小于0.25的,那么在进行反向传播的时候,梯度相乘结果会慢慢的趋*于0。这样,几乎就没有梯度信号通过神经元传递到前面层的梯度更新中,因此这时前面层的权值几乎没有更新,这就叫梯度消失。除此之外,为了防止饱和,必须对于权重矩阵的初始化特别留意。如果初始化权重过大,可能很多神经元得到一个比较小的梯度,致使神经元不能很好的更新权重提前饱和,神经网络就几乎不学习。 sigmoid函数输出不是“零为中心”(zero-centered)。一个多层的sigmoid神经网络,如果你的输入x都是正数,那么在反向传播中w的梯度传播到网络的某一处时,权值的变化是要么全正要么全负。

如上图所示:当梯度从上层传播下来,w的梯度都是用x乘以f的梯度,因此如果神经元输出的梯度是正的,那么所有w的梯度就会是正的,反之亦然。在这个例子中,我们会得到两种权值,权值范围分别位于图8中一三象限。当输入一个值时,w的梯度要么都是正的要么都是负的,当我们想要输入一三象限区域以外的点时,我们将会得到这种并不理想的曲折路线(zig zag path),图中红色曲折路线。假设最优化的一个w矩阵是在图8中的第四象限,那么要将w优化到最优状态,就必须走“之字形”路线,因为你的w要么只能往下走(负数),要么只能往右走(正的)。优化的时候效率十分低下,模型拟合的过程就会十分缓慢。

指数函数的计算是比较消耗计算资源的。

 

(2)tanh

tanh函数跟sigmoid还是很像的,实际上,tanh是sigmoid的变形,如公式5所示。tanh的具体公式如公式6所示,其图像如下图所示:

tanh与sigmoid不同的是,tanh是“零为中心”的。因此,实际应用中,tanh会比sigmoid更好一些。但是在饱和神经元的情况下,tanh还是没有解决梯度消失问题。

 优点:tanh解决了sigmoid的输出非“零为中心”的问题

 缺点:(1)依然有sigmoid函数过饱和的问题。(2)依然进行的是指数运算

 

 (3)ReLU

 *年来,ReLU函数变得越来越受欢迎。全称是Rectified Linear Unit,中文名字:修正线性单元。ReLU是Krizhevsky、Hinton等人在2012年《ImageNet Classification with Deep Convolutional Neural Networks》论文中提出的一种线性且不饱和的激活函数。它的数学表达式如7所示

函数图像如下图所示:

 优点:(1)ReLU解决了梯度消失的问题,至少x在正区间内,神经元不会饱和;(2)由于ReLU线性、非饱和的形式,在SGD中能够快速收敛;(3)算速度要快很多。ReLU函数只有线性关系,不需要指数计算,不管在前向传播还是反向传播,计算速度都比sigmoid和tanh快

 缺点:(1)ReLU的输出不是“零为中心”(Notzero-centered output)。(2)随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。这种神经元的死亡是不可逆转的死亡

 总结:训练神经网络的时候,一旦学习率没有设置好,第一次更新权重的时候,输入是负值,那么这个含有ReLU的神经节点就会死亡,再也不会被激活。因为:ReLU的导数在x>0的时候是1,在x



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有