常用激活函數


作用:

​ 線性模型的表達能力不夠,引入激活函數來增加非線性因素,並且能逼近任何一個非線性函數

  • Sigmoid

    Sigmoid 函數也叫 Logistic 函數,定義為

    \[Sigmoid:=\frac{1}{1+e^{-x}} \]

    它的一個優良特性就是能夠把 𝑥 ∈ 𝑅 的輸入壓縮到 𝑥∈[0,1]區間,這個區間的數值在機器學習常用來表示以下含義:

    1. 概率分布 [0,1] 區間的輸出和概率的分布范圍契合,可以通過Sigmoid函數將輸出轉譯為概率輸出
    2. 信號強度 一般可以將 0~1理解為某種信號的強度,如像素的顏色強度,1代表當前通道顏色最強,0代表當前通道無顏色;抑或代表門控值(Gate)的強度,1代表當前門控全部開放,0代表門控關閉

    Sigmoid 函數連續可導,其函數圖如下,相對於階躍函數,可以直接利用梯度下降算法優化網絡參數,應用廣泛。

    階躍函數:

    不足:在輸入值較大或較小時,易出現梯度值接近於 0 的現象,稱為梯度彌散現象,網絡參數長時間得不到更新,很難訓練較深層次的網絡模型。

    在 TensorFlow 中,可以通過 tf.nn.sigmoid 實現 Sigmoid 函數

  • Softmax

    將輸出值映射到 [0,1] 區間,且滿足所有的輸出值之和為 1 的特性,適用於多分類問題,表示每個類別的概率。

    其定義為:

    \[𝜎(𝑧_i) =\frac{e^{z_i}}{\sum_{j=1}^{d_{out}}{e^{z_j}}} \]

    不足:容易因輸入值偏大發生數值溢出現象
    同樣在計算交叉熵時,也會出現數值溢出的問題,因此,tensorflow 中提供了一個統一的接口,將兩者同時實現,函數式接口為:

    # 當 from_logits=False 時,表示 y_pred 是經過 Softmax 函數的輸出 
    tf.keras.losses.categorical_crossentropy(y_true, y_pred, from_logits=False)
    

    在 TensorFlow 中,可以通過 tf.nn.softmax 實現 Softmax 函數

  • ReLU(Rectified Linear Unit,修正線性單元)

    ReLU 針對 sigmoid 的不足做出了改進。2012 年提出的 8 層 AlexNet 首次采用了 ReLU 作為激活函數,使得網絡參數達到了 8 層。它的定義為:

    \[ReLU(x):=max(0,x) \]

    函數圖如下:

    可以看到其對於小於 0 的值全部抑制為0,對於正數則直接輸出,這種單邊抑制來源於生物學。

    不足:ReLU 函數在 x < 0 時梯度值恆為 0 ,也可能會造成梯度彌散現象

    在 TensorFlow 中,可以通過 tf.nn.relu 實現 ReLU 函數

  • LeakyReLU

    為了克服 ReLU 的問題,提出了 LeakyReLU 函數,其表達式為:

    \[LeakyReLU=\begin{cases} x,x≥0\\ p*x, x<0\end{cases} \]

    其中 p 為用戶自行設置的某較小數值的超參數,如 0.02 等。當 p = 0 時,LeakyReLU 函數退化為 ReLU 函數;當 p ≠ 0時,x < 0 能夠獲得較小的梯度值 p,從而避免出現梯度彌散現象。

    函數圖如下:

    在 TensorFlow 中,可以通過 tf.nn.leaky_relu 實現 LeakyReLU 函數

  • Tanh

    Tanh 函數能夠將 x ∈ R 的輸入壓縮到 [-1,1] 區間,定義為:

    \[tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}=2*sigmoid(2x)-1 \]

    可以看到 tanh 激活函數可通過 Sigmoid 函數縮放平移后實現,函數圖如下:

    在 TensorFlow 中,可以通過 tf.nn.tanh 實現 tanh 函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM