激励函数是所有神经网络算法的必备神器, 激励函数的目的是为了调节权重和误差,对张量进行非线性操作,增强网络的表达能力。Tensorflow中的激励函数位于神经网络(neural network, nn)库。常用的激励函数有:
1、整流线性单元(Rectifier linear unit, Relu)
函数为max(0, x),连续但不平滑,如下图所示:
tensorflow中表达为:print(sess.run(tf.nn.relu([-3., 3., 10.])
2、有时,为抵消Relu激励函数的线性增长部分,会在min()函数中嵌入max(0,x),其在Tensorflow中的实现称作Relu6,函数表示为min(max(0, x), 6)
使用方式如下:print(sess.run(tf.nn.relu6([-3., 3., 10.]),图示为:
3、sigmoid函数是最常用的连续、平滑的激励函数,也被称作逻辑函数,表示为1/(1 + exp(-x))。由于其在机器学习训练中反向传播趋近于0,因此不怎么使用。
使用方式如下:print(sess.run(tf.nn.sigmoid([-1., 0., 1.]))
4、双曲正切函数(hyper tangent, tanh)
双曲正切函数为双曲正弦与双曲余弦的比值,另外一种写法是(exp(x) - exp(-x)) / (exp(x) + exp(-x))
使用方式:print(sess.run(tf.nn.tanh([-1., 0., 1. ]))
5、softsign函数,表达式为:x / (abs(x) + 1)
使用方式:print(sess.run(tf.nn.softsign([-1., 0., 1.]))
6、softplus激励函数是Relu激励函数的平滑版,表达式为:log(exp(x) + 1)
使用方式如下:print(sess.run(tf.nn.softplus([-1., 0., 1. ]))
7、ELU激励函数(Exponential Linear Unit, ELU),表达式为(exp(x) + 1) if x < 0 else x
使用方法:print(sess.run(tf.nn.elu([-1., 0., -1.]))