常用**函数sigmoid,Tanh,ReLU

什么是激励函数

激励函数一般用于神经网络的层与层之间,上一层的输出通过激励函数的转换之后输入到下一层中。神经网络模型非线性的,如果没有激励函数,那么每一层实际上就相等于矩阵乘法。而将过非线性的激励函数的作用,可以使神经网络拥有更过的表现力。

下面我们具体的描述这一问题

如下,加入x1,x2是神经网络输入层节点,net01是隐含层的一个节点,可以知道的是

neto1 = x1*w1+x2*w2+1*b1

而outo1将作为输入输入到下一层,在neto1和outo1之间需要做一步计算,即

outo1 = sigmoid(neto1)

常用**函数sigmoid,Tanh,ReLU

 

不同激励函数及其公式和图形

1.Sigmoid函数

 

 

常用**函数sigmoid,Tanh,ReLU

 

其函数图形如下:

常用**函数sigmoid,Tanh,ReLU

我们可以观察到Sigmoid函数的输出值在(0,1)之间。

Sigmoid函数的倒数的公式如下

常用**函数sigmoid,Tanh,ReLU

其导数图形如下:

常用**函数sigmoid,Tanh,ReLU

Sigmoid存在的不足

在一些误差反向传播的场景下。首先会计算输出层的loss,然后将该loss以导数的形式不断向上一层神经网络传递,调整参数。使用Sigmoid函数的话,很容易导致loss导数变为0,从而失去优化参数的功能。 并且Sigmoid函数的导数最大值为0.25,该误差经过多层神经网络后,会快速衰减到0。 
除此之外,Sigmoid函数的导数恒大于零,因此下一层神将网路的输入恒大于零

 

2.Tanh函数

基于Sigmoid函数,Tanh函数进行了进一步的优化,克服了,Sigmoid恒大于零的缺点。

Tanh函数公式如下:

常用**函数sigmoid,Tanh,ReLU

函数图像关于原点对称

常用**函数sigmoid,Tanh,ReLU

Tanh函数的到函数如下

常用**函数sigmoid,Tanh,ReLU
 

Tanh函数和Sigmoid函数的图像对比如下:

常用**函数sigmoid,Tanh,ReLU

 

虽然Tanh函数解决了Sigmoid函数恒大于零的问题,但Sigmoid所存在的其他不足,Tanh仍然存在。

tanh函数与sigmoid函数共同的缺点: 当它们倾向于比较大或者比较小的数的时候,整个函数的变化比较平缓,会影响到网络的学习效率。所以在实际工作中用得更多的是ReLU函数

3.ReLU函数

ReLU的全称是Rectified Linear Units

函数公式如下:

常用**函数sigmoid,Tanh,ReLU

也可以写成如下形式:

常用**函数sigmoid,Tanh,ReLU

ReLU函数的函数图像为:,是后来才出现的**函数。 可以看到,当x<0时,函数值为零ReLU硬饱和。而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。这让我们能够直接以监督的方式训练深度神经网络,而无需依赖无监督的逐层预训练。

常用**函数sigmoid,Tanh,ReLU

 该函数在输入小于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函数 等咱不做讨论