圖解 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 通過自注意力機制,將輸入序列中的每個單詞與其他所有單詞聯繫起來。

舉個例子:

  1. The cat drank the milk because it was hungry.

  2. The cat drank the milk because it was sweet.

在第一句中,“it” 指代的是 “cat”,而在第二句中,“it” 指的是 “milk”。當模型處理 “it” 這個詞時,自注意力機制提供了更多關於它的含義信息,從而幫助模型準確地將 “it” 與相關聯的單詞對應起來。

爲了更細緻地處理句子的意圖和語義,Transformer 對每個單詞賦予了多重注意力得分。

比如,在處理 “it” 時,第一個得分會突出 “cat”,第二個得分則突出 “hungry”。因此,當它把 “it” 翻譯成另一種語言時,會把 “cat” 和 “hungry” 的某些元素融入到翻譯中。

訓練 Transformer

在訓練和推理階段,Transformer 的運作略有不同。

首先看訓練階段的數據流程。訓練數據分爲兩部分:

Transformer 的目標是學習如何根據輸入序列和目標序列來生成目標序列。

Transformer 的處理過程如下:

  1. 將輸入序列轉換成嵌入式表示(含位置編碼)並送入編碼器。

  2. 編碼器組處理這些數據,生成輸入序列的編碼表示。

  3. 將目標序列加上句首標記,轉換成嵌入式表示(含位置編碼)並送入解碼器。

  4. 另外,搜索公衆號 Linux 就該這樣學後臺回覆 “猴子”,獲取一份驚喜禮包。

  5. 解碼器組在處理這些數據的同時,結合編碼器組生成的編碼表示來生成目標序列的編碼表示。

  6. 輸出層將其轉換成單詞概率和最終的輸出序列。

  7. 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 有了一個總體的瞭解,下一篇文章將深入探討它的內部功能,瞭解它的工作細節。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Rb-h_tOypXdpUgwHPkvQLQ