1.4 神经网络中常用的激励函数
深度学习的基础是神经网络。假设在一个单层神经网络(又称感知器)中,输入和输出满足公式:
y=w1x1+w2x2+b
计算关系如图1.14所示。
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_18_1.jpg?sign=1739545108-t9bRfVahgkGrfUazpzqiotVPqx63SPAO-0-1d634a9a4eb406df0df1294dfa62ff70)
图1.14 单层神经网络
那么输入与输出满足线性关系。在增加了两个神经元之后,计算公式也类似:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_18_2.jpg?sign=1739545108-owfqJz1PAgZxvnpGfitUOlXIUoGXr0tv-0-7dc0366c1541ec01d9ed6fb3b8ba30e3)
计算关系如图1.15所示。
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_18_3.jpg?sign=1739545108-wcWjqgBGttSXxDw6rmvi8zE8mVoRIEVV-0-ebb64ed2391b5f222a30c9c26bdc3bcb)
图1.15 单层神经网络
不过这样的模型只能处理一些简单的线性可分数据,对于线性不可分数据很难有效处理,如图1.16所示。
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_19_1.jpg?sign=1739545108-P35r1PFTglVWvXXZf8Y0FK6UOctpypHT-0-ccca69bcb567be73b47f8bb95cad459a)
图1.16 处理数据能力
在神经网络中加入激励函数(非线性)后,神经网络就有可能学习到平滑的曲线来实现对线性不可分数据的处理了,如图1.17所示。
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_19_2.jpg?sign=1739545108-KjQtw8lhF4bilPbUrqpYnflLRMcb5bXa-0-62586e725c53c442ae348177f6da134f)
图1.17 加入激励函数后的输出
因此,神经网络中激励函数的作用,通俗来说就是将多个线性输入转换为非线性输出。如果不使用激励函数,神经网络的每层都只能做线性变换,即使多层叠加,也只能做线性变换。通过激励函数引入非线性因素,可使神经网络的表示能力更强。
下面介绍几种神经网络中常用的激励函数。
1.Sigmoid函数
Sigmoid函数的表达式如下:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_19_3.jpg?sign=1739545108-PslxU6JcgNaVkswW9GcnEsgflJtQ5PA8-0-2f8147491d335fd294125bb65915e92a)
Sigmoid函数的图像如图1.18所示。
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_19_4.jpg?sign=1739545108-VZE3ymHMhXm9yXt9d4lm48YGcoKkAxOG-0-2644572aca19c48fe8c3ea5326b1835f)
图1.18 Sigmoid函数的图像
Sigmoid函数是神经网络中使用很频繁的激励函数。它能把一个实数压缩至0~1之间,当输入非常大的正数时,结果会接近于1,当输入非常大的负数时,则会得到接近于0的结果。它很好地解释了神经元受到刺激后是否被激活和向后传递的场景(0:几乎没有被激活,1:完全被激活)。不过近几年在深度学习的应用中较少见到它的身影,因为使用Sigmoid函数容易出现梯度消失现象。
【小知识】
使用反向传播算法传播梯度时,随着传播深度的增加,梯度会急剧减小,导致浅层神经元的权重更新非常缓慢,不能有效学习。这样一来,深层模型也就变成了前几层相对固定,只能改变后几层的浅层模型。
当神经网络的层数很多时,如果每一层的激励函数都采用Sigmoid函数,就会产生梯度消失的问题,因为利用反向传播算法更新梯度时,会乘以它的导数,所以梯度会一直减小。
2.tanh函数
tanh函数为双曲正切函数。在数学中,tanh函数是由基本双曲函数:双曲正弦函数、双曲余弦函数推导而来的。其表达式如下:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_20_1.jpg?sign=1739545108-TSjofWMtl9CHW7sN26azgqgP9mtz1JPm-0-1d8ad4b57845d06902dcf942aa09ea40)
tanh函数的图像如图1.19所示。
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_20_2.jpg?sign=1739545108-DuIP7P0lKXENxGPt4VRKXcZkIwgNA5dv-0-5a4cc21f809b2e03d795aebe008754d6)
图1.19 tanh函数的图像
y=tanh(x)是一个奇函数,其函数图像为过原点并且穿越一、三象限的严格单调递增的曲线,其图像被限制在两条水平渐近线y=1和y=-1之间。
tanh函数将输入压缩至-1~1之间。该函数与Sigmoid函数类似,也存在梯度消失问题。
3.ReLU函数
ReLU是修正线性单元(Rectified Linear Unit)的简称。其表达式如下:
ReLU(x)=max(0,x)
ReLU函数的图像如图1.20所示。
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_21_1.jpg?sign=1739545108-ey5yCb5t7hFbwauSnrZbjjVkgKTmM8zB-0-ee2f25ec86a62c9c2275e40eaf6787d1)
图1.20 ReLU函数的图像
近年来,ReLU函数在深度学习中使用得很多,该函数可以解决梯度消失问题,因为它的导数等于1或者0。相对于Sigmoid函数和tanh函数,对ReLU函数求梯度非常简单,计算也很简单(因为ReLU函数是线性的,而Sigmoid函数和tanh函数是非线性的),可以很大程度提升随机梯度下降的收敛速度。
ReLU函数的缺点是比较脆弱,随着训练的进行,可能会出现神经元死亡的情况。例如,有一个很大的梯度经过ReLU函数后,结果可能是在此之后任何数据都没有办法再激活这个神经元了。如果发生这种情况,那么流经神经元的梯度从这一点开始将永远是0。也就是说,神经元在训练中不可逆地死亡了。
4.Elu函数
Elu函数的表达式如下:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_21_2.jpg?sign=1739545108-JXnoB6I39TV9akM5ekgtFsibhk7bSnxE-0-31bbd98e37cdf217b1376a018a7968e4)
Elu函数的图像如图1.21所示。
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_21_3.jpg?sign=1739545108-oErUqDjHxtTnLxtt8yv9oYSS4tkEgoVu-0-1403c9f6450a856e7f24c6c5d3cdce16)
图1.21 Elu函数的图像
Elu函数在正值区间的值为x本身,这样避免了梯度消失问题(在x>0区间内的导数为1),这点与ReLU函数相似。而在负值区间,Elu函数在输入取较小值时具有软饱和特性,提升了对噪声的鲁棒性。
5.Leaky ReLU函数
Leaky ReLu函数的表达式如下:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_22_1.jpg?sign=1739545108-MVv0uJIGqMnwPJlvUJQlP5QFYpHRPhGc-0-c733a674bf6c238e8812494aee1822fb)
Leaky ReLU函数能够避免梯度消失问题,当神经元处于非激活状态时,它允许一个非0的梯度存在,这样不会造成梯度消失,收敛速度快。它的优缺点与ReLU函数类似。
6.Maxout函数
Maxout函数的表达式如下:
![](https://epubservercos.yuewen.com/1CD67A/18002371308017606/epubprivate/OEBPS/Images/39396_22_2.jpg?sign=1739545108-EsCibJkYjuXEhWMlBmETrZeq4e8vzzPp-0-7c521f598984922d092cbb5150072408)
Maxout函数也是近些年非常流行的激励函数,简单来说,它是ReLU函数和Leaky ReLU函数的一个泛化版本,当w1、b1为0时,Maxout函数便转换为ReLU函数。
因此,Maxout函数继承了ReLU函数的优点,同时没那么容易造成梯度消失。但相比于ReLU函数,Maxout函数因为有2次线性映射运算,所以计算量会翻倍。