每個神經元都有一個激活函數,由這層神經元輸出給下層神經元的輸入,中間就會有個函數關係,將之做非線性轉換。
使用激活函數,可使上一層節點做非線性轉換,從而獲取充分的特徵組合,野使神經網路可以充分學習到更多;若只做最原始的線性轉換,那麼神經網路學習的就非常有限。
在神經網路加上激活函數後,可學習到非線性的曲線,來對非線性的數據加以處理。
圖片來源:https://codingnote.cc/zh-tw/p/176736/
早期研究,主要採用激活函數如sigmoid、tanh。近年大多用ReLU來做研究,以及由ReLU所改進的Leaky-ReLU、P-ReLU等等。
優點:其輸出範圍限於0~1之間,且為連續變數,便於求導,可用於輸出層。
缺點:可觀察上圖,其上下兩側趨近於平坦,對輸入有微小改變時,變得較不敏感,梯度趨近於0,權重不會更新,容易出現梯度消失的狀況。
又稱雙曲正切曲線,其取值為[-1,1],為sigmoid的變形。
圖片來源:https://codingnote.cc/zh-tw/p/176736/
相較Sigmoid,其中間值為0,會比Sigmoid更能提供給下一層神經元做學習。
線性整流函數,針對Sigmoid及Tanh的缺點做改善,是現代神經網路中最常用的激活函數。
圖片來源:https://codingnote.cc/zh-tw/p/176736/
計算簡單,在X>0的區段上,不會出現梯度消失的狀況,但若在X<0的區段上,直接無法更新,造成梯度為0的情況。
有這ReLU的優點,卻不會有dead ReLU問題,擬合能力強,但計算較為複雜,是原本參數的一倍。
在深度學習中,沒有哪個激活函數一定是最好的,建議可以多嘗試。
一般多使用ReLU做激活函數,當遇到梯度消失狀況發生時,可嘗試Leaky-ReLU及ELU看看。
參考資料: