機器學習中的激活函數綜合指南

2021-01-11 不靠譜的貓

自2012年以來,神經網絡研究的進展主導了大多數人工智慧(AI)文獻。激活函數對神經網絡的效率和穩定性起著至關重要的作用。在這篇文章中,將儘可能簡要地概述激活函數的最新發展,並關注為什麼需要它們以及何時應用它們。

為什麼需要激活函數?

簡而言之,激活函數解決了神經網絡中的兩個關鍵問題:

確保激活映射是非線性的,因此彼此獨立;確保某些輸出具有基本的數值特性,例如,在[- 1,1]範圍內或為有效的概率分布。非線性

為了理解非線性激活映射的需要,考慮以下兩個函數:f(x) = ax + b和g(x) = (c+d)x + (e + f).前者只有兩個常數,而後者有四個。問題是:它們實際上是兩個不同的函數嗎?

答案是否定的,「(c + d)」和「a」具有相同的表達能力。如果你選擇c = 10且d = 2,我可以選擇a = 12,我們會得到相同的結果。e + f和b也是一樣的。為了有效地擁有四個獨立的參數,它們必須是不能組合的。在數學中,這意味著參數之間的關係必須是非線性的。例如,h(x) = sin(cx + d) + fx + e是一個有四個參數的非線性模型。

在神經網絡中,如果層是線性的,兩個連續的層將是可組合的。因此,它們實際上只是一個偽裝的單層。為了不是線性的,所有層都被傳遞到非線性函數中,例如ReLU和Tanh函數,將它們隔離為單獨起作用的單元。

數值特性

當回答是或否的問題時,例如「圖像中是否有人臉」,false被建模為0,true建模為1。給定一個圖像,如果網絡輸出是0.88,我們說網絡回答為true,因為0.88更接近於1而不是0。然而,網絡的輸出可以是2或-7。我們如何保證它的答案在[0,1]範圍內呢?

為此,已經設計了幾個激活函數來保證某些數值屬性。對於二元分類情況,sigmoid函數(σ(x))接受[-∞,∞]範圍內的輸入,並輸出[0,1]範圍內的值。同樣,雙曲正切函數(tanh(x))將[-∞,∞]映射為[-1,1]。對於one-hot編碼的分類數據,softmax函數將所有值壓縮到[0,1]區間,並確保它們全部加起來為1。

通常,這些「數值特性」激活用於網絡的最後一層,即輸出層,因為這通常是唯一需要特殊處理的層。對於其他參數,使用更簡單的非線性,例如ReLU系列。雖然在某些情況下,網絡中間需要特殊的激活,例如用於對象檢測的模型和attention層,但這些並不是規範,不在本文的討論範圍之內。

ReLU系列

在前一節中,我們了解了為什麼需要激活以及它們解決了哪些問題。此外,我們注意到所有層都需要激活函數是獨立的。對於所有普通層,通常使用ReLU系列的激活。

在類似ReLU系列的激活中,使用其中一種而不是另一種並沒有特定的理由。在實踐中,只需要循環嘗試十幾個epochs,看看哪個執行得最好。

也就是說,經驗法則是在開發過程中儘可能長時間地使用原始ReLU激活,如果您的模型執行得不好,則按照Tensorflow 2文檔中給出的建議(也適用於PyTorch用戶)跳到SELU激活,並去掉所有的批歸一化。這可能會給你帶來5%到10%的提升。

下圖總結了ReLU系列中最知名的激活。

ReLU

數學定義為:

ReLU(x) = max(0, x)

如果為正,則返回x,如果為負,則返回0。

這是最簡單的非線性之一。計算max函數非常簡單。ReLU函數的一個較早的用法來自於AlexNet體系結構,它使用這種激活比更傳統的Tanh函數快了近8倍。直到今天,ReLU系列的激活實際上是大多數層的選擇,因為它們在計算上很簡單,但是很有效。

另外,早期的神經網絡受到稱為梯度爆炸/梯度消失的問題的困擾。總而言之,在反向傳播期間,梯度會彼此相乘,因此大梯度會導致梯度爆炸,而接近零的梯度會導致梯度消失。使用ReLU激活,只有兩個可能的梯度:一個為正,另一個為零,負梯度。因此,關於激活函數在該問題上的作用,ReLU有效地解決了爆炸問題,同時也產生了dead gradients問題。

LeakyReLU

大多數人第一次看到ReLU函數時首先要擔心的是:負的部分真的被丟掉了嗎?研究人員提出了LeakyReLU。不是丟掉負的部分,而是返回它的縮小版本。數學上:

LeakyReLU(x) = max(0, x) + min(0.01 x, 0)

這樣,信號不會完全丟失,但會因leak係數而大大降低。實際上,這在某些情況下被證明是有效的。而且,它減輕了dead gradients問題,允許至少一部分信號通過。在下一次激活時,反覆出現主題是否定部分。

為什麼為是0.01呢?讓我們引入一個α變量並使它可訓練。這樣,我們不需要自己定義leak因子;我們讓網絡自己學習最合適的值。表達形式:

PReLU(x) = max(0, x) + min(αx, 0)

請記住,α變量不是全局變量。每個單元都有其可訓練的α。這種激活演示了數據科學的思維方式:如果可以讓機器學習模型決定什麼是最好的,為什麼要自己設置呢?

ELU

為了繼續追求更好的激活效果,在2015年下半年,人們產生了將指數函數用於負部分的想法。指數函數在負值處趨於飽和,這意味著它平穩地趨向於一個固定的常數。使用它,我們可以更接近地模擬原始的ReLU函數,它在0處飽和,但仍然保留了一定程度的負部分。其數學公式如下:

在許多情況下,ELU函數比原來的ReLU函數有明顯的改進。相反,洩漏的變體並沒有始終如一地更好。

該領域的最新進展之一是縮放指數線性單位,即SELU,其主要創新是自歸一化。這意味著,經過培訓後,它將趨向於以零均值和單位方差輸出結果。實際上,這使批標準化層過時了。因此,使用SELU激活的模型更簡單,需要的操作更少。最後,通過使用魔術常數簡單地縮放正負部分來實現自歸一化屬性。正式地:

這一領域的最新進展之一是SELU,其主要創新是自歸一化。這意味著,當訓練時,它將收斂於以零均值和單位方差的輸出結果。在實踐中,這會使批歸一化層變得過時了。因此,使用SELU激活的機器學習模型更簡單,需要的操作更少。數學公式如下:

非單調激活

到目前為止,來自ReLU系列的所有激活都在單調增加。這意味著函數值只會不斷增長。標誌性的非單調函數是使它們下降的拋物線(x)和周期性地上升和下降的正弦函數(sin(x))。

非單調激活的第一個成功建議是Google Brain小組的Swish函數,其簡單定義為:

F(x)= xσ(x)

σ(x)是sigmoid函數。儘管此表達式與ReLU函數並不相似,但它們的圖非常相似,具有接近一致的正部分,負部分在0處飽和,負部分的「dip」或「belly」接近於0(上圖中的藍色部分)。這是通過「self-gating 」機制實現的。基本上,x是「信號」,σ(x)是「gating function」(飽和為零的函數),將σ應用於x並乘以x就是獲取信號並對其自身進行控制。在實驗中,他們發現這種激活在非常深的網絡(30層以上)中優於ReLU函數。

最後,SERLU激活是對SELU函數的改進,保留了自歸一化特性,同時包括一個self-gating機制,可將負值飽和為零。作者將指數函數作為gating operation,而不是sigmoid函數,並重新計算了常數,從而實現了這一目的。這將導致函數的負端出現較大的「傾斜」,類似於Swish函數,但更明顯(上圖中的紅色部分)。SERLU的正式定義為:

注意xe(x)和xσ (x)之間的相似性。兩者都是self-gating機制。

到2020年,現在判斷這些非單調函數是否會經受住時間的考驗並取代ReLU或SELU作為良好的通用替代品還為時過早。

特殊系列

如前所述,一些層需要特殊處理,而不是像ReLU。對於這些層,使用linear、sigmoid、tanh和softmax激活,它們的用例如下:

linear:在需要神經網絡的原始輸出時使用。這對於融合操作很有用,例如sigmoid-cross - sentropy和softmax-cross - sentropy,它們在數值上更穩定,對於非歸一化回歸也很有用。此外,在理論分析中,這種激活對於調試和簡化非常有用。Tanh:用於歸一化回歸問題,其輸出在[-1,1]範圍內。通常與L2損失一起使用。Sigmoid:在二分類問題中將輸出壓縮到[0,1]範圍內。幾乎總是與二元交叉熵損失一起使用。Softmax:在分類語境中,以確保網絡輸出是一個有效的概率分布。這意味著所有的值都在[0,1]範圍內,並且總和為1。與分類交叉熵損失一起使用。正如您所看到的,給定一個問題,很容易選擇應該使用哪個激活。如前所述,經驗法則是始終使用ReLU激活,為最後一層選擇最合適的特殊函數,然後在以後的迭代中擴展這些初始選擇並嘗試進行替換。

最後,值得一提的是,對於某些問題,類並不相互排斥。在這種特殊情況下,單個輸入可能會標記多個類。在這些情況下,sigmoid用於每個類,而不是softmax激活。這樣,所有的輸出都壓縮到[0,1]範圍,但不強制它們加起來等於1。

最後

在本文中,對激活函數的最新技術進行了回顧,並給出了使用方法。總而言之,激活用於使網絡非線性,並對輸出層強制執行特殊屬性。對於內部層,使用ReLU系列,並且根據經驗,儘可能長時間地使用ReLU激活,然後切換到SELU激活並刪除所有批歸一化操作。對於輸出層,請考慮將線性/ tanh激活用於非歸一化/歸一化回歸,將Sigmoid / softmax用於二元/類別分類。

相關焦點

  • 深入理解深度學習中的激活函數
    導讀數字邏輯電路中的門電路可以讓滿足不同條件的輸入信號輸出開(1)或關(0)輸出。這體現在機器學習中感知機的性質。但我們也知道感知機有個局限性,即無法單層表示非線性變化,而神經網絡往往通過激活函數用來表示非線性變化。即激活函數的作用就是引入非線性。
  • 機器學習算法中的7個損失函數的詳細指南
    介紹想像一下-你已經在給定的數據集上訓練了機器學習模型,並準備好將它交付給客戶。但是,你如何確定該模型能夠提供最佳結果?是否有指標或技術可以幫助你快速評估數據集上的模型?當然是有的,簡而言之,機器學習中損失函數可以解決以上問題。
  • Python機器學習算法中的7個損失函數的詳細指南
    介紹想像一下-你已經在給定的數據集上訓練了機器學習模型,並準備好將它交付給客戶。但是,你如何確定該模型能夠提供最佳結果?是否有指標或技術可以幫助你快速評估數據集上的模型?當然是有的,簡而言之,機器學習中損失函數可以解決以上問題。損失函數是我們喜歡使用的機器學習算法的核心。但大多數初學者和愛好者不清楚如何以及在何處使用它們。
  • 神經網絡中的激活函數
    什麼是神經網絡激活函數?激活函數有助於決定我們是否需要激活神經元。如果我們需要發射一個神經元那麼信號的強度是多少。激活函數是神經元通過神經網絡處理和傳遞信息的機制為什麼在神經網絡中需要一個激活函數?在神經網絡中,z是輸入節點與節點權值加上偏差的乘積。
  • 人工神經網絡的驅動者:激活函數是什麼?
    從技術上來講,某個節點的激活函數將其在神經網絡中前一個節點的數據輸入,並輸出一個確定值,這個值繼而指導後續節點如何發動來響應特定輸入信號。本文剖析由激活函數組成的神經網絡,以及神經網絡的生物類似物,並簡要介紹幾種常用的激活函數。神經網絡的結構作為一名數據科學愛好者,你一定見過上面的這張圖片或者與之相似的圖片。這張圖片是對雙層神經網絡工作流程的經典描述。
  • 深度學習激活函數完全指南:在數據科學的諸多曲線上進行現代之旅
    在這些創新中,激活函數對神經網絡的性能和穩定性起著至關重要的作用。這篇文章將儘可能簡要地概述激活函數研究的最新進展,介紹它們的起源以及何時應該被使用。內容提要激活函數有什麼作用?對於其他的網絡層,可以使用更簡單的非線性函數,例如 ReLU 。雖然在某些情況下,網絡中間層需要特殊激活函數,例如目標檢測模型和attention層,但這些並不常見,因此不在本文討論範圍之內。ReLU類在上一節中,我們說明了為什麼需要激活函數,以及它們可以解決哪些問題。此外,我們注意到所有層都需要獨立的激活函數,但這些激活函數只有很少有特殊的功能。
  • 觀點| 我們該如何學習機器學習中的數學
    例如,手動用 NumPy 實現損失函數或最優化算法是理解它們概念非常好的方式。作為通過代碼學習數學的案例,我們可以考慮一個實際的案例,即為神經網絡實現反向傳播和 ReLU 激活函數。作為入門級概念,反向傳播是一種依賴於微積分鏈式求導法則的技術,它能高效計算梯度。為了在神經網絡中利用鏈式求導法則,我們可以使用 ReLU 激活函數的梯度乘以上遊導數。
  • 機器學習中常用的5種回歸損失函數
    這些可都是機器學習大牛最常用的回歸損失函數哦!機器學習中所有的算法都需要最大化或最小化一個函數,這個函數被稱為「目標函數」。其中,我們一般把最小化的一類函數,稱為「損失函數」。它能根據預測結果,衡量出模型預測能力的好壞。
  • 引爆機器學習圈:「自歸一化神經網絡」提出新型激活函數SELU
    在這篇文章中,機器之心對該論文進行了概要介紹。此外,Github 上已有人做出了論文中提出的 SELUs 與 ReLU 和 Leaky ReLU 的對比,我們也對此對比進行了介紹。SNN 的激活函數即稱之為「可縮放指數型線性單元(scaled exponential linear units/SELUs)」,該單元引入了自歸一化的屬性。使用 Banach 的不動點定理(fixed-point theorem),我們證明了激勵值逼近於零均值和單位方差並且通過許多層的前向傳播還是將收斂到零均值和單位方差,即使是存在噪聲和擾動的情況下也是這樣。
  • 深度學習基礎篇:如何選擇正確的激活函數?
    而在深度學習中,我們也需要一種類似的機制來分類傳入的信息。不是所有信息都是有用的,一些只是噪音。激活函數可以幫助神經網絡做這種隔離。它激活有用的信息,並抑制無關的數據點。激活函數如此重要,那麼都有哪些比較熱門呢?它們是如何工作的?又適合解決什麼問題?本文將為你一一解答。以下是本文目錄。1.簡單介紹神經網絡2.什麼是激活函數?
  • 入門| 機器學習中常用的損失函數你知多少?
    選自towards data science作者:Ravindra Parmar機器之心編譯參與:李詩萌、王淑婷本文作者將常用的損失函數分為了兩大類:分類和回歸。然後又分別對這兩類進行了細分和講解,其中回歸中包含了一種不太常見的損失函數:平均偏差誤差,可以用來確定模型中存在正偏差還是負偏差。
  • 谷歌今日上線基於TensorFlow的機器學習速成課程
    谷歌官方描述為機器學習熱愛者的自學指南,且課程資料都是中文書寫,課程視頻都由機器學習技術轉述為中文音頻。這對於中文讀者來說將會有很大的幫助,當然我們也能選擇英文語音以更精確地學習內容。其實準備工作主要分為數學基礎、編程基礎和函數庫三個部分,我們給各位讀者提供機器之心的資源文章合集,以便查閱相關問題。在數學方面,代數相關的變量、係數、線性方程、對數和 Sigmoid 函數有助於讀者了解模型最基本的表達,包括怎麼定義的推斷過程、如何構建的損失函數以及激活函數等。
  • Pytorch_第九篇_神經網絡中常用的激活函數
    神經網絡中常用的激活函數Introduce理論上神經網絡能夠擬合任意線性函數,其中主要的一個因素是使用了非線性激活函數(因為如果每一層都是線性變換,那有啥用啊,始終能夠擬合的都是線性函數啊)。本文主要介紹神經網絡中各種常用的激活函數。以下均為個人學習筆記,若有錯誤望指出。
  • 機器學習經典損失函數比較
    機器學習經典損失函數比較 胡薇 發表於 2018-06-13 17:53:53 所有的機器學習算法都或多或少的依賴於對目標函數最大化或者最小化的過程。
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    原標題:機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用高級研修班通信和信息技術創新人才培養工程項目辦公室 通人辦〔2018〕 第5號 機器學習、深度學習算法原理與案例實踐暨Python
  • AI瘋狂進階——激活函數篇
    神經網絡激活函數的作用是什麼?2. 如何評價激活函數的好壞?3. ReLU存在哪些問題?4. 存在替換萬年ReLU的激活函數嗎?激活函數對於人工神經網絡模型學習、理解非常複雜的數據來說具有十分重要的作用。激活函數給神經元引入了非線性因素,使得神經網絡可以逼近任何非線性函數,這樣神經網絡就可以應用到眾多的非線性模型中。
  • 神經網絡為何非激活函數不可?
    本文作者 Vandit Jain 對激活函數的相關知識進行了一個較為全面的總結,重點聚焦於以下幾個方面:一、激活函數是什麼?簡單地說,激活函數就是加入到人工神經網絡中的一個函數,目的在於幫助神經網絡從數據中學習複雜模式。
  • 機器學習之模型評估(損失函數)
    損失函數最小化機器學習的
  • 如何選擇神經網絡激活函數:有效的改善模型學習模式的能力
    這些ANN稱為網絡,因為它們由不同的功能組成,這些功能通過使用過去稱為訓練示例的經驗來檢測數據中的關係和模式來收集知識。 數據中的學習模式通過適當的激活函數進行修改,並作為神經元的輸出呈現,如下圖所示:什麼是激活函數?在神經網絡模型中怎麼使用?激活函數是神經網絡中用於計算輸入和偏差的加權和的函數,用於確定神經元是否可以釋放。
  • ICML論文|這違反直覺的「升噪」方法,反而能很好的解決激活函數...
    我們提出了一種新技術來訓練神經網絡,當其輸入很大時使用高度飽和的激活函數。主要的方法是在激活函數中的飽和狀態注入噪音,並學習噪音等級。使用這種方法讓我們發現,我們可以訓練帶有比之前更廣泛的激活函數家族的神經網絡。在