CNN學習筆記:激活函數
激活函數
激活函數又稱非線性映射,顧名思義,激活函數的引入是為了增加整個網絡的表達能力(即非線性)。若干線性操作層的堆疊仍然只能起到線性映射的作用,無法形成復雜的函數。常用的函數有sigmoid、雙曲正切、線性修正單元函數等等。 使用一個神經網絡時,需要決定使用哪種激活函數用隱藏層上,哪種用在輸出節點上。
比如,在神經網路的前向傳播中,
這兩步會使用到sigmoid函數。sigmoid函數在這里被稱為激活函數。
sigmoid函數
之前在線性回歸中,我們用過這個函數,使我們的輸出值平滑地處於0~1之間。

觀察圖形我們發現,當大於5或者小於-5的值無論多大或多小都會被壓縮到1或0。如此便帶來一個嚴重問題,即梯度的“飽和效應”。大於5或者小於-5部分的梯度接近0,這回導致在誤差反向傳播過程中導數處於該區域的誤差就很難甚至根本無法傳遞至前層,進而導致整個網絡無法訓練(導數為0將無法跟新網絡參數)。
此外,在參數初始化的時候還需要特別注意,要避免初始化參數直接將輸出值帶入這一區域,比如初始化參數過大,將直接引發梯度飽和效應而無法訓練。
說明:除非輸出層是一個二分類問題否則基本不會用它。
雙曲正切函數
tanh函數是sigmoid的向下平移和伸縮后的結果。對它進行了變形后,穿過了原點,並且值域介於+1和-1之間。

結果表明,如果在隱藏層上使用函數tanh效果總是優於sigmoid函數。因為函數值域在-1和+1的激活函數,其均值是更接近零均值的。在訓練一個算法模型時,如果使用tanh函數代替sigmoid函數中心化數據,使得數據的平均值更接近0而不是0.5.
說明:tanh是非常優秀的,幾乎適合所有場合
修正線性單元的函數(ReLu)
sigmoid函數與雙曲正切函數都有一個共同的問題,在Z特別大或者特別小的情況下,導致梯度或者函數的斜率變得特別小,最后就會接近於0,導致降低梯度下降的速度。
線性整流函數(Rectified Linear Unit, ReLU),又稱修正線性單元, 是一種人工神經網絡中常用的激活函數(activation function),通常指代以斜坡函數及其變種為代表的非線性函數。

Relu作為神經元的激活函數,定義了該神經元在線性變換
之后的非線性輸出結果。換言之,對於進入神經元的來自上一層神經網絡的輸入向量
,使用線性整流激活函數的神經元會輸出
至下一層神經元或作為整個神經網絡的輸出(取決現神經元在網絡結構中所處位置)。
只要是WTX+b正值的情況下,導數恆等於1,當WTX+b是負值的時候,導數恆等於0。從實際上來說,當使用的導數時,WTX+b=0的導數是沒有定義的。
選擇激活函數的經驗法則:
如果輸出是0、1值(二分類問題),則輸出層選擇sigmoid函數,然后其它的所有單元都選擇Relu函數。
最常用的默認函數,,如果不確定用哪個激活函數,就使用ReLu或者Leaky ReLu
帶泄露線性整流函數(Leaky ReLU)
在輸入值 為負的時候,帶泄露線性整流函數(Leaky ReLU)的梯度為一個常數
,而不是0。在輸入值為正的時候,帶泄露線性整流函數和普通斜坡函數保持一致。

在深度學習中,如果設定
為一個可通過反向傳播算法(Backpropagation)學習的變量,那么帶泄露線性整流又被稱為參數線性整流(Parametric ReLU)
