天天看點

常見的激活函數總結

目前主流的卷積神經網絡架構都會遵循類似卷積—》池化—》卷積—》池化…—》全連接配接—》softmax 這樣的網絡結構,其中在卷積層後都會有跟随着一層激活層。平時在跑基于tensorflow的深度學習實驗室時,也都是直接仿照許多經典的網絡架構來設計自己的網絡架構,而對于激活函數,也是直接采用tensorflow提供的接口,沒有進行深究。那麼在卷積神經網絡中引用激活函數的意義是什麼呢?網上的答案也都千篇一律:激活函數是用來加入非線性因素的,因為線性模型的表達能力不夠。當我在看代碼的時候,激活函數所做的事情其實就是将經過卷積核卷積後的神經網絡的輸出映射為特定的邊界内的值,這點可以從下面的激活函數的圖裡輕易的看出。而網上解釋為啥引入激活函數所舉的例子中所謂的不可線性可分的資料需要經過非線性激活函數去分,這裡把激活函數當成了一種分類資料的判别面,這點我不是太了解,隻能借助以後知識不斷的增進去逐漸的了解啦。

本文隻是簡單的介紹常用的一些激活函數,以備後面不時之需。常用的激活函數有1. Sigmoid,2. Tanh,3. ReLU等,下面分别進行介紹:

Sigmoid

Sigmoid又叫作 Logistic 激活函數,它将實數值壓縮進 0 到 1 的區間内,還可以在預測機率的輸出層中使用。該函數将大的負數轉換成 0,将大的正數轉換成 1。數學公式為:

常見的激活函數總結

下圖展示了 Sigmoid 函數及其導數:

Sigmoid 激活函數:

常見的激活函數總結

Sigmoid 導數:

常見的激活函數總結

Sigmoid 函數的三個主要缺陷:

  1. 梯度消失: 注意:Sigmoid 函數趨近 0 和 1 的時候變化率會變得平坦,也就是說,Sigmoid 的梯度趨近于 0。神經網絡使用 Sigmoid 激活函數進行反向傳播時,輸出接近 0 或 1 的神經元其梯度趨近于 0。這些神經元叫作飽和神經元。是以,這些神經元的權重不會更新。此外,與此類神經元相連的神經元的權重也更新得很慢。該問題叫作梯度消失。是以,想象一下,如果一個大型神經網絡包含 Sigmoid 神經元,而其中很多個都處于飽和狀态,那麼該網絡無法執行反向傳播。
  2. 不以零為中心: Sigmoid 輸出不以零為中心的。
  3. 計算成本高昂: exp() 函數與其他非線性激活函數相比,計算成本高昂。

    下一個要讨論的非線性激活函數解決了 Sigmoid 函數中值域期望不為 0 的問題。

Tanh

Tanh 激活函數:

常見的激活函數總結

Tanh 導數:

常見的激活函數總結

Tanh 激活函數又叫作雙曲正切激活函數(hyperbolic tangent activation function)。與 Sigmoid 函數類似,Tanh 函數也使用真值,但 Tanh 函數将其壓縮至-1 到 1 的區間内。與 Sigmoid 不同,Tanh 函數的輸出以零為中心,因為區間在-1 到 1 之間。你可以将 Tanh 函數想象成兩個 Sigmoid 函數放在一起。在實踐中,Tanh 函數的使用優先性高于 Sigmoid 函數。負數輸入被當作負值,零輸入值的映射接近零,正數輸入被當作正值。唯一的缺點是:

Tanh 函數也會有梯度消失的問題,是以在飽和時也會「殺死」梯度。

為了解決梯度消失問題,我們來讨論另一個非線性激活函數——修正線性單元(rectified linear unit,ReLU),該函數明顯優于前面兩個函數,是現在使用最廣泛的函數。

修正線性單元(ReLU)

ReLU 激活函數:

常見的激活函數總結

ReLU 導數:

常見的激活函數總結

從上圖可以看到,ReLU 是從底部開始半修正的一種函數。數學公式為:

常見的激活函數總結

當輸入 x<0 時,輸出為 0,當 x> 0 時,輸出為 x。該激活函數使網絡更快速地收斂。它不會飽和,即它可以對抗梯度消失問題,至少在正區域(x> 0 時)可以這樣,是以神經元至少在一半區域中不會把所有零進行反向傳播。由于使用了簡單的門檻值化(thresholding),ReLU 計算效率很高。但是 ReLU 神經元也存在一些缺點:

  1. 不以零為中心:和 Sigmoid 激活函數類似,ReLU 函數的輸出不以零為中心。
  2. 前向傳導(forward pass)過程中,如果 x < 0,則神經元保持非激活狀态,且在後向傳導(backward pass)中「殺死」梯度。這樣權重無法得到更新,網絡無法學習。當 x = 0 時,該點的梯度未定義,但是這個問題在實作中得到了解決,通過采用左側或右側的梯度的方式。

本文節選自機器之心一文概覽深度學習中的激活函數

參考:

一文概覽深度學習中的激活函數

The Activation Function in Deep Learning 淺談深度學習中的激活函數

https://feisky.xyz/machine-learning/neural-networks/active.html

知乎:神經網絡激勵函數的作用是什麼?有沒有形象的解釋?

常用激活函數比較

繼續閱讀