机器学习知识总结 —— 9. 深度学习常用10个激活函数(补充·激活函数与非线性输出)
文章目录1. sigmoid 函数1.1. 函数原型1.2. 函数图与梯度图2. tanh 函数2.1. 函数原型2.2. 函数图与梯度图3. ReLu 函数3.1. 函数原型Dead ReLu 问题3.2. 函数图4. Leaky ReLu 函数4.1. 函数原型4.2. 函数图5. ELU 函数5.1. 函数原型5.2. 函数图6. PReLu 函数6.1. 函数原型7. Softmax 函数
文章目录
这一章节实际上是对之前 《深度学习知识总结—— 3. 激活函数与非线性输出》 的补充。随着自己的工作内容的深入,发现自己在一些概念的理解上过于浅薄,在参考了《深度学习领域最常用的10个激活函数,详解数学原理及优缺点》 基础上,做一些必要的补充说明。
我们使用激活函数的主要目的,有三:
- 打破矩阵运算之间的「线性关系」;
- 避免或降低模型「过拟合」;
- 调整模型梯度生成情况。
然后我们接下来就常用的十类激活函数进行说明。
1. sigmoid 函数
1.1. 函数原型
σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1+ e^{-x}} σ(x)=1+e−x1
输出是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+e−xex−e−x
输出是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>0x≤0
尽管计算速度快,但是需要注意一点,由于 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>0x≤0
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(ex−1)x>0x≤0
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>0x≤0
公式与 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 函数
更多推荐
所有评论(0)