激活函数的作用
- 没有激活函数带来的非线性,多层神经网络和单层无异,只能拟合一般的线性函数。为了使得神经网可以拟合复杂的函数需要向神经网络加入非线性激活函数,它可以使神经网络随意逼近复杂函数。
- 神经元 ∑ i n w i x i + b ∑_i^nw_i x_i+b ∑inwixi+b的输出值可能非常大, 该输出在未经修改的情况下传送至下一层神经元时,可能被转换成更大的值,这样可能需要极大算力。激活函数的一个任务就是将神经元的输出映射到有界的区域,比如[0,1]
Sigmoid函数
-
Sigmoid函数: σ ( x ) = 1 1 + e ( − x ) σ(x)=\frac{1}{1+e^(-x) } σ(x)=1+e(−x)1图形:
-
导数: σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) σ'(x)=σ(x)(1-σ(x)) σ′(x)=σ(x)(1−σ(x))图形:
-
Sigmoid又叫作 Logistic 激活函数,它将实数值压缩进 0 到 1 的区间内,一般在预测概率的输出层中使用。
-
Sigmoid 函数的主要缺陷:
- 梯度消失:注意:Sigmoid 函数趋近 0 和 1 的时候变化率会变得平坦(切线水平),也就是说Sigmoid在大部分点的梯度(导数)趋近于0。那么神经网络使用 Sigmoid 激活函数进行反向传播时,输出接近 0 或 1 的神经元其梯度趋近于0(因为导数为σ(x)(1-σ(x))),这些神经元叫作饱和神经元。因此,这些神经元的权重不会更新。此外,与此类神经元相连的神经元的权重也更新得很慢。该问题叫作梯度消失。因此,想象一下,如果一个大型神经网络包含 Sigmoid 神经元,而其中很多个都处于饱和状态,那么该网络无法执行反向传播。
- 不以零为中心:Sigmoid 输出不以零为中心的,即期望不为0
- 计算成本高昂:exp()函数与其他非线性激活函数相比,计算成本高昂。
Tanh函数
-
Tanh激活函数又叫作双曲正切激活函数。与Sigmoid函数类似,但 Tanh 函数将其压缩至-1到1的区间内。
-
Tanh函数: g ( z ) = e z − e − z e z − e − z g(z)=\frac{e^z-e^{-z}}{e^z-e^{-z} } g(z)=ez−e−zez−e−z图形:
-
导数: g ′ ( x ) = 1 − g ( z ) 2 g'(x)=1-g(z)^2 g′(x)=1−g(z)2图形:
-
Tanh函数和Sigmoid 函数也会有梯度消失的问题。
-
Tanh 函数的输出以零为中心,因为区间在-1 到 1 之间
-
在实践中,Tanh 函数的使用优先性高于 Sigmoid 函数
ReLU函数
-
修正线性单元(rectified linear unit)ReLU函数: f ( x ) = m a x ( 0 , x ) f(x)=max(0,x) f(x)=max(0,x)图形:
-
导数: f ′ ( x ) = { 1 x > 0 u n d e f i n e d , x = 0 0 x < 0 f'(x)= \begin{cases} 1 &x>0\\ undefined,&x=0\\ 0 &x<0 \end{cases} f′(x)=⎩⎪⎨⎪⎧1undefined,0x>0x=0x<0图形:
-
优点:
- 该激活函数使网络更快速地收敛。
- 它不会饱和,至少在正区域(x> 0 时)可以这样,因此神经元至少在一半区域中不会把所有零进行反向传播,所以它可以对抗梯度消失问题
- 由于使用了简单的阈值化(thresholding),ReLU 计算效率很高
-
缺点:
- 不以零为中心
- 前向传导(forward pass)过程中,如果 x < 0,则神经元保持非激活状态,且在后向传导(backward pass)中梯度消失。这样权重无法得到更新,网络无法学习。
- 当 x = 0 时,该点的梯度未定义,但是这个问题在实现中得到了解决,通过采用左侧或右侧的梯度的方式
Leaky relu函数
-
Leaky relu 函数: f ( x ) = m a x ( 0.1 x , x ) f(x)=max(0.1x,x) f(x)=max(0.1x,x)图形:
-
导数: f ′ ( x ) = { 1 x > 0 u n d e f i n e d , x = 0 0.1 x < 0 f'(x)= \begin{cases} 1 &x>0\\ undefined,&x=0\\ 0.1 &x<0 \end{cases} f′(x)=⎩⎪⎨⎪⎧1undefined,0.1x>0x=0x<0
-
Leaky ReLU的概念是:当x<0时,它得到0.1的梯度。该函数一定程度上缓解了 dead ReLU 问题.
参考链接: