作者:SAGAR SHARMA編譯:ronghuaiyang
導讀
激活函數是神經網絡中必不可少的組成部分,這篇文章給大家介紹了各種各樣的激活函數,一起來看看吧。
什麼是激活函數?
就是在神經網絡的輸出後面加的一個東西(節點)。也就是轉換函數,也可以加在兩層神經網絡之間。
我們為什麼要在神經網絡中使用激活函數?
用來決定神經網絡的輸出,就像是和否一樣,將結果映射到0到1或者-1到1之間(根據不同的函數)。
激活函數基本上分為兩種類型:
- 線性激活函數
- 非線性激活函數
供參考: 下面有速查表
線性或者說恆等激活函數
你可以看到函數是一條直線,或者說線性的。也就是說,函數的輸出不會限制在任何的範圍以內。
線性激活函數
方程: f(x) = x
範圍:(負無窮到正無窮)
它對神經網絡的複雜性和常用數據的多種多樣的參數沒什麼幫助。
非線性激活函數
非線性激活函數是最常用的激活函數,非線性的圖看起來像下面這樣:
非線性激活函數
它讓模型更加容易泛化和適應不同的數據,區別不同的輸出。
對於非線性函數,需要理解的主要的術語:
導數或者微分:在x軸上的變化導致在y軸上的變化,也就是常說的斜率。單調函數:函數要麼是一直變大的,要麼是一直變小的。
非線性激活函數的類型主要根據它們的範圍或者曲線的類型來劃分:
1. Sigmoid或者Logistic激活函數
Sigmoid函數曲線就像個S型。
Sigmoid函數
我們使用sigmoid函數主要是因為它的輸出的範圍是0到1。所以,它常常用在那些需要預測機率的模型上面,因為機率的範圍就是0到1,sigmoid正好符合。
這個函數可微的,意思是,sigmoid曲線上的任意兩點都可以找到一個斜率。
這個函數是單調的,不過函數的導數不是單調的。
sigmoid函數可能會造成神經網絡訓練的時候卡住。
softmax函數是更加一般性的logistic激活函數,用在多類分類上。
2. Tanh激活函數
tanh和logistic sigmoid差不多,但是更好一點。tanh的函數取值範圍是-1到1,tanh也是S型的。
tanh vs Logistic Sigmoid
優點是,負的輸入會映射成負值,0輸入會被映射成0附近的值。
這個函數可微的。
這個函數是單調的,不過函數的導數不是單調的。
tanh函數主要用在區分兩個類別的時候。
tanh和logistic sigmoid激活函數都是用在前向網絡中。
3. ReLU 激活函數
ReLU是目前世界上用的最多的激活函數,幾乎所有的深度學習和卷積神經網絡中都在使用它。
ReLU vs Logistic Sigmoid
你可以看到,ReLU是半整流的,當z小於0時,f(z)是0,當z大於等於0時,f(z)等於z。
取值範圍: [ 0,無窮)
這個函數和它的導數都是單調的。
但問題是,所有的負值都會變為零,這降低了模型擬合數據的能力。這意味著任何給ReLU激活函數的負值的輸入都會在圖中立即轉換為零,這樣沒有合理的映射負值反過來又會影響結果圖。
4. Leaky ReLU
它嘗試解決ReLU的負值映射為0的問題。
你看到Leak了嗎?
leak有助於增加ReLU函數的取值範圍,a的值是0.01或者類似的比較小的值。
當a不是0.01時,叫做Randomized ReLU。
所以,Leaky ReLU的取值範圍是(負無窮到正無窮)。
Leaky 和 Randomized ReLU函數及其導數都是單調的。
為什麼需要用到導數/微分?
當對曲線進行更新時,需要知道更新的方向和大小,這個需要依賴斜率。這就是為什麼在幾乎所有的機器學習和深度學習中我們都需要使用微分。
激活函數速查表
激活函數的導數
原文連結:https://towardsdatascience.com/activation-functions-neural-networks-1cbd9f8d91d6
更多文章,請關注微信公眾號:AI公園