人工智慧-深度學習-激活函數ReLU,Sigmoid,TanH,ELU,MaxOut

2021-01-11 製造業企業信息化

激活函數:在多層神經網絡中,上層節點的輸出和下層節點的輸入之間具有一個函數關係,這個函數稱為激活函數(又稱激勵函數)

激活函數的本質:

激活函數是來向神經網絡中引入非線性因素的,通過激活函數,神經網絡就可以擬合各種曲線。

舉一個例子來說明:假如我的任務是,將下面的這幅圖中的三角形和圓形分開,也就是一個典型的二分類問題:

我們用肉眼能很輕鬆的得出結論:無法用一條直線將這兩種圖形完全分開。比如我這裡使用一個單層感知機:

方程:

就是上圖右邊的直線,無論如何更改參數,它都不能很好的完成這個二分類問題,因為問題本身就是

線性不可分

的。

在每一層疊加完後,我們為輸出與輸入之間加上一個激活函數,此時的方程就變成了這樣:

這樣也許就能將這個線性不可分的問題解決了。最後也許就是這個樣子:

常見的激活函數:

1. ReLU是目前使用最頻繁的一個函數(Rectified Linear Unit),如果你不知道你的激活函數應該選擇哪個,那麼建議你選擇ReLU試試。一般情況下,將ReLU作為你的第一選擇

公式:導數:

首先,Relu一定程度上緩解了梯度問題(正區間) 其次, 計算速度非常快,這一點也可以明顯比較出來。 最後, Relu加速了模型的收斂, 比sigmoid與tanh要快很多。

ReLu是分段線性函數,它的非線性性很弱,因此網絡一般要做得很深。但這正好迎合了我們的需求,因為在同樣效果的前提下,往往深度比寬度更重要,更深的模型泛化能力更好。所以自從有了Relu激活函數,各種很深的模型都被提出來了,一個標誌性的事件是應該是VGG模型和它在ImageNet上取得的成功.

ReLU也有幾個需要特別注意的問題:

1)ReLU的輸出不是zero-centered

2)某些神經元可能永遠不會被激活(Dead ReLU Problem),導致相應的參數永遠不能被更新。

有兩個主要原因可能導致這種情況產生:

1) 非常不幸的參數初始化,這種情況比較少見

2) learning rate太高導致在訓練過程中參數更新太大,不幸使網絡進入這種狀態。解決方法是可以採用Xavier初始化方法,以及避免將learning rate設置太大或使用adagrad等自動調節learning rate的算法。

人們為了解決Dead ReLU Problem,提出了將ReLU的前半段設為αx 非0,通常α=0.01 ( Leaky ReLU函數: f(x)=max(αx,x) )。為了解決zero-centered問題,提出了ELU (Exponential Linear Units) 函數,f(x)=x if x>0 otherwise a(e^x 1).

2. Sigmoid函數

公式:求導:

sigmod函數的導數:

雖然simoid函數有諸多缺陷,但依然是目前主流的激活函數之一。其主要有以下幾個缺陷:sigmoid 極容易導致梯度消失問題。

如果我們初始化神經網絡的權值為 [0,1] 之間的隨機值,由反向傳播算法的數學推導可知,梯度從後向前傳播時,每傳遞一層梯度值都會減小為原來的0.25倍,如果神經網絡隱層特別多,那麼梯度在穿過多層後將變得非常小接近於0,即出現梯度消失現象;當網絡權值初始化為 (1,+∞) (1,+∞)(1,+∞) 區間內的值,則會出現梯度爆炸情況。

計算費時。在神經網絡訓練中,常常要計算sigmid的值, 冪計算會導致耗時增加。但這不是什麼大問題,最多是換個顯卡, 模型跑的時間長點而已。 sigmoid 函數不是關於原點中心對稱的(zero-centered)。

3. Tanh函數:

公式:導數:

它解決了Sigmoid函數的不是zero-centered輸出問題,然而,梯度消失(gradient vanishing)的問題和冪運算的問題仍然存在。

4.Leaky ReLU函數(PReLU)

函數表達式

人們為了解決Dead ReLU Problem,提出了將ReLU的前半段設為αx 而非0,通常α=0.01。另外一種直觀的想法是基於參數的方法,即ParametricReLU:f(x)=max(αx,x) 其中α 可由方向傳播算法學出來。理論上來講,Leaky ReLU有ReLU的所有優點,外加不會有Dead ReLU問題,但是在實際操作當中,並沒有完全證明Leaky ReLU總是好於ReLU。

5.ELU (Exponential Linear Units) 函數

函數公式:

函數及其導數的圖像如下圖所示:

ELU也是為解決ReLU存在的問題而提出,顯然,ELU有ReLU的基本所有優點,以及:

不會有Dead ReLU問題輸出的均值接近0,zero-centered它的一個小問題在於計算量稍大。類似於Leaky ReLU,理論上雖然好於ReLU,但在實際使用中目前並沒有好的證據ELU總是優於ReLU。

6.MaxOut函數

這個函數可以參考論文《maxout networks》,Maxout是深度學習網絡中的一層網絡,就像池化層、卷積層一樣等,我們可以把maxout 看成是網絡的激活函數層,我們假設網絡某一層的輸入特徵向量為:X=(x1,x2,……xd),也就是我們輸入是d個神經元。Maxout隱藏層每個神經元的計算公式如下:

上面的公式就是maxout隱藏層神經元i的計算公式。其中,k就是maxout層所需要的參數了,由我們人為設定大小。就像dropout一樣,也有自己的參數p(每個神經元dropout概率),maxout的參數是k。公式中Z的計算公式為:

權重w是一個大小為(d,m,k)三維矩陣,b是一個大小為(m,k)的二維矩陣,這兩個就是我們需要學習的參數。如果我們設定參數k=1,那麼這個時候,網絡就類似於以前我們所學普通的MLP網絡。

我們可以這麼理解,本來傳統的MLP算法在第i層到第i+1層,參數只有一組,然而現在我們不這麼幹了,我們在這一層同時訓練n組的w、b參數,然後選擇激活值Z最大的作為下一層神經元的激活值,這個max(z)函數即充當了激活函數。

應用中如何選擇合適的激活函數?

這個問題目前沒有確定的方法,憑一些經驗吧。

1)深度學習往往需要大量時間來處理大量數據,模型的收斂速度是尤為重要的。所以,總體上來講,訓練深度學習網絡儘量使用zero-centered數據 (可以經過數據預處理實現) 和zero-centered輸出。所以要儘量選擇輸出具有zero-centered特點的激活函數以加快模型的收斂速度。

2)如果使用 ReLU,那麼一定要小心設置 learning rate,而且要注意不要讓網絡出現很多 「dead」 神經元,如果這個問題不好解決,那麼可以試試 Leaky ReLU、PReLU 或者 Maxout.

3)最好不要用 sigmoid,你可以試試 tanh,不過可以預期它的效果會比不上 ReLU 和 Maxout.

相關焦點

  • Pytorch_第九篇_神經網絡中常用的激活函數
    神經網絡中常用的激活函數Introduce理論上神經網絡能夠擬合任意線性函數,其中主要的一個因素是使用了非線性激活函數(因為如果每一層都是線性變換,那有啥用啊,始終能夠擬合的都是線性函數啊)。本文主要介紹神經網絡中各種常用的激活函數。以下均為個人學習筆記,若有錯誤望指出。
  • 深度學習基礎篇:如何選擇正確的激活函數?
    而在深度學習中,我們也需要一種類似的機制來分類傳入的信息。不是所有信息都是有用的,一些只是噪音。激活函數可以幫助神經網絡做這種隔離。它激活有用的信息,並抑制無關的數據點。激活函數如此重要,那麼都有哪些比較熱門呢?它們是如何工作的?又適合解決什麼問題?本文將為你一一解答。以下是本文目錄。1.簡單介紹神經網絡2.什麼是激活函數?
  • 人工智慧系列(六) 深度學習中的神經網絡
    原力君在系列的第五篇《人工智慧系列(五) 深度學習簡介》中提到深度學習可以看作是一種更高級的函數擬合方法;人工神經網絡、激活函數、代價函數、梯度下降、反向傳播是深度學習的幾個關鍵點;常見的深度學習神經網絡結構有多層感知機、DNN、CNN、RNN等。
  • 從ReLU到GELU,一文概覽神經網絡的激活函數
    選自mlfromscratch作者:Casper Hansen機器之心編譯參與:熊貓、杜偉激活函數對神經網絡的重要性自不必多言,機器之心也曾發布過一些相關的介紹文章,比如《一文概覽深度學習中的激活函數本文同樣關注的是激活函數。來自丹麥技術大學的 Casper Hansen 通過公式、圖表和代碼實驗介紹了 sigmoid、ReLU、ELU 以及更新的 Leaky ReLU、SELU、GELU 這些激活函數,並比較了它們的優勢和短板。在計算每一層的激活值時,我們要用到激活函數,之後才能確定這些激活值究竟是多少。
  • 如何選擇神經網絡激活函數:有效的改善模型學習模式的能力
    應用AF後的非線性輸出如下:那麼激活函數有什麼需求?對這些激活函數的需求包括將線性輸入轉換為非線性輸出,這有助於更深層網絡學習高階多項式。 非線性激活函數的一個特殊屬性是它們是可微的,否則它們在深度神經網絡的反向傳播期間將無法工作。 深度神經網絡是具有多個隱藏層和一個輸出層的神經網絡。 了解多個隱藏層和輸出層的構成是我們的目標。
  • 深入理解深度學習中的激活函數
    神經元輸出神經元的輸出信號是由激活函數o = f(∑)得處理後,得到得輸出,如圖所示性質激活函數是一個幾乎可微得函數,滿足非線性,連續性常見激活函數sigmoid;tanh;ReLU;LReLU, PReLU, RReLU;ELU(Exponential Linear Units);softplus;softsign,softmax
  • 神經網絡中的激活函數
    由於概率範圍在0到1之間,所以sigmoid函數值存在於0到1之間。但是如果我們想分類更多的是或不是呢?如果我想預測多個類,比如預測晴天、雨天或陰天,該怎麼辦?Softmax激活有助於多類分類Softmax激活函數Sigmoid激活函數用於兩類或二類分類,而softmax用於多類分類,是對Sigmoid函數的一種推廣。
  • 深度學習激活函數完全指南:在數據科學的諸多曲線上進行現代之旅
    原文:Towards Data Sciencedeephub翻譯組:zhangzc自2012年以來,神經網絡研逐漸成為了人工智慧研究的主流,深度模型迅速取代了之前的各種benchmarks。在這些創新中,激活函數對神經網絡的性能和穩定性起著至關重要的作用。這篇文章將儘可能簡要地概述激活函數研究的最新進展,介紹它們的起源以及何時應該被使用。
  • 代碼詳解:基於Python建立任意層數的深度神經網絡 - 讀芯術
    一般來說,神經元模型的輸出值是a=g(Wx+b),其中g是激活函數(sigmoid,tanh, ReLU, …)。數據集假設有一個很大的資料庫,裡面記錄了很多天氣數據,例如,氣溫、溼度、氣壓和降雨率。問題陳述:一組訓練數據m_train,下雨標記為(1),不下雨標記為(0)。一個測試數據組m_test,標記是否下雨。
  • ICML論文|這違反直覺的「升噪」方法,反而能很好的解決激活函數...
    論文作者簡介:Yoshua Bengio:人工智慧領域的知名學者,在神經網絡和深度學習領域的重要貢獻廣為人知,目前在蒙特婁大學任職。1、簡介類似ReLU和Maxout(Goodfellow等,2013)單元等分段線性激活函數的引入,對深度學習帶來了深遠的影響,並且成為一種催化劑,讓更深的網絡訓練成為可能。多虧了 ReLU,我們第一次看到了純監督下的深度網絡可以進行訓練(Glorot等,2011),而使用 tanh 非線性函數只能訓練較淺的網絡。
  • 超越ReLU卻鮮為人知3年後被挖掘:BERT、GPT-2等都在用的激活函數
    這些困難的二元決策通過 Sigmoid 激活函數進行平滑化,從而具有非常快的解碼速度,並可以利用反向傳播進行訓練。但是,隨著網絡深度的不斷增加,利用 Sigmoid 激活函數來訓練被證實不如非平滑、低概率性的 ReLU 有效(Nair & Hinton, 2010),因為 ReLU 基於輸入信號做出門控決策。
  • 理解神經網絡:從神經元到RNN、CNN、深度學習
    主要的激活函數有5種,date,step,sigmoid,tanh和ReLU。這些都將在接下來進行詳細地描述。這個問題隨著層數的增加而增加,從而使神經網絡的學習停留在一定的水平上。Tanh函數Tanh(z)函數是sigmoid函數的縮放版本,它的輸出範圍變成了[-1,1],而不是[0,1].
  • 人工智慧-深度學習-神經網絡結構MLP,CNN,RNN,LSTM
    人工神經網絡、激活函數、代價函數、梯度下降、反向傳播是深度學習的幾個關鍵點;常見的深度學習神經網絡結構有多層感知器MLP、CNN、RNN、LSTM等。隱藏層:其神經元與輸入層是全連接的,假設輸入層用向量X表示,則隱藏層的輸出就是 f (W1X+b1),W1是權重(也叫連接係數),b1是偏置,函數f 可以是常用的sigmoid函數或者tanh函數(如下圖)。
  • 教程| 自動化機器學習第一步:使用Hyperopt自動選擇超參數
    本文由機器之心編輯,「機器之心」專注生產人工智慧專業性內容,適合開發者和從業者閱讀參考。點擊右上角即刻關注有時候在學習神經網絡教程時,我們通常會看到有的實驗似乎理所當然地就選定了某種神經網絡架構以及特定的網絡層數、激活函數、損失函數等等,卻沒有解釋原因。因為解釋起來有點難。
  • 人工神經網絡的驅動者:激活函數是什麼?
    這就是激活函數的來源或者至少與之相似。在這裡實際數據是冗餘的,神經元只需判斷其是否超過閾值。就目前所知,生物神經元和人工神經元之間的一個顯著差異是,前者要麼被激活,要麼不被激活,只有兩種結果,而後者的激活程度是在一定範圍內。激活函數的種類激活函數多種多樣。
  • 機器學習中的激活函數綜合指南
    自2012年以來,神經網絡研究的進展主導了大多數人工智慧(AI)文獻。激活函數對神經網絡的效率和穩定性起著至關重要的作用。在這篇文章中,將儘可能簡要地概述激活函數的最新發展,並關注為什麼需要它們以及何時應用它們。為什麼需要激活函數?
  • 吳恩達深度學習(20)-激活函數的導數和神經網絡的梯度下降
    激活函數的導數(Derivatives of activation functions)在神經網絡中使用反向傳播的時候,你真的需要計算激活函數的斜率或者導數。針對以下四種激活,求其導數如下:1)sigmoid activation function其具體的求導如下(如果你學過微積分,那麼這個求導對於你來說其實並不難): 公式1:註:當z = 10或z=-10 d/dz g(z)≈0當z= 0 d/dz g(z)=g(z)(1-g(z))=1/4
  • AI瘋狂進階——激活函數篇
    神經網絡激活函數的作用是什麼?2. 如何評價激活函數的好壞?3. ReLU存在哪些問題?4. 存在替換萬年ReLU的激活函數嗎?激活函數對於人工神經網絡模型學習、理解非常複雜的數據來說具有十分重要的作用。激活函數給神經元引入了非線性因素,使得神經網絡可以逼近任何非線性函數,這樣神經網絡就可以應用到眾多的非線性模型中。
  • 深度學習下的醫學圖像分析(二)
    在《深度學習下的醫學圖像分析》系列的第一篇文章中,我們介紹了一些使用OpenCV和DICOM圖像基礎知識進行圖像處理的過程。本文,我們將從「卷積神經網絡」的角度討論深度學習。每一層都有一些特定的函數。每個卷積層都是三維的,所以我們用體積來作為度量標準。再進一步,卷積神經網絡的每一層都會通過一個可微函數來將激活量轉化為另一個,這個函數叫做「激活」或者「轉化函數」。「卷積神經網絡」包含的不同實體分別是:輸入層、過濾器(或內核)、卷積層、激活層、聚積層、批處理層。雖然這些層的組合排列各異,但是在不同的排列中還是存在一些規律的,給我們提供了不同的深度學習架構。