【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

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