一、常见激活函数及分类
【激活函数的饱和】定义:x趋向于正无穷或者负无穷时,函数导数趋近于0,此时称为饱和;
- 饱和激活函数:sigmod、tanh
- 非饱和激活函数:ReLU、Leaky Relu、gelu
二、激活函数作用
给神经网络引入非线性元素,使神经网络可以完成非线性映射。如果不使用激活函数,无论神经网络有多少层,都只是线性组合而已。
三、激活函数介绍+优缺点分析
3.1 sigmod
sigmoid函数输入一个实值的数,然后将其压缩到0~1的范围内。特别地,大的负数被映射成0,大的正数被映射成1,数值绝对值越大,梯度越平坦,敏感度越低。
公式:
- f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+e−x1
- f ′ ( x ) = f ( x ) ∗ ( 1 − f ( x ) ) f^{'}(x)=f(x)*(1-f(x)) f′(x)=f(x)∗(1−f(x))
sigmod图像:
sigmod导数图像:
sigmod激活函数优点:
- 平滑、易于求导
sigmod激活函数缺点:
- 梯度消失:Sigmoid 函数趋近 0 和 1 的时候变化率会变得平坦,也就是说,Sigmoid 的梯度趋近于 0。神经网络使用 Sigmoid 激活函数进行反向传播时,输出接近 0 或 1 的神经元其梯度趋近于 0,与此类神经元相连的神经元的权重也更新得很慢。该问题叫作梯度消失。
- Sigmoid的输出不是0均值(即zero-centered);这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,随着网络的加深,会改变数据的原始分布。
- 激活函数计算量大(在正向传播和反向传播中都包含幂运算和除法)
3.2 tanh
tanh和 sigmoid 相似,都属于饱和激活函数,区别在于输出值范围由 (0,1) 变为了 (-1,1),可以把 tanh 函数看做是 sigmoid 向下平移和拉伸后的结果。
公式:
t
a
n
h
(
x
)
=
e
x
−
e
−
x
e
x
+
e
−
x
=
2
1
+
e
−
2
x
−
1
tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} =\frac{2}{1+e^{-2x}}-1
tanh(x)=ex+e−xex−e−x=1+e−2x2−1
t a n h ′ ( x ) = 1 − t a n h 2 ( x ) tanh^{'}(x)=1-tanh^2(x) tanh′(x)=1−tanh2(x)
tanh图像:
tanh导数图像:
tanh优点:
- 它是0均值的,解决了sigmoid非0均值的缺点,所以实际中tanh会比sigmoid更常用
tanh缺点:
- 仍然存在sigmod一样的梯度消失问题
- 仍然含有复杂的幂运算
3.3 ReLU
relu函数是目前主流的激活函数,它的公式很简单,输入小于0的时候为0,大于0的时候是本身。
公式:
f
(
x
)
=
m
a
x
(
0
,
x
)
f(x)=max(0,x)
f(x)=max(0,x)
ReLU图像:
ReLU导数图像:
ReLU函数优点:
- 相比Sigmoid和tanh,ReLU摒弃了复杂的计算,提高了运算速度。
- 解决了梯度消失问题,收敛速度快于Sigmoid和tanh函数
- ReLU将x<0的输出置为0,就是一个去噪音,稀疏矩阵的过程。而且在训练过程中,这种稀疏性是动态调节的,网络会自动调整稀疏比例,保证矩阵有最优的有效特征
ReLU函数缺点:
- 当x>0时,ReLU导数为常数1的好处就是在“链式反应”中不会出现梯度消失,但梯度下降的强度就完全取决于权值的乘积,这样就可能会出现梯度爆炸问题。解决这类问题:一是控制权值,让它们在(0,1)范围内;二是做梯度裁剪,控制梯度下降强度,如ReLU(x)=min(6, max(0,x))
- 当x<0时,ReLU将x<0的输出置为0,可能会导致模型无法学习到有效特征,所以如果学习率设置的太大,就可能会导致网络的大部分神经元处于‘dead’状态,所以使用ReLU的网络,学习率不能设置太大。