一文總結深度學習中的激活函數

2021-02-19 AI有道

點擊上方「AI有道」,選擇「星標」公眾號

重磅乾貨,第一時間送達

本文轉載自機器之心,禁二次轉載 

參與:路雪、蔣思源

本文從激活函數的背景知識開始介紹,重點講解了不同類型的非線性激活函數:Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish,並詳細介紹了這些函數的優缺點。

本文介紹了多種激活函數,並且對比了激活函數的優劣。

1. 什麼是激活函數?

生物神經網絡啟發了人工神經網絡的發展。但是,ANN 並非大腦運作的近似表示。不過在我們了解為什麼在人工神經網絡中使用激活函數之前,先了解生物神經網絡與激活函數的相關性是很有用處的。

典型神經元的物理結構包括細胞體(cell body)、向其他神經元發送信號的軸突(axon)和接收其他神經元發送的信號或信息的樹突(dendrites)。

生物神經網絡

上圖中,紅色圓圈代表兩個神經元交流的區域。神經元通過樹突接收來自其他神經元的信號。樹突的權重叫作突觸權值(synaptic weight),將和接收的信號相乘。來自樹突的信號在細胞體內不斷累積,如果信號強度超過特定閾值,則神經元向軸突傳遞信息。如未超過,則信號被該神經元「殺死」,無法進一步傳播。

激活函數決定是否傳遞信號。在這種情況下,只需要帶有一個參數(閾值)的簡單階梯函數。現在,當我們學習了一些新的東西(或未學習到什麼)時,一些神經元的閾值和突觸權值會發生改變。這使得神經元之間產生新的連接,大腦學會新的東西。

讓我們再次理解這一概念,不過這次要使用人工神經元。

上圖中(x_1, ..., x_n)是信號向量,它和權重(w_1, ..., w_n)相乘。然後再累加(即求和 + 偏置項 b)。最後,激活函數 f 應用於累加的總和。

注意:權重(w_1, ..., w_n)和偏置項 b 對輸入信號進行線性變換。而激活函數對該信號進行非線性變換,這使得我們可以任意學習輸入和輸出之間的複雜變換。

過去已經出現了很多種函數,但是尋找使神經網絡更好更快學習的激活函數仍然是活躍的研究方向。

2. 神經網絡如何學習?

我們有必要對神經網絡如何學習有一個基本了解。假設網絡的期望輸出是 y(標註值),但網絡實際輸出的是 y'(預測值)。預測輸出和期望輸出之間的差距(y - y')可以轉化成一種度量,即損失函數(J)。神經網絡犯大量錯誤時,損失很高;神經網絡犯錯較少時,損失較低。訓練目標就是找到使訓練集上的損失函數最小化的權重矩陣和偏置向量。

在下圖中,損失函數的形狀像一個碗。在訓練過程的任一點上,損失函數關於梯度的偏導數是那個位置的梯度。沿偏導數預測的方向移動,就可以到達谷底,使損失函數最小化。使用函數的偏導數迭代地尋找局部極小值的方法叫作梯度下降。

人工神經網絡中的權重使用反向傳播的方法進行更新。損失函數關於梯度的偏導數也用於更新權重。從某種意義上來說,神經網絡中的誤差根據求導的鏈式法則執行反向傳播。這通過迭代的方式來實施,經過多次迭代後,損失函數達到極小值,其導數變為 0。

我們計劃在其他文章中介紹反向傳播。這裡主要指出的就是訓練過程中出現的求導步驟。

3. 激活函數的類型

線性激活函數:這是一種簡單的線性函數,公式為:f(x) = x。基本上,輸入到輸出過程中不經過修改。

線性激活函數

非線性激活函數:用於分離非線性可分的數據,是最常用的激活函數。非線性方程控制輸入到輸出的映射。非線性激活函數有 Sigmoid、Tanh、ReLU、LReLU、PReLU、Swish 等。下文中將詳細介紹這些激活函數。


非線性激活函數

4. 為什麼人工神經網絡需要非線性激活函數?

神經網絡用於實現複雜的函數,非線性激活函數可以使神經網絡隨意逼近複雜函數。沒有激活函數帶來的非線性,多層神經網絡和單層無異。

現在我們來看一個簡單的例子,幫助我們了解為什麼沒有非線性,神經網絡甚至無法逼近異或門(XOR gate)、同或門(XNOR gate)等簡單函數。下圖是一個異或門函數。叉和圈代表了數據集的兩個類別。當 x_1、x_2 兩個特徵一樣時,類別標籤是紅叉;不一樣,就是藍圈。兩個紅叉對於輸入值 (0,0) 和 (1,1) 都有輸出值 0,兩個藍圈對於輸入值 (0,1) 和 (1,0) 都有輸出值 1。

異或門函數的圖示

從上圖中,我們可以看到數據點非線性可分。也就是說,我們無法畫出一條直線使藍圈和紅叉分開來。因此,我們需要一個非線性決策邊界(non-linear decision boundary)來分離它們。

激活函數對於將神經網絡的輸出壓縮進特定邊界內也非常關鍵。神經元的輸出值可以非常大。該輸出在未經修改的情況下饋送至下一層神經元時,可以被轉換成更大的值,這樣過程就需要極大算力。激活函數的一個任務就是將神經元的輸出映射到有界的區域(如,0 到 1 之間)。

了解這些背景知識之後,我們就可以了解不同類型的激活函數了。

5. 不同類型的非線性激活函數

5.1 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 的問題。

5.2 Tanh

Tanh 激活函數

Tanh 導數

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

1. Tanh 函數也會有梯度消失的問題,因此在飽和時也會「殺死」梯度。

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

5.3 修正線性單元(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 時,該點的梯度未定義,但是這個問題在實現中得到了解決,通過採用左側或右側的梯度的方式。

為了解決 ReLU 激活函數中的梯度消失問題,當 x < 0 時,我們使用 Leaky ReLU——該函數試圖修復 dead ReLU 問題。下面我們就來詳細了解 Leaky ReLU。

5.4 Leaky ReLU

Leaky ReLU 激活函數

該函數試圖緩解 dead ReLU 問題。數學公式為:

Leaky ReLU 的概念是:當 x < 0 時,它得到 0.1 的正梯度。該函數一定程度上緩解了 dead ReLU 問題,但是使用該函數的結果並不連貫。儘管它具備 ReLU 激活函數的所有特徵,如計算高效、快速收斂、在正區域內不會飽和。

Leaky ReLU 可以得到更多擴展。不讓 x 乘常數項,而是讓 x 乘超參數,這看起來比 Leaky ReLU 效果要好。該擴展就是 Parametric ReLU。

5.5 Parametric ReLU

PReLU 函數的數學公式為:

其中是超參數。這裡引入了一個隨機的超參數,它可以被學習,因為你可以對它進行反向傳播。這使神經元能夠選擇負區域最好的梯度,有了這種能力,它們可以變成 ReLU 或 Leaky ReLU。

總之,最好使用 ReLU,但是你可以使用 Leaky ReLU 或 Parametric ReLU 實驗一下,看看它們是否更適合你的問題。

5.6 Swish

Swish 激活函數

該函數又叫作自門控激活函數,它近期由谷歌的研究者發布,數學公式為:

根據論文(https://arxiv.org/abs/1710.05941v1),Swish 激活函數的性能優於 ReLU 函數。

根據上圖,我們可以觀察到在 x 軸的負區域曲線的形狀與 ReLU 激活函數不同,因此,Swish 激活函數的輸出可能下降,即使在輸入值增大的情況下。大多數激活函數是單調的,即輸入值增大的情況下,輸出值不可能下降。而 Swish 函數為 0 時具備單側有界(one-sided boundedness)的特性,它是平滑、非單調的。更改一行代碼再來查看它的性能,似乎也挺有意思。

原文連結:https://www.learnopencv.com/understanding-activation-functions-in-deep-learning/

重磅!AI 有道學術交流群成立啦

掃描下方二維碼,添加 AI有道小助手微信,可申請入林軒田機器學習群(數字 1)、吳恩達 deeplearning.ai 學習群(數字 2)。一定要備註:入哪個群(1 或 2 或 1+2)+ 地點 + 學校/公司 + 暱稱。例如:1+上海+復旦+小牛。 

長按掃碼,申請入群

(添加人數較多,請耐心等待)

 

最新 AI 乾貨,我在看 

相關焦點

  • 深度學習中的四種激活函數
    這篇文章用來整理一下入門深度學習過程中接觸到的四種激活函數
  • 【機器學習基礎】常用激活函數(激勵函數)理解與總結
    那麼我們就來詳細了解下激活函數方方面面的知識。1. 什麼是激活函數?2. 激活函數的用途(為什麼需要激活函數)?3. 有哪些激活函數,都有什麼性質和特點?4. 應用中如何選擇合適的激活函數?如果你對以上幾個問題不是很清楚,下面的內容對你是有價值的。
  • 深入理解深度學習中的激活函數
    導讀數字邏輯電路中的門電路可以讓滿足不同條件的輸入信號輸出開(1)或關(0)輸出。這體現在機器學習中感知機的性質。但我們也知道感知機有個局限性,即無法單層表示非線性變化,而神經網絡往往通過激活函數用來表示非線性變化。即激活函數的作用就是引入非線性。
  • 常用激活函數(激勵函數)理解與總結
    那麼我們就來詳細了解下激活函數方方面面的知識。1. 什麼是激活函數?2. 激活函數的用途(為什麼需要激活函數)?3. 有哪些激活函數,都有什麼性質和特點?4. 應用中如何選擇合適的激活函數?如果你對以上幾個問題不是很清楚,下面的內容對你是有價值的。
  • 深度學習領域最常用的10個激活函數,一文詳解數學原理及優缺點
    激活函數(Activation Function)是一種添加到人工神經網絡中的函數,旨在幫助網絡學習數據中的複雜模式。類似於人類大腦中基於神經元的模型,激活函數最終決定了要發射給下一個神經元的內容。在人工神經網絡中,一個節點的激活函數定義了該節點在給定的輸入或輸入集合下的輸出。標準的計算機晶片電路可以看作是根據輸入得到開(1)或關(0)輸出的數字電路激活函數。
  • 異軍突起的激活函數:ReLU | 小白深度學習入門
    直觀理解深度學習基本概念    2. 白話詳解ROC和AUC    3. 什麼是交叉熵    4. 神經網絡的構成、訓練和算法    5. 深度學習的興起:從NN到DNN ReLU的興起從NN進入到DNN之後,直接的影響是:ReLU的大量應用。
  • 一文讀懂深度學習中的矩陣微積分
    這位ANTLR之父和fast.ai創始人Jeremy Howard一起推出了一篇免費教程,旨在幫你快速入門深度學習中的矩陣微積分。簡明,易懂。DeepMind研究科學家Andrew Trask評價說:如果你想跳過不相干的內容,一文看盡深度學習中所需的數學知識,那麼就是這份資源沒錯了。
  • 深度學習理論分享之——激活函數與Dropout機制
    我們在介紹機器學習中的分類模型時,曾說道,分類模型最終的分類結果往往是根據一定的概率來下結論的。換句話說,如果被認定是類別A的概率超過70%(此處假設是70%)的話,那麼結果為類別A的可信度就很高,我們就可以認為類別A是一個正確的分類結果。因此,不論是在機器學習領域還是更為細分的深度學習領域,其實都是有概率的市場存在。
  • 人工智慧-深度學習-激活函數ReLU,Sigmoid,TanH,ELU,MaxOut
    激活函數:在多層神經網絡中,上層節點的輸出和下層節點的輸入之間具有一個函數關係,這個函數稱為激活函數(又稱激勵函數)激活函數的本質:激活函數是來向神經網絡中引入非線性因素的,通過激活函數,神經網絡就可以擬合各種曲線。
  • 深度學習優化算法入門:三、梯度消失和激活函數
    在訓練過程中,不同batch和不同網絡層的激活分布,應該保持一定程度上的一致。如果不具備這一性質,那麼我們說分布出現了內部協方差偏移(Internal Covariate shift),這可能拖慢訓練進程。這篇文章將討論如何使用激活函數應對前兩個問題。文末將給出一些選擇激活函數的建議。
  • 深度學習基礎篇:如何選擇正確的激活函數?
    而在深度學習中,我們也需要一種類似的機制來分類傳入的信息。不是所有信息都是有用的,一些只是噪音。激活函數可以幫助神經網絡做這種隔離。它激活有用的信息,並抑制無關的數據點。激活函數如此重要,那麼都有哪些比較熱門呢?它們是如何工作的?又適合解決什麼問題?本文將為你一一解答。以下是本文目錄。
  • 一文讀懂深度學習中的矩陣微積分,fast.ai創始人&ANTLR之父出品
    這位ANTLR之父和fast.ai創始人Jeremy Howard一起推出了一篇免費教程,旨在幫你快速入門深度學習中的矩陣微積分。簡明,易懂。DeepMind研究科學家Andrew Trask評價說:如果你想跳過不相干的內容,一文看盡深度學習中所需的數學知識,那麼就是這份資源沒錯了。只需一點關於微積分和神經網絡的基礎知識,就能單刀直入,開始以下的學習啦。
  • 從ReLU到GELU,一文概覽神經網絡的激活函數
    選自mlfromscratch作者:Casper Hansen機器之心編譯參與:熊貓、杜偉激活函數對神經網絡的重要性自不必多言,機器之心也曾發布過一些相關的介紹文章,比如《一文概覽深度學習中的激活函數根據每一層前面的激活、權重和偏置,我們要為下一層的每個激活計算一個值。但在將該值發送給下一層之前,我們要使用一個激活函數對這個輸出進行縮放。本文將介紹不同的激活函數。在閱讀本文之前,你可以閱讀我前一篇介紹神經網絡中前向傳播和反向傳播的文章,其中已經簡單地提及過激活函數,但還未介紹其實際所做的事情。
  • 深度學習中常見的損失函數
    文章來源於AI的那些事兒,作者黃鴻波2018年我出版了《TensorFlow進階指南 基礎、算法與應用》這本書,今天我把這本書中關於常見的損失函數這一節的內容公開出來在深度學習分類任務中,我們經常會使用到損失函數,今天我們就來總結一下深度學習中常見的損失函數。
  • 一文看盡26種神經網絡激活函數(從ReLU到Sinc)
    本文轉載自:機器之心  作者:David Sheehan在本文中,作者對包括 Relu、Sigmoid 在內的 26 種激活函數做了可視化,並附上了神經網絡的相關屬性,為大家了解激活函數提供了很好的資源。
  • ...必備技能:一文實現深度學習數學原理入門,還有吳恩達老師親授課程
    下面的深度學習數學基礎詳解,以DLP為例,你讀完後會對它的數學基礎有全面的了解,並且熟悉用數學解釋算法的基本思路。除了DLP,文末還一併為你準備了RNN、CNN數學原理,以及吳恩達老師的AI數學基礎課程。一文實現AI數學基礎入門,還在等什麼?
  • 神經網絡中的激活函數
    什麼是神經網絡激活函數?激活函數有助於決定我們是否需要激活神經元。如果我們需要發射一個神經元那麼信號的強度是多少。激活函數是神經元通過神經網絡處理和傳遞信息的機制為什麼在神經網絡中需要一個激活函數?在神經網絡中,z是輸入節點與節點權值加上偏差的乘積。
  • 深度學習中眼花繚亂的Normalization學習總結
    為了訓好模型,我們需要非常謹慎地去設定學習率、初始化權重、以及儘可能細緻的參數更新策略,Google 將這一現象總結為Internal Covariate Shift,簡稱 ICS。ICS會導致什麼問題?簡而言之,每個神經元的輸入數據不再是「獨立同分布」。上層參數需要不斷適應新的輸入數據分布,降低學習速度。下層輸入的變化可能趨向於變大或者變小,導致上層落入飽和區,使得學習過早停止。
  • 「修煉開始」一文帶你入門深度學習
    深度學習就是從有限樣例中通過算法總結出一般性的規律,並可以應用到新的未知數據上。比如,我們可以從一些歷史病例的集合中總結出症狀和疾病之間的規律。這樣,當有新的病人時,我們可以利用總結出來的規律來判斷這個病人得了什麼疾病。深度學習主要由上圖所示的幾個部分組成,想學一個深度學習算法的原理,就看它是什麼樣的網絡結構,Loss 是怎麼計算的,預處理和後處理都是怎麼做的。
  • 深度學習激活函數完全指南:在數據科學的諸多曲線上進行現代之旅
    原文:Towards Data Sciencedeephub翻譯組:zhangzc自2012年以來,神經網絡研逐漸成為了人工智慧研究的主流,深度模型迅速取代了之前的各種benchmarks。在這些創新中,激活函數對神經網絡的性能和穩定性起著至關重要的作用。