機器學習-激活函數總結

激活函數就相當於人體的神經元,它的主要作用就是對輸入的信號進行轉換,比如將疼痛轉化爲疼痛信號。但是疼痛的來源有很多種,也就是可能來自於很多的上一個層的神經細胞,比如敲打、拉扯、針刺等等,但是歸根結底,它就是一個痛。但是爲什麼會存在這麼多的激活函數?原因在於,當前的計算機並不能很好地模擬人體的神經元,比如,敲打可以加重疼痛,但是藥物也可以緩解疼痛,但是對於Sigmoid函數,它的輸出並不是以0爲中心,所以只能進行加性計算。

激活函數的幾個改進點:
激活函數的不同主要在於,對於不同的模型,選擇更合適的函數來模擬人體神經網絡的結構
1. 梯度消失
這個問題主要是在深度學習之後出現的,深度學習之前主要使用的是sigmoid。但是這個函數由於靠近0-1兩端的時候,梯度幾乎接近於零。即,隨着網絡的不斷訓練,輸出值會越來越靠近0-1兩端,此時,梯度將接近於零,導致方向傳播基本上不會發生梯度改變,即神經元飽和,就如同神經麻木一樣,此時的神經元將沒有任何感覺能力。
2. 以零爲中心-zero-centered
意思就是0均值,但是對於這個問題,網上的一直沒有很好的解釋清楚,我這裏說說我的理解
神經網絡並不是只有一個權重w,而是由一羣權重w組成,這些權重都是統一進行梯度計算,也就是w只能一起加上或者減去梯度值,這樣就導致一個問題,比如對一組權重w,如果最優點的權重比一部分w大,比另一部分要小,那麼由於只能統一加減計算,所以,不得不先更新一部分,保持另一部分爲0,;然後再更新一部分,這樣的效率將會很低,很顯然,如果正負都可以計算,完全可以一步到位。計算步驟如下圖:
最優值在第四象限,所以有正有負
參考鏈接:https://zhuanlan.zhihu.com/p/25110450
3. 計算成本
深度神經網絡需要進行大量的計算,之前的激活函數都是指數或者倒數函數,計算複雜,將大大增加計算量,因此,爲了簡化計算量,現在開始大量使用RELU函數,即max(x,0)

常用激活函數及其導數:
enter description here


激活函數分類

  1. tf.nn.relu
    修正線性單元(Rectified linear unit)
    enter description here
    enter description here

ReLU也有幾個需要特別注意的問題:
* ReLU的輸出不是zero-centered
* Dead ReLU Problem,指的是某些神經元可能永遠不會被激活,導致相應的參數永遠不能被更新。有兩個主要原因可能導致這種情況產生: (1) 非常不幸的參數初始化,這種情況比較少見 (2) learning rate太高導致在訓練過程中參數更新太大,不幸使網絡進入這種狀態。解決方法是可以採用Xavier初始化方法,以及避免將learning rate設置太大或使用adagrad等自動調節learning rate的算法。

儘管存在這兩個問題,ReLU目前仍是最常用的activation function,在搭建人工神經網絡的時候推薦優先嚐試!


  1. tf.nn.relu6
  2. tf.nn.crelu
  3. tf.nn.elu
    指數線性單元(Exponential Linear Units)
    其中a>0.
    enter description here

ELU也是爲解決ReLU存在的問題而提出,顯然,ELU有ReLU的基本所有優點,以及:
* 不會有Dead ReLU問題
* 輸出的均值接近0,zero-centered

它的一個小問題在於計算量稍大。類似於Leaky ReLU,理論上雖然好於ReLU,但在實際使用中目前並沒有好的證據ELU總是優於ReLU。


  1. tf.nn.selu
  2. tf.nn.softplus

    enter description here

  1. tf.nn.softsign
    enter description here
    enter description here

  1. tf.sigmoid
    enter description here
    enter description here

  1. tf.tanh
    enter description here

補充:
1. Leaky ReLU函數
enter description here
enter description here
人們爲了解決Dead ReLU Problem,提出了將ReLU的前半段設爲0.01x而非0。另外一種直觀的想法是基於參數的方法,即Parametric ReLU:f(x) = \max(\alpha x, x),其中\alpha
可由back propagation學出來。理論上來講,Leaky ReLU有ReLU的所有優點,外加不會有Dead ReLU問題,但是在實際操作當中,並沒有完全證明Leaky ReLU總是好於ReLU。



  1. SoftMax
    enter description here
    這個公式一般用於多分類問題,比如手寫數字識別中,有10個分類,我們最後的輸出並不是10個數中的某一個,而是每個數字都佔有一定的權重,這裏的意思就是權重佔比。權重越大的被取到的可能性越高。

一個別人的例子:SVM只選自己喜歡的男神,Softmax把所有備胎全部拉出來評分,最後還歸一化一下
參考:enter description here
小結
建議使用ReLU函數,但是要注意初始化和learning rate的設置;可以嘗試使用Leaky ReLU或ELU函數;不建議使用tanh,尤其是sigmoid函數。

關鍵詞
* 梯度消失
例如sigmoid的函數,它的導數的取值範圍是(0, 0.25],也就是說對於導數中的每一個元素,我們都有 enter description hereenter description here ,小於1的數乘在一起,必然是越乘越小的。這才僅僅是3層,如果10層的話, 根據乘法計算,第10層的誤差相對第一層卷積的參數的梯度將是一個非常小的值,接近於0,這就是所謂的“梯度消失”。

參考:https://zhuanlan.zhihu.com/p/25110450

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章