欢迎访问合肥育英学校!

合肥育英学校

您现在的位置是: 首页 > 学习方法 >深度激活工具(激活函数的作用)

深度激活工具(激活函数的作用)

发布时间:2024-09-16 01:18:03 学习方法 606次 作者:合肥育英学校

导读

数字逻辑电路中的门电路可以使满足不同条件的输入信号输出导通(1)或截止(0)。这反映在机器学习中感知器的性质中。但我们也知道感知器有一个局限性,那就是它无法表示单层的非线性变化,而神经网络往往通过激活函数来表示非线性变化。也就是说,激活函数的作用是引入非线性。神经元输出

深度激活工具(激活函数的作用)

神经元的输出信号由激活函数o=f()得处理后,得到得输出,如图所示给出

性质

激活函数是满足非线性和连续性的几乎可微函数。

常见激活函数

乙状结肠;正切;ReLU;LReLU、PReLU、RReLU;ELU(指数线性单位);软加;软签名、软最大;米什;格鲁

Sigmoid函数

Sigmoid函数得到了广泛的应用,也是非常经典的逻辑函数。sigmoid函数定义为:

该函数对应的图像为:

优点:1.Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。2.求导容易。

缺点:1.由于其软饱和性,容易产生梯度消失,导致训练出现问题。2.其输出并不是以0为中心的。

tanh函数

该函数位于区间[-1,1]内,对应的图像为:

优点:1.比Sigmoid函数收敛速度更快。2.相比Sigmoid函数,其输出以0为中心。缺点:还是没有改变Sigmoid函数的最大问题——由于饱和性产生的梯度消失。

sigmoid函数可以很容易地应用在训练过程中。然而,当你要处理分类问题时,它们就无能为力了。简单来说,sigmoid函数只能处理两类,不适合多分类问题。所以softmax可以有效解决这个问题。并且很多情况下在深井网路神经网络的最后一层使用softmax函数,使得取值范围在0到1之间,而不是二元分类。

ReLU

ReLU是近年来非常流行的激活函数。定义为

对应的图像是:

优点:1.相比起Sigmoid和tanh,ReLU在SGD中能够快速收敛。

2.Sigmoid和tanh涉及许多昂贵的运算(例如指数),而ReLU可以更简单地实现。3.有效缓解梯度消失问题。4.即使没有无监督的预训练也能取得更好的性能。

5.提供神经网络的稀疏表达能力。

缺点:随着训练的进行,可能会出现神经元死亡,权重无法更新的情况。如果发生这种情况,那么流经神经元的梯度从这一点开始将永远是0。也就是说,ReLU神经元在训练中不可逆地死亡了。

LReLU、PReLU和RReLU

通常在LReLU和PReLU中,我们将激活函数定义为:

LReLU当ai比较小而且固定的时候,我们称之为LReLU。LReLU最初的目的是为了避免梯度消失。但在一些实验中,我们发现LReLU对准确率并没有太大的影响。很多时候,当我们想要应用LReLU时,我们必须要非常小心谨慎地重复训练,选取出合适的a,LReLU的表现出的结果才比ReLU好。因此有人提出了一种自适应地从数据中学习参数的PReLU。

PReLUPReLU是LReLU的改进,可以自适应地从数据中学习参数。PReLU具有收敛速度快、错误率低的特点。PReLU可以用于反向传播的训练,可以与其他层同时优化。

ELUs

ELU是ReLU激活函数的演变,使激活函数更能够维持抗噪声状态。因此,提出一个具有负值的激活函数,它可以使平均激活接近于零,但它会使具有较小参数的负激活函数ELU饱和。ELUs激活函数的公式为0的指数线性单元(ELU)如下所示

ELU通过将输入x本身取为正值区间(x0区间的导数处处为1)来缓解梯度弥散问题。所有四个激活函数都共享此功能。四者中,只有ReLU的输出值没有负值,因此输出的均值会大于0。当激活值的均值非0时,会对下一层造成偏差。如果激活值不相互抵消(即均值非0),这将导致下一层的激活单元产生偏差。以这种方式叠加时,单元越多,偏置偏移就越大。与ReLU相比,ELU可以取负值,这使得单元激活均值更接近于0,类似于BatchNormalization的效果,但需要较低的计算复杂度。虽然LReLU和PReLU也都有负值,但不能保证它们在非活动状态(即输入为负时)对噪声具有鲁棒性。另一方面,ELU在输入取较小值时具有软饱和特性,提高了对噪声的鲁棒性。如图所示,是一个可调参数,控制ELU负部分何时饱和。

与Relu的区别:

1.它在x0处的激活值为负数,导数不为0。这是一个很好的性质,因为当输入为负数时,ReLU的导数会变成0,这会导致神经元死亡的问题。ELU对此进行了改进,并且允许这部分表现出软饱和,这有助于提高噪声鲁棒性(显然LReLU对噪声很敏感)。

2.所有输出均值为0ReLU的输出都可以设为非负,因此其输出均值必然为非负,这个性质会导致网络发生均值漂移(biasshift,也称为均值漂移)。因此,ReLU在训练一些超深网络时会出现不收敛的问题。

Softplus与Softsign

Softplus定义为

Softplus的倒数是sigmoid函数

软签名定义为

Softsign曲线和梯度

Mish

直接看Mish的代码会更简单。简单总结一下,Mish=x*tanh(ln(1+e^x))。

PyTorch的Mish实现:

扩展型指数线性单元激活函数(SELU)

扩展指数线性单元激活函数比较新,介绍它的论文包含90页的附录(包括定理和证明等)。实际应用该激活函数时,必须使用lecun_normal进行权重初始化。如果你想应用dropout,你应该使用AlphaDropout。下面的代码部分将进行更详细的介绍。论文作者计算了公式的两个值:和;如下:

正如您所看到的,为了保证绝对精度,它们的小数点后有很多位。它们是预先确定的,这意味着我们不必担心为此激活函数选择正确的值。说实话,这个公式看起来和其他公式或多或少有些相似。所有新的激活函数看起来都像是其他现有激活函数的组合。SELU的公式如下:

也就是说,如果输入值x大于0,则输出值为x乘以;如果输入值x小于0,则会得到奇异函数——,该函数随着x的增大而增大,并接近x为0时的值0.0848。本质上,当x小于0时,乘以x值的指数,减去,然后乘以值。

SELU功能图。

GELU

高斯误差线性单元激活函数用于最近的Transformer模型(Google的BERT和OpenAI的GPT-2)。GELU论文是2016年的,但最近才引起关注。该激活函数的形式为:

可以看出,这是某些函数(例如双曲正切函数tanh)和近似数值的组合。没什么好说的。有趣的是这个函数的图表:

GELU激活函数。

可见,当x大于0时,输出为x;除了从x=0到x=1的区间外,此时曲线更倾向于y轴。我无法找到这个函数的导数,所以我使用WolframAlpha来微分该函数。结果如下:

和以前一样,这是双曲函数的另一种组合。但它的图形看起来很有趣:

微分GELU激活函数。

优势:

好像是目前NLP领域最好的;尤其是在Transformer模型中表现最好;它可以避免梯度消失问题。总结

见下图