这一章节实际上是对之前 《深度学习知识总结—— 3. 激活函数与非线性输出》 的补充。随着自己的工作内容的深入,发现自己在一些概念的理解上过于浅薄,在参考了《深度学习领域最常用的10个激活函数,详解数学原理及优缺点》 基础上,做一些必要的补充说明。

我们使用激活函数的主要目的,有三:

  • 打破矩阵运算之间的「线性关系」;
  • 避免或降低模型「过拟合」;
  • 调整模型梯度生成情况。

然后我们接下来就常用的十类激活函数进行说明。

1. sigmoid 函数

1.1. 函数原型

σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1+ e^{-x}} σ(x)=1+ex1

输出是S型曲线,具备打破网络层与网络层之间的线性关系,可以把网络层输出非线形地映射到 ( 0 , 1 ) (0, 1) (0,1) 区间里。函数的特性,决定了它能够避免或降低网络模型过拟合情况的发生,但是这种函数最大的缺陷在于容易出现「梯度消失」的情况。

1.2. 函数图与梯度图

  • 红色为原始函数图像
  • 蓝色为函数导数图像

在这里插入图片描述

原函数的值域区间为 ( 0 , 1 ) (0, 1) (0,1),从导数来看其在 [ − 2 , 2 ] [-2, 2] [2,2] 区间尤其是接近0轴的导数较大,但是函数最大值依然小于1,所以当多个 d σ d \sigma dσ 相乘时很容易导致梯度变为极小值,使权重更新缓慢。

2. tanh 函数

2.1. 函数原型

tanh ⁡ x = e x − e − x e x + e − x \tanh x = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanhx=ex+exexex

输出是S型曲线,具备打破网络层与网络层之间的线性关系,可以把网络层输出非线形地映射到 ( − 1 , 1 ) (-1, 1) (1,1) 区间里。函数的特性,决定了它能够避免或降低网络模型过拟合情况的发生,相较于 sigmoid 函数不容易出现梯度变为极小值,导致权重更新缓慢的问题。

可作为 sigmoid 函数的替代函数。

2.2. 函数图与梯度图

  • 绿色为原始图像
  • 紫色为导数图像

在这里插入图片描述

原函数的值域区间为 ( − 1 , 1 ) (-1, 1) (1,1),从导数来看其在 [ − 2 , 2 ] [-2, 2] [2,2] 区间尤其是接近0轴的导数较大,但是函数最大值为1,不容易出现梯度消失的情况,但是对于x在 [ − 2 , 2 ] [-2, 2] [2,2] 之外的值,其导数接近0,所以 一定要确保 f ( x ) f(x) f(x) 输出的数据在进入到 tanh ⁡ \tanh tanh 之前,都已经做了正则化处理

3. ReLu 函数

3.1. 函数原型

R e L u = { x x > 0 0 x ≤ 0 ReLu = \left \{ \begin{matrix} x & x > 0 \\ 0 & x \leq 0 \end{matrix} \right. ReLu={x0x>0x0

尽管计算速度快,但是需要注意一点,由于 f ( x ) ≥ 0 f(x) \ge 0 f(x)0 R e L u ( f ( x ) ) = f ( x ) ReLu(f(x)) = f(x) ReLu(f(x))=f(x),在求导时很可能因为多个 d d x f ( x ) \frac{d}{dx}f(x) dxdf(x) 连续相乘而出现梯度爆炸出现,所以必要的时候应该配合 tanh ⁡ \tanh tanh 或 sigmoid 函数使用。

Dead ReLu 问题

在输入数据小于0的时候,输出为0。如果 f ( x ) f(x) f(x) 的输出中有不需要处理的负值,可以考虑使用这个函数。另外由于它的梯度恒为1,所以函数本身不存在梯度消失或爆炸的问题,通常配合 sigmoid 函数或 tanh ⁡ \tanh tanh 函数使用,也可以单独使用。

3.2. 函数图

在这里插入图片描述

虽然大多数情况下,我们更关心的是概率问题 [ 0 , 1 ] [0, 1] [0,1],但是在网络层传递过程中有些特殊情形是一定需要负值参与的。比如某些条件的成立需要某两个参数之间是「负相关」,而由于 x < 0 x < 0 x<0 y = 0 y = 0 y=0,它会导致模型对这部分输入没有相应,从而影响精度。

4. Leaky ReLu 函数

4.1. 函数原型

L e a k y R e L u = { x x > 0 c x x ≤ 0 LeakyReLu = \left \{ \begin{matrix} x & x > 0 \\ c x & x \leq 0 \end{matrix} \right. LeakyReLu={xcxx>0x0

c c c 是可调节权重允许 [ 0 , 1 ] [0, 1] [0,1],但是通常习惯上只使用到 0.01 左右。

不会出现 Dead ReLu 问题,但是关于输入函数 f ( x ) f(x) f(x) 的部分容易出现梯度爆炸的情况是一样的,所以必要时,也可以搭配 sigmoid 或 tanh 使用。

4.2. 函数图

在这里插入图片描述

允许负值一定程度上参与到计算中,比 ReLu 函数稍微温和一些,所以不存在 Dead ReLu 问题。

5. ELU 函数

5.1. 函数原型

E L U = { x x > 0 c ( e x − 1 ) x ≤ 0 ELU = \left \{ \begin{matrix} x & x > 0 \\ c(e^x - 1) & x \leq 0 \end{matrix} \right. ELU={xc(ex1)x>0x0

eLu 也是为了解决 Dead ReLu 而提出的改进型。计算上稍微比 Leaky ReLu 复杂一点,但从精度看似乎并未提高多少。

5.2. 函数图

在这里插入图片描述

6. PReLu 函数

6.1. 函数原型

P R e L u = { x x > 0 β x x ≤ 0 PReLu = \left \{ \begin{matrix} x & x > 0 \\ \beta x & x \leq 0 \end{matrix} \right. PReLu={xβxx>0x0

公式与 LeakyReLu 相似,但并不完全一样。 β \beta β 可以是常数,或自适应调整的参数。也就是说,如果让 β \beta β 自适应,那么 PReLu会在反向传播时更新参数 β \beta β

7. Softmax 函数

7.1. 函数原型

S o f t m a x ( Z j ) = e z j ∑ k = 1 K e z k Softmax(Z_j) = \frac{e^{z_j}}{\sum_{k=1}^K e^{z_k}} Softmax(Zj)=k=1Kezkezj

概率论和相关领域中出现的一种 「归一化(normalize)」 函数。它可以把一个 「K维」 数据压入到 「e指数」 空间中,使得每一个元素的范围都在 ( 0 , 1 ) (0, 1) (0,1) 之间,并且所有元素的和为1。

在这里插入图片描述
Softmax 可以确保较小的值具有较小的概率,并且不会直接丢弃。由于Softmax 函数的分母结合了所有因子,这意味着 Softmax 函数获得的各种概率彼此相关。另一方面,由于 e 指数的限制,对于负值的梯度趋近于0,所以这部分权重不会在反向传播期间更新。

在这里插入图片描述

注意,对于 e x e^x ex 的导数等于 e x e^x ex本身,所以在负值时,函数左侧数值趋向于0,这会导致数据在反向传播期间无法有效更新。

8. Swish 函数

8.1. 函数原型

S w i s h ( x ) = x σ ( β x ) = x 1 1 + e − β x Swish(x) = x \sigma(\beta x) = x \frac{1}{1 + e^{- \beta x}} Swish(x)=xσ(βx)=x1+eβx1

β \beta β 可以是常数或自适应。

如果令 β = 1 \beta = 1 β=1,那么方程等价于 「权重 sigmoid 函数(Sigmoid- weighted Linear Unit Function)」可起到如下图所示,类似 ELU的效果
在这里插入图片描述

其中:

  • 绿色为原始图像
  • 红色色为导数图像

β = 0 \beta = 0 β=0时,方程变成 f ( x ) = x 2 f(x) = \frac{x}{2} f(x)=2x 线性方程。

如果我们令 β → ∞ \beta \rightarrow \infty β,方程会变成如下所示,类似 ReLu 函数的效果。
在这里插入图片描述
因此,随着 β \beta β 的变化,函数会非线性地在「线性函数」 和 「ReLu函数」函数间变化。

9. Maxout 函数

9.1. 函数原型

M a x o u t ( x ) = m a x ( ω 1 x + b 1 , ω 2 + b 2 , ⋯   , ω n x + b n ) Maxout(x) = max(\omega_1 x + b_1, \omega_2 + b_2, \cdots, \omega_n x + b_n) Maxout(x)=max(ω1x+b1,ω2+b2,,ωnx+bn)

它是极为特殊的一类激活函数,与其他激活函数一开始固定了函数输出的形式不同,它采用分段线性组合,对任意 「凸函数(convex function)」 进行线性逼近。

注意:
国内教材对于凹凸函数的定义与国际相反。国际一般定义凸函数的图像形如开口向上的杯,形似 ∪ \cup ,而凹函数则形如开口向下的帽 ∩ \cap

我们需要在训练开始前确定使用的线性单元数量,为了获得理想的激活函数,Maxout 使用这些线性单元,采用分段地逼近策略(piece-wise linear approximation),并在最终取值时从分段函数选取最大值作为输出。

在这里插入图片描述

上图示例了 Maxout 如何逼近 ReLu 函数,绝对值函数,以及任意凸函数。

10. Softplus 函数

10.1. 函数原型

s o f t p l u s ( x ) = log ⁡ ( 1 + e x ) softplus(x) = \log (1 + e^{x}) softplus(x)=log(1+ex)

它是一种和 ReLu 函数功能作用极象的函数,并且在很多新的模型里,作为 ReLu 的替代。相对于ReLu 或 LeakyReLu 来说,Softplus 有个非常「致命」的优点,就是它在0点处是可导的。

不过相对于 ReLu 的粗暴简单,这个函数的运算耗费时间相对较多。

10.2. 函数图

在这里插入图片描述

  • 蓝色线条是 Softplus 函数
  • 绿色线条是 ReLu 函数
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐