原文鏈接:s3-us-west-2.amazonaws.com

參考博客(仔細解釋了transformer):劉岩:詳解Transformer (Attention Is All You Need)

簡楓:[整理] 聊聊 Transformer

兩篇一篇把transformer拆開講,一篇有代碼,都是翻譯國外的文章,雙管齊下應該足夠理解transformer了。paper中的分析研究部分,我始終沒有理解,就不翻譯了。翻譯可能有些粗糙,我最後會把專欄中的所有論文寫成一篇總結的。

Improving Language Understanding by Generative Pre-Training

摘要:

自然語言理解包括多種多樣的任務,如文本蘊涵、問答、語義相似性評估和文檔分類。儘管大型的未標註文本語料庫非常豐富,但是用於學習這些特定任務的標註數據卻很少。我們證明,在這些任務上有巨大的受益可以實現。我們通過在不同的未標註文本語料庫上生成語言模型的預訓練,然後對每個特定任務進行有區別的微調來實現。與以前的方法不同,我們在微調期間利用task-aware輸入轉換來實現有效的傳輸,同時只需要對模型架構進行最小的更改。我們展示了我們的方法在一系列自然語言理解基準上的有效性。我們的task-agnostic模型比那些專門為了任務訓練的模型效果更好,在研究的12項任務中,有9項任務的技術水平有了顯著提高。例如,我們在常識推理(故事完形填空測試)上取得了8.9 %的絕對進步,在問答( RACE )上取得了5.7 %的進步,在文本蘊涵( MultiNLI )上取得了1.5 %的進步。

1、Introduction

從原始文本中有效學習的能力對於減輕自然語言處理( NLP )中對監督學習的依賴至關重要。大多數深度學習方法需要大量人工標註的數據,這限制了它們在許多標註資源匱乏的領域的適用性[ 61 ]。在這些情況下,可以利用來自未標記數據的語言信息的模型為收集更多注釋提供了一個有價值的替代方案,這可能會非常耗時和昂貴。此外,即使在有大量監督的情況下,以無監督的方式學習好的表達也能顯著提高性能。迄今為止,這方面最引人注目的證據是廣泛使用了預先訓練好的單詞嵌入[ 10、39、42 ]來提高[ 8、11、26、45 ]一系列NLP任務的性能。

然而,由於兩個主要原因,利用來自未標記文本的超過單詞級的信息是具有挑戰性的。首先,不清楚哪種類型的優化目標在學習對遷移有用的文本表示時最有效。最近的研究考察了各種目標,如語言建模、機器翻譯、和語篇連貫,每種方法在不同的任務上都優於其他方法。第二,對於將這些學習到的表達轉移到目標任務的最有效方式,沒有達成共識。現有技術包括對模型架構進行特定於任務的改變,使用複雜的學習方案和增加輔助學習目標的組合。這些不確定性使得開發有效的語言處理半監督學習方法變得困難。

在這篇論文中,我們探索了一種半監督的語言理解方法,它結合了無監督的預訓練和監督微調。我們的目標是學習一種通用的表達,這種表達只要輕微的改變就能遷移至其他任務。1我們假設可以訪問大量未標記的文本和幾個帶有人工標註訓練示例的數據集(目標任務)。我們的設置不要求這些目標任務與未標記的語料庫位於同一領域。訓練過程分兩步。首先,我們在未標記的數據上使用語言建模目標來學習神經網路模型的初始參數。隨後,我們使用相應的監督目標使這些參數適應目標任務。

對於我們的模型體系結構,我們使用Transformer [ 62 ],它已經被證明在各種任務上表現出色。這種模型選擇為我們提供了一個更結構化的memory來處理文本中的長期依賴關係,而不是像循環網路這樣的方案,從而在不同的任務之間產生強大的傳輸性能。在傳輸過程中,我們利用從遍歷式方法[ 52 ]中獲得的特定於任務的輸入自適應,該方法將結構化文本輸入處理為單個連續的標記序列。正如我們在實驗中所展示的,這些調整使我們能夠有效地微調,對預先訓練的模型的架構進行最小的改變。

我們評估了四種類型的語言理解任務——自然語言推理、問答、語義相似性和文本分類。我們的task--agnostic模型優於採用為每個任務特別設計的體系結構有區別的訓練模型,在研究的12項任務中,有9項任務的技術水平有了顯著提高。我們還分析了預訓練模型在四種不同設置環境下的zero-shot行為,並證明它為下游任務獲得了有用的語言知識。

2 Related Work

Semi-supervised learning for NLP 我們的工作大體上屬於自然語言的半監督學習範疇。這種模式引起了極大的興趣,它被應用於序列標籤[ 24,33,57 ]或文本分類[ 41,70 ]等任務。最早的方法使用未標記的數據來計算單詞級或短語級統計數據,然後這些數據被用作監督模型中的特徵。在過去的幾年裡,研究人員已經證明了使用單詞嵌入的好處,這些單詞嵌入是在未標註的語料庫上訓練的,可以提高各種任務的表現。然而,這些方法主要傳遞單詞級信息,而我們的目標是獲取更高級別的語義。

最近的方法研究了從未標記的數據中學習和利用超過單詞級的語義。短語級或句子級嵌入,可以使用未標記的語料庫來訓練,已經被用於將文本編碼成各種目標任務的合適矢量表示,[ 28、32、1、36、22、12、56、31 ]。

Unsupervised pre-training 無監督預訓練是半監督學習的一種特殊情況,其目標是找到一個好的初始化點,而不是修改監督學習目標。早期的工作探索了該技術在[ 20,49,63 ]圖像分類和[ 3 ]回歸任務中的應用。隨後的研究表明,預訓練作為一種正則化方案,能夠在深度神經網路中更好地泛化。在最近的工作中,該方法已經被用來幫助訓練深度神經網路完成各種任務。

最接近我們的工作包括使用語言建模目標對神經網路進行預訓練,然後在監督下根據目標任務對其進行微調。[13]遵循這種方法來改進文本分類。然而,儘管預訓練階段有助於捕捉一些語言信息,但是他們對LSTM模型的使用將他們的預測能力限制在一個很短的範圍內。相比之下,我們對transformer網路的選擇允許我們捕捉更遠距離的語言結構,正如我們的實驗中所展示的。此外,我們還展示了我們的模型在更廣泛的任務中的有效性。

當訓練目標任務上的監督模型時,預訓練的語言或機器翻譯模型作為輔助特徵。這涉及到每個單獨目標任務的大量新參數,而在轉移過程中,我們只需要對模型架構進行最小的更改。Auxiliary training objectives添加輔助無監督訓練目標是半監督學習的一種替代形式。Collobert和Weston使用了多種輔助NLP任務,如POS標註、組塊、命名實體識別和語言建模,以改進語義角色標註。最近,Rei [ 50 ]在其目標任務目標中增加了一個輔助語言建模目標,並展示了序列標註任務的性能提升。我們的實驗也使用輔助目標,但是正如我們顯示的,無監督的預訓練已經學習了與目標任務相關的幾個語言方面。

3 Framework

我們訓練過程包括兩步。第一步是去在大語料庫上學習一個高容量的語言模型。第二步是微調過程,我們將模型應用到一個標記任務上。

3.1 Unsupervised pre-training

給定一個無監督語料庫詞u={u1,...,un},我們使用一個標準的語言模型對象來最大化下式:

其中k是上下文窗口的大小,條件概率P由神經網路參數θ建模。這些參數使用隨機梯度下降訓練。

在我們的實驗中,我們使用一個多層的transformer decoder來作為語言模型,這是transformer的一個變體。這個模型使用一個 multi-headed self-attention操作,然後經過position-wise的前向反饋網路,來產生目標詞的輸出分布:

其中 U=(u_{-k},...,u_{-1}) 是詞的上下文向量,n是層數, W_e 是詞嵌入矩陣, W_p 是位置嵌入矩陣。

3.2 Supervised fine-tuning

在用無監督模型訓練之後,我們把參數應用到監督目標任務。標記數據集為C,每一個數據都是一序列的輸入詞 x_1 ,..., x_m 和一個標籤y。輸入會經過我們預訓練好的模型去獲得最後transformer塊的激活值 h^m_l ,然後這個值會被喂到添加的線性輸出層去預測y,線性層有參數 W_y

這給了我們如下的最大化優化目標:

我們額外地發現將一些語言模型去作為輔助對象來參與微調可以幫助(a)提升監督模型的一般化(b)加速收斂。具體的,我們優化如下對象:

總的來說,我們唯一需要微調的參數是Wy,和分隔詞的嵌入。

3.3 Task-specific input transformation

對於某些任務,如文本分類,我們可以如上所述直接微調我們的模型。某些其他任務,如問答或文本蘊涵,有結構化的輸入,如document, question, and answers三元組。由於我們的預訓練模型是在連續的文本序列上訓練的,我們需要一些修改來將其應用於這些任務。我們使用遍歷式的方法,在這裡我們將結構化輸入轉換成有序序列,我們的預訓練模型可以處理該序列。這些輸入轉換允許我們避免跨任務對體系結構進行大範圍的更改。我們在下面簡要描述了這些輸入轉換,圖1提供了一個直觀的說明。所有轉換包括添加隨機初始化的開始和結束標記。

Textual entailment 蘊含任務我們直接拼接premise p和hypothesis h詞序列,中間放一個分隔符。

Similarity 對於相似性任務,被比較的兩個句子沒有固有的順序。為了這一點,我們修改輸入序列以包含兩種可能的句子順序(中間有分隔符),並分別獨立處理,以產生兩個序列表示,它們在被輸入線性輸出層之前按元素添加。

Question Answering and Commonsense Reasoning對於這些任務,我們得到了一個上下文文檔z,一個問題q和一組可能的答案{ a_k }。我們將文檔上下文和問題與每個可能的答案連接起來,在兩者之間添加一個分隔符標記。這些序列中的每一個都是用我們的模型獨立處理的,然後通過softmax,在可能的答案上產生輸出分布。

4 Experiments

4.1 setup

Unsupervised pre-training

無監督的預訓練我們使用BooksCorpus dataset來訓練語言模型。它包含超過7000本來自各種類型的未出版的書籍,包括冒險、幻想和浪漫。至關重要的是,它包含了一長段連續的文本,這使得生成模型能夠學習長距離信息。另一個數據集,1B Word Benchmark,被類似的方法Elmo使用,大小大致相同。但是在句子層面被打亂了——破壞了長距離結構。在這個語料庫中,我們的語言模型達到了18.4的非常低的困惑度。

Model specifications:我們的模型很大程度上遵循transformer的原始工作。我們訓練了一個只有12層解碼器的transformer,帶有masked self-attention head(768 dimensional states and 12 attention heads)。對於position-wise前饋網路,我們使用了3072維內部狀態。我們使用Adam優化器,最大學習率為2.5e - 4。在最初的2000次更新中,學習率從零線性增加。我們在由64個隨機抽樣的連續序列512個片語成的小批次上訓練了100個時期。由於層歸一化在整個模型中廣泛使用,簡單的N(0,0.02 )權重初始化就足夠了。我們使用了bytepair編碼( BPE )辭彙、dropout、為0.1。我們還採用了[ 37 ]中提出的L2正則化的修改版本,在所有非偏置或增益權重上w = 0.01。對於激活函數,我們使用高斯誤差線性單位( GELU ) [ 18 ]。我們使用帶學習的位置嵌入,而不是原始作品中提出的正弦版本。我們使用ftfy庫來清理書庫中的原始文本,標準化一些標點和空白,並使用spaCy標記器。

Fine-tuning details除非指定,否則我們會重複使用無監督預訓練中的超參數設置。我們以0.1的速率向分類器中添加dropout。對於大多數任務,我們使用6.25e - 5的學習率和32的批處理。我們的模型快速微調,三個epoch的訓練對大多數情況都足夠了。我們使用線性學習率衰減時間表,訓練warmup超過0.2 %。λ設定為0.5。

4.2 Supervised fine-tuning

各具體任務的微調

5 Analysis

Impact of number of layers transferred我們觀察了將不同層數從無監督的預訓練轉移到有監督的目標任務的影響。圖2 (左)顯示了我們在MultiNLI和RACE上的方法的性能,這是所傳輸層數的函數。我們觀察到的標準結果是,轉移嵌入提高了性能,並且每一個transformer層為在MultiNLI上的完全轉移提供了高達9 %的進一步好處。這表明預訓練模型中的每一層都包含用於解決目標任務的有用功能。

6 .結論

我們引入了一個框架,通過生成性的預訓練和區別性的微調,用單一的任務不可知模型實現了對自然語言的強理解。通過在一個多種多樣的語料庫上進行預訓練,我們的模型獲得了大量的世界知識和處理長期依賴的能力,這些知識和能力隨後被成功地轉移到解決諸如問答、語義相似性評估、蘊涵判斷和文本分類等有區別的任務上,改善了我們研究的12個數據集中的9個數據集的現狀。使用無監督(預)訓練來提高辨別任務的性能一直是機器學習研究的一個重要目標。我們的工作表明,實現顯著的性能提升確實是可能的,並且提供了關於哪些模型(transformer)和數據集(具有遠程相關性的文本)最適合這種方法的提示。我們希望這將有助於對無監督學習進行新的研究,包括自然語言理解和其他領域,進一步提高我們對無監督學習如何以及何時工作的理解。

Improving Language Understanding by Generative Pre-Training(完)

有任何疑問或者糾錯,作者隨時在線哦

關注專欄

隨經典論文看機器閱讀理解發展史?

zhuanlan.zhihu.com
圖標

推薦閱讀:
相关文章