一 主要作用
啟用函式的主要作用就是加入非線性因素,以解決線性模型表達能力不足的缺陷,在整個神經網路起到至關重要的作用。
在神經網路中常用的啟用函式有sigmoid、tanh和relu等,下面逐一介紹。
二 sigmod函式
1 函式介紹
sigmoid是常用的非線性的啟用函式,數學公式如下:
2 函式曲線
sigmoid函式曲線如下圖,其中x可以是負無窮到正無窮,但是對應的y卻只有0~1的範圍,所以,經過sigmoid函式輸出的都會落到0~1的區間,即sigmod函式能夠把輸入的值「壓縮」到0~1之間。
3 在tensorflow中對應的函式
在tensorflow中對應的函式為:
tf.nn.sigmoid(x,name=none)
從影象上看,隨著x趨近正負無窮大,y對應的值越來越接近1或-1,這種情況叫做飽和。處於飽和態的啟用函式意味著,當x=1000和x=100時的反映都是一樣的。
所以,為了能有效使用sigmod函式,其極限只能在-6~6之間,而在-3~3之間應該會有比較好的效果。
三 tanh函式
1 函式介紹
tanh函式可以說是sigmoid函式的值域公升級版,由sigmoid函式的0~1之間公升級到-1~1.但是tanh函式也不能完全替代sigmoid函式,在某些輸出需要大於0的情況下,還是要用sigmoid函式。
tanh函式也是常用的非線性啟用函式,其數學形式如下:
tanh(x)=2sigmoid(2x)−1
2 函式曲線
tanh函式曲線如下圖,其x取值也是從負無窮到正無窮,對應的y值變成-1到1之間,相對於sigmoid函式有更廣的值域。
3 在tensorflow中對應的函式
在tensorflow中對應的函式
tf.nn.tanh(x,name=none)
顯而易見,tanh函式跟sigmoid函式有一樣的缺陷,也是飽和問題,所以在使用tanh函式時,要注意輸入值的絕對值不能過大,否則模型無法訓練。
四 relu函式
1 函式介紹
更為常用的啟用函式(也稱為rectifier)。其數學公式如下:
f(x)=max(0,x)
該公式非常簡單,大於0的留下,否則一律為0,具體影象如下圖
relu函式應用的廣泛性與它的優勢是分不開的,這種對正向訊號的重視,忽略了負向訊號的特性,與我們人類神經細胞對訊號反映及其相似。所以在神經網路中取得了很好的擬合效果。
另外由於relu函式運算簡單,大大地提公升了機器的執行效率,也是relu函式乙個很大的優點。
與relu函式類似的還有softplus函式。
公式介紹:
兩者曲線比較如下:
雖然relu函式在訊號響應上有很多優勢,但這僅僅是在正向傳播方面。由於其對負值的全部捨棄,因此很容易使模型輸出全零從而無法再進行訓練。例如,隨機初始化的w加入值中有個負值,其對應的正值輸入值特徵也被全部遮蔽了,同理,對應負值輸入值反而被啟用了。這顯然不是我們想要的結果。於是在relu的基礎上又演化出了些變種函式。
為max中的x加了乙個高斯分布的雜訊。
公式如下:
leak relus
在relu基礎上,保留一部分負值,讓x為負值時乘0.01,即leak relus對負訊號不是一味地拒絕,而是縮小。
數學公式如下:
再進一步讓這個0.01作為引數可調,於是,當x小於0時,乘以a,a小於等於1.其數學形式
f(x)=max(x,ax)
當x小於0時,做更複雜的變化
公式如下:
elus函式啟用函式與relu函式一樣都是不帶引數的,而且收斂速度比reul函式要快。
elus函式,不使用批處理比使用批處理能夠獲得更好的效果。
elus函式,不使用批處理的效果比reul函式加批處理效果更好。
2 tensorflow中對應的函式
在tensorflow中,關於reul函式的實現,有以下兩個對應的函式
tf.nn.relu(features,name=none):一般reul函式,即max(features,0)
tf.nn.relu6(features,name=none):是以6為閾值的reul函式,即min(max(features,0),6)
在tensorflow中,softplus函式對應的函式如下:
tn.nn.softplus(features,name=none)
在tensorflow中,elus函式對應的函式如下:
tf.nn.elu(features,name=none)
在tensorflow中,leaky rulus公式沒有專門的函式,不過可以利用現有的函式組成而得到
tf.maximum(x,leak*x,name=name) #leak為傳入的引數,可以設為0.01等。
五 swish
swish函式是谷歌公司發現的乙個效果更優於relu的啟用函式。經過測試,在保持所有的模型引數不變的情況下,只是把原來模型中relu啟用函式修改為swish函式,模型的準確率均有上公升。
公式如下:
f(x)=x * sigmod(x),
變形swish-b啟用函式的公式則為f(x)=x * sigmod(b * x)
其中b為x的縮放引數,一般情況取預設值1即可.
在tensorflow的低版本中,沒有單獨的swish函式,可以手動封裝,**如下:
六 小結
神經網路中,運算特徵是不斷進行迴圈計算,所以在每次迴圈過程中,每個神經元的值也是不斷變化的,這就導致了tanh函式在特徵相差明顯時候效果會很好,在迴圈過程中其會不斷擴大特徵效果並顯示出來。
但有時候當計算的特徵間的相差雖比較複雜卻沒有明顯區別,或是特徵間的相差不是特別大時,就需要更細微的分類判斷,這時sigmoid函式的效果會更好一些。
後來出現的relu啟用函式的優勢是,經過其處理後的資料有更好的稀疏性。即,將資料轉化為只有最大數值,其他都為0.這種變換可以近似程度地保留資料特徵,用大多數元素為0的稀疏矩陣來實現。
實際上,神經網路在不斷反覆計算中,就變成了relu函式在不斷嘗試如何用乙個大多數0的矩陣來表達資料特徵。以稀疏性資料來表達原有資料特性的方法,使得神經網路在迭代運算中能夠取得又快又好的效果。所有目前大多數用max(0,x)來代替sigmoid函式。
七 參考
啟用函式總結
1.sigmod函式 函式公式和圖表如下圖 在sigmod函式中我們可以看到,其輸出是在 0,1 這個開區間內,這點很有意思,可以聯想到概率,但是嚴格意義上講,不要當成概率。sigmod函式曾經是比較流行的,它可以想象成乙個神經元的放電率,在中間斜率比較大的地方是神經元的敏感區,在兩邊斜率很平緩的地...
啟用函式總結
cnn rnn各種模型啟用函式總結 sigmoid函式是早期非常經典的啟用函式,輸出值在 0,1 之間,當輸入值為非常大負數時,值為0,當輸入值非常大正數時,值為1。sigmoid非常經典,但是現在它以不太受歡迎,原因是它存在乙個幾個比較大的缺陷,後面做詳細討論。tanh函式是sigmoid函式的一...
啟用函式總結
在神經網路中,啟用函式的作用是能夠給神經網路加入一些非線性因素,使得神經網路可以更好地解決較為複雜的問題。先舉乙個簡單的例子,在做二分類時,我們的 值y wtx b widehat w x b y wtx b,其中w和b為引數,我們希望得到乙個範圍是 0,1 的概率值,而如果直接使用上式進行計算會導...