激活函數匯總(附TensorFlow實現)


李宏毅老師的課件:

http://speech.ee.ntu.edu.tw/~tlkagk/courses/MLDS_2018/Lecture/ForDeep.pdf

B站的課件講解:

https://www.bilibili.com/video/av9770302/?p=11

大部分內容轉載於用戶SpareNoEfforts 

https://www.jianshu.com/p/d216645251ce

真的需要認真學習相關內容的可以去上面的幾個網址,自行選擇學習。對於不太願意看很長時間的同學,我在這里用最簡短的話來闡述。

(sigmoid、tanh和maxout這里就不介紹了)

1. Relu激活函數

 

上述的relu是使用最多的一類激活函數了,也就是將傳進來的值限制在一個范圍。(x小於0即為0,x大於0即y=x計算)

2.Relu變形體:Leaky ReluParametric Relu函數

 

性質一樣,參考上面1。

3.轉載博主還介紹了個Randomized ReLU函數

training:α的值每一次都不一樣。

testing:α的值fix。

4.ELU和SELU函數

 

selu論文地址:https://arxiv.org/abs/1706.02515

為什么單獨貼出來呢,因為這篇作者的推導過程在論文中寫了97頁,

 

相信大家一下就可以看懂,elu函數也就是將小於0的部分做個處理y=α(e^x-1),大於0部分沒有做任何改變。而selu函數就是在elu基礎上將大於0部分變為了y=λx,加了一個斜率,而這個斜率的值大家可以注意到是大於0的,所以input的值是會被放大的,其中推導過程省去,若是有需要可以參考課件和(https://www.jianshu.com/p/d216645251ce)其中推導內容。

5.GELU

6.SWITH

財大氣粗谷歌大腦在selu出了不久就提出了swish激活函數方法,秒殺所有激活函數。

論文地址:https://arxiv.org/abs/1710.05941

論文中貼出的計算公式為:f(x) = x · sigmoid(βx)

論文中提到的TensorFlow中也有自帶的tf.nn.swith(x),但是我發這篇文章之前找了,沒有,根本沒有。所以只能使用論文中使用的方法,x * tf.sigmoid(beta * x),當然一般beta為1,所以直接x * tf.sigmoid(x)即可。

貼出來論文中的結果:

        

以上結果貼給能看懂得人,不懂得沒有關系,我幫你說。

就是說swish的方法要強過其他所有的方法,感覺自己在說廢話。其中注意到使用selu和gelu的結果會比較低,甚至比relu的結果還低,這真的很谷歌大腦。

 

附:

本人的建議是自己去嘗試一下,各個方法的實現也不麻煩。接下來我就把基於TensorFlow的方法貼出來,以供參考:

relu函數:tf.nn.relu(features, name=None)

leakyrelu函數:tf.nn.leaky_relu(features, alpha=0.2, name=None)

sigmoid函數:tf.sigmoid( features, name=None )

elu函數:tf.nn.elu( features, name=None )

selu函數:tf.nn.selu(features, name=None) 或者

1 def selu(x):
2     with ops.name_scope('elu') as scope:
3         alpha = 1.6732632423543772848170429916717
4         scale = 1.0507009873554804934193349852946
5         return scale*tf.where(x>=0.0, x, alpha*tf.nn.elu(x))

 swish函數:tf.nn.swish(x)或者input=x * tf.sigmoid(beta * x) //beta一般為1

怎么選擇激活函數呢?

(轉載於明也無涯:https://www.cnblogs.com/makefile/p/activation-function.html

 

  • 首先嘗試ReLU,速度快,但要注意訓練的狀態.

  • 如果ReLU效果欠佳,嘗試Leaky ReLU或Maxout等變種。

  • 嘗試tanh正切函數(以零點為中心,零點處梯度為1)

  • sigmoid/tanh在RNN(LSTM、注意力機制等)結構中有所應用,作為門控或者概率值.

  • 在淺層神經網絡中,如不超過4層的,可選擇使用多種激勵函數,沒有太大的影響。

只有在實踐中才可以找到最適合自己的激活函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM