神经网络:激活函数层知识点

1.激活函数的作用,常用的激活函数有哪些

激活函数的作用

激活函数可以引入非线性因素,提升网络的学习表达能力。

常用的激活函数

Sigmoid 激活函数

函数的定义为:

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

如下图所示,其值域为 ( 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+ex1)=1+ex1(11+ex1)=f(x)(1f(x))

x = 0 x=0 x=0 时, f ( x ) ′ = 0.25 f(x)'=0.25 f(x)=0.25

Sigmoid的优点:

  1. 平滑
  2. 易于求导
  3. 可以作为概率,辅助解释模型的输出结果

Sigmoid的缺陷:

  1. 当输入数据很大或者很小时,函数的梯度几乎接近于0,这对神经网络在反向传播中的学习非常不利。
  2. Sigmoid函数的均值不是0,这使得神经网络的训练过程中只会产生全正或全负的反馈。
  3. 导数值恒小于1,反向传播易导致梯度消失。

Sigmoid导数示意图,两边梯度几乎为0

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+exexex

如下图所示,值域为 ( − 1 , 1 ) (-1,1) (1,1)

Tanh的优势:

  1. Tanh函数把数据压缩到-1到1的范围,解决了Sigmoid函数均值不为0的问题,所以在实践中通常Tanh函数比Sigmoid函数更容易收敛。在数学形式上其实Tanh只是对Sigmoid的一个缩放形式,公式为 t a n h ( x ) = 2 f ( 2 x ) − 1 tanh(x) = 2f(2x) -1 tanh(x)=2f(2x)1 f ( x ) f(x) f(x) 是Sigmoid的函数)。
  2. 平滑
  3. 易于求导

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+exexex)=1(tanh(x))2

x = 0 x=0 x=0 时, f ( x ) ′ = 1 f(x)'=1 f(x)=1

由Tanh和Sigmoid的导数也可以看出Tanh导数更陡,收敛速度比Sigmoid快。

Tanh导数示意图

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的优势:

  1. 计算公式非常简单,不像上面介绍的两个激活函数那样涉及成本更高的指数运算,大量节约了计算时间。
  2. 在随机梯度下降中比Sigmoid和Tanh更加容易使得网络收敛。
  3. ReLU进入负半区的时候,梯度为0,神经元此时会训练形成单侧抑制,产生稀疏性,能更好更快地提取稀疏特征。
  4. Sigmoid和Tanh激活函数的导数在正负饱和区的梯度都会接近于0,这会造成梯度消失,而ReLU函数大于0部分都为常数保持梯度不衰减,不会产生梯度消失现象。

稀疏:在神经网络中,这意味着激活的矩阵含有许多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的导数

ReLU的不足:

  1. 训练中可能会导致出现某些神经元永远无法更新的情况。其中一种对ReLU函数的改进方式是LeakyReLU。
  2. 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,x0

如下图所示( 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的不足:

  1. 无法避免梯度爆炸的问题。
  2. 神经网络不学习 α \alpha α 值。
  3. 在求导的时候,两部分都是线性的。

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(ex1),x<0x,x0

如果我们输入的 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的导数公式

导数图如下所示:

ELU的导数图

ELU的优势:

  1. 能避免ReLU中一些神经元无法更新的情况。
  2. 能得到负值输出。

ELU的不足:

  1. 包含指数运算,计算时间长。
  2. 无法避免梯度爆炸问题。
  3. 神经网络无法学习 α \alpha α 值。

猜你喜欢

转载自blog.csdn.net/weixin_51390582/article/details/135124596