天天看點

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

Transformer模型是一種日益流行的神經網絡結構。它最近被OpenAI用于他們的語言模型中。與此同時,近期也被DeepMind用于它們的程式“星際争霸”中擊敗了一名頂級職業星際玩家。

Transformer模型的開發是為了解決序列轉換及神經機器翻譯問題。這意味着可以解決任何sequence to sequence問題,例如語音識别、文本到語音轉換等。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)
序列轉換。輸入用綠色表示,模型用藍色表示,輸出用紫色表示。GIF取自 3

對于執行序列轉換的模型而言,有一些記憶是必要的。例如,我們把下面的句子翻譯成另一種語言(法語):

“The Transformers”是日本的一個硬核朋克樂隊。該樂隊成立于1968年,處于日本音樂史的鼎盛期。”

在本例中,第二句中的“the band”指的是第一句中引入的“The Transformers”樂隊。當你在第二句中讀到這支樂隊時,你知道它指的是“The Transformers”樂隊。這對翻譯而言十分重要。在很多的翻譯内容中,其中一些句子中的單詞指的是前面句子中所提到過的單詞。

對于翻譯這樣的句子,模型需要弄清楚這些依賴關系和連接配接。循環神經網絡(RNN)和卷積神經網絡(CNN)由于其各自的特點,一直被用來解決這一問題。讓我們來回顧一下這兩種架構及其各自的缺點。

循環神經網絡

循環神經網絡中包含循環架構,允許資訊持續存在。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

輸入表示為x_t

在上圖中,我們看到神經網絡的一部分A,用于處理一些輸入x_t并輸出h_t。循環結構使得資訊能夠從一個步驟傳遞到下一個步驟。

我們可以用不同的方式來思考循環。可以将循環神經網絡視為同一網絡A的多個組合形式,每個網絡将消息傳遞給後繼者。考慮如果我們展開循環會發生什麼:

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

展開的循環神經網絡

這種鍊式的性質表明,循環神經網絡顯然與序列和清單相關。這樣,如果我們想翻譯一些文本,便可以将每個輸入設定為文本中的單詞。循環神經網絡将前一個單詞的資訊傳遞給下一個網絡,由此便可以使用和處理該資訊。

下圖顯示了通常情況下sequence to sequence模型使用循環神經網絡的工作原理。每個單詞都被單獨處理,并且通過将隐藏狀态傳遞到解碼級來生成所得到的結果句,然後生成輸出。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

GIF取自

長期依賴的問題

考慮一種語言模型,該模型試圖根據之前的單詞預測下一個單詞。如果我們試圖預測“the clouds in the sky”這句話的下一個單詞,我們不需要進一步的語境。顯而易見,下一個單詞将會是sky。

在這種情況下,相關資訊和所需位置之間的差異很小,RNN可以學習使用過去的資訊找出該句子的下一個單詞。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

圖檔取自

6

但在某些情況下,我們需要更多的語境。例如,假設你想預測文本“I grew up in France…I speak fluent…”的最後一個單詞。最近的資訊表明,下一個單詞可能是一種語言,但如果我們想精準到某一種語言,則需要法國的語境,這在文本中還有待進一步說明。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

當相關資訊與需要資訊之間的差距變得非常大時,RNN變得非常無效。這是因為資訊在RNN模型中按照步驟依次傳遞,鍊條越長,資訊沿着鍊條丢失的可能性就越大。

從理論上講,RNN可以學習這種長期依賴關系。但在實踐中,他們似乎并沒有學會它們。LSTM是一種特殊類型的RNN模型,它被嘗試用于解決這類問題。

長短期記憶(LSTM)

在安排當天的月曆時,我們會優先考慮我們的預約情況。如果有較為重要的事情,我們可以取消一些會議優先安排緊要任務。

然而RNN模型并非如此。每當它添加新資訊時,它都會通過應用函數完全轉換現有資訊。是以導緻整個資訊被修改,無法參考任務的緊要程度。

LSTM模型通過乘法和加法對資訊進行細微修改。利用LSTM,資訊通過一種稱為單元狀态的機制流動。通過這種方式,LSTM可以選擇性地記住重要事務且忘記不那麼重要的事物。

在内部,LSTM模型如下所示:

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

每個單元,需要根據目前時刻節點的輸入X_t(在句子到句子的轉換中是一個單詞)、上一時刻節點的狀态和上一時刻節點的輸出來決定目前的輸入資訊。它操作這些輸入并基于它們生成新的單元狀态和輸出。在此不做過多闡述,如果有興趣更深入地了解各單元的工作機制,建議參考Christopher的部落格文章:

http://colah.github.io/posts/2015-08-Understanding-LSTMs/

在單元狀态下,句子中對翻譯單詞很重要的資訊可以在翻譯時從一個單詞傳遞到另一個單詞。

LSTM的問題

與RNN類似,同樣的問題在LSTM上通常也會發生,即當句子太長時LSTM也仍然不夠完善。其原因在于,目前正在處理的單詞與上下文保持聯系的可能性,将随着距離的增加呈指數遞減。

這意味着當句子很長時,模型往往會忘記序列中較遠位置的内容。由于必須逐詞處理,RNN和LSTM的另一個問題便在于難以并行處理句子的工作。不僅如此,它們還缺少長期和短期依賴關系的模型。綜上所述,LSTM和RNN存在3個問題:

  • 順序計算禁止并行化
  • 沒有明确的長短程依賴模組化
  • 位置之間的“距離”是線性的

Attention模型

為了解決其中的一些問題,研究人員發明了一種關注特定單詞的技術。

在翻譯句子時,我會集中注意于我正在翻譯的單詞。當我正在錄制錄音時,我會仔細聆聽我正在積極記錄的片段。如果讓我描述我所在的房間,我會在描述時環顧一眼周圍的物體。

神經網絡可以通過使用attention來實作同樣的行為,集中注意于給定資訊的一部分。例如,一個RNN可以參與到另一個RNN的輸出中。在每一個time step,它都側重于另一個RNN中的不同位置。

Attention是一種用于神經網絡的技術,它的目的便在于解決這些問題。對于RNN來說,不是單純将整個句子編碼為隐藏狀态,而是每個單詞都有對應的隐藏狀态,并一直将其傳遞到解碼階段。然後,在RNN的每一步中使用隐藏狀态進行解碼。以下的gif展示了這它的原理。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

所述綠色步驟稱為編碼階段,紫色的步驟為解碼階段

其背後的想法是,句子中的每個單詞都可能包含相關資訊。是以,為了使解碼更精确,需要使用Attention來處理輸入的每一個單詞。

為了在序列轉換中将Attention引入RNN,我們将編碼和解碼分為兩個主要步驟。一個步驟用綠色表示,另一個用紫色表示。綠色的步驟稱為編碼階段,紫色的步驟稱為解碼階段

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

綠色的步驟負責從輸入建立隐藏狀态。我們沒有像在使用Attention之前那樣,隻将一個隐藏狀态傳遞給解碼器,而是将句子中每個“單詞”生成的所有隐藏狀态傳遞給解碼階段。解碼階段使用每個隐藏狀态,找出網絡應該注意的地方。

例如,在将“Je suis étudiant”翻譯成英語時,要求解碼步驟在翻譯時檢視不同的單詞。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

這個gif顯示了将句子“Je suis étudiant”翻譯成英語時給予每個隐藏狀态的權重。顔色越深,每個單詞的權重就越大。

再舉個例子,當翻譯“L’accord sur la zone économique européenne a été signé en août 1992”這句話的時候。從法語到英語,對每個輸入的注意程度。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

但是上述讨論的一些問題,仍然無法通過引入Attention機制的循環神經網絡完全解決。例如,并行處理輸入(單詞)是不可能的。對于大型文本語料庫,這會增加翻譯文本所花費的時間。

卷積神經網絡

卷積神經網絡有助于解決這些問題。有了他們,我們可以:

  • 平行化(每層)
  • 利用局部依賴關系
  • 位置之間的距離呈對數關系

一些用于序列轉換的流行神經網絡,如Wavenet和Bytenet,均為卷積神經網絡。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

Wavenet,模型是卷積神經網絡(CNN) GIF取自

10

卷積神經網絡能夠并行工作的原因是,輸入的每個單詞都可以同時處理,并不一定依賴于之前要翻譯的單詞。不僅如此,CNN的輸出單詞和任何輸入之間的“距離”都是按照log(N)函數的順序排列的——這表示的是從輸出到輸入生成的樹的高度的大小,如上圖GIF所示。這比一個RNN中輸出和輸入的距離呈指數變化要友善得多。

然而卷積神經網絡在翻譯句子時,并不一定有助于解決依賴關系的問題。于是Transformer模型應運而生,它是卷積神經網絡與Attention機制的有效結合。

Transformer模型

為了解決并行化問題,Transformer試圖将卷積神經網絡和Attention模型結合。Attention的存在可以提高模型序列轉換之間的速度。更确切地說,Transformer是一種利用self-Attention來提升速度的模型。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

Transformer模型。圖檔取自

4

在内部,Transformer具有與上述模型類似的體系結構。但是Transformer由六個編碼器和六個解碼器組成。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

編碼組中的每個編碼器都具有相同的架構,而解碼組的6個解碼器則共享相同的屬性。它們各自之間非常相似。每個編碼器由兩層組成:Self-attention和前饋神經網絡。如下圖所示。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

每個Encoder的輸入首先會流經一個self-attention層,它幫助編碼器在對特定的單詞編碼時,檢視輸入語句中的其他單詞。解碼器同樣具有這兩個層,但兩層之間有一個attention層,幫助解碼器将關注輸入語句的相關部分。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

Self-Attention

注:本節來自Jay Allamar的部落格文章

接下來,我們來研究一下各種向量/張量,以及它們如何在模型的各部分流動,進而将輸入轉換成輸出的。與大部分的NLP應用程式一樣,我們首先利用嵌入算法将每個輸入單詞轉換為向量。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

每個單詞都嵌入到大小為512的向量中。我們用這些簡單的方塊表示向量。

嵌入隻發生在最底層的編碼器。所有編碼器共有的特點是,它們接收一個大小為512的向量清單。

在底部的編碼器中是詞嵌入,但是在其他編碼器中,它是下層編碼器的輸出。将單詞嵌入輸入序列之後,每個單詞都流經編碼器的兩層架構。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

在這裡,我們開始了解到Transformer的一個關鍵屬性,即每個位置的單詞在編碼器中流經自己的路徑。self-attention層中的這些路徑之間存在依賴關系。然而,前饋層不具有那些依賴關系,是以各種路徑可以在流過前饋層時并行執行。

接下來,切換為更短的例句,我們将檢視編碼器的每個子層中發生的情況。

我們先來看看如何使用向量來計算Self-Attention,然後再來看看它是如何利用矩陣實作的。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

弄清楚句子中的單詞關系并給予正确的關注。圖檔取自

8

計算self-Attention的第一步是從每個編碼器的輸入向量建立三個向量(在本例中,對每個單詞做詞嵌入)。是以,對于每個單詞,我們建立一個Query向量,一個Key向量和一個Value向量。這些向量是通過将嵌入乘以我們在訓練過程中訓練的三個矩陣得到的。

請注意,這些新向量的維數比嵌入向量小。其維數為64,而嵌入和編碼器的輸入/輸出向量維數為512。它們不必更小,這是一種架構選擇,可以使MultiHeaded Attention的計算(大部分)保持不變。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

将x1乘以WQ權重矩陣産生q1,即與該詞相關聯的“Query”向量。同樣,最終我們可以在輸入句子中對每個單詞的建立“Query”,“Key”和“Value”映射。

什麼是“Query”,“Key”和“Value”向量?

它們是有助于計算和思考注意力的抽象概念。下面的内容,會幫助你了解這些向量的作用。

計算self-Attention的第二個步驟是計算得分。假設我們正在計算這個例子中第一個單詞“Thinking”的self-Attention。我們需要根據這個詞對輸入句子的每個單詞進行評分。當我們在某個位置編碼單詞時,分數決定了對輸入句子的其他部分的關注程度。

通過将query向量和key向量計算點積對相應單詞評分。是以,如果我們處理位置#1中單詞的self-Attention,則第一個分數将是q1和k1的點積。第二個分數是q1和k2的點積。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

第三步和第四步是将分數除以8(論文中使用的key向量的維數64的平方根)。這導緻了更穩定的梯度。這裡可能有其他可能的值,但這是預設值),然後通過softmax操作傳遞結果。Softmax将這些分數标準化,使它們都是正的,加起來等于1。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

這個softmax分數決定了每個單詞在這個位置的表達程度。很明顯,這個位置的單詞将擁有最高的softmax分數,但有時Attention機制關注與目前單詞相關的另一個單詞也是有用的。

第五步是将每個Value向量乘以softmax分數(準備對它們求和)。這裡實際上是保持我們想要關注的單詞的值不變,弱化無關單詞。(例如,将它們乘以0.001這樣的小數字)。

第六步是對權重Value向量求和。這将在此位置生成self-attention層(對于第一個單詞)的輸出。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

對self-Attention總結一下,就是得到一個我們可以發送到前饋神經網絡的向量。然而,在實際實作中,為了加快處理速度,這種計算是以矩陣的形式進行的。現在我們來看看單詞級别的計算實作。

Multihead attention

Transformer基本上就是這樣的工作機制。還有一些其他細節可以使它們更好地工作。例如,Transformer使用Multihead attention的概念,使其不隻在一個次元上互相關注。

其背後的想法是,無論何時翻譯單詞,你都可以根據你所問的問題的類型對每個單詞給予不同的關注。下面的圖檔顯示其内在意義。例如,當你在“I kick the ball”這個句子中翻譯“kick”時,你可以問“Who kick”。根據答案的不同,把這個單詞翻譯成另一種語言可能會發生變化。或者問其他問題,比如“Did what?””等等。

Transformer原了解析——一種Open AI和DeepMind都在用的神經網絡架構循環神經網絡長期依賴的問題長短期記憶(LSTM)LSTM的問題Attention模型卷積神經網絡Transformer模型Self-AttentionSelf-AttentionMultihead attention位置編碼(Positional Encoding)

位置編碼(Positional Encoding)

Transformer上的另一個重要步驟,是在編碼每個單詞時添加位置編碼。編碼每個單詞的位置是極具意義的,因為每個單詞的位置與翻譯息息相關。

以上為譯文

本文由

阿裡雲雲栖社群

組織翻譯。

文章原标題《How Transformers Work》,譯者:獅子家的袋鼠,審校:Viola。

文章為簡譯,更為詳細的内容,請檢視

原文

繼續閱讀