sigmoid tanh Relu比较

1、sigmoid函数

sigmoid tanh Relu比较

函数曲线图如下:

sigmoid tanh Relu比较

函数导数曲线图如下:

sigmoid tanh Relu比较

优点:

  • 输出为0到1之间的连续实值,此输出范围和概率范围一致,因此可以用概率的方式解释输出。-
  • 将线性函数转变为非线性函数

缺点:

  • 容易出现gradient vanishing
  • 函数输出并不是zero-centered
  • 幂运算相对来讲比较耗时

对应的tf函数:tf.nn.sigmoid()

2、tanh函数

tanh函数表达式:
sigmoid tanh Relu比较

函数曲线图为:
sigmoid tanh Relu比较
sigmoid和tanh函数之间的关系式:
sigmoid tanh Relu比较
sigmoid函数和tanh函数导数区别

考虑相同的输入区间[0,1]

sigmoid函数导数输出范围为[0.20,0.25]

tanh函数导数曲线图为

其输出范围为[0.42,1]

sigmoid tanh Relu比较

优点:

  • 对比sigmoid和tanh两者导数输出可知,tanh函数的导数比sigmoid函数导数值更大,即梯度变化更快,也就是在训练过程中收敛速度更快。
  • 输出范围为-1到1之间,这样可以使得输出均值为0,这个性质可以提高BP训练的效率,具体原因参考文献 http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf
  • 将线性函数转变为非线性函数

缺点:

  • gradient vanishing
  • 幂运算相对来讲比较耗时

    对应的tf函数:tf.nn.tanh()

3、ReLU函数

ReLU函数表达式为:
sigmoid tanh Relu比较

其函数曲线图为:

sigmoid tanh Relu比较

由函数图像可知其导数为分段函数

x <= 0时,导数为0

x > 0时,导数为1

优点:

  • 解决了gradient vanishing问题 (在正区间)
  • 计算速度非常快,只需要判断输入是否大于0
  • 收敛速度远快于sigmoid和tanh

缺点:

  • 不是zero-centered
  • 某些神经元可能永远不会被**

    对应的tf函数为:tf.nn.relu()