matlab用relu函数优化逻辑回归_神经网络中常见的激活函数

一:什么是激活函数

在神经网络中,每个节点的输入是上一层节点输出值的线性组合,该节点的输出值是该线性组合进行非线性变换后的值。对线性组合进行非线性变换的函数就是本文要讨论的激活函数。如图1-1所示,就是一个神经元节点,它接收一个线性组合的值,然后通过激活函数f,再输出激活后的值。

matlab用relu函数优化逻辑回归_神经网络中常见的激活函数_第1张图片

图1-1

二:激活函数的作用

激活函数在神经网络中起到了非线性映射的作用,使神经网络能够提取充分的特征。如果不使用激活函数,神经网络不能解决非线性问题。如图2-1所示,是使用激活函数和不使用激活函数在非线性数据上的表现。

matlab用relu函数优化逻辑回归_神经网络中常见的激活函数_第2张图片

图2-1

激活函数必须是非线性函数。神经网络模型是一种层次模型,如果激活函数是线性函数,那么多层的神经网络和一层的神经网络是等价的,并不能发挥神经网络逐层提取特征的优势。下面我们简单证明一下,如果激活函数是线性函数,那么多层神经网络和一层神经网络是等价的。

如图2-2所示,是一个只含有一层隐层的全连接神经网络

matlab用relu函数优化逻辑回归_神经网络中常见的激活函数_第3张图片

图2-2

我们设激活函数110afd6e9882b4bab8135e85773f55e5.png,该神经网络的输出值是a953d707a5746ec3b33f637e605dfd06.png我们删除隐层,得到如图2-3所示的神经网络

matlab用relu函数优化逻辑回归_神经网络中常见的激活函数_第4张图片

图2-3

该神经网络的输出值是1d24a2b093cee88d36f9d0ca3d3f3f06.png,显然两个神经网络结构的输出值是一样的,都是输入值的线性组合,再用h函数映射一下得到的,所以两个神经网络是等价的。这就是说,线性激活函数的神经元并没有起到作用,多层神经网络和一层神经网络是等价的。

三:常见的激活函数

3.1 sigmoid激活函数

sigmoid激活函数是最常见的激活函数之一,是在逻辑回归中把回归值映射到(0,1)区间的非线性变换函数,其表达式是

59cdec769e4e19702e94e4e87ebc4b0c.png

sigmoid激活函数的定义域是133376ae33e8a70d1b46756721eb4526.png,值域是(0,1) 图3-1-1是该函数的图像。

matlab用relu函数优化逻辑回归_神经网络中常见的激活函数_第5张图片

图3-1-1

该激活函数能够把任意一个实数映射到0-1区间,而我们的概率值恰好是介于0到1之间的,所以我们经常把sigmoid函数映射后的值当作概率值。但是sigmoid的最大缺点在于该激活函数会引发梯度消失的问题,让神经网络的训练提前停止,从而不能发挥神经网络层次越深,特征提取越有效的特点。sigmoid激活函数梯度消失的原因主要是在于该函数的导函数,如图3-1-2所示是sigmoid函数的导函数的图像。

matlab用relu函数优化逻辑回归_神经网络中常见的激活函数_第6张图片

图3-1-2

我们可以看出,sigmoid的导函数的值域是在(0,0.25)之间的,神经网络的参数更新是BP算法,它要反向传播梯度,每传一层,梯度会减少75%以上,那么如果网络比较深,那么在前面的网络由于梯度逐层减少,参数不能更新。使用sigmoid函数,不能更新深层次神经网络。所以在深层神经网络中,中间的神经元一般不使用sigmoid函数做激活函数。

但是sigmoid函数的输出值可以看成概率值,所以在神经网络中可以做为输出层的激活函数,同样的因为是(0,1)区间的值,在一些特殊的神经网络中,也可以作为过滤信息来使用,比如LSTM中的遗忘门就是使用sigmoid作为激活函数的。

sigmoid激活函数的缺点主要有(1)会造成梯度消失的问题 (2)sigmoid函数的中心不是0。优点是输出的值是介于0与1之间的,可以视为概率值。

3.2 tanh激活函数

tanh激活函数和sigmoid激活函数类似,也是使用指数进行非线性变换,其表达式是

ab5ce95ab5832869fc77a3303019fb9b.png

tanh激活函数的定义域是133376ae33e8a70d1b46756721eb4526.png,值域是(-1,1) 图3-2-1是该函数的图像。

matlab用relu函数优化逻辑回归_神经网络中常见的激活函数_第7张图片

图3-2-1

tanh激活函数的优点在于该激活函数的值域在(-1,1)之间,是以0为中心的。但是tanh激活函数和sigmoid激活函数一样,也有梯度消失的情况。

3.3 Relu激活函数

为了解决sigmoid函数梯度消失的问题,我们引入了relu函数,relu函数是一个分段函数,其表达式是

dad7f2e9a6621d04b51b770756f9448c.png

Relu激活函数的定义域是133376ae33e8a70d1b46756721eb4526.png,值域是de6a058d425f5dee7e8aaa32c99f69ef.png 图3-3-1是该函数的图像。

matlab用relu函数优化逻辑回归_神经网络中常见的激活函数_第8张图片

图3-3-1

它的导函数是

19df237e840028805ae0ccd89490c665.png

这个激活函数的优点是避免了梯度消失的问题,但是它对于小于0的特征会直接剔除。会造成神经元失活的现象,即特征小于0的神经元不会被更新。

3.4 leakyrelu激活函数

为了解决relu激活函数神经元失活的现象,又产生了一种新的激活函数leakyrelu,其表达式是

0be39f5e543c113c43a76f21b7001157.png

避免梯度消失,对于小于0的特征又不会失活。该激活函数的定义域是133376ae33e8a70d1b46756721eb4526.png,值域是133376ae33e8a70d1b46756721eb4526.png,图3-4-1是该函数的图像。

matlab用relu函数优化逻辑回归_神经网络中常见的激活函数_第9张图片

图3-4-1

这个激活函数的优点是对于小于0的特征也可以进行传播,避免了神经元的失活现象。但是多了一个超参数,需要事先确定。

3.5 ELU激活函数

同样的,如果对特征小于0的部分,采用其他输出方式也可以避免神经元失活的现象,于是又提出了ELU(指数线性单元)激活函数。其表达式是

091be8a4c5aabe1fcf967e8dbade5b70.png

该激活函数的定义域是133376ae33e8a70d1b46756721eb4526.png,值域是133376ae33e8a70d1b46756721eb4526.png,图3-5-1是该函数的图像。

matlab用relu函数优化逻辑回归_神经网络中常见的激活函数_第10张图片

图3-5-1

这个激活函数的优点是具有leakyrelu激活函数的所有优点,并且该激活函数的中心趋向于0。该激活函数的主要缺点是计算中需要计算指数,计算过程复杂。

3.6 MaxOut激活函数

这种激活函数的思想是在神经网络中加入一层神经网络来进行非线性变换的,本来神经元的输入值是上一层神经元输出值的线性组合,只有一个输入值,现在我们进行k次线性组合,每个神经元可以输入多个值,然后选择这k个值中最大值作为输出值。该激活函数的优点是不会造成梯度消失、拟合能力强。其缺点是引入了更多的参数,容易引起过拟合现象。

四:如何选择激活函数

(1) 比较深的网络,隐藏层不要使用sigmoid函数和tanh函数,因为会造成梯度消失,使神经网络训练提前终止。

(2)通常选择relu函数作为激活函数,但是使用该激活函数的时候要注意学习率的选择,如果学习率较大,会造成大部分神经元失活。

(3)leakyrelu和ELU激活函数要注意设置合理的超参数。

(4)对于一些特殊的神经网络,有的神经网络层指定了激活函数,就使用指定的激活函数,比如LSTM的遗忘门指定了sigmoid作为激活函数,LSTM的更新门指定了tanh作为激活函数。

本文简要介绍了激活函数在神经网络中非线性映射的作用,介绍了常见的六种激活函数(sigmoid、tanh、relu、leakyrelu、ELU、MaxOut)的形式及其优缺点,最后总结了在神经网络中选择激活函数的方法。

matlab用relu函数优化逻辑回归_神经网络中常见的激活函数_第11张图片

往期文章

文本分类需要CNN? No!fastText完美解决你的需求(上篇)

文本分类需要CNN?No!fastText完美解决你的需求(后篇)

手把手 | 教你搭建自己的大数据分布式计算系统环境

论如何提升格调——多线程网络爬虫了解一下?

深度学习中常见的优化算法

机器学习中损失函数的设计 

你可能感兴趣的:(sigmoid函数,神经网络算法激活函数的选择)