激活函數種類
阿新 • • 發佈:2019-01-28
features 正數 就會 res bubuko 改進 特殊 速度 none
1.sigmod函數
\[ \sigma(x)=\frac{1}{1+e^{-x}} \]
sigmod函數的輸出值再(0,1)這個開區間中,經常被用來映射為概率值。
sigmod函數作為激活函數曾經比較流行。
缺陷
- 當輸入稍微遠離了坐標原點,函數的梯度就變得很小了,幾乎為零。當反向傳播經過了sigmod函數,這個鏈條上的微分就很小很小了,況且還可能經過很多個sigmod函數,最後會導致權重w對損失函數幾乎沒影響,這樣不利於權重的優化,這個問題叫做梯度飽和,也可以叫梯度彌散。
- 函數輸出不是以0為中心的,這樣會使權重更新效率降低
- sigmod函數要進行指數運算,這個對於計算機來說是比較慢的。
tf.sigmoid(x, name=None)
2.tanh函數
\[ 雙曲正弦函數=\tanh(x)=\frac{sinh(x)}{cosh(x)}=\frac{e^x-e^{-x}}{e^x+e^{-x}} \]
sigmod函數的輸出值在(-1,1)這個開區間中,而且整個函數是以0為中心的,這個特點比sigmod的好。
缺陷
- 當輸入稍微遠離了坐標原點,函數的梯度就變得很小了,幾乎為零。當反向傳播經過了sigmod函數,這個鏈條上的微分就很小很小了,況且還可能經過很多個sigmod函數,最後會導致權重w對損失函數幾乎沒影響,這樣不利於權重的優化,這個問題叫做梯度飽和,也可以叫梯度彌散。
- sigmod函數要進行指數運算,這個對於計算機來說是比較慢的。
一般二分類問題中,隱藏層用tanh函數,輸出層用sigmod函數
tf.tanh(x, name=None)
3.ReLU函數
\[ \sigma(x)=,max(0,x) \]
ReLU(Rectified Linear Unit)函數是目前比較火的一個激活函數
1.輸入為正數的時候,不存在梯度飽和問題。
2.不存在指數運算,計算速度要快很多
缺陷
- 當輸入是負數的時候,ReLU是完全不被激活的,這就表明一旦輸入到了負數,ReLU就會死掉
- ReLU函數也不是以0為中心的函數
tf.nn.relu(
features,
name=None
)
4.ELU函數
\[ f(x)=\begin{cases} x &x>0 \\ \alpha(e^x-1) &x<=0 \end{cases} \]
相比於ReLU函數,在輸入為負數的情況下,是有一定的輸出的,而且這部分輸出還具有一定的抗幹擾能力。這樣可以消除ReLU死掉的問題,不過還是有梯度飽和和指數運算的問題。
tf.nn.elu(features, name=None)
5.PReLU函數
\[ f(x)=max(ax,x) \]
PReLU也是針對ReLU的一個改進型,在負數區域內,PReLU有一個很小的斜率,這樣也可以避免ReLU死掉的問題。相比於ELU,PReLU在負數區域內是線性運算,斜率雖然小,但是不會趨於0,這算是一定的優勢吧。
我們看PReLU的公式,裏面的參數α一般是取0~1之間的數,而且一般還是比較小的,如零點零幾。當α=0.01時,我們叫PReLU為Leaky ReLU,算是PReLU的一種特殊情況吧。
激活函數種類