介紹幾種常用的神經網絡激活函數
1.sigmoid
sigmoid也被稱為S型函數,它可以將整個實數區間映射到(0,1)區間,因此經常被用來計算概率
缺點是即當輸入x趨向於無窮的時候,它的導數會趨於0,導致很容易產生梯度消失
log_sigmoid函數:對sigmoid函數求log,它將整個實數區間映射到了(負無窮,0)
2.tanh
tanh是雙曲正切函數,它將整個實數區間映射到了(-1,1),它的輸出是以0為中心,tanh的收斂速度比sigmoid要快。缺點是tanh也存在梯度消失的問題
3.relu
由於x>0時,relu函數的導數為1,所以relu函數能夠在x>0時保持梯度不斷衰減,從而緩解梯度消失的問題,還能加快收斂速度當x<0時,relu函數的導數為0,導致對應的權重無法更新,這樣的神經元被稱為"神經元死亡"。
在TensorFlow中還包括了relu函數的擴展函數如:relu6和crelu,除此之外還有leaky relu、PRelu、RRelu等。
relu6激活函數:定義min(max(features,0),6),也就是說它的取值區間被限定在了[0,6]之間。
crelu激活函數:定義為[relu(x),relu(-x)]相對於relu(x),crelu的輸出會增加一倍。
4.leak_relu
leak_relu激活函數會給x<0,一個斜率,而不是將所有x<0都輸出0,默認斜率是0.2,x>0的部分仍然輸出是x,即斜率為1,保持不變。
5.softplus
softplus函數可以看作是relu函數的平滑版本
6.dropout
以一個概率為keep_prob來決定神經元是否被抑制。如果被抑制,該神經元輸出為0,如果不被抑制則該神經元的輸出為輸入的1/keep_probbe倍,每個神經元是否會被抑制是相互獨立的。神經元是否被抑制還可以通過調節noise_shape來調節,當noise_shape[i] == shape(x)[i],x中的元素是相互獨立的。如果shape(x)=[k,l,m,n](k表示數據的個數,l表示數據的行數,m表示數據的列,n表示通道),當noise_shape=[k,1,1,n],表示數據的個數與通道是相互獨立的,但是與數據的行和列是有關聯的,即要麼都為0,要麼都為輸入的1/keep_prob倍。
閱讀更多 公子小悅 的文章