激活函数总结

554 阅读2分钟

首先激活函数的作用是:对模型加入非线性因素,解决线性模型无法解决的问题。通过下图可以很清楚看到加入激活函数之后的变化:

image.png

image.png

下边对常用的激活函数做一个总结:

Sigmoid

公式:

f(z)=11+ezf(z) = \frac{1}{1 + e^z}

函数曲线以及梯度(导数)曲线:

image.png

可以发现sigmoid把输入挤压到0-1之间,这可以用来做输出的归一化。 问题:

  1. sigmoid函数的梯度大多集中在0-0.25之间,反向传播时链式相乘,会导致比较严重的梯度消失
  2. 输出不是以0为中心的(zero-centered),降低收敛效率。
  3. 解析式中含有幂运算,计算机求解比较耗时。

tanh函数

公式:

f(x)=tanh(x)=21+e2x1tanh(x)=2sigmoid(2x)1f(x) = tanh(x) = \frac{2}{1 + e^{-2x}} - 1 \\ tanh(x) = 2 * sigmoid(2x) - 1

tanh其实就是sigmoid的变体,把函数值域拉到-1到1之间:

image.png

问题:

  1. 梯度下降很快,在x等于3或着-3左右就将到0了,着也导致比较严重的梯度消失

RuLU

公式:
f(x)=max(0,x)f(x) = max(0, x)

image.png

优势:

  1. 在正区间,梯度始终为1,解决了梯度消失的问题。
  2. 计算速度特别快,只需要计算是否大于0。
  3. 收敛速度远大于sigmoid和tanh。

问题:

  1. 输出不是以0为中心的(zero-centered),降低收敛效率。
  2. Dead RuLU问题:指的是某些神经元可能永远无法被激活和更新。当为负数时,在反向传播时梯度为0,RuLU完全失效。

Leaky RuLU(PReLU)

公式:

f(x)=max(αx,x)f(x) = max(\alpha x, x)

其中α\alpha是一个非常小的数,比如0.01。这样,输入小于0时,PReLU的梯度不常为0了。用以解决Dead RuLU问题

image.png

理论来说,Leaky ReLU有ReLU的优点,但是在实际操作中,并没有完全明确的Leaky ReLU总好于ReLU。

ELU(Exponential Linear Units)

f(X)={x,if x > 0α(ex1),otherwise f(X) = \begin{cases} x, & \text{if x > 0} \\ \alpha (e^x - 1), & \text{otherwise} \end{cases}

函数和梯度图像如下:

image.png

优势:

  1. 不存在Dead RuLU问题
  2. 输出zero-centered

GeLU

在目前BERT中使用的激活函数,GeLU可以看做Dropout和ReLU的结合,主要思想是为激活函数引入随机性,使得模型训练过程更加鲁棒
ReLU会确定性的将输入乘以0或者1,Dropout会随机乘以0,而GeLU也是将输入乘以0或者1来实现,只是乘以0或者1取决于考虑输入自身分布下的随机选择。 公式:

GeLU=f(x)=xP(xX),xN(0,1)GeLU = f(x) = x P(x \leq X),x \sim N(0,1)

image.png

参考: zhuanlan.zhihu.com/p/349492378