神經網絡與激活函數
神經網絡從數學上來說,就是用來擬合一個函數。把數據扔進去,得到一個預測結果,以此來解決分類和回歸等問題。但是針對不同的問題,需要擬合不同的函數,包括線性函數和非線性函數。神經網絡中常常會見到各種激活函數,當需要擬合非線性函數時就需要激活函數登場了。
對於每個神經元來說,都是先進行線性變換,再將線性變換的結果通過激活函數來進行激活。注意,這里的有效激活函數必須是非線性函數。如果采用線性激活函數,則在前向傳播的過程中,相當於一直做線性變換,這樣的話,無論多少隱藏層,都是線性變換,也就是隱藏層在這里沒有發生作用,仍然是一個單層的感知機。當然對於最后一層的輸出層則沒有這個要求,可以選擇線性或者非線性的激活函數。
常用激活函數總結
這里主要介紹非線性激活函數,線性的激活函數也就是恆等函數,在坐標軸表示為一條直線,通常使用較少。常見的非線性激活函數通常可以分為兩類,一種是輸入單個變量輸出單個變量,如sigmoid函數,Relu函數;還有一種是輸入多個變量輸出多個變量,如Softmax函數,Maxout函數。
1.Sigmoid函數
Sigmoid函數,也叫做S函數將值限定在 \((0,1)\) 之間,能夠很好的作為概率來解釋算法得到的結果。目前在計算機視覺中不常用,只適用於二分類等問題。
缺點是當輸入較大的正數或者負數時,導數就會變為0,這時候采用梯度下降方法就會下降很慢,使得神經網絡不能正常更新。同時不是以0為對稱,容易在更新時產生 zigzag 路徑。
函數定義為
其求導結果為
2.tanh函數
thah函數能夠將值限定在 \((-1,1)\) 之間,比sigmoid函數更為常用。但是也存在與sigmoid函數一樣的缺點,當在z值較大或者較小時,斜率接近0,這時優化速度很慢,這種情況下可以考慮采用ReLU函數。
函數定義為
求導結果為
3. ReLU函數及其變體
ReLU函數,也叫做線性整流函數,能夠解決在值較大時產生的梯度為0的問題,能夠正常的更新,並且沒有復雜的指數計算,使得性能較好,收斂較快,是目前在視覺領域最為常見的激活函數。
ReLU函數為
其導數為
LeakyReLU是為了防止ReLU函數在負數時,斜率為0的情況,但在實際情況中,很難到負數那邊去,所以基本采用ReLU就足夠了,不過也建議采用交叉驗證來試試這個函數。
Leaky ReLU為
其導數為
此外,還有幾種激活函數由算法來學習負數區域的學習率,如PReLU函數和ELU函數,原理與ReLU函數類似。
4.Softmax函數
softmax函數與sigmoid函數很相似,也是將值變換到 \((0,1)\) 之間。但是可以針對多個類別,預測出每個類別的歸一化概率,所以通常softmax函數是在分類器的輸出層使用。
其函數表達式為
如何選擇激活函數
選擇激活函數沒有固定的規則,每個激活函數適用於不同的應用,比如分類和回歸,多分類和二分類任務。但根據每個激活函數的性質,也存在一些基本的規律
- 對於二分類問題,在輸出層可以選擇 sigmoid 函數。
- 對於多分類問題,在輸出層可以選擇 softmax 函數。
- 由於梯度消失問題,盡量sigmoid函數和tanh的使用。
- tanh函數由於以0為中心,通常性能會比sigmoid函數好。
- ReLU函數是一個通用的函數,一般在隱藏層都可以考慮使用。
- 有時候要適當對現有的激活函數稍作修改,以及考慮使用新發現的激活函數。
歡迎大家關注公眾號“計算機視覺與機器學習”