目录
为什么要用激活函数
如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
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