【TensorFlow学习笔记(二)】常用方法:激活函数

  • 更新时间:2019-06-07

激活函数

tf.nn.relu()
ReLU函数,修正线性单元,在卷积神经网络中应用广泛,定义如下:
(1)ReLU(x)=max(0,x)ReLU(x)=max(0,x) \tag{1}
ReLU函数具有如下性质:
优点
(1)计算高效:采用ReLU函数的神经元只需要进行加、乘和比较的操作
(2)单侧抑制、宽兴奋边界:ReLU的输出可以很大,也可以为零
(3)稀疏性:对于小于0的输入,ReLU函数返回0
缺点
(1)输出非零中心化:这导致经过ReLU后,下一层的网络会引入偏置偏移,影响梯度下降的效率。
(2)容易“死亡”:如果某一层中的某个神经元在训练数据上的输出都不能激活,那么这个神经元的参数的梯度一直都会是0,在以后的训练中都不会被激活。
tf.nn.sigmoid()
sigmoid函数是一个“S”型函数,为两端饱和函数。定义如下:
(2)σ(x)=11+exp(x)\sigma(x)=\frac{1}{1+exp(-x)} \tag{2}
sigmoid函数是一种挤压函数,将输入压缩在(0,1)区间内,并且在定义域上面连续可导,其导数如下:
(3)σ(x)=σ(x)(1σ(x))\sigma'(x)=\sigma(x)(1-\sigma(x)) \tag{3}
sigmoid函数在深层网络中容易发生梯度弥散,这是由于无论输入数值多大,其输出都小于1,这样多次乘积后,梯度会越来越小。
tf.nn.tanh()
tanh函数也是一种“S”型函数,其值域区间为[-1, 1],定义为:
(4)tanh(x)=exp(x)exp(x)exp(x)+exp(x)tanh(x)=\frac{exp(x)-exp(-x)}{exp(x)+exp(-x)} \tag{4}
tanh函数与sigmoid函数之间可以相互转化:
(5)tanh(x)=exexex+ex=1e2x1+e2x=21e2x1=2σ(2x)1tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}=\frac{1-e^{-2x}}{1+e^{-2x}}=\frac{2}{1-e^{-2x}}-1=2\sigma(2x)-1 \tag{5}
与sigmoid相似,tanh函数也在定义域上面连续可导,导数如下:
(6)tanh(x)=1tanh2(x)=4σ(2x)(1σ(2x))tanh'(x)=1-tanh^2(x)=4\sigma(2x)(1-\sigma(2x)) \tag{6}
tf.nn.elu()
ELU指数线性单元,是一类近似的零中心化的非线性函数,定义为:
(7)ELU(x)=max(0,x)+min(0,γ(exp(x)1))ELU(x)=max(0,x)+min(0,\gamma(exp(x)-1)) \tag{7}
其中,γ>=0\gamma>=0 是一个超参数。
tf.nn.biaes_add()
tf.nn.crelu()
tf.nn.leaky_relu(features, alpha=0.2, name=None)
LeakyReLU在输入x<0时,保持一个很小的梯度,这样在参数更新时,不会存在死亡问题。定义如下:
(8)LeakyReLU(x)=max(0,x)+αmin(0,x)LeakyReLU(x)=max(0,x)+\alpha min(0,x) \tag{8}
其中α\alpha 是一个很小的常数,比如0.01,当α&lt;1\alpha&lt;1 时,函数也可以写成:
(9)LeakyReLU(x)=max(x,αx)LeakyReLU(x)=max(x, \alpha x) \tag{9}
tf.nn.relu6(features, name=None)
tf.nn.softplus()
Softplus函数是ReLU函数的平滑版本,定义为:
(10)Softplus(x)=log(1+exp(x))Softplus(x)=log(1+exp(x)) \tag{10}
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章