目录

为什么要用激活函数

如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。

sigmoid激活函数

  • 激活函数计算量大,反向传播求误差梯度时,求导涉及除法
  • 反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练
  • Sigmoids函数饱和且kill掉梯度

tanh函数

  • tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。
  • 与 sigmoid 的区别是,tanh 是 0 均值的,因此实际应用中 tanh 会比 sigmoid 更好。

relu函数

优点

  • 单侧抑制
  • 相对宽阔的兴奋边界
  • 稀疏激活性。

缺点

  • 训练的时候很”脆弱”,很容易就”die”了
  • 一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.
  • 如果 learning rate 很大,那么很有可能网络中的 40% 的神经元都”dead”了。

leaky_relu

lambda x: tf.nn.leaky_relu(x, alpha=0.01)

tensorflow 激活函数

  • tf.nn.relu
  • tf.nn.relu6
  • tf.nn.crelu
  • tf.nn.elu
  • tf.nn.selu
  • tf.nn.softplus
  • tf.nn.softsign
  • tf.nn.dropout
  • tf.nn.bias_add
  • tf.sigmoid
  • tf.tanh