激活函數總結


一、激活函數

1.什么是激活函數

激活函數: 就是在神經網絡的神經元上運行的函數,負責將神經元的輸入映射到輸出端。

2.為什么要有激活函數

    如果不用激活函數,每一層的輸出都是上一層的線性組合,從而導致整個神經網絡的輸出為神經網絡輸入的線性組合,無法逼近任意函數。

3.激活函數的特性

  1. 非線性
  2. 可微性:當優化方法是基於梯度時,此性質是必須的
  3. 單調性:當激活函數是單調時,可保證單層網絡是凸函數 
  4. 輸出值的范圍:當激活函數輸出值是 有限 的時候,基於梯度的優化方法會更加穩定,因為特征的表示受有限權值的影響更顯著;當激活函數的輸出是無限時,模型的訓練會更加高效,不過在這種情況小,一般需要更小的Learning Rate.

二、Sigmoid/tanh/softmax

1.sigmoid

  Sigmoid函數的表達式為 

  導數為:

  函數曲線如下圖所示:

                                           

   Sigmoid函數是傳統神經網絡中最常用的激活函數,一度被視為神經網絡的核心所在。 

  從數學上來看,Sigmoid函數對中央區的信號增益較大,對兩側區的信號增益小,在信號的特征空間映射上,有很好的效果。從神經科學上來看,中央區酷似神經元的興奮態,兩側區酷似神經元的抑制態,因而在神經網絡學習方面,可以將重點特征推向中央區,將非重點特征推向兩側區。 

對比sigmoid類函數主要變化是:
  1)單側抑制
  2)相對寬闊的興奮邊界
  3)稀疏激活性

Sigmoid 和 Softmax 區別:

  sigmoid將一個real value映射到(0,1)的區間,用來做二分類。而 softmax 把一個 k 維的real value向量(a1,a2,a3,a4….)映射成一個(b1,b2,b3,b4….)其中 bi 是一個 0~1 的常數,輸出神經元之和為 1.0,所以相當於概率值,然后可以根據 bi 的概率大小來進行多分類的任務。二分類問題時 sigmoid 和 softmax 是一樣的,求的都是 cross entropy loss,而 softmax 可以用於多分類問題多個logistic回歸通過疊加也同樣可以實現多分類的效果,但是 softmax回歸進行的多分類,類與類之間是互斥的,即一個輸入只能被歸為一類;多個logistic回歸進行多分類,輸出的類別並不是互斥的,即"蘋果"這個詞語既屬於"水果"類也屬於"3C"類別。

2.TanHyperbolic(tanh)

  TanHyperbolic(tanh)函數又稱作雙曲正切函數,數學表達式為

  導數為:

  圖像為:

   在具體應用中,tanh函數相比於Sigmoid函數往往更具有優越性,這主要是因為Sigmoid函數在輸入處於[-1,1]之間時,函數值變化敏感,一旦接近或者超出區間就失去敏感性,處於飽和狀態,影響神經網絡預測的精度值。而tanh的輸出和輸入能夠保持非線性單調上升和下降關系,符合BP網絡的梯度求解,容錯性好,有界,漸進於0、1,符合人腦神經飽和的規律,但比sigmoid函數延遲了飽和期.tanh在特征相差明顯時的效果會很好,在循環過程中會不斷擴大特征效果。與 sigmoid 的區別是,tanh 是 0 均值的,因此實際應用中 tanh 會比 sigmoid 更好。

3.softmax

  Sigmoid函數如果用來分類的話,只能進行二分類,而這里的softmax函數可以看做是Sigmoid函數的一般化,可以進行多分類。softmax函數的函數表達式為:

  從公式中可以看出,就是如果某一個Zj大過其他z,那這個映射的分量就逼近於1,其他就逼近於0,即用於多分類。也可以理解為將K維向量映射為另外一種K維向量。用通信的術語來講,如果Sigmoid函數是MISO,Softmax就是MIMO的Sigmoid函數。

  二分類和多分類其實沒有多少區別。用的公式仍然是y=wx + b。 但有一個非常大的區別是他們用的激活函數是不同的。 邏輯回歸用的是sigmoid,這個激活函數的除了給函數增加非線性之外還會把最后的預測值轉換成在【0,1】中的數據值。也就是預測值是0<y<1。 我們可以把最后的這個預測值當做是一個預測為正例的概率。在進行模型應用的時候我們會設置一個閾值,當預測值大於這個閾值的時候,我們判定為正例子,反之我們判斷為負例。這樣我們可以很好的進行二分類問題。 而多分類中我們用的激活函數是softmax。 為了能夠比較好的解釋它,我們來說一個例子。 假設我們有一個圖片識別的4分類的場景。 我們想從圖片中識別毛,狗,雞和其他這4種類別。那么我們的神經網絡就變成下面這個樣子的。

  我們最后的一層中使用的激活函數就是softmax。 我們發現跟二分類在輸出層之后一個單元不同的是, 使用softmax的輸出層擁有多個單元,實際上我們有多少個分類就會有多少個單元,在這個例子中,我們有4個分類,所以也就有4個神經單元,它們代表了這4個分類。在softmax的作用下每個神經單元都會計算出當前樣本屬於本類的概率。如下:

  如上圖,該樣本屬於第一個分類的概率是0.842, 屬於第二個分類的概率是0.042,屬於第三個分類的概率是0.002,屬於第四個分類的概率是0.114. 我們發現這些值相加等於一,因為這些值也是經過歸一化的結果。 整個效果圖可以參考下面的例子, 這是一個比較直觀的圖。

Softmax的損失函數

  既然softmax的輸出變成了多個值,那么我們如何計算它的損失函數呢, 有了損失函數我們才能進行梯度下降迭代並根據前向傳播和反向傳播進行學習。如下圖:

  還是假設有4個分類,那么實際的預測向量,也會有4個維度。 如上圖左邊的樣子。 如果是屬於第二個分類,那么第二個值就是1, 其他值都是0。 假設右邊的向量是預測值, 每個分類都有一個預測概率。 那么我們的損失函數就是。

  由於實際值得向量只有一個是1,其他的都是0. 所以其實到了最后的函數是下面這個樣子的

  有了損失函數,我們就可以跟以前做邏輯回歸一樣做梯度下降就可以了。

softmax的梯度求解

 

三、ReLu/softplus/GeLu

1.Relu

  ReLu函數的全稱為Rectified Linear Units

  函數表達式為:

  導數為:

Sigmoid ,tanh與ReLU 比較:

  sigmoid,tanh 會出現梯度消失問題,ReLU 的導數就不存在這樣的問題。

優點:

(1)從計算的角度上,Sigmoid和Tanh激活函數均需要計算指數,復雜度高,而ReLU只需要一個閾值即可得到激活值;

(2)ReLU的非飽和性潰瘍有效地解決梯度消失的問題,提供相對寬的激活邊界;

(3)ReLU的單側抑制提供了網絡的稀疏表達能力

缺點:

訓練過程中會導致神經元死亡的問題。這是由於函數f(z)=max(0,z)導致負梯度在經過該ReLU單元時被置為0,且在之后也不被任何數據激活,即流經該神經元的梯度永遠為0,不對任何數據產生響應。

在實際訓練中,如果學習率設置較大,會導致一定比例的神經元不可逆死亡,進而參數梯度無法更新,整個訓練過程失敗。

2.softplus

  softplus函數的數學表達式為:

  ReLu和softplus的函數曲線如下:

       可以看到,softplus可以看作是ReLu的平滑。根據神經科學家的相關研究,softplus和ReLu與腦神經元激活頻率函數有神似的地方。也就是說,相比於早期的激活函數,softplus和ReLu更加接近腦神經元的激活模型,

而神經網絡正是基於腦神經科學發展而來,這兩個激活函數的應用促成了神經網絡研究的新浪潮。 

 softplus和ReLu相比於Sigmoid的優點在哪里呢?

  • 采用sigmoid等函數,算激活函數時(指數運算),計算量大,反向傳播求誤差梯度時,求導涉及除法,計算量相對大,而采用Relu激活函數,整個過程的計算量節省很多。
  • 對於深層網絡,sigmoid函數反向傳播時,很容易就會出現梯度消失的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨於0,這種情況會造成信息丟失),從而無法完成深層網絡的訓練。
  • Relu會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,並且減少了參數的相互依存關系,緩解了過擬合問題的發生(以及一些人的生物解釋balabala)。

3.GeLu

出自論文:GAUSSIAN ERROR LINEAR UNITS(GELUS)

動機:在神經網絡的建模過程中,模型很重要的性質就是非線性,同時為了模型泛化能力,需要加入隨機正則,例如dropout(隨機置一些輸出為0,其實也是一種變相的隨機非線性激活), 而隨機正則與非線性激活是分開的兩個事情, 而其實模型的輸入是由非線性激活與隨機正則兩者共同決定的。GELUs正是在激活中引入了隨機正則的思想,是一種對神經元輸入的概率描述,直觀上更符合自然的認識。

GeLu公式:

 

GeLu的近似函數:

GeLu的函數曲線:

 

GeLu的源碼:

def gelu(x):
  """Gaussian Error Linear Unit.

  This is a smoother version of the RELU.
  Original paper: https://arxiv.org/abs/1606.08415
  Args:
    x: float Tensor to perform activation.

  Returns:
    `x` with the GELU activation applied.
  """
  cdf = 0.5 * (1.0 + tf.tanh(
      (np.sqrt(2 / np.pi) * (x + 0.044715 * tf.pow(x, 3)))))
  return x * cdf

  

 

 

 

 

參考文獻:

【1】softmax的log似然代價函數(公式求導)

【2】深度學習----BP+SGD+激活函數+代價函數+基本問題處理思路 - 郭大俠寫leetcode - CSDN博客

【3】GELU 激活函數


免責聲明!

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



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