激活函数
一.激活函数的意义
为什么需要激活函数
- 激活函数对模型学习、理解非常复杂和非线性的函数具有重要作用。
- 激活函数可以引入非线性因素。如果不使用激活函数,则输出信号仅是一个简单的线性函数。线性函数一个一级多项式,线性方程的复杂度有限,从数据中学习复杂函数映射的能力很小。没有激活函数,神经网络将无法学习和模拟其他复杂类型的数据,例如图像、视频、音频、语音等。
- 激活函数可以把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。
为什么需要非线性激活函数
- 如果网络中全部是线性结构,那么线性的组合还是线性,与单独一个线性分类器无异。这样就做不到拟合逼近任意函数。
- 使用非线性激活函数 ,可以增加网络的学习能力,使它可以学习复杂的事物,复杂的表单数据,以及复杂的任意函数映射。即能够从输入输出之间生成非线性映射。
激活函数的性质
- 非线性: 当激活函数是线性的,一个两层的神经网络就可以基本上逼近所有的函数。但如果激活函数是恒等激活函数的时候,即 ,就不满足这个性质,而且如果 MLP 使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的;
- 可微性: 当优化方法是基于梯度的时候,就体现了该性质;
- 单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数;
- : 当激活函数满足这个性质的时候,如果参数的初始化是随机的较小值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要详细地去设置初始值;
- 输出值的范围: 当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的 Learning Rate。
二.常见的激活函数
(1)Sigmoid 激活函数
函数的定义为:
如下图所示,其值域为 。
当x大于零时输出结果会趋近于1,而当x小于零时,输出结果趋向于0,由于函数的特性,经常被用作二分类的输出端激活函数。
Sigmoid的导数
当 时, 。
Sigmoid的缺陷
- 当输入数据很大或者很小时,函数的梯度几乎接近于0,这对神经网络在反向传播中的学习非常不利。
- Sigmoid函数的均值不是0,这使得神经网络的训练过程中只会产生全正或全负的反馈。
(2)Tanh激活函数
函数的定义为:
如下图所示,值域为 。
Tanh的优势
Tanh函数把数据压缩到-1到1的范围,解决了Sigmoid函数均值不为0的问题,所以在实践中通常Tanh函数都优于Sigmoid函数。在数学形式上其实Tanh只是对Sigmoid的一个缩放形式,公式为tanh(x) = 2f(2x) -1(f(x)是sigmoid的函数)。
Tanh的导数
当 时, 。
由Tanh和Sigmoid的导数也可以看出Tanh导数更陡,收敛速度比Sigmoid快。
(3)Relu激活函数
函数的定义为:
如下图所示,值域为 。
ReLU的优势
- 计算公式非常简单,不像上面介绍的两个激活函数那样计算复杂,大量节约了计算时间。
- 在随机梯度下降中比Sigmoid和Tanh更加容易使得网络收敛。
- ReLU进入负半区的时候,梯度为 0,神经元此时不会训练形成单侧抑制,产生稀疏性。这样可以提高学习的精度,更好更快地提取稀疏特征。
- sigmoid 和 tanh 函数的导数在正负饱和区的梯度都会接近于 0,这会造成梯度消失,而 ReLU函数大于 0 部分都为常数保持梯度不衰减,不会产生梯度消失现象。
ReLU的导数
通常 时,给定其导数为1和0。
ReLU的不足
训练中可能会导致出现某些神经元永远无法更新的情况。其中一种对ReLU函数的改进方式是LeakyReLU。
(4)Leak Relu 激活函数
函数定义为:
如下图所示( ),值域为 。
LeakyReLU的优势
该方法与ReLU不同的是在x小于0的时候取f(x) = ax,其中a是一个非常小的斜率(比如0.01)。这样的改进可以使得当x小于0的时候也不会导致反向传播时的梯度消失现象。
(5)SoftPlus 激活函数
函数的定义为:
值域为 。
函数图像如下:
(6)Softmax 函数
函数定义为:
其中 可以等于 , 和 是列向量, 可能被换成函数关于 的函数
Softmax的特点
通过 softmax 函数,可以使得 的范围在 之间。在回归和分类问题中,通常 是待求参数,通过寻找使得 最大的 作为最佳参数。
使得范围在 之间的方法有很多,这里使用 的幂函数参考 了logistic 函数:
这个函数的作用就是使得 在负无穷到 0 的区间趋向于 0, 在 0 到正无穷的区间趋向 1。同样 softmax 函数加入了 的幂函数正是为了两极化:正样本的结果将趋近于 1,而负样本的结果趋近于 0,并把输出总和进行了归一化。
这样为多类别提供了方便(可以把 看做是样本属于类别的概率)。可以说,Softmax 函数是 logistic 函数的一种泛化。
它是一个网络预测多分类问题的最佳输出激活函数。
Softmax函数应用于多分类
假设我们有一个数组, 表示 中的第 个元素,那么这个元素的 softmax 值就是
从下图看,神经网络中包含了输入层,然后通过两个特征层处理,最后通过 softmax 分析器就能得到不同条件下的概率,这里需要分成三个类别,最终会得到 的概率值。
继续看下面的图,三个输入通过 softmax 后得到一个数组 ,这就是 soft 的功能。
更形象的映射过程如下图所示:
softmax 直白来说就是将原来输出是 通过 softmax 函数一作用,就映射成为 的值,而这些值的累和为 (满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标。
激活函数的选择
选择一个适合的激活函数并不容易,需要考虑很多因素,通常的做法是,如果不确定哪一个激活函数效果更好,可以把它们都试试,然后看看在验证集或者测试集上的效果。然后看哪一种表现的更好,就去使用它。
以下是常见的选择情况:
- 如果输出是 0、1 值(二分类问题),则输出层选择 Sigmoid 函数,然后其它的所有单元都选择 ReLU函数。
- 如果在隐藏层上不确定使用哪个激活函数,那么通常会使用 ReLU激活函数。有时,也会使用 Tanh 激活函数。
- Sigmoid 激活函数:除了输出层是一个二分类问题基本不会用它。
- Tanh 激活函数:Tanh 是非常优秀的,几乎适合所有场合。
- ReLU 激活函数:最常用的默认函数,如果不确定用哪个激活函数,就使用 ReLU 或者 LeakyReLU,再去尝试其他的激活函数。
- 如果遇到了一些死的神经元,我们可以使用 LeakyReLU 函数。