首页 > 人工智能(Artificial Intelligence) > 神经网络模型

深度学习 -- 激活函数

    激活函数是获取输入信号并将其转换为输出信号。激活函数为网络引入非线性,这就是我们称之为非线性的原因。神经网络是通用函数逼近器,深层神经网络使用反向传播法进行训练,反向传播需要使用可微分的激活函数。Backpropapagation使用此激活函数的下降梯度来更新网络权重。了解激活函数非常重要,因为它们对深层神经网络的函数逼近能力中起着至关重要的作用。在本文中,我列出并描述了常用的激活函数。

一致或线性激活函数

     一致或线性激活函数是最简单的激活函数。它对模型的输入数据应用线性操作,输出数据与输入数据成比例。线性激活函数的问题是它的导数是一个常数,它的梯度也将是一个常数,下降将是一个恒定的梯度。

640.png

一致或线性激活函数的方程式

范围:(-∞,+∞)

示例:f(2)= 2或f(-4)= -4

Heaviside(二值型激活函数,0或1,high或low)步长函数

    通常仅在单层感知器中有用,这是早期类型的神经网络,可在输入数据可线性分离的情况下用于分类。这些函数对二进制分类任务很有用。如果输入累加和高于某一阈值,则输出为A1,如果输入和低于某个阈值,则为A0。感知器使用的值为A1 = 1,A0 = 0

640.png

Heaveside /二进制步长函数方程(0或1,高或低)

范围:{0或1} o或1

示例:f(2)= 1,f(-4)= 0,f(0)= 0,f(1)= 1

Sigmoid或Logistic激活函数

Sigmoid或Logistic激活函数(Soft Step) -    主要用于二进制分类问题(即输出值范围为0-1)。它有梯度消失的问题。由于输入(X)导致输出(Y)变化非常小,因此网络拒绝学习或某些时期学习非常慢。它是分类问题的广泛使用的激活函数,但最近。这个函数更容易陷入饱和状态,特别是随着网络层次增加,使训练更加困难。计算Sigmoid函数的导数非常简单。

    在神经网络的反向传播过程中,误差信号在每一层(至少)被挤压四分之一。因此,网络越深,数据的更多知识就会“损失”。从输出层得到的一些“大”误差信号可能无法在相对较浅的层中影响神经元的突触权值(“浅”意味着它靠近输入层)

640.png

 

S型函数的导数:

640.png

范围:(0,1)

示例:f(4)= 0.982,f(-3)= 0.0474,f(-5)= 0.0067

双曲正切S型激活函数(TanH) 

    像一个缩放的S形函数。数据以零为中心,因此导数将更高。Tanh比S形和logistic激活函数收敛速度更快。

640.png

双曲正切(TanH)激活函数方程

范围:(-1,1)

示例:tanh(2)= 0.9640,tanh(-0.567)= -0.5131,tanh(0)= 0

正则化线性单元(ReLU) 

    比tanh快6倍。当输入值小于零时,输出值为零。如果输入大于或等于零,则输出等于输入。当输入值为正时,导数为1,因此不会产生类似S形激活函数在误差反向传播时出现的挤压效应(Squeeze effect)。

640.png

正则化线性单元(ReLU)激活函数的公式

范围:[0,x)

示例:f(-5)= 0,f(0)= 0&f(5)= 5

    Relu也存在问题,Relu在训练的时候非常脆弱。比如,一个比较大的梯度流经Relu神经元,可能会导致权重以一种方式“die”更新,即神经元对任何的数据都不会被激活。如果这一情况发生,流经这个神经元的梯度对于任意数据永恒为0。也就是说,Relu单元在训练时可能会不可逆的死亡,因此Relu可能会消磨掉数据的多样性。比如,如果学习速率设得过大,你可能发现模型40%的神经元都是死的(比如,神经元对于整个数据集都不会被激活)。对于一个设置合适的学习速率,这个问题就没有那么严重。

Leaky正则化线性单元(Leaky ReLU)

Leaky ReLU 在单元未激活时,允许小的非零梯度。0.01是小的非零梯度值。

Leaky正则化线性单元(Leaky ReLU)激活函数的方程

范围:(-∞,+∞)

640.png

参数正则化线性单元(PReLU)

把Leaky的系数当做一个参数与其他神经网络参数一起学习。Alpha(α)是这里的Leaky系数。

对于α≤1f(x)= max(x,αx)

范围:(-∞,+∞)

640.png

随机Leaky正则化线性单元(RReLU)

范围:(-∞,+∞)

640.png

随机Leaky正则化线性单元(RReLU)

640.png

指数线性单位(ELU) 

    指数线性单位尝试使平均激活更接近于零,从而加快学习。已经表明,ELU可以获得比ReLU更高的分类精度。α是这里的一个超参数并被调整,约束是α≥0(零)。

范围:(-α,+∞)

640.png

指数线性单位(ELU)

640.png

 

缩放指数线性单位(SELU)

范围:(-λα,+∞)

640.png

S形正则化线性激活单元(SReLU)

范围:(-∞,+∞)

640.png

自适应分段线性(APL)

范围:(-∞,+∞)

640.png

SoftPlus 

    softplus函数的导数是logistic函数。ReLU和Softplus在很大程度上是相似的,除了接近0(零)时,softplus更加平滑且可微的。计算ReLU值及其导数比softplus函数更容易和高效,因为softplus的公式中包含log(.)和exp(.)计算。

范围:(0,∞)

640.png

softplus函数的导数是逻辑函数。

640.png

softplus函数的微分

640.png

 

弯曲一致激活函数

范围:(-∞,+∞)

640.png

Softmax激活函数

    SOFTMAX函数将一个粗糙的原始值转换为后验概率。这提供了一定的确定性。它将每个单元的输出压缩在0和1之间,就像S形函数一样。但是它也会将每个输出除以输出的总和,使总的概率等于1。

640.pngSoftmax函数方程

softmax函数的输出等同于分类概率分布,它告诉每个类别的真实概率分布。

结论:

ReLU和它的变体应优于S形或tanh激活函数。同时ReLU训练起来更快。如果ReLU导致神经元死亡,请使用Leaky ReLUs或其他变体。Sigmoid和tanh存在梯度消失的问题,不应该在隐藏层中使用。ReLUs最适用于隐含层。应使用易于微分和易于训练的激活函数。

v2-d095e383b41a74b1f195decf5135b38f_r.jpg

参考文献:

1. https://en.wikipedia.org/wiki/Activation_function

2. https://github.com/Kulbear/deep-learning-nano-foundation/wiki/ReLU-and-Softmax-Activation-Functions

3. https://en.wikipedia.org/wiki/Rectifier_(neural_networks)

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。