在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数 Activation Function,又称激励函数,如下图所示:
如果不用激励函数(其实相当于激励函数是f(x)=x),在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大〈不再是输入的线性组合,而是几乎可以逼近任意函数)。
早期研究神经网络主要采用函数或者tanh函数,输出有界,很容易充当下一层的输入。
近些年Relu函数及其改进型〈如Leaky-ReLU、P-ReLU、R-ReLU等)在多层神经网络中应用比较多。常用的激活函数有:sigmod函数、tanh函数、ReLU函数、softmax函数。
Sigmoid函数又叫作 Logistic 激活函数,它将实数值压缩进 0 到 1 的区间内。该函数将大的负数转换成 0,将大的正数转换成 1。
下图展示了 Sigmoid 函数及其导数:
Sigmoid 激活函数:
Sigmoid 导数:
Sigmoid 函数的三个主要缺陷:
梯度消失: 注意:Sigmoid 函数趋近 0 和 1 的时候变化率会变得平坦,也就是说,Sigmoid 的梯度趋近于 0。神经网络使用 Sigmoid 激活函数进行反向传播时,输出接近 0 或 1 的神经元其梯度趋近于 0。这些神经元叫作饱和神经元。因此,这些神经元的权重不会更新。此外,与此类神经元相连的神经元的权重也更新得很慢。该问题叫作梯度消失。因此,想象一下,如果一个大型神经网络包含 Sigmoid 神经元,而其中很多个都处于饱和状态,那么该网络无法执行反向传播。
不以零为中心: Sigmoid 输出不以零为中心的,这样会使权重更新效率降低。因为这会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响。(不过有一种常用的解决方案是,将最终函数值减去0.5)
计算成本高昂: exp() 函数(即指数运算)与其他非线性激活函数相比,计算成本高昂。
下一个要讨论的非线性激活函数解决了 Sigmoid 函数中值域期望不为 0 的问题。
Tanh 激活函数又叫作双曲正切激活函数(hyperbolic tangent activation function)。Tanh 函数将其压缩至 -1 到 1 的区间内。负数输入被当作负值,零输入值的映射接近零,正数输入被当作正值。
下图展示了 Tanh 激活函数及其导数:
Tanh 激活函数:
Tanh 导数:
优点:
Tanh 函数的输出以零为中心,输出均值为0,这就使得其收敛速度要比sigmoid快,从而可以减少迭代次数。
缺点:
Tanh 函数同样具有软饱和性,会造成梯度消失,因此在饱和时也会「杀死」梯度。
为了解决梯度消失问题,我们来讨论另一个非线性激活函数——修正线性单元(rectified linear unit,ReLU),该函数明显优于前面两个函数,是现在使用最广泛的函数。
修正线性单元(rectified linear unit,ReLU)
缺点:
神经元死亡: 前向传导(forward pass)过程中,如果 x < 0,则神经元保持非激活状态,且在后向传导(backward pass)中「杀死」梯度。这样权重无法得到更新,网络无法学习。当 x = 0 时,该点的梯度未定义,但是这个问题在实现中得到了解决,通过采用左侧或右侧的梯度的方式。
所以偏移现象和神经元死亡共同影响网络的收敛性。
为了避免ReLU在x<0时的神经元死亡现象,添加了一个参数。
它结合了sigmoid和ReLU函数,左侧软饱和,右侧无饱和。
其函数及其导数数学形式为:
右侧线性部分使得ELU能缓解梯度消失,而左侧软饱和能让对ELU对输入变化或噪声更鲁棒。ELU的输出均值接近于0,所以收敛速度更快。
softmax函数,又称归一化指数函数,用于多分类神经网络输出。softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,并且累计和为1,可以看成概率来理解,从而来进行多分类。
特点:
假设我们有一个数组V, V i V_i Vi 表示V中的第i个元素,那么这个元素的softmax值就是:
更形象的如下图表示:
softmax直白来说就是将原来输出是3,1,-3通过softmax函数一作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标!
隐藏层的激活函数有9种可以选择:Sigmoid,Linear,Tanh,ArchTan,Relu,Parameteric ReLU(PReLU),ELU,SoftPlus 和 BentLinear。
这里我们在隐藏层分别用sigmod和ReLU,输出层为sigmod。
对于ReLU而言,ReLU的特点是,隐层比sigmoid需要的神经元多,学习速率相对要小一点,mini_batch的数量要大一些。
参考链接:
几种常用的激活函数:https://blog.csdn.net/qq_32284189/article/details/82218354
常用激活函数(激励函数)理解与总结:https://wenku.baidu.com/view/af75613b954bcf84b9d528ea81c758f5f61f290d.html
一文概览深度学习中的激活函数:https://www.jiqizhixin.com/articles/2017-11-02-26
几种常见的激活函数:https://www.jianshu.com/p/dc4e53fc73a0