NLP 課程文件

Transformer 如何工作?

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強型文件體驗

開始使用

Transformer 如何工作?

Ask a Question

在本節中,我們將從宏觀層面瞭解 Transformer 模型的架構。

Transformer 的歷史

以下是 Transformer 模型(簡短)歷史上的幾個參考點

A brief chronology of Transformers models.

Transformer 架構於 2017 年 6 月首次提出。最初研究的重點是翻譯任務。此後又推出了一些有影響力的模型,包括

  • **2018 年 6 月**:Transformer 架構,第一個用於各種 NLP 任務的微調的預訓練 Transformer 模型,並獲得了最先進的結果

  • **2018 年 10 月**:GPT,另一個大型預訓練模型,專門設計用於生成更好的句子摘要(下一章將詳細介紹!)

  • **2019 年 2 月**:BERT,GPT 的改進(更大)版本,由於倫理問題,未立即公開發布

  • **2019 年 10 月**:GPT-2,BERT 的蒸餾版本,速度快 60%,記憶體佔用減少 40%,同時仍保留 BERT 97% 的效能

  • **2019 年 10 月**:DistilBERTT5,兩個使用與原始 Transformer 模型相同架構的大型預訓練模型(第一個使用此架構的模型)

  • **2020 年 5 月**,BART,GPT-2 的更大版本,能夠在無需微調的情況下(稱為*零樣本學習*)執行各種任務

此列表遠非詳盡,僅用於突出顯示幾種不同型別的 Transformer 模型。廣義上,它們可以分為三類

  • GPT 類(也稱為*自迴歸* Transformer 模型)
  • BERT 類(也稱為*自編碼* Transformer 模型)
  • BART/T5 類(也稱為*序列到序列* Transformer 模型)

我們將在後面更深入地探討這些系列。

Transformer 是語言模型

上面提到的所有 Transformer 模型(GPT、BERT、BART、T5 等)都是作為*語言模型*訓練的。這意味著它們是在大量原始文字上以自監督的方式訓練的。自監督學習是一種訓練型別,其中目標是自動從模型的輸入中計算出來的。這意味著人類不需要為資料貼標籤!

這種型別的模型會發展出對它訓練所用語言的統計理解,但它對具體的實際任務並不太有用。因此,通用預訓練模型隨後會經歷一個稱為*遷移學習*的過程。在此過程中,模型會以監督的方式對特定任務進行微調——即使用人類標註的標籤。

任務的一個示例是在閱讀完前*n*個詞後預測句子中的下一個詞。這稱為*因果語言建模*,因為輸出取決於過去和現在的輸入,但不取決於未來的輸入。

Example of causal language modeling in which the next word from a sentence is predicted.

另一個例子是*掩碼語言建模*,其中模型預測句子中掩碼的詞。

Example of masked language modeling in which a masked word from a sentence is predicted.

Transformer 是大型模型

除了少數例外(如 DistilBERT),提高效能的一般策略是增加模型的尺寸以及它們用於預訓練的資料量。

Number of parameters of recent Transformers models

不幸的是,訓練模型,尤其是大型模型,需要大量資料。這在時間和計算資源方面成本很高。它甚至會轉化為環境影響,如以下圖表所示。

The carbon footprint of a large language model.

這顯示了一個由一個團隊(非常大)模型專案,該團隊有意識地試圖減少預訓練的環境影響。執行大量試驗以獲得最佳超引數的足跡會更高。

想象一下,如果每個研究團隊、學生組織或公司都想要從頭開始訓練模型,將會導致巨大的、不必要的全球成本!

這就是為什麼共享語言模型至關重要的原因:共享訓練後的權重並在已訓練的權重基礎上構建,可以降低社群的整體計算成本和碳足跡。

順便說一句,您可以透過多種工具評估模型訓練的碳足跡。例如,ML CO2 ImpactCode Carbon(已整合到 🤗 Transformers 中)。要了解更多資訊,您可以閱讀這篇文章 部落格文章,它將向您展示如何生成一個 emissions.csv 檔案,其中包含對您的訓練足跡的估計,以及 🤗 Transformers 關於此主題的 文件

遷移學習

預訓練是指從頭開始訓練模型的過程:模型權重被隨機初始化,訓練在沒有任何先驗知識的情況下開始。

The pretraining of a language model is costly in both time and money.

這種預訓練通常在海量資料上進行。因此,它需要一個非常大的語料庫,並且訓練可能需要數週時間。

另一方面,微調是在模型預訓練之後進行的訓練。要進行微調,您首先需要獲取一個預訓練的語言模型,然後使用特定於您的任務的資料集進行額外的訓練。等等 - 為什麼不簡單地從一開始(從頭開始)為您的最終用例訓練模型呢?這裡有幾個原因

  • 預訓練模型已經在一個與微調資料集具有某些相似性的資料集上進行了訓練。因此,微調過程能夠利用初始模型在預訓練期間獲得的知識(例如,對於 NLP 問題,預訓練模型將對您用於任務的語言具有一定的統計理解)。
  • 由於預訓練模型已經在大量資料上進行了訓練,因此微調需要更少的資料量就能獲得不錯的結果。
  • 出於同樣的原因,獲得良好結果所需的時間和資源要少得多。

例如,可以使用在英語上訓練的預訓練模型,然後在 arXiv 語料庫上對其進行微調,從而得到一個以科學/研究為基礎的模型。微調只需要少量資料:預訓練模型獲得的知識被“遷移”,因此稱為遷移學習

The fine-tuning of a language model is cheaper than pretraining in both time and money.

因此,微調模型具有更低的時間、資料、財務和環境成本。它也更快更容易地迭代不同的微調方案,因為訓練比完全預訓練限制更少。

此過程也會比從頭開始訓練獲得更好的結果(除非您擁有大量資料),這就是您應該始終嘗試利用預訓練模型 - 一個儘可能接近您手頭任務的模型 - 並對其進行微調的原因。

通用架構

在本節中,我們將介紹 Transformer 模型的通用架構。如果您不理解某些概念,請不要擔心;後面有詳細的章節介紹每個元件。

介紹

該模型主要由兩個模組組成

  • 編碼器(左):編碼器接收輸入並構建其表示(特徵)。這意味著該模型被最佳化為從輸入中獲取理解。
  • 解碼器(右):解碼器使用編碼器的表示(特徵)以及其他輸入來生成目標序列。這意味著該模型被最佳化為生成輸出。
Architecture of a Transformers models

根據任務,這兩個部分可以獨立使用

  • 僅編碼器模型:適合需要理解輸入的任務,例如句子分類和命名實體識別。
  • 僅解碼器模型:適合生成式任務,例如文字生成。
  • 編碼器-解碼器模型序列到序列模型:適合需要輸入的生成式任務,例如翻譯或摘要。

我們將在後面的章節中分別深入研究這些架構。

注意力層

Transformer 模型的一個關鍵特徵是它們是使用名為注意力層的特殊層構建的。事實上,介紹 Transformer 架構的論文標題是“注意力是你所需要的一切”!我們將在本課程的後面探索注意力層的細節;現在,您只需要知道此層將告訴模型在處理每個單詞的表示時,要注意句子中特定的單詞(或多或少地忽略其他單詞)。

為了將此置於上下文中,請考慮將文字從英語翻譯成法語的任務。給定輸入“You like this course”,翻譯模型將需要關注相鄰詞“You”以獲得“like”的正確翻譯,因為在法語中,動詞“like”的詞形變化不同,具體取決於主語。然而,句子的其餘部分對於該詞的翻譯沒有用。同樣,在翻譯“this”時,模型也需要關注詞“course”,因為“this”的翻譯不同,具體取決於關聯的名詞是陽性還是陰性。同樣,句子的其他詞對於“course”的翻譯無關緊要。對於更復雜的句子(以及更復雜的語法規則),模型可能需要特別關注出現在句子中更遠處的詞,以便正確翻譯每個詞。

同樣的概念適用於與自然語言相關的任何任務:一個詞本身具有含義,但該含義受到上下文的深遠影響,上下文可以是該詞之前或之後的任何其他詞(或詞語)。

現在您已經瞭解了注意力層的含義,讓我們仔細看看 Transformer 架構。

原始架構

Transformer 架構最初是為翻譯而設計的。在訓練期間,編碼器接收某種語言的輸入(句子),而解碼器接收相同語言的所需目標語言的句子。在編碼器中,注意力層可以使用句子中的所有詞(因為,正如我們剛剛看到的那樣,給定詞的翻譯可能取決於句子中該詞之前和之後的內容)。但是,解碼器按順序工作,只能關注它已經翻譯過的句子中的詞語(因此,只有當前生成詞之前的詞語)。例如,當我們預測了翻譯目標的前三個詞時,我們將其提供給解碼器,然後解碼器使用編碼器的所有輸入來嘗試預測第四個詞。

為了在訓練期間加快速度(當模型可以訪問目標句子時),解碼器被提供完整的目標,但它不允許使用未來的詞語(如果在嘗試預測位置 2 的詞語時,它可以訪問位置 2 的詞語,那麼這個問題就不難了!)。例如,在嘗試預測第四個詞時,注意力層將只能訪問位置 1 到 3 的詞語。

原始的 Transformer 架構如下所示,左側是編碼器,右側是解碼器

Architecture of a Transformers models

請注意,解碼器塊中的第一個注意力層關注解碼器的所有(過去)輸入,但第二個注意力層使用編碼器的輸出。因此,它可以訪問整個輸入句子以最佳地預測當前詞語。這非常有用,因為不同的語言可能有不同的語法規則,這些規則會將詞語以不同的順序排列,或者句子後面的某些上下文可能有助於確定給定詞語的最佳翻譯。

注意力掩碼也可以在編碼器/解碼器中使用,以防止模型關注某些特殊詞語 - 例如,用於在將句子批處理在一起時使所有輸入具有相同長度的特殊填充詞語。

架構與檢查點

在本課程中,當我們深入研究 Transformer 模型時,您將看到架構檢查點以及模型的提及。這些術語都具有略微不同的含義

  • 架構:這是模型的骨架 - 模型中每個層和每個操作的定義。
  • 檢查點:這些是在給定架構中將被載入的權重。
  • 模型:這是一個籠統的術語,不像“架構”或“檢查點”那樣精確:它可以指兩者。本課程會在需要時明確指定架構檢查點,以減少歧義。

例如,BERT 是一種架構,而 bert-base-cased 是一組由 Google 團隊為 BERT 的第一個版本訓練的權重,它是一個檢查點。但是,人們也可以說“BERT 模型”和“bert-base-cased 模型”。

© . This site is unofficial and not affiliated with Hugging Face, Inc.