神经网络中常用的**函数

为什么要用**函数: 引入非线性。

1. SIGMOD

神经网络中常用的**函数

Sigmoid导数:

神经网络中常用的**函数

缺点:

  1. 容易发生梯度消失。当z特别大或者特别小的时候,从图像可以看出,导数的梯度或者函数的斜率会特别小,最后会接近0,梯度下降的速度降低。如果我们初始化神经网络的权值为 [ 0 , 1 ]之间的随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层梯度值都会减小为原来的0.25倍,如果神经网络隐层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失现象;当网络权值初始化为 ( 1 , + ∞ ) (1,+∞)(1,+∞) 区间内的值,则会出现梯度爆炸情况。
  2. sigmoid的输出是非0均值的。这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:如果x大于0,那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。
  3. 解析式中含有幂运算,计算机求解时相对来讲比较耗时

2. tanh函数

神经网络中常用的**函数

3. Relu函数

神经网络中常用的**函数

缺点:

  1. ReLU的输出不是0均值。
  2. Dead ReLU Problem,指的是某些神经元可能永远不会被**,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法

4. LeakyRelu

神经网络中常用的**函数

避免了dead relu problem

 

 

参考链接:https://blog.****.net/tyhj_sf/article/details/79932893

https://blog.****.net/qq_40514904/article/details/103638147