超越ReLU卻鮮為人知3年後被挖掘:BERT、GPT-2等都在用的激活函數

2020-12-06 機器之心Pro

機器之心報導

機器之心編輯部

至少在NLP領域裡,GELU已經成為了眾多業內最佳模型的選擇。

作為決定神經網絡是否傳遞信息的「開關」,激活函數對於神經網絡而言至關重要。不過今天被人們普遍採用的 ReLU 真的是最高效的方法嗎?最近在社交網絡上,人們找到了一個看來更強大的激活函數:GELU,這種方法早在 2016 年即被人提出,然而其論文迄今為止在 Google Scholar 上的被引用次數卻只有 34 次。

其實,GELU 已經被很多目前最為領先的模型所採用。據不完全統計,BERT、RoBERTa、ALBERT 等目前業內頂尖的 NLP 模型都使用了這種激活函數。另外,在 OpenAI 聲名遠播的無監督預訓練模型 GPT-2 中,研究人員在所有編碼器模塊中都使用了 GELU 激活函數。

GELU 論文的作者來自 UC Berkeley 和豐田工業大學芝加哥分校:

論文連結:https://arxiv.org/pdf/1606.08415.pdf

「現任」最流行的激活函數 ReLU

在講述 GELU 之前,讓我們先回顧一下目前最為流行的線性整流函數(Rectified Linear Unit, ReLU),它又稱修正線性單元。RELU 是多倫多大學 Vinod Nair 與圖靈獎獲得者 Geoffrey Hinton 等人的研究,其研究被 ICML 2010 大會接收。

RELU 是人工神經網絡中最常用的激活函數(activation function),通常指代以「斜坡」函數及其變種為代表的非線性函數族。這個函數族比較常見的有 ReLU 以及 Leaky ReLU。

通常意義下,線性整流函數指代數學中的斜坡函數,即:

函數圖像如下:

而在神經網絡中,線性整流作為神經元的激活函數,定義了該神經元在線性變換之後的非線性輸出結果。ReLU 可以對抗梯度爆炸/消失問題,相對而言計算效率也很高。因為在 2012 年被著名的計算機視覺模型 AlexNet 應用,ReLU 變得流行開來,目前它被普遍認為是效果最好的激活函數。

激活函數發展史

早期人工神經元使用二元閾值單元(Hopfield, 1982; McCulloch & Pitts, 1943)。這些困難的二元決策通過 Sigmoid 激活函數進行平滑化,從而具有非常快的解碼速度,並可以利用反向傳播進行訓練。但是,隨著網絡深度的不斷增加,利用 Sigmoid 激活函數來訓練被證實不如非平滑、低概率性的 ReLU 有效(Nair & Hinton, 2010),因為 ReLU 基於輸入信號做出門控決策。

儘管 ReLU 缺少統計學意義上的支持,但依然是一種非常有競爭力的工程解決方案,其收斂速度和效果好於 Sigmoid 激活函數。得益於 ReLU 的成功,近來有一個它的改進版——ELU 函數。這種函數可以讓類似 ReLU 的非線性函數能夠輸出負值並提升訓練速度。總之,對於激活函數的選擇也是神經網絡架構設計中重要的一部分。

深度非線性分類器可以和數據擬合地很好,使得設計者需要面對隨機正則化(如在隱層中加入噪聲)或者採用 dropout 機制。這兩個選擇依然是和激活函數割裂的。一些隨機正則化可以讓網絡表現得像是很多個網絡的組合,並可以提升精確度。

因此,非線性和 dropout 共同決定了神經元的輸出,但這兩種創新依然存在區別。此外,非線性和 dropout 彼此也不將對方包含在內,因為流行的隨機正則化在執行時與輸入無關,並且非線性也獲得此類正則化的輔助。

在本文中,研究者提出了一種新的非線性激活函數,名為高斯誤差線性單元(Gaussian Error Linear Unit,GELU)。GELU 與隨機正則化有關,因為它是自適應 Dropout 的修正預期(Ba & Frey, 2013)。這表明神經元輸出的概率性更高。研究者發現,在計算機視覺、自然語言處理和自動語音識別等任務上,使用 GELU 激活函數的模型性能與使用 ReLU 或 ELU 的模型相當或超越了它們。

GELU 激活函數,來點數學

研究者表明,受到 Dropout、ReLU 等機制的影響,它們都希望將「不重要」的激活信息規整為零。我們可以理解為,對於輸入的值,我們根據它的情況乘上 1 或 0。更「數學」一點的描述是,對於每一個輸入 x,其服從於標準正態分布 N(0, 1),它會乘上一個伯努利分布 Bernoulli(Φ(x)),其中Φ(x) = P(X ≤ x)。

隨著 x 的降低,它被歸零的概率會升高。對於 ReLU 來說,這個界限就是 0,輸入少於零就會被歸零。這一類激活函數,不僅保留了概率性,同時也保留了對輸入的依賴性。

好了,現在我們可以看看 GELU 到底長什麼樣子了。我們經常希望神經網絡具有確定性決策,這種想法催生了 GELU 激活函數的誕生。這種函數的非線性希望對輸入 x 上的隨機正則化項做一個轉換,聽著比較費勁,具體來說可以表示為:Φ(x) × Ix + (1 Φ(x)) × 0x = xΦ(x)。

我們可以理解為,對於一部分Φ(x),它直接乘以輸入 x,而對於另一部分 (1 Φ(x)),它們需要歸零。不太嚴格地說,上面這個表達式可以按當前輸入 x 比其它輸入大多少來縮放 x。

因為高斯概率分布函數通常根據損失函數計算,因此研究者定義高斯誤差線性單元(GELU)為:

上面這個函數是無法直接計算的,因此可以通過另外的方法來逼近這樣的激活函數,研究者得出來的表達式為:

雖然研究者表示高斯概率分布函數的均值與方差都可以設置為可訓練,但他們簡單地採用均值為 0 方差為 1。看到這樣的表達式,讓人想到了谷歌 2017 年提出來的 Swish 激活函數,它的表達式可以簡單寫為:f(x) = x · sigmoid(x)。

GELU 激活函數的圖像。

在 Quoc V. Le 等人研究的成果中,他們將 Swish 激活函數定義為 x · σ(βx),其中 σ() 是標準的 sigmoid 函數,β可以是常數,也可以是可訓練的參數。這樣的激活函數是「被搜索」出來的,研究者在一系列函數族中做自動搜索,並表示 Swish 激活函數的效果最好。

通過搜索查找到的激活函數,它們效果都還不錯,選自 arXiv: 1710.05941。

不服跑分:GELU vs ReLU

研究者對 GELU 和 ReLU、ELU 三個激活函數進行了性能上的比較。他們選擇了以下任務:

MNIST 圖片分類(10 類,6 萬張訓練圖片和 1 萬張測試圖片);TIMIT 語音識別(3696 個訓練樣本、1152 個驗證樣本和 192 個測試樣本);CIFAR-10/100 分類(10/100 個類,5 萬的訓練樣本和 1 萬的測試樣本)。MNIST 圖片分類任務

研究者在一個全連接網絡中測試了 MNIST 分類任務,其中 GELU 的參數是μ = 0、σ = 1。ELU 則是α = 1。每個網絡都有 8 個層、128 個神經元。

圖 2 左:無 dropout 模型,圖右:模型設置 dropout 為 0.5。

圖 3:MNIST 魯棒性結果。

TIMIT 語音識別任務

研究者需要解決的另一項挑戰是利用 TIMIT 數據集進行音素識別(phone recognition),該數據集包含 680 名說話者在無聲環境中的錄音。該系統是一個包含 2048 個神經元的 5 層寬分類器(Mohamed et al., 2012),包含 39 個輸出語音標籤。

圖 5:TIMIT 語音識別變化曲線圖。

CIFAR-10/100 分類任務

研究者利用 5000 個驗證樣本來對初始學習率 {10^3,10^4,10^5} 進行微調,然後基於交叉驗證的學習率再次在整個訓練集上進行訓練。他們通過 Adam 對 200 個 epoch 優化,並在第 100 個 epoch 上學習率衰減為零。如下圖 6 所示,每條曲線是三次運行結果取中間值得出的。

圖 6:CIFAR-10 數據集上的結果。

不服跑分:GELU vs Swish

因為表達式差不多,一個是固定係數 1.702,另一個是可變係數 β,Swish 和 GELU 的性質與效果非常類似。在 Swish 論文(SEARCHING FOR ACTIVATION FUNCTIONS)中,研究者對比了不同激活函數的效果,我們可以看到在視覺或語言任務中,Swish 效果要更好一些。

例如在 ImageNet 中訓練 Inception-ResNet-v2,Swish 還是要稍微超過 GELU,其中每一個評估值都記錄了三次運行的結果。

在機器翻譯任務上,研究者在 WMT 2014 English→German 數據集上測試了 12 層 Transformer 的效果。在不同的測試集上,似乎 Swish 激活函數都是最好的,當然 GELU 的效果也不差,它們相差並不大。

最後,我們在 GELU 的引用文獻中發現了大量序列建模都採用它作為激活函數,不論是語言建模還是聲學建模。也許之前序列建模常採用 tanh() 而不是 ReLU() 作為激活函數,在發現有更好的選擇後,更多的研究者嘗試接受這種非線性單元。

如前文所述,GELU 的近似實現方式有兩種,藉助 tanh() 和藉助σ()。我們在 GPT-2 的官方代碼中也發現,更多研究者採用了 tanh() 的實現方式儘管它看起來要比 xσ(1.702x) 複雜很多。

# GPT-2 的 GELU 實現def gelu(x): return 0.5*x*(1+tf.tanh(np.sqrt(2/np.pi)*(x+0.044715*tf.pow(x, 3))))

不管怎麼樣,作為神經網絡最基礎的模塊,我們總希望在 ReLU 之上,在 GELU 和 Swish 之上能有更多的創新與觀點。

相關焦點

  • 從ReLU到GELU,一文概覽神經網絡的激活函數
    sigmoid 這樣的函數常被稱為非線性函數,因為我們不能用線性的項來描述它。很多激活函數都是非線性或者線性和非線性的組合(有可能函數的一部分是線性的,但這種情況很少見)。這基本上沒什麼問題,但值恰好為 0 或 1 的時候除外(有時候確實會發生這種情況)。為什麼這會有問題?
  • GPT-2沒什麼神奇的,PyTorch 就可以復現代碼
    註:幾乎所有代碼都是從Hugging Face(https://github.com/huggingface/transformers/blob/master/src/transformers/modeling_gpt2.py)的 GPT-2 實現中複製、啟發和引用的,只保留了簡單的基本要素。
  • Pytorch_第九篇_神經網絡中常用的激活函數
    神經網絡中常用的激活函數Introduce理論上神經網絡能夠擬合任意線性函數,其中主要的一個因素是使用了非線性激活函數(因為如果每一層都是線性變換,那有啥用啊,始終能夠擬合的都是線性函數啊)。本文主要介紹神經網絡中各種常用的激活函數。以下均為個人學習筆記,若有錯誤望指出。
  • 超越BERT 和 GPT,微軟亞洲研究院開源新模型 MASS!
    圖 2 MASS 框架如圖 2 所示,編碼器端的第 3-6 個標記被掩蔽,而在解碼器端,僅有被掩蔽的標記被預測出來,而其他標記則被掩蔽。圖 3 k = 1時,編碼器端一個標記被掩蔽,而解碼器端則會預測出該掩蔽的標記當 k = m(m 是序列的長度)時,在 MASS 中,編碼器端的所有標記都被掩蔽,而解碼器端會預測所有的標記,如圖 4 所示。解碼器端無法從編碼器端提取任何信息,MASS 等同於 GPT 中的標準語言模型。
  • 人工智慧-深度學習-激活函數ReLU,Sigmoid,TanH,ELU,MaxOut
    舉一個例子來說明:假如我的任務是,將下面的這幅圖中的三角形和圓形分開,也就是一個典型的二分類問題:我們用肉眼能很輕鬆的得出結論:無法用一條直線將這兩種圖形完全分開。比如我這裡使用一個單層感知機:方程: 就是上圖右邊的直線,無論如何更改參數,它都不能很好的完成這個二分類問題,因為問題本身就是線性不可分的。
  • 如何選擇神經網絡激活函數:有效的改善模型學習模式的能力
    這些模型的輸出如下:每層的這些輸出都將導入多層網絡(如深度神經網絡)的下一個後續層,直到獲得最終輸出為止,但默認情況下它們是線性的。 預期的輸出確定要在給定網絡中部署的激活功能的類型。 但是,由於輸出本質上是線性的,因此需要非線性激活函數才能將這些線性輸入轉換為非線性輸出。 這些激活函數是傳遞函數,可應用於線性模型的輸出以生成轉換後的非線性輸出,以備進一步處理。
  • 詞向量詳解:從word2vec、glove、ELMo到BERT
    目前,詞向量(又叫詞嵌入)已經成為NLP領域各種任務的必備一步,而且隨著bert elmo,gpt等預訓練模型的發展,詞向量演變為知識表示方法,但其本質思想不變。學習各種詞向量訓練原理可以很好地掌握NLP各種方法。生成詞向量的方法有很多種,本文重點介紹word2vec,glove和bert。
  • 完勝ReLU!斯坦福的神經網絡用這種激活函數,高保真還原圖像視頻
    SIREN在這個方向上進行了突破,通過採用周期性激活函數Sine代替常見的非線性激活函數(如ReLU、TanH等),以連續的方式進行數據存儲。相比於ReLU、TanH等非周期性的激活函數來說,SIREN將正弦周期函數用作激活函數,相當於為神經網絡引入了周期性。
  • ReLU到Sinc的26種神經網絡激活函數可視化大盤點
    修正線性單元(Rectified linear unit,ReLU)是神經網絡中最常用的激活函數。它保留了 step 函數的生物學啟發(只有輸入超出閾值時神經元才激活),不過當輸入為正的時候,導數不為零,從而允許基於梯度的學習(儘管在 x=0 的時候,導數是未定義的)。使用這個函數能使計算變得很快,因為無論是函數還是其導數都不包含複雜的數學運算。
  • 性能優於ReLU,斯坦福用周期激活函數構建隱式神經表示,Hinton點讚
    機器之心報導參與:杜偉、小舟、魔王使用非線性周期函數構建的神經架構效果優於 ReLU?斯坦福的一項研究做出了嘗試。這個非線性激活函數效果比 ReLU 還好?近日,史丹福大學的一項研究提出利用周期性激活函數進行隱式神經表示,即正弦表示網絡(sinusoidal representation network,SIREN),並展示了它們非常適合表示複雜的自然信號及其導數。
  • 淺談超越函數(一)
    首先什麼叫超越函數呢?超越函數(Transcendental Functions),指的是變量之間的關係不能用有限次加、減、乘、除、乘方大家之前學習過的三角函數、指數函數、對數函數等都屬於超越函數。      我們從y=e^x(e的x次方)和y=lnx這兩個基本的超越函數談起,關於它倆有著兩個重要不等式:       上述兩個結論是不等式放縮問題的重要工具。
  • 乾貨| BERT fine-tune 終極實踐教程
    不過所幸的是谷歌滿足了Issues#2裡各國開發者的請求,針對大部分語言都公布了BERT的預訓練模型。因此在我們可以比較方便地在自己的數據集上進行fine-tune。下載預訓練模型對於中文而言,google公布了一個參數較小的BERT預訓練模型。
  • NLP之文本分類:「Tf-Idf、Word2Vec和BERT」三種模型比較
    詞袋法:用scikit-learn進行特徵工程、特徵選擇以及機器學習,測試和評估,用lime解釋。詞嵌入法:用gensim擬合Word2Vec,用tensorflow/keras進行特徵工程和深度學習,測試和評估,用Attention機制解釋。
  • 抓超越函數本質 探超越夢想策略
    4月12日下午,2017—2018學年第二學期的數學《高考講壇》教研活動在南昌二中紅谷灘行政樓二樓報告廳舉行。  周啟新老師著重於高考熱點壓軸題超越函數,將其多年豐富的沉澱循循善誘地講解,通過對兩種基本超越函數分別與x的乘積或作商所構造的六種超越函數圖像和性質介紹,讓我們清晰地發現每一種超越函數至少隱含兩類重要不等式
  • 我用GPT-2創造了3000個寵物小精靈,完美復刻《神奇寶貝》!
    沒錯,它就是《神奇寶貝》中火箭隊每次出場都讓人忍不住發笑的經典臺詞。1997年上映的《神奇寶貝》已經陪伴了我們二十年之久,給不少80、90後的童年留下了美好的回憶,尤其是那800多隻寵物小精靈。GPT-2,與GPT-3師出同門,都是OpenAI研發的自然語言處理模型,兩個模型最大的不同是它的參數量,GPT-2僅為15億。但這並不影響它的應用範圍。與GPT-3類似,GPT-2也可以用來寫故事、畫圖表,或者玩西洋棋。
  • 深度學習激活函數完全指南:在數據科學的諸多曲線上進行現代之旅
    在神經網絡中,如果網絡的每層都是線性映射,那麼這些層組合起來依然是線性的。因此,多層的線性映射複合後實際上只是起到了一層的效果。為了使網絡的映射不是線性的,所有層的輸出都要傳遞到非線性函數中,如 ReLU 函數和 Tanh 函數,這樣作用之後就成為了非線性函數。數值性質當回答"圖像中是否有存在人臉"時,false 被建模為0,true被為1。
  • 教你用BERT進行多標籤文本分類
    本文將手把手教你,用BERT完成一個Kaggle競賽。在本文中,我們將重點介紹BERT在多標籤文本分類問題中的應用。傳統的分類問題假定每個文檔都分配給一個且只分配給一個類別,即標籤。這有時也被稱為多元分類,比如類別數量是2的話,就叫做二元分類。而多標籤分類假設文檔可以同時獨立地分配給多個標籤或類別。
  • AI瘋狂進階——激活函數篇
    神經網絡激活函數的作用是什麼?2. 如何評價激活函數的好壞?3. ReLU存在哪些問題?4. 存在替換萬年ReLU的激活函數嗎?激活函數對於人工神經網絡模型學習、理解非常複雜的數據來說具有十分重要的作用。激活函數給神經元引入了非線性因素,使得神經網絡可以逼近任何非線性函數,這樣神經網絡就可以應用到眾多的非線性模型中。
  • 如何發現「將死」的ReLu?可視化工具TensorBoard助你一臂之力
    將該數據按照 7:3 的比例分割為訓練集和測試集。使用一個具備 ReLU 激活函數的一層簡單網絡。隨機初始化權重,將偏差初始化為 0。現在,初始化 TensorBoard 變量。每個 epoch 都需要梯度,因此將 write_grads 初始化為 True。最後擬合模型,在 callbacks 參數中使用 TensorBoard 變量。