tf.nn.sigmoid()
tf.nn.tanh()
tanh函数解决了Sigmoid函数的不是zero-centered输出问题,但梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。
tf.nn.relu()
tf.nn.relu(features, name=None)
这个函数的作用是计算激活函数 relu,即 max(features, 0)。将大于0的保持不变,小于0的数置为0。
tf.nn.elu()
leaky relu
tf.nn.crelu()
tf.nn.relu6()
tf.nn.softplus()
Softplus函数是Sigmoid函数的原函数。
Softplus函数可以看成是ReLU函数的平滑版本。Softplus函数是对全部数据进行了非线性映射,是一种不饱和的非线性函数其表达式如公式,Softplus函数不具备稀疏表达的能力,收敛速度比ReLUs函数要慢很多。但该函数连续可微并且变化平缓,比Sigmoid函数更加接近生物学的激活特性,同时解决了Sigmoid函数的假饱和现象,易于网络训练和泛化性能的提高。虽然该函数的表达性能更优于ReLU函数和Sigmoid函数,即精确度相对于后者有所提高,但是其并没有加速神经网络的学习速度。
tf.nn.softsign()
tf.nn.dropout()
tf.nn.bias_add()
连续非线性:sigmoid, tanh, elu, softplus, softsign;
连续但不是处处可微分:relu, relu6, crelu, relu_x;
随机函数:dropout。
如何选择合适的激活函数:
深度学习往往需要大量时间来处理大量数据,模型的收敛速度是最为重要的。所以,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度;
如果使用 ReLU,那么一定要小心设置 learning rate,不要让网络出现很多 “dead” 神经元,如果不好解决,可以试试 Leaky ReLU、PReLU 或者 Maxout;
最好不要用 sigmoid。
在卷积神经网络 Convolutional neural networks 的卷积层中,推荐的激励函数是 relu。在循环神经网络中 recurrent neural networks,推荐的是 tanh 或者是 relu。