圖解 Transformer 架構設計
作者:韓冰
來源:https://towardsdatascience.com/transformers-explained-visually-part-1-overview-of-functionality-95a6dd460452
近年來,Transformer 技術在自然語言處理(NLP)領域引起了巨大關注。**Transformer 是一種利用注意力機制(Attention)極大提升深度學習 NLP 翻譯模型性能的新型架構。**它首次出現在《Attention is all you need》這篇論文中,迅速成爲了文本數據處理的主流架構。
自此以後,谷歌的 BERT 和 OpenAI 的 GPT 系列等衆多項目,都基於這一架構構建,表現遠超現有的最先進技術。
在接下來的系列文章中,我將深入淺出地講解 Transformer 的基本原理、架構設計及其內部運作機制。我們會逐步揭示 Transformer 的核心功能。在後續的文章裏,我們還將深入剖析系統的運行細節,特別是多頭注意力(multi-head attention)機制 ——Transformer 的關鍵所在。
本文是這個系列文章的第一篇,主要介紹 Transformer 的使用方法,爲何優於 RNN,同時介紹了其架構組成以及在訓練和推理期間的行爲特點。
什麼是 Transformer?
Transformer 架構特別擅長處理順序性強的文本數據。簡單來說,它可以將一段文本作爲輸入,並輸出另一段文本,比如將英語句子翻譯成西班牙語。
Transformer 的核心由多個編碼層(Encoder)和解碼層(Decoder)構成。這裏,我們將單個層稱爲編碼器或解碼器,而一組這樣的層則稱爲編碼器組或解碼器組。
編碼器組和解碼器組各有其對應的嵌入層(Embedding layers),處理各自的輸入數據。最終,通過一個輸出層生成最後的結果。
所有的編碼器結構相同,解碼器也是如此。
編碼器包含一個關鍵的自注意力層,用來計算文本序列中不同單詞間的聯繫,還有一個前饋層。而解碼器則包括自注意力層、前饋層以及額外的編碼器 - 解碼器注意力層。每個編碼器和解碼器都有自己的權重集合。
編碼器是可複用的模塊,是定義 Transformer 架構的核心部分。除了上述兩層,它還包括圍繞這些層的殘差跳躍連接和兩個 LayerNorm 層。
Transformer 有許多不同的變體,其中一些變體甚至沒有解碼器,完全依賴編碼器來工作。
注意力機制的作用是什麼?
Transformer 的強大性能源於其使用的注意力機制。
這種機制允許模型在處理某個單詞時,同時關注輸入中與該單詞緊密相關的其他單詞。
例如,單詞 “Ball” 與 “blue” 和 “holding” 緊密相關,而與 “boy” 無關。
Transformer 通過自注意力機制,將輸入序列中的每個單詞與其他所有單詞聯繫起來。
舉個例子:
-
The cat drank the milk because it was hungry.
-
The cat drank the milk because it was sweet.
在第一句中,“it” 指代的是 “cat”,而在第二句中,“it” 指的是 “milk”。當模型處理 “it” 這個詞時,自注意力機制提供了更多關於它的含義信息,從而幫助模型準確地將 “it” 與相關聯的單詞對應起來。
爲了更細緻地處理句子的意圖和語義,Transformer 對每個單詞賦予了多重注意力得分。
比如,在處理 “it” 時,第一個得分會突出 “cat”,第二個得分則突出 “hungry”。因此,當它把 “it” 翻譯成另一種語言時,會把 “cat” 和 “hungry” 的某些元素融入到翻譯中。
訓練 Transformer
在訓練和推理階段,Transformer 的運作略有不同。
首先看訓練階段的數據流程。訓練數據分爲兩部分:
-
源序列或輸入序列(如翻譯問題中的英文 “You are welcome”)
-
目標序列或目標序列(如西班牙語的 “De nada”)
Transformer 的目標是學習如何根據輸入序列和目標序列來生成目標序列。
Transformer 的處理過程如下:
-
將輸入序列轉換成嵌入式表示(含位置編碼)並送入編碼器。
-
編碼器組處理這些數據,生成輸入序列的編碼表示。
-
將目標序列加上句首標記,轉換成嵌入式表示(含位置編碼)並送入解碼器。
-
另外,搜索公衆號 Linux 就該這樣學後臺回覆 “猴子”,獲取一份驚喜禮包。
-
解碼器組在處理這些數據的同時,結合編碼器組生成的編碼表示來生成目標序列的編碼表示。
-
輸出層將其轉換成單詞概率和最終的輸出序列。
-
Transformer 的損失函數將這個輸出序列與訓練數據中的目標序列進行比較,這個損失用於在反向傳播過程中訓練 Transformer。
推理
在推理階段,我們只有輸入序列,而沒有目標序列作爲解碼器的輸入。Transformer 的目標是僅從輸入序列生成目標序列。
因此,就像在序列到序列(Seq2Seq)模型中一樣,我們在一個循環中生成輸出,並把每個時間步的輸出序列整體輸入到下一個時間步的解碼器中,直至出現句子結束標記。
與 Seq2Seq 模型的不同之處在於,我們每次不是隻輸入上一步的單詞,而是重新輸入到目前爲止生成的整個序列。
在推理過程中,數據流動如下:
1、將輸入序列轉換成嵌入式表示(含位置編碼)並送入編碼器。
2、編碼器組處理這些數據,生成輸入序列的編碼表示。
3、此時不使用目標序列,而是用一個只含有句首標記的空序列。將其轉換成嵌入式表示(含位置編碼)並送入解碼器。
4、解碼器組結合編碼器組的編碼表示處理這些數據,生成目標序列的編碼表示。
5、輸出層將其轉換成單詞概率,並生成輸出序列。
6、我們選取輸出序列的最後一個單詞作爲預測詞。然後,將這個單詞填入解碼器輸入序列的第二個位置,這個序列現包含一個句首標記和第一個單詞。
7、返回步驟 3,重複以上操作,每次將新生成的單詞添加到解碼器序列中,直至預測出句子結束標記。值得注意的是,由於每次迭代編碼器序列不變,我們無需重複前兩步(感謝 Michal Kučírka 的指出)。
教師強制法
在訓練過程中,將目標序列輸入解碼器的方法稱爲教師強制法。那麼,爲什麼要採用這種方法,這個術語是什麼意思呢?
在訓練期間,雖然我們可以採用與推理時相同的方法 —— 即循環運行 Transformer,逐步生成並處理輸出序列的每一個單詞,但這樣做會讓訓練過程變得更長,且難度增加。因爲模型需要根據之前可能預測錯誤的單詞來預測接下來的單詞。
相反,通過將目標序列直接輸入到解碼器,我們實際上是在給模型提供一個線索,就像教師指導學生那樣。即便模型在開始時預測錯誤,它也可以依據正確的目標單詞來調整接下來的預測,從而避免錯誤的累積。
此外,Transformer 可以同時並行地輸出所有單詞,而無需通過循環逐個處理,這大大加快了訓練速度。
Transformer 有哪些應用?
Transformer 在自然語言處理(NLP)領域中應用廣泛,涵蓋了語言模型、文本分類等多種任務。它們常用於機器翻譯、文本摘要、問答、命名實體識別和語音識別等序列到序列模型的應用場景。
針對不同問題,Transformer 有多種變體。基本的編碼器層作爲這些架構的共同基石,根據不同應用需求,配備有特定的 “頭部” 模塊。
Transformer 分類架構
例如,在情感分析的應用中,Transformer 接收文本文件作爲輸入。其分類 “頭部” 模塊處理 Transformer 的輸出,進而預測類別標籤,如判斷文本表達的是積極還是消極情感。
Transformer 語言模型架構
語言模型架構採用輸入序列的起始部分,例如一段文本,作爲輸入,通過預測接下來的句子來生成新文本。語言模型的頭部模塊接收 Transformer 的輸出,併爲詞彙表中的每個單詞計算一個概率。概率最高的單詞被選爲下一單詞的預測輸出。
爲什麼優於 RNN?
在 Transformer 問世並取代它們之前,RNN 及其衍生版本 LSTM 和 GRU 一直是自然語言處理應用的標準架構。
基於 RNN 的序列到序列模型表現不錯,注意力機制最初被引入時,就是爲了增強它們的性能。
但是,它們存在兩個主要限制:
-
難以處理長句中相隔較遠的單詞之間的長距離依賴性。
-
它們逐字處理輸入序列,無法在完成前一個時間步的計算之前進行下一個時間步的計算。這使得訓練和推理速度變慢。
另一方面,儘管 CNN 的所有輸出都可以並行計算,從而使得卷積運算速度更快,但它們在處理長距離依賴性方面也存在限制:
- 在卷積層中,只有在內核大小範圍內的圖像部分(或應用於文本數據時的單詞)可以相互作用。對於更遠的元素,需要通過多層深度網絡才能相互影響。
Transformer 架構解決了這些問題。它完全放棄了 RNN,完全依賴於注意力機制的優勢。
-
它們能夠並行處理序列中的所有單詞,從而極大地提高了計算速度。
-
輸入序列中單詞之間的距離不再重要。無論是相鄰單詞還是相隔較遠的單詞,Transformer 都能很好地計算它們之間的依賴性。
現在我們已經對 Transformer 有了一個總體的瞭解,下一篇文章將深入探討它的內部功能,瞭解它的工作細節。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/Rb-h_tOypXdpUgwHPkvQLQ