这篇博客主要总结一下常用的激活函数公式及优劣势,包括sigmoid relu tanh gelu
优点:平滑、易于求导
缺点:
推导:https://zhuanlan.zhihu.com/p/24967776
tanh为双曲正切函数,其英文读作Hyperbolic Tangent。tanh和 sigmoid 相似,都属于饱和激活函数,区别在于输出值范围由 (0,1) 变为了 (-1,1),可以把 tanh 函数看做是 sigmoid 向下平移和拉伸后的结果
tanh作为激活函数的特点:
相比Sigmoid函数,
DNN 前面使用tanh 最后用sigmoid
Relu(Rectified Linear Unit)——修正线性单元函数:该函数形式比较简单,
公式:relu=max(0, x)
ReLU作为激活函数的特点:
ReLU 强制将x<0部分的输出置为0(置为0就是屏蔽该特征),可能会导致模型无法学习到有效特征,所以如果学习率设置的太大,就可能会导致网络的大部分神经元处于‘dead’状态,所以使用ReLU的网络,学习率不能设置太大。
Leaky ReLU中的公式为常数,一般设置 0.01。这个函数通常比 Relu 激活函数效果要好,但是效果不是很稳定,所以在实际中 Leaky ReLu 使用的并不多。
PRelu(参数化修正线性单元) 中的公式作为一个可学习的参数,会在训练的过程中进行更新。
RReLU(随机纠正线性单元)也是Leaky ReLU的一个变体。在RReLU中,负值的斜率在训练中是随机的,在之后的测试中就变成了固定的了。RReLU的亮点在于,在训练环节中,aji是从一个均匀的分布U(I,u)中随机抽取的数值。
gelu(gaussian error linear units)就是我们常说的高斯误差线性单元,它是一种高性能的神经网络激活函数,因为gelu的非线性变化是一种符合预期的随机正则变换方式,公式如下:
其中Φ(x)指的是x xx的高斯正态分布的累积分布,完整形式如下:
计算结果约为:
或者可以表示为:
由此可知,概率P ( X ≤ x ) (x可看成当前神经元的激活值输入),即X的高斯正态分布ϕ(X)的累积分布Φ(x)是随着x的变化而变化的,当x增大,Φ(x)增大,当x减小,Φ(x)减小,即当x越小,在当前激活函数激活的情况下,越有可能激活结果为0,即此时神经元被dropout,而当x越大越有可能被保留。
使用技巧:
1.当在训练过程中使用gelus作为激活函数进行训练时,建议使用一个带有动量(momentum)的优化器,并将其作为深度学习网络的一种规范。
2.在使用gelus的过程中,公式(3)的σ 函数的选择是非常关键的,一般需要使用与正态分布的累积分布近似的函数,一般可以选择与正态分布的累积分布较为近似的函数sigmoid(x)=1/(1+e^{(-x)})作为σ 函数。
优势:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。