什么是激励函数
激励函数一般用于神经网络的层与层之间,上一层的输出通过激励函数的转换之后输入到下一层中。神经网络模型非线性的,如果没有激励函数,那么每一层实际上就相等于矩阵乘法。而将过非线性的激励函数的作用,可以使神经网络拥有更过的表现力。
下面我们具体的描述这一问题
如下,加入x1,x2是神经网络输入层节点,net01是隐含层的一个节点,可以知道的是
neto1 = x1*w1+x2*w2+1*b1
而outo1将作为输入输入到下一层,在neto1和outo1之间需要做一步计算,即
outo1 = sigmoid(neto1)
不同激励函数及其公式和图形
1.Sigmoid函数
其函数图形如下:
我们可以观察到Sigmoid函数的输出值在(0,1)之间。
Sigmoid函数的倒数的公式如下
其导数图形如下:
Sigmoid存在的不足
在一些误差反向传播的场景下。首先会计算输出层的loss,然后将该loss以导数的形式不断向上一层神经网络传递,调整参数。使用Sigmoid函数的话,很容易导致loss导数变为0,从而失去优化参数的功能。 并且Sigmoid函数的导数最大值为0.25,该误差经过多层神经网络后,会快速衰减到0。
除此之外,Sigmoid函数的导数恒大于零,因此下一层神将网路的输入恒大于零
2.Tanh函数
基于Sigmoid函数,Tanh函数进行了进一步的优化,克服了,Sigmoid恒大于零的缺点。
Tanh函数公式如下:
函数图像关于原点对称
Tanh函数的到函数如下
Tanh函数和Sigmoid函数的图像对比如下:
虽然Tanh函数解决了Sigmoid函数恒大于零的问题,但Sigmoid所存在的其他不足,Tanh仍然存在。
tanh函数与sigmoid函数共同的缺点: 当它们倾向于比较大或者比较小的数的时候,整个函数的变化比较平缓,会影响到网络的学习效率。所以在实际工作中用得更多的是ReLU函数
3.ReLU函数
ReLU的全称是Rectified Linear Units
函数公式如下:
也可以写成如下形式:
ReLU函数的函数图像为:,是后来才出现的激活函数。 可以看到,当x<0时,函数值为零ReLU硬饱和。而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。这让我们能够直接以监督的方式训练深度神经网络,而无需依赖无监督的逐层预训练。
该函数在输入小于0时输出值恒为0,在输入大于0时,输出线性增长。
ReLU函数没有Sigmoid函数及Tanh函数中的指数运算,并且也没有”kill” gradients的现象。
但是ReLU函数也有以下几个不足之处:
(1)not zero-centered
这个与Sigmoid类似,从函数图形就可以看出。
(2)dead relu
这里指的是某些神经元可能永远不会被激活,导致对应的参数永远不会被更新。
比如说一个非常大的Gradient流过ReLU神经元,可能会导致参数更新后该神经元再也不会被激活。
当学习率过大时,可能会导致大部分神经元出现dead状况。所以使用该激活函数时应该避免学习率设置的过大。另外一种比较少见的情况是,某些初始化参数也会导致一些神经元出现dead状况。
以上部分参考自:https://blog.csdn.net/dabokele/article/details/58713727
https://www.jianshu.com/p/bc40cf98aa80
https://blog.csdn.net/wyf826459/article/details/80660685
除以上三种激活函数外,还有Softplus函数,Softsign函数 等咱不做讨论