本文主要是回答激活函數(shù)的使用
我們認識的激活函數(shù)中sigmoid、ReLU等,今天就是要講解一下這些函數(shù)的一些性質(zhì)
激活函數(shù)通常有一些性質(zhì):
非線性:當激活函數(shù)是線性的時候,一個兩層的神經(jīng)網(wǎng)絡(luò)就可以基本逼近所有的函數(shù),但是,如果激活函數(shù)是恒等激活函數(shù)的時候,就不滿足這個性質(zhì)了,而且如果MLP使用的是恒等激活函數(shù),那么其實整個網(wǎng)絡(luò)跟單層神經(jīng)網(wǎng)絡(luò)是等價的
可微性:當優(yōu)化方法是基于梯度的時候,這個性質(zhì)是必須的
單調(diào)性:當激活函數(shù)是單調(diào)的時候,這個性質(zhì)是必須的
f(x)≈x:當激活函數(shù)滿足這個性質(zhì)的時候,如果參數(shù)的初始化是random的很小的值,那么神經(jīng)網(wǎng)絡(luò)的訓練將會很高效;如果不滿足這個性質(zhì),那么就需要很用心的去設(shè)置初始值
輸出值的范圍:當激活函數(shù)輸出值是有限的時候,基于梯度的優(yōu)化方法會更加穩(wěn)定,因為特征的表示,當激活函數(shù)的輸出是無限的時候,模型訓練會更加的高效,不過在這種情況很小,一般需要一個更小的學習率
Sigmoid函數(shù)
Sigmoid是常用的激活函數(shù),它的數(shù)學形式是這樣,
當如果是非常大的負數(shù)或者正數(shù)的時候,梯度非常小,接近為0,如果你的初始值是很大的話,大部分神經(jīng)元都出在飽和的情況,會導致很難學習
還有就是Sigmoid的輸出,不是均值為0為的平均數(shù),如果數(shù)據(jù)進入神經(jīng)元的時候是正的(e.g.x>0elementwise inf=wTx+b),那么w計算出的梯度也會始終都是正的。
當然了,如果你是按batch去訓練,那么那個batch可能得到不同的信號,所以這個問題還是可以緩解一下的。因此,非0均值這個問題雖然會產(chǎn)生一些不好的影響
tanh
和Sigmoid函數(shù)很像,不同的是均值為0,實際上是Sigmoid的變形
數(shù)學形式
與Sigmoid不同的是,tanh是均值為0
ReLU
今年來,ReLU貌似用的很多
數(shù)學形式
ReLU的優(yōu)點
相比較其他的,ReLU的收斂速度會比其他的方法收斂速度快的多
ReLU只需要一個閾值就可以得到激活值,而不用去算一大堆復雜的運算
也有一個很不好的缺點:就是當非常大的梯度流過一個 ReLU 神經(jīng)元,更新過參數(shù)之后,這個神經(jīng)元再也不會對任何數(shù)據(jù)有激活現(xiàn)象了,所以我們在訓練的時候都需要設(shè)置一個比較合適的較小的學習率
Leaky-ReLU、P-ReLU、R-ReLU
數(shù)學形式
f(x)=x,(x>=0)
這里的α是一個很小的常數(shù)。這樣,即修正了數(shù)據(jù)分布,又保留了一些負軸的值,使得負軸信息不會全部丟失
自己在寫神經(jīng)網(wǎng)絡(luò)算法的時候還沒嘗試過這個激活函數(shù),有興趣的同學可以試試效果
對于 Leaky ReLU 中的α,通常都是通過先驗知識人工賦值的。
然而可以觀察到,損失函數(shù)對α的導數(shù)我們是可以求得的,可不可以將它作為一個參數(shù)進行訓練呢?
不僅可以訓練,而且效果更好。
如何去選擇
目前業(yè)界人都比較流行ReLU,
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4733瀏覽量
100415 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4277瀏覽量
62323
原文標題:BP神經(jīng)網(wǎng)絡(luò)常用激活函數(shù)
文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論