常見的激活函數:sigmoid,tanh,relu。
sigmoid是平滑(smoothened)的階梯函數(step function),可導(differentiable)。sigmoid可以將任何值轉換為0~1概率,用於二分類。細節可以 參考 。
公式:
導數:
導數2:
圖(紅色原函數,藍色導函數):
當使用sigmoid作為激活函數時,隨著神經網絡隱含層(hidden layer)層數的增加,訓練誤差反而加大。表現為:
這種現象就是梯度彌散(vanishing gradient)。而另壹種情況,梯度爆炸(exploding gradient),則是前面層的梯度,通過訓練變大,導致後面層的梯度,以指數級增大。
由於sigmoid的導數值小於1/4,x變化的速率要快於y變化的速率,隨著層數的增加,連續不斷執行sigmoid函數,就會導致,前面更新較大的幅度,後面更新較小的幅度,因此,網絡在學習過程中,更傾向於,更新後面(靠近輸出層)的參數,而不是前面的參數(靠近輸入層)。
sigmoid缺點:
參考1 、 參考2
tanh,即雙曲正切(hyperbolic tangent),類似於幅度增大sigmoid,將輸入值轉換為-1至1之間。tanh的導數取值範圍在0至1之間,優於sigmoid的0至1/4,在壹定程度上,減輕了梯度消失的問題。tanh的輸出和輸入能夠保持非線性單調上升和下降關系,符合BP(back propagation)網絡的梯度求解,容錯性好,有界。
公式:
導數:
圖(紅色原函數,藍色導函數):
sigmoid和tanh:
參考1 、 參考2 、 參考3
relu,即Rectified Linear Unit,整流線性單元,激活部分神經元,增加稀疏性,當x小於0時,輸出值為0,當x大於0時,輸出值為x.
公式:
圖:
導數:
圖:
relu對比於sigmoid:
relu的缺點:
在訓練的時候,ReLU單元比較脆弱並且可能“死掉”。舉例來說,當壹個很大的梯度,流過ReLU的神經元的時候,可能會導致梯度更新到壹種特別的狀態,在這種狀態下神經元將無法被其他任何數據點再次激活。如果這種情況發生,那麽從此所以流過這個神經元的梯度將都變成0。也就是說,這個ReLU單元在訓練中將不可逆轉的死亡,因為這導致了數據多樣化的丟失。
如果學習率設置得太高,可能會發現網絡中40%的神經元都會死掉(在整個訓練集中這些神經元都不會被激活)。通過合理設置學習率,這種情況的發生概率會降低。
在神經網絡中,隱含層的激活函數,最好選擇ReLU。
關於RNN中為什麽選擇tanh,而不是relu, 參考 。