赞
踩
本文总结了几个在深度学习中比较常用的激活函数:Sigmoid、ReLU、LeakyReLU以及Tanh,从激活函数的表达式、导数推导以及简单的编程实现来说明。
Sigmoid激活函数表达式
Sigmoid导数表达式
Sigmoid编程实现
Sigmoid激活函数以及导函数图像
Sigmoid激活函数也叫做Logistic函数,因为它是线性回归转换为Logistic(逻辑回归)的核心函数,这也是Sigmoid函数优良的特性能够把X ∈ R的输出压缩到X ∈ (0, 1)区间。Sigmoid激活函数在其大部分定义域内都会趋于一个饱和的定值。当x取绝对值很大的正值的时候,Sigmoid激活函数会饱和到一个高值(无限趋近于1);当x取绝对值很大的负值的时候,Sigmoid激活函数会饱和到一个低值(无限趋近于0)。Sigmoid函数是连续可导函数,在零点时候导数最大,并在向两边逐渐降低,可以简单理解成输入非常大或者非常小的时候,梯度为0没有梯度,如果使用梯度下降法,参数得不到更新优化。
Sigmoid函数最大的特点就是将数值压缩到(0, 1)区间,在机器学习中常利用(0, 1)区间的数值来表示以下意义:
上面介绍了Sigmoid激活函数将输出映射到(0, 1)区间在机器学习中的两个意义,这也是Sigmoid激活函数的优点。接下来介绍一下Sigmoid激活函数的缺点:
Sigmoid激活函数输出均值不为0
反向传播时候更新方向要不往正向更新,要不往负向更新,会导致捆绑效果,使得收敛速度减慢。当然,如果使用小批量梯度下降法,由于每个小batch可能会得到不同的信号,所以这个问题还是有可能缓解的。2015年loffe提出的批标准化(Batch Normalization)就是为了适应性的将每层输出分布都进行统一,以便网络学习更加稳定、更快的传播。
在Tensorflow2.X中Sigmoid激活函数只有函数式接口的实现方式:
Sigmoid激活函数实现
ReLU激活函数表达式
ReLU导数表达式
ReLU编程实现
ReLU激活函数以及导函数图像
2012年ImageNet竞赛的冠军模型是由Hinton和他的学生Alex设计的AlexNet,其中使用了一个新的激活函数ReLU(REctified Linear Unit,修正线性单元)。在这之前Sigmoid函数通常是神经网络激活函数的首选,上面也提到过,Sigmoid函数在输入值较大或较小的时候容易出现梯度值接近于0的现象,也就是梯度弥散。出现梯度弥散现象,网络参数会长时间得不到更新,很容易导致训练不收敛或停滞不动的现象发生,网络层数较深的网络模型更容易发生梯度弥散现象,使得对神经网络的研究一直停留在浅层网络。值得一提的是,AlexNet是一个8层的网络,而后续提出的上百层的卷积神经网络也多是采用ReLU激活函数。
通过ReLU激活函数的函数图像可以看到,ReLU对小于0的值全部抑制为0;对于正数则直接输出,这是一种单边抑制的特性,而这种单边抑制来源于生物学。ReLU函数的导数计算也非常简单,x大于等于0的时候,导数值为1,在反向传播的过程中,它既不会放大梯度,造成梯度爆炸;也不会缩小梯度,造成梯度弥散的现象。
上面从ReLU函数的起源以及Relu函数图像角度来阐述ReLU激活函数,接下来详细的来看看ReLU函数的优缺点。
优点:
缺点:
在Tensorflow2.X中ReLU激活函数有两种实现方式:
ReLU激活函数函数式接口
ReLU激活函数类
LeakyReLU激活函数表达式
LeakyReLU导数表达式
LeakyReLU函数以及导函数实现
LeakyReLU激活函数以及导函数图像
LeakyReLU函数是针对ReLU函数的Dead ReLU而提出来的。ReLU激活函数在x < 0的时候导数恒为0,很可能致使很多神经元为0,参数得不到更新。通过LeakyReLU函数表达式也可以看出,与ReLU函数唯一的不同就是在x < 0的部分输出不在为0而是px,p为超参数,通常是一个较小的值。当p = 0的时候,LeakyReLU函数退化成ReLU函数;当p ≠ 0的时候,在x < 0的时候能够得到较小的导数值p。从而避免出现Dead ReLU的现象。
当然了其实ReLU激活函数当x < 0的时候输出为0也有它的优点。也就是增大网络的稀疏性,这往往会提高模型的泛化能力(类似dropout作用)。因此虽然提出了LeakyReLU这种激活函数,但是目前使用比较广泛的还是ReLU激活函数。
在Tensorflow2.X中LeakyReLU激活函数有两种实现方式:
LeakyReLU激活函数函数式接口
LeakyReLU激活函数类
Tanh激活函数表达式
Tanh导函数表达式
Tanh函数实现
Tanh函数以及导函数图像
Tanh激活函数(hyperbolic tangent, 双曲正切),通过函数表达式可以看出,tanh可由sigmoid激活函数平移缩放得到。tanh函数将输出值映射到(-1, 1)区间,有点类似于幅度增大的sigmoid激活函数。
接下来依然介绍tanh函数的优点和缺点。
优点:
缺点:
在Tensorflow2.X中tanh激活函数只有函数式接口的实现方式:
Tanh函数实现
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。