机器学习 深度学习中激活函数sigmoid relu tanh gelu等汇总整理

2021-09-12 23:09:58 浏览数 (1)

0. 背景

这篇博客主要总结一下常用的激活函数公式及优劣势,包括sigmoid relu tanh gelu

1. sigmoid

  • sigmoid函数可以把实数域光滑的映射到0,1空间。
  • 函数值恰好可以解释为属于正类的概率(概率的取值范围是0~1),中心为0.5。
  • sigmoid函数单调递增,连续可导,导数形式非常简单,是一个比较合适的函数

优点:平滑、易于求导

缺点:

  1. 激活函数计算量大(在正向传播和反向传播中都包含幂运算和除法);
  2. 反向传播求误差梯度时,求导涉及除法;
  3. Sigmoid导数取值范围是0, 0.25,由于神经网络反向传播时的“链式反应”,很容易就会出现梯度消失的情况。例如对于一个10层的网络, 根据0.25^10很小,第10层的误差相对第一层卷积的参数W1的梯度将是一个非常小的值,这就是所谓的“梯度消失”。
  4. Sigmoid的输出不是0均值(即zero-centered);这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会改变数据的原始分布。

推导:https://zhuanlan.zhihu.com/p/24967776

2. tanh

tanh为双曲正切函数,其英文读作Hyperbolic Tangent。tanh和 sigmoid 相似,都属于饱和激活函数,区别在于输出值范围由 (0,1) 变为了 (-1,1),可以把 tanh 函数看做是 sigmoid 向下平移和拉伸后的结果

tanh作为激活函数的特点:

相比Sigmoid函数,

  1. tanh的输出范围时(-1, 1),解决了Sigmoid函数的不是zero-centered输出问题;
  2. 幂运算的问题仍然存在;
  3. tanh导数范围在(0, 1)之间,相比sigmoid的(0, 0.25),梯度消失(gradient vanishing)问题会得到缓解,但仍然还会存在

DNN 前面使用tanh 最后用sigmoid

3. relu

Relu(Rectified Linear Unit)——修正线性单元函数:该函数形式比较简单,

公式:relu=max(0, x)

ReLU作为激活函数的特点:

  1. 相比Sigmoid和tanh,ReLU摒弃了复杂的计算,提高了运算速度。
  2. 解决了梯度消失问题,收敛速度快于Sigmoid和tanh函数,但要防范ReLU的梯度爆炸
  3. 容易得到更好的模型,但也要防止训练中出现模型‘Dead’情况。

ReLU 强制将x<0部分的输出置为0(置为0就是屏蔽该特征),可能会导致模型无法学习到有效特征,所以如果学习率设置的太大,就可能会导致网络的大部分神经元处于‘dead’状态,所以使用ReLU的网络,学习率不能设置太大。

Leaky ReLU中的公式为常数,一般设置 0.01。这个函数通常比 Relu 激活函数效果要好,但是效果不是很稳定,所以在实际中 Leaky ReLu 使用的并不多。

PRelu(参数化修正线性单元) 中的公式作为一个可学习的参数,会在训练的过程中进行更新。

RReLU(随机纠正线性单元)也是Leaky ReLU的一个变体。在RReLU中,负值的斜率在训练中是随机的,在之后的测试中就变成了固定的了。RReLU的亮点在于,在训练环节中,aji是从一个均匀的分布U(I,u)中随机抽取的数值。

4. Gelu

gelu(gaussian error linear units)就是我们常说的高斯误差线性单元,它是一种高性能的神经网络激活函数,因为gelu的非线性变化是一种符合预期的随机正则变换方式,公式如下:

{xP(X le x)=xPhi(x)}tag{4.1}

其中Φ(x)指的是x xx的高斯正态分布的累积分布,完整形式如下:

{xP(X le x)=xint_{-infty}^{x}frac{e^{-frac{(X-mu)^2}{2sigma^2}}}{sqrt{2pi}sigma} , mathrm{d}X}tag{4.2}

计算结果约为:

{0.5x(1 tanh[sqrt{frac{2}{pi}}(x 0.044715x^3)])}tag{4.3}

或者可以表示为:

{xsigma(1.702x)}tag{4.4}

由此可知,概率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)})作为σ 函数。

优势:

  • 相比Relu,给网络模型增加非线性因子
  • Relu将小于0的数据映射到0,将大于0的给与  等于 映射操作,虽然性能比sigmoid好,但是缺乏数据的统计特性,而Gelu则在relu的基础上加入了统计的特性。论文中提到在好几个深度学习任务中都优于Relu的效果。  

Ref

  1. https://zhuanlan.zhihu.com/p/100175788 Gelu

0 人点赞