http://c.biancheng.net/view/1911.html
每個神經元都必須有激活函數。它們為神經元提供了模擬復雜非線性數據集所必需的非線性特性。該函數取所有輸入的加權和,進而生成一個輸出信號。你可以把它看作輸入和輸出之間的轉換。使用適當的激活函數,可以將輸出值限定在一個定義的范圍內。
如果 xi 是第 j 個輸入,Wj 是連接第 j 個輸入到神經元的權重,b 是神經元的偏置,神經元的輸出(在生物學術語中,神經元的激活)由激活函數決定,並且在數學上表示如下:

這里,g 表示激活函數。激活函數的參數 ΣWjxj+b 被稱為神經元的活動。
這里對給定輸入刺激的反應是由神經元的激活函數決定的。有時回答是二元的(是或不是)。例如,當有人開玩笑的時候...要么不笑。在其他時候,反應似乎是線性的,例如,由於疼痛而哭泣。有時,答復似乎是在一個范圍內。
模仿類似的行為,人造神經元使用許多不同的激活函數。在這里,你將學習如何定義和使用 TensorFlow 中的一些常用激活函數。
下面認識幾種常見的激活函數:
- 閾值激活函數:這是最簡單的激活函數。在這里,如果神經元的激活值大於零,那么神經元就會被激活;否則,它還是處於抑制狀態。下面繪制閾值激活函數的圖,隨着神經元的激活值的改變在 TensorFlow 中實現閾值激活函數:
- Sigmoid 激活函數:在這種情況下,神經元的輸出由函數 g(x)=1/(1+exp(-x)) 確定。在 TensorFlow 中,方法是 tf.sigmoid,它提供了 Sigmoid 激活函數。這個函數的范圍在 0 到 1 之間:
在形狀上,它看起來像字母 S,因此名字叫 Sigmoid:
-
雙曲正切激活函數:在數學上,它表示為 (1-exp(-2x)/(1+exp(-2x)))。在形狀上,它類似於 Sigmoid 函數,但是它的中心位置是 0,其范圍是從 -1 到 1。TensorFlow 有一個內置函數 tf.tanh,用來實現雙曲正切激活函數:以下是上述代碼的輸出:
- 線性激活函數:在這種情況下,神經元的輸出與神經元的輸入值相同。這個函數的任何一邊都不受限制:
-
整流線性單元(ReLU)激活函數也被內置在 TensorFlow 庫中。這個激活函數類似於線性激活函數,但有一個大的改變:對於負的輸入值,神經元不會激活(輸出為零),對於正的輸入值,神經元的輸出與輸入值相同:以下是 ReLU 激活函數的輸出:
-
Softmax 激活函數是一個歸一化的指數函數。一個神經元的輸出不僅取決於其自身的輸入值,還取決於該層中存在的所有其他神經元的輸入的總和。這樣做的一個優點是使得神經元的輸出小,因此梯度不會過大。數學表達式為 yi =exp(x i)/Σ jexp(x j):以下是上述代碼的輸出:
下面我們逐個對上述函數進行解釋:
- 閾值激活函數用於 McCulloch Pitts 神經元和原始的感知機。這是不可微的,在 x=0 時是不連續的。因此,使用這個激活函數來進行基於梯度下降或其變體的訓練是不可能的。
- Sigmoid 激活函數一度很受歡迎,從曲線來看,它像一個連續版的閾值激活函數。它受到梯度消失問題的困擾,即函數的梯度在兩個邊緣附近變為零。這使得訓練和優化變得困難。
- 雙曲正切激活函數在形狀上也是 S 形並具有非線性特性。該函數以 0 為中心,與 Sigmoid 函數相比具有更陡峭的導數。與 Sigmoid 函數一樣,它也受到梯度消失問題的影響。
- 線性激活函數是線性的。該函數是雙邊都趨於無窮的 [-inf,inf]。它的線性是主要問題。線性函數之和是線性函數,線性函數的線性函數也是線性函數。因此,使用這個函數,不能表示復雜數據集中存在的非線性。
- ReLU 激活函數是線性激活功能的整流版本,這種整流功能允許其用於多層時捕獲非線性。
使用 ReLU 的主要優點之一是導致稀疏激活。在任何時刻,所有神經元的負的輸入值都不會激活神經元。就計算量來說,這使得網絡在計算方面更輕便。
ReLU 神經元存在死亡 ReLU 的問題,也就是說,那些沒有激活的神經元的梯度為零,因此將無法進行任何訓練,並停留在死亡狀態。盡管存在這個問題,但 ReLU 仍是隱藏層最常用的激活函數之一。 - Softmax 激活函數被廣泛用作輸出層的激活函數,該函數的范圍是 [0,1]。在多類分類問題中,它被用來表示一個類的概率。所有單位輸出和總是 1。
總結
神經網絡已被用於各種任務。這些任務可以大致分為兩類:函數逼近(回歸)和分類。根據手頭的任務,一個激活函數可能比另一個更好。一般來說,隱藏層最好使用 ReLU 神經元。對於分類任務,Softmax 通常是更好的選擇;對於回歸問題,最好使用 Sigmoid 函數或雙曲正切函數。
推薦閱讀
- https://www.tensorflow.org/versions/r0.12/api_docs/python/nn/activation_functions提供了在 TensorFlow 中定義的激活函數的詳細信息以及如何使用它們。
- https://en.wikipedia.org/wiki/Activation_function是對激活函數的一個很好的總結。