激活函数可以引入非线性因素,提升网络的学习表达能力。
Sigmoid 激活函数
函数的定义为:
f ( x ) = 1 1 + e − x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+e−x1
如下图所示,其值域为 ( 0 , 1 ) (0,1) (0,1) 。也就是说,输入的每个神经元、节点都会被缩放到一个介于 0 0 0 和 1 1 1 之间的值。
当 x x x 大于零时输出结果会趋近于 1 1 1 ,而当 x x x 小于零时,输出结果趋向于 0 0 0 ,由于函数的特性,经常被用作二分类的输出端激活函数。
Sigmoid的导数:
f ′ ( x ) = ( 1 1 + e − x ) ′ = 1 1 + e − x ( 1 − 1 1 + e − x ) = f ( x ) ( 1 − f ( x ) ) f^{'}(x)=(\frac{1}{1+e^{-x}})^{'}=\frac{1}{1+e^{-x}}\left( 1- \frac{1}{1+e^{-x}} \right)=f(x)(1-f(x)) f′(x)=(1+e−x1)′=1+e−x1(1−1+e−x1)=f(x)(1−f(x))
当 x = 0 x=0 x=0 时, f ( x ) ′ = 0.25 f(x)'=0.25 f(x)′=0.25 。
Sigmoid的优点:
Sigmoid的缺陷:
Tanh激活函数
Tanh函数的定义为:
f ( x ) = T a n h ( x ) = e x − e − x e x + e − x f(x) = Tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} f(x)=Tanh(x)=ex+e−xex−e−x
如下图所示,值域为 ( − 1 , 1 ) (-1,1) (−1,1) 。
Tanh的优势:
Tanh的导数:
f ′ ( x ) = ( e x − e − x e x + e − x ) ′ = 1 − ( t a n h ( x ) ) 2 f^{'}(x)=(\frac{e^x - e^{-x}}{e^x + e^{-x}})^{'}=1-(tanh(x))^2 f′(x)=(ex+e−xex−e−x)′=1−(tanh(x))2
当 x = 0 x=0 x=0 时, f ( x ) ′ = 1 f(x)'=1 f(x)′=1 。
由Tanh和Sigmoid的导数也可以看出Tanh导数更陡,收敛速度比Sigmoid快。
Tanh的缺点:
导数值恒小于1,反向传播易导致梯度消失。
Relu激活函数
Relu激活函数的定义为:
f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x)
如下图所示,值域为 [ 0 , + ∞ ) [0,+∞) [0,+∞) 。
ReLU的优势:
稀疏:在神经网络中,这意味着激活的矩阵含有许多0。这种稀疏性能让我们得到什么?这能提升时间和空间复杂度方面的效率,常数值所需空间更少,计算成本也更低。
ReLU的导数:
c ( u ) = { 0 , x < 0 1 , x > 0 u n d e f i n e d , x = 0 c(u)=\begin{cases} 0,x<0 \\ 1,x>0 \\ undefined,x=0\end{cases} c(u)=⎩ ⎨ ⎧0,x<01,x>0undefined,x=0
通常 x = 0 x=0 x=0 时,给定其导数为 1 1 1 和 0 0 0 。
ReLU的不足:
LeakyReLU激活函数
LeakyReLU激活函数定义为:
f ( x ) = { a x , x < 0 x , x ≥ 0 f(x) = \left\{ \begin{aligned} ax, \quad x<0 \\ x, \quad x\ge0 \end{aligned} \right. f(x)={ax,x<0x,x≥0
如下图所示( a = 0.5 a = 0.5 a=0.5 ),值域为 ( − ∞ , + ∞ ) (-∞,+∞) (−∞,+∞) 。
LeakyReLU的优势:
该方法与ReLU不同的是在 x x x小于0的时候取 f ( x ) = a x f(x) = ax f(x)=ax ,其中 a a a是一个非常小的斜率(比如0.01)。这样的改进可以使得当 x x x 小于0的时候也不会导致反向传播时的梯度消失现象。
LeakyReLU的不足:
SoftPlus激活函数
SoftPlus激活函数的定义为:
f ( x ) = l n ( 1 + e x ) f(x) = ln( 1 + e^x) f(x)=ln(1+ex)
值域为 ( 0 , + ∞ ) (0,+∞) (0,+∞) 。
函数图像如下:
可以把SoftPlus看作是ReLU的平滑。
ELU激活函数
ELU激活函数解决了ReLU的一些问题,同时也保留了一些好的方面。这种激活函数要选取一个 α \alpha α 值,其常见的取值是在0.1到0.3之间。
函数定义如下所示:
f ( x ) = { a ( e x − 1 ) , x < 0 x , x ≥ 0 f(x) = \left\{ \begin{aligned} a(e^x -1), \quad x<0 \\ x, \quad x\ge0 \end{aligned} \right. f(x)={a(ex−1),x<0x,x≥0
如果我们输入的 x x x 值大于 0 0 0 ,则结果与ReLU一样,即 y y y 值等于 x x x 值;但如果输入的 x x x 值小于 0 0 0 ,则我们会得到一个稍微小于 0 0 0 的值,所得到的 y y y 值取决于输入的 x x x 值,但还要兼顾参数 α \alpha α ——可以根据需要来调整这个参数。公式进一步引入了指数运算 e x e^x ex ,因此ELU的计算成本比ReLU高。
下面给出了 α \alpha α 值为0.2时的ELU函数图:
ELU的导数:
导数图如下所示:
ELU的优势:
ELU的不足: