深度学习_深度学习基础知识_激活函数

激活函数

一.激活函数的意义

为什么需要激活函数

  1. 激活函数对模型学习、理解非常复杂和非线性的函数具有重要作用。
  2. 激活函数可以引入非线性因素。如果不使用激活函数,则输出信号仅是一个简单的线性函数。线性函数一个一级多项式,线性方程的复杂度有限,从数据中学习复杂函数映射的能力很小。没有激活函数,神经网络将无法学习和模拟其他复杂类型的数据,例如图像、视频、音频、语音等。
  3. 激活函数可以把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。

为什么需要非线性激活函数

  1. 如果网络中全部是线性结构,那么线性的组合还是线性,与单独一个线性分类器无异。这样就做不到拟合逼近任意函数。
  2. 使用非线性激活函数 ,可以增加网络的学习能力,使它可以学习复杂的事物,复杂的表单数据,以及复杂的任意函数映射。即能够从输入输出之间生成非线性映射。

激活函数的性质

  1. 非线性: 当激活函数是线性的,一个两层的神经网络就可以基本上逼近所有的函数。但如果激活函数是恒等激活函数的时候,即 f ( x ) = x f(x)=x f(x)=x,就不满足这个性质,而且如果 MLP 使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的;
  2. 可微性: 当优化方法是基于梯度的时候,就体现了该性质;
  3. 单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数;
  4. f ( x ) ≈ x f(x)≈x f(x)x: 当激活函数满足这个性质的时候,如果参数的初始化是随机的较小值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要详细地去设置初始值;
  5. 输出值的范围: 当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的 Learning Rate。

二.常见的激活函数

(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和1之间的值。

当x大于零时输出结果会趋近于1,而当x小于零时,输出结果趋向于0,由于函数的特性,经常被用作二分类的输出端激活函数。

深度学习_深度学习基础知识_激活函数_第1张图片

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,反向传播易导致梯度消失。

深度学习_深度学习基础知识_激活函数_第2张图片

深度学习_深度学习基础知识_激活函数_第3张图片

(2)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的一个缩放形式,公式为tanh(x) = 2f(2x) -1(f(x)是sigmoid的函数)。
  2. 平滑
  3. 易于求导

深度学习_深度学习基础知识_激活函数_第4张图片

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快。

深度学习_深度学习基础知识_激活函数_第5张图片

Tanh的缺点

导数值小于1,反向传播易导致梯度消失。

(3)Relu激活函数

函数的定义为:

f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x)

如下图所示,值域为 [ 0 , + ∞ ) [0,+∞) [0,+)

深度学习_深度学习基础知识_激活函数_第6张图片

ReLU的优势

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

稀疏:数量少,通常分散在很大的区域。在神经网络中,这意味着激活的矩阵含有许多 0。这种稀疏性能让我们得到什么?当某个比例(比如 50%)的激活饱和时,我们就称这个神经网络是稀疏的。这能提升时间和空间复杂度方面的效率——常数值(通常)所需空间更少,计算成本也更低。

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和0。

深度学习_深度学习基础知识_激活函数_第7张图片

ReLU的不足

  1. 训练中可能会导致出现某些神经元永远无法更新的情况。其中一种对ReLU函数的改进方式是LeakyReLU。
  2. ReLU不能避免梯度爆炸问题。

(4)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),值域为 ( − ∞ , + ∞ ) (-∞,+∞) (,+)

深度学习_深度学习基础知识_激活函数_第8张图片

LeakyReLU的优势

该方法与ReLU不同的是在x小于0的时候取f(x) = ax,其中a是一个非常小的斜率(比如0.01)。这样的改进可以使得当x小于0的时候也不会导致反向传播时的梯度消失现象。

LeakyReLU的不足

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

(5)SoftPlus 激活函数

函数的定义为:

f ( x ) = l n ( 1 + e x ) f(x) = ln( 1 + e^x) f(x)=ln(1+ex)

值域为 ( 0 , + ∞ ) (0,+∞) (0,+)

函数图像如下:

深度学习_深度学习基础知识_激活函数_第9张图片

可以把SoftPlus看作是ReLU的平滑。

(6)Softmax函数

函数定义为:

P ( y / x ) = e Z i ∑ k = 1 K e Z k P(y/x) = \frac{e^{Z_i}}{\sum_{k=1}^K e^{Z_k}} P(y/x)=k=1KeZkeZi

其中 Z i Z_i Zi可以等于 θ i T x \theta_i^T x θiTx θ i \theta_i θi x x x 是列向量, θ i T x \theta_i^T x θiTx 可能被换成函数关于 x x x 的函数 f i ( x ) f_i(x) fi(x)

Softmax的特点

通过 softmax 函数,可以使得 P ( y / x ) P(y/x) P(y/x) 的范围在 [ 0 , 1 ] [0,1] [0,1] 之间。在回归和分类问题中,通常 θ \theta θ 是待求参数,通过寻找使得 P ( y / x ) P(y/x) P(y/x) 最大的 θ i \theta_i θi 作为最佳参数。

使得范围在 [ 0 , 1 ] [0,1] [0,1] 之间的方法有很多,这里使用 e e e 的幂函数参考 了logistic 函数:

P y / x ) = 1 1 + exp ⁡ ( − θ i T x ) Py/x) = \frac{1}{1+\exp(-\theta_i^T x)} Py/x)=1+exp(θiTx)1

这个函数的作用就是使得 P ( y / x ) P(y/x) P(y/x) 在负无穷到 0 的区间趋向于 0, 在 0 到正无穷的区间趋向 1。同样 softmax 函数加入了 e e e 的幂函数正是为了两极化:正样本的结果将趋近于 1,而负样本的结果趋近于 0,并把输出总和进行了归一化。

这样为多类别提供了方便(可以把 P ( y / x ) P(y/x) P(y/x) 看做是样本属于类别的概率)。可以说,Softmax 函数是 logistic 函数的一种泛化。

它是一个网络预测多分类问题的最佳输出激活函数。

Softmax函数应用于多分类

假设我们有一个数组, Z i Z_i Zi 表示 Z Z Z 中的第 i i i 个元素,那么这个元素的 softmax 值就是

P ( y / x ) = e Z i ∑ K e Z k P(y/x)= \frac{e^{Z_i}}{\sum_K e^{Z_k}} P(y/x)=KeZkeZi

从下图看,神经网络中包含了输入层,然后通过两个特征层处理,最后通过 softmax 分析器就能得到不同条件下的概率,这里需要分成三个类别,最终会得到 y = 0 , y = 1 , y = 2 y=0, y=1, y=2 y=0,y=1,y=2 的概率值。

继续看下面的图,三个输入通过 softmax 后得到一个数组 [ 0 , 0.12 , 0.88 ] [0 , 0.12 , 0.88] [0,0.12,0.88],这就是 soft 的功能。

深度学习_深度学习基础知识_激活函数_第10张图片

更形象的映射过程如下图所示:

深度学习_深度学习基础知识_激活函数_第11张图片

softmax 直白来说就是将原来输出是 3 , 1 , − 3 3,1,-3 3,1,3 通过 softmax 函数一作用,就映射成为 [ 0 , 1 ] [0,1] [0,1] 的值,而这些值的累和为 1 1 1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标。

激活函数的选择

选择一个适合的激活函数并不容易,需要考虑很多因素,通常的做法是,如果不确定哪一个激活函数效果更好,可以把它们都试试,然后看看在验证集或者测试集上的效果。然后看哪一种表现的更好,就去使用它。

以下是常见的选择情况:

  1. 如果输出是 0、1 值(二分类问题),则输出层选择 Sigmoid 函数,然后其它的所有单元都选择 ReLU函数。
  2. 如果在隐藏层上不确定使用哪个激活函数,那么通常会使用 ReLU激活函数。有时,也会使用 Tanh 激活函数。
  3. Sigmoid 激活函数:除了输出层是一个二分类问题基本不会用它。
  4. Tanh 激活函数:Tanh 是非常优秀的,几乎适合所有场合。
  5. ReLU 激活函数:最常用的默认函数,如果不确定用哪个激活函数,就使用 ReLU 或者 LeakyReLU,再去尝试其他的激活函数。
  6. 如果遇到了一些死的神经元,我们可以使用 LeakyReLU 函数。

(7)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,则结果与ReLU一样,即 y y y值等于 x x x值;但如果输入的 x x x值小于0,则我们会得到一个稍微小于0的值,所得到的 y y y值取决于输入的 x x x值,但还要兼顾参数 α \alpha α——你可以根据需要来调整这个参数。更进一步,我们引入了指数运算 e x e^x ex,因此 ELU 的计算成本比 ReLU 高。

下面给出了 α \alpha α值为0.2时的ELU函数图:

深度学习_深度学习基础知识_激活函数_第12张图片

ELU的导数:

深度学习_深度学习基础知识_激活函数_第13张图片

导数图如下所示:

深度学习_深度学习基础知识_激活函数_第14张图片

ELU的优势

  1. 能避免ReLU中一些神经元无法更新的情况。
  2. 能得到负值输出,这能帮助网络向正确的方向推动权重和偏置变化。

ELU的不足

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

你可能感兴趣的:(#,深度学习基础知识)