1. 程式人生 > >啟用函式(ReLu LReLU PReLU CReLU ELU SELU)

啟用函式(ReLu LReLU PReLU CReLU ELU SELU)

ReLU

這裡寫圖片描述 
tensorflow中:tf.nn.relu(features, name=None)

LReLU

(Leaky-ReLU) 
這裡寫圖片描述 
其中aiai是固定的。ii表示不同的通道對應不同的aiai
tensorflow中:tf.nn.leaky_relu(features, alpha=0.2, name=None)

PReLU

這裡寫圖片描述 
其中aiai是可以學習的的。如果ai=0ai=0,那麼 PReLU 退化為ReLU;如果 aiai是一個很小的固定值(如ai=0.01ai=0.01),則 PReLU 退化為 Leaky ReLU(LReLU)。 
PReLU 只增加了極少量的引數,也就意味著網路的計算量以及過擬合的危險性都只增加了一點點。特別的,當不同 channels 使用相同的a

iai時,引數就更少了。BP 更新aiai時,採用的是帶動量的更新方式(momentum)。 
tensorflow中:沒找到啊!

CReLU

(Concatenated Rectified Linear Units) 
dd 
tensorflow中:tf.nn.crelu(features, name=None)

ELU

這裡寫圖片描述 
這裡寫圖片描述 
其中α是一個可調整的引數,它控制著ELU負值部分在何時飽和。 
右側線性部分使得ELU能夠緩解梯度消失,而左側軟飽能夠讓ELU對輸入變化或噪聲更魯棒。ELU的輸出均值接近於零,所以收斂速度更快 
tensorflow中:tf.nn.elu(features, name=None)

SELU

這裡寫圖片描述 
經過該啟用函式後使得樣本分佈自動歸一化到0均值和單位方差(自歸一化,保證訓練過程中梯度不會爆炸或消失,效果比Batch Normalization 要好) 
其實就是ELU乘了個lambda,關鍵在於這個lambda是大於1的。以前relu,prelu,elu這些啟用函式,都是在負半軸坡度平緩,這樣在activation的方差過大的時候可以讓它減小,防止了梯度爆炸,但是正半軸坡度簡單的設成了1。而selu的正半軸大於1,在方差過小的的時候可以讓它增大,同時防止了梯度消失。這樣啟用函式就有一個不動點,網路深了以後每一層的輸出都是均值為0方差為1。

tensorflow中:tf.nn.selu(features, name=None)

這裡寫圖片描述