- 更新时间:2019-06-07
激活函数
tf.nn.relu()
ReLU函数,修正线性单元,在卷积神经网络中应用广泛,定义如下:
ReLU函数具有如下性质:
优点:
(1)计算高效:采用ReLU函数的神经元只需要进行加、乘和比较的操作
(2)单侧抑制、宽兴奋边界:ReLU的输出可以很大,也可以为零
(3)稀疏性:对于小于0的输入,ReLU函数返回0
缺点
(1)输出非零中心化:这导致经过ReLU后,下一层的网络会引入偏置偏移,影响梯度下降的效率。
(2)容易“死亡”:如果某一层中的某个神经元在训练数据上的输出都不能激活,那么这个神经元的参数的梯度一直都会是0,在以后的训练中都不会被激活。
tf.nn.sigmoid()
sigmoid函数是一个“S”型函数,为两端饱和函数。定义如下:
sigmoid函数是一种挤压函数,将输入压缩在(0,1)区间内,并且在定义域上面连续可导,其导数如下:
sigmoid函数在深层网络中容易发生梯度弥散,这是由于无论输入数值多大,其输出都小于1,这样多次乘积后,梯度会越来越小。
tf.nn.tanh()
tanh函数也是一种“S”型函数,其值域区间为[-1, 1],定义为:
tanh函数与sigmoid函数之间可以相互转化:
与sigmoid相似,tanh函数也在定义域上面连续可导,导数如下:
tf.nn.elu()
ELU指数线性单元,是一类近似的零中心化的非线性函数,定义为:
其中, 是一个超参数。
tf.nn.biaes_add()
tf.nn.crelu()
tf.nn.leaky_relu(features, alpha=0.2, name=None)
LeakyReLU在输入x<0时,保持一个很小的梯度,这样在参数更新时,不会存在死亡问题。定义如下:
其中 是一个很小的常数,比如0.01,当 时,函数也可以写成:
tf.nn.relu6(features, name=None)
tf.nn.softplus()
Softplus函数是ReLU函数的平滑版本,定义为:
Softplus函数的导数刚好是sigmoid函数,也具有单侧抑制、宽兴奋边界的特点,但是不具有稀疏激活性。
tf.nn.softsign()
tf.nn.dropout()
dropout函数用于使神经元随机失活,从而缓解过拟合问题。
注:激活函数定义在“/tensorflow/python/ops/nn.py”中。
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/nn_ops.py