深度學習_深度學習基礎知識_激活函數

激活函數

一.激活函數的意義

爲什麼需要激活函數

  1. 激活函數對模型學習、理解非常複雜和非線性的函數具有重要作用。
  2. 激活函數可以引入非線性因素。如果不使用激活函數,則輸出信號僅是一個簡單的線性函數。線性函數一個一級多項式,線性方程的複雜度有限,從數據中學習複雜函數映射的能力很小。沒有激活函數,神經網絡將無法學習和模擬其他複雜類型的數據,例如圖像、視頻、音頻、語音等。
  3. 激活函數可以把當前特徵空間通過一定的線性映射轉換到另一個空間,讓數據能夠更好的被分類。

爲什麼需要非線性激活函數

  1. 如果網絡中全部是線性結構,那麼線性的組合還是線性,與單獨一個線性分類器無異。這樣就做不到擬合逼近任意函數。
  2. 使用非線性激活函數 ,可以增加網絡的學習能力,使它可以學習複雜的事物,複雜的表單數據,以及複雜的任意函數映射。即能夠從輸入輸出之間生成非線性映射。

激活函數的性質

  1. 非線性: 當激活函數是線性的,一個兩層的神經網絡就可以基本上逼近所有的函數。但如果激活函數是恆等激活函數的時候,即 f(x)=xf(x)=x,就不滿足這個性質,而且如果 MLP 使用的是恆等激活函數,那麼其實整個網絡跟單層神經網絡是等價的;
  2. 可微性: 當優化方法是基於梯度的時候,就體現了該性質;
  3. 單調性: 當激活函數是單調的時候,單層網絡能夠保證是凸函數;
  4. f(x)xf(x)≈x: 當激活函數滿足這個性質的時候,如果參數的初始化是隨機的較小值,那麼神經網絡的訓練將會很高效;如果不滿足這個性質,那麼就需要詳細地去設置初始值;
  5. 輸出值的範圍: 當激活函數輸出值是有限的時候,基於梯度的優化方法會更加穩定,因爲特徵的表示受有限權值的影響更顯著;當激活函數的輸出是無限的時候,模型的訓練會更加高效,不過在這種情況小,一般需要更小的 Learning Rate。

二.常見的激活函數

(1)Sigmoid 激活函數

函數的定義爲:

f(x)=11+exf(x) = \frac{1}{1 + e^{-x}}

如下圖所示,其值域爲 (0,1)(0,1)

當x大於零時輸出結果會趨近於1,而當x小於零時,輸出結果趨向於0,由於函數的特性,經常被用作二分類的輸出端激活函數。

在這裏插入圖片描述

Sigmoid的導數

f(x)=(11+ex)=11+ex(111+ex)=f(x)(1f(x))f^{'}(x)=(\frac{1}{1+e^{-x}})^{'}=\frac{1}{1+e^{-x}}\left( 1- \frac{1}{1+e^{-x}} \right)=f(x)(1-f(x))

x=0x=0時,f(x)=0.25f(x)'=0.25

Sigmoid的缺陷

  1. 當輸入數據很大或者很小時,函數的梯度幾乎接近於0,這對神經網絡在反向傳播中的學習非常不利。
  2. Sigmoid函數的均值不是0,這使得神經網絡的訓練過程中只會產生全正或全負的反饋。

(2)Tanh激活函數

函數的定義爲:
f(x)=Tanh(x)=exexex+exf(x) = Tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}

如下圖所示,值域爲 (1,1)(-1,1)

Tanh的優勢

Tanh函數把數據壓縮到-1到1的範圍,解決了Sigmoid函數均值不爲0的問題,所以在實踐中通常Tanh函數都優於Sigmoid函數。在數學形式上其實Tanh只是對Sigmoid的一個縮放形式,公式爲tanh(x) = 2f(2x) -1(f(x)是sigmoid的函數)。

在這裏插入圖片描述

Tanh的導數

f(x)=(exexex+ex)=1(tanh(x))2f^{'}(x)=(\frac{e^x - e^{-x}}{e^x + e^{-x}})^{'}=1-(tanh(x))^2

x=0x=0時,f(x)=1f(x)'=1

由Tanh和Sigmoid的導數也可以看出Tanh導數更陡,收斂速度比Sigmoid快。

(3)Relu激活函數

函數的定義爲:

f(x)=max(0,x)f(x) = max(0, x)

如下圖所示,值域爲 [0,+)[0,+∞)

在這裏插入圖片描述

ReLU的優勢

  1. 計算公式非常簡單,不像上面介紹的兩個激活函數那樣計算複雜,大量節約了計算時間。
  2. 在隨機梯度下降中比Sigmoid和Tanh更加容易使得網絡收斂。
  3. ReLU進入負半區的時候,梯度爲 0,神經元此時不會訓練形成單側抑制,產生稀疏性。這樣可以提高學習的精度,更好更快地提取稀疏特徵。
  4. sigmoid 和 tanh 函數的導數在正負飽和區的梯度都會接近於 0,這會造成梯度消失,而 ReLU函數大於 0 部分都爲常數保持梯度不衰減,不會產生梯度消失現象。

ReLU的導數

c(u)={0,x<01,x>0undefined,x=0c(u)=\begin{cases} 0,x<0 \\ 1,x>0 \\ undefined,x=0\end{cases}

通常x=0x=0時,給定其導數爲1和0。

ReLU的不足

訓練中可能會導致出現某些神經元永遠無法更新的情況。其中一種對ReLU函數的改進方式是LeakyReLU。

(4)Leak Relu 激活函數

函數定義爲:

f(x)={ax,x<0x,x0f(x) = \left\{ \begin{aligned} ax, \quad x<0 \\ x, \quad x\ge0 \end{aligned} \right.

如下圖所示(a=0.5a = 0.5),值域爲 (,+)(-∞,+∞)

在這裏插入圖片描述

LeakyReLU的優勢

該方法與ReLU不同的是在x小於0的時候取f(x) = ax,其中a是一個非常小的斜率(比如0.01)。這樣的改進可以使得當x小於0的時候也不會導致反向傳播時的梯度消失現象。

(5)SoftPlus 激活函數

函數的定義爲:

f(x)=ln(1+ex)f(x) = ln( 1 + e^x)

值域爲 (0,+)(0,+∞)

函數圖像如下:

在這裏插入圖片描述

(6)Softmax 函數

函數定義爲:

P(y/x)=eZik=1KeZkP(y/x) = \frac{e^{Z_i}}{\sum_{k=1}^K e^{Z_k}}

其中ZiZ_i可以等於θiTx\theta_i^T xθi\theta_ixx 是列向量,θiTx\theta_i^T x 可能被換成函數關於 xx 的函數 fi(x)f_i(x)

Softmax的特點

通過 softmax 函數,可以使得 P(y/x)P(y/x) 的範圍在 [0,1][0,1] 之間。在迴歸和分類問題中,通常 θ\theta 是待求參數,通過尋找使得 P(y/x)P(y/x) 最大的 θi\theta_i 作爲最佳參數。

使得範圍在 [0,1][0,1] 之間的方法有很多,這裏使用 ee 的冪函數參考 了logistic 函數:

Py/x)=11+exp(θiTx)Py/x) = \frac{1}{1+\exp(-\theta_i^T x)}

這個函數的作用就是使得 P(y/x)P(y/x) 在負無窮到 0 的區間趨向於 0, 在 0 到正無窮的區間趨向 1。同樣 softmax 函數加入了 ee 的冪函數正是爲了兩極化:正樣本的結果將趨近於 1,而負樣本的結果趨近於 0,並把輸出總和進行了歸一化。

這樣爲多類別提供了方便(可以把 P(y/x)P(y/x) 看做是樣本屬於類別的概率)。可以說,Softmax 函數是 logistic 函數的一種泛化。

它是一個網絡預測多分類問題的最佳輸出激活函數。

Softmax函數應用於多分類

假設我們有一個數組,ZiZ_i 表示 ZZ 中的第 ii 個元素,那麼這個元素的 softmax 值就是

P(y/x)=eZiKeZkP(y/x)= \frac{e^{Z_i}}{\sum_K e^{Z_k}}

從下圖看,神經網絡中包含了輸入層,然後通過兩個特徵層處理,最後通過 softmax 分析器就能得到不同條件下的概率,這裏需要分成三個類別,最終會得到 y=0,y=1,y=2y=0, y=1, y=2 的概率值。

在這裏插入圖片描述

繼續看下面的圖,三個輸入通過 softmax 後得到一個數組 [0,0.12,0.88][0 , 0.12 , 0.88],這就是 soft 的功能。

在這裏插入圖片描述

更形象的映射過程如下圖所示:

在這裏插入圖片描述

softmax 直白來說就是將原來輸出是 3,1,33,1,-3 通過 softmax 函數一作用,就映射成爲 [0,1][0,1] 的值,而這些值的累和爲 11(滿足概率的性質),那麼我們就可以將它理解成概率,在最後選取輸出結點的時候,我們就可以選取概率最大(也就是值對應最大的)結點,作爲我們的預測目標。

激活函數的選擇

選擇一個適合的激活函數並不容易,需要考慮很多因素,通常的做法是,如果不確定哪一個激活函數效果更好,可以把它們都試試,然後看看在驗證集或者測試集上的效果。然後看哪一種表現的更好,就去使用它。

以下是常見的選擇情況:

  1. 如果輸出是 0、1 值(二分類問題),則輸出層選擇 Sigmoid 函數,然後其它的所有單元都選擇 ReLU函數。
  2. 如果在隱藏層上不確定使用哪個激活函數,那麼通常會使用 ReLU激活函數。有時,也會使用 Tanh 激活函數。
  3. Sigmoid 激活函數:除了輸出層是一個二分類問題基本不會用它。
  4. Tanh 激活函數:Tanh 是非常優秀的,幾乎適合所有場合。
  5. ReLU 激活函數:最常用的默認函數,如果不確定用哪個激活函數,就使用 ReLU 或者 LeakyReLU,再去嘗試其他的激活函數。
  6. 如果遇到了一些死的神經元,我們可以使用 LeakyReLU 函數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章