標籤:

激活函數

激活函數(activation functions)又被稱為非線性體(nonlinearities),顧名思義就是專門用來給模型加入非線性因素的一種佐料。

線性方程的組合是有原罪的,無論怎麼組都仍然是線性的,無法用來擬合非線性問題。線性模型可以簡單解釋某些現實世界問題,但是又無法貼切準確全面地解釋。

深度網路中損失函數(loss function)的擬合就依賴於非線性模型。假如它簡單到線性模型就可以解決,也就沒必要花大代價用深度神經網路了。就好比兩組數據涇渭分明,劃條直線即可,不必繞來繞去反覆試錯優化圈定邊界。

最古老的激活函數是Sigmoid,區間映射到[0, 1],全程可導。如圖所示它的表達能力很好,忠實於原數據,如果表達對象涉及概率往往就只能用它。不過用它來模擬神經元的抑制態和激活態就不太貼切了。它不夠稀疏,沒有像生物神經元那樣過濾掉絕大多數雜訊信號。此外它的梯度在飽和區域過於平緩,稍微經過幾層拉伸梯度就消失了,收斂速度大大下降,訓練成本提高,擬合效果也會變差。

用ReLu激活的效果比Sigmoid好得多。ReLu函數非常簡單: y=max(0,x) 。它的優點一是激活態稀疏;二是梯度基本上是常數不會變化。它的缺點是很容易造成神經元寂滅,永無激活之日,可以用它的變種leaky relu和elu解決這個問題。此外它的輸出均值不為0,會導致網路均值偏移,elu則沒有這個問題。

總的來說ReLu和它的變種、改良是目前深度學習中除輸出層之外最常用最優秀的激活函數。

Sigmoid也並非一無是處,在BN(batch normalization)前提下是可以用的。BN可以讓網路不再對權重的scale敏感,從而使Sigmoid, Tanh這種飽和激活函數可以使用而不必擔心梯度消失。


推薦閱讀:

編碼:二進位的世界
[SoCC 14'] Tachyon: Reliable, Memory Speed Storage for Cluster Computing Frameworks
為什麼Intel CPU的Die越來越小了?
如何看待這篇關於人工智慧的譯文?

TAG:计算机科学 |