LLM 課程文件

Transformer 架構

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

Ask a Question

Transformer 架構

在前面的章節中,我們介紹了通用的 Transformer 架構,並探討了這些模型如何解決各種任務。現在,讓我們仔細看看 Transformer 模型的三種主要架構變體,並瞭解何時使用每一種。然後,我們研究了這些架構如何應用於不同的語言任務。

在本節中,我們將更深入地探討 Transformer 模型的三種主要架構變體,並瞭解何時使用每一種。

請記住,大多數 Transformer 模型使用以下三種架構之一:僅編碼器 (encoder-only)、僅解碼器 (decoder-only) 或編碼器-解碼器 (encoder-decoder,又稱 sequence-to-sequence)。瞭解這些差異將幫助您為特定任務選擇合適的模型。

編碼器模型

編碼器模型僅使用 Transformer 模型的編碼器部分。在每個階段,注意力層可以訪問初始句子中的所有單詞。這些模型通常被描述為具有“雙向”注意力,並且通常被稱為自編碼模型

這些模型的預訓練通常圍繞以某種方式破壞給定的句子(例如,透過掩蓋其中的隨機單詞),並讓模型找到或重建初始句子。

編碼器模型最適合需要理解整個句子的任務,例如句子分類、命名實體識別(以及更普遍的詞語分類)和抽取式問答。

正如我們在《🤗 Transformers 如何解決任務》中所看到的,像 BERT 這樣的編碼器模型擅長理解文字,因為它們可以雙向地檢視整個上下文。這使得它們非常適合那些理解整個輸入非常重要的任務。

這類模型的代表包括:

解碼器模型

解碼器模型僅使用 Transformer 模型的解碼器部分。在每個階段,對於給定的單詞,注意力層只能訪問句子中位於它之前的單詞。這些模型通常被稱為自迴歸模型

解碼器模型的預訓練通常圍繞著預測句子中的下一個單詞。

這些模型最適合涉及文字生成的任務。

像 GPT 這樣的解碼器模型旨在透過一次預測一個 token 來生成文字。正如我們在《🤗 Transformers 如何解決任務》中探討的那樣,它們只能看到之前的 token,這使它們非常適合創造性文字生成,但不太適合需要雙向理解的任務。

這類模型的代表包括:

現代大型語言模型 (LLM)

大多數現代大型語言模型 (LLM) 使用僅解碼器架構。這些模型在過去幾年中在規模和能力上都取得了顯著增長,一些最大的模型包含了數千億個引數。

現代 LLM 通常分兩個階段進行訓練:

  1. 預訓練:模型在海量文字資料上學習預測下一個 token。
  2. 指令微調:對模型進行微調,以使其遵循指令並生成有用的響應。

這種方法使得模型能夠在廣泛的主題和任務上理解和生成類似人類的文字。

現代 LLM 的關鍵能力

基於現代解碼器的 LLM 展現了令人印象深刻的能力:

能力 描述 示例
文字生成 建立連貫且與上下文相關的文字 撰寫文章、故事或電子郵件
摘要 將長文件壓縮成較短的版本 建立報告的執行摘要
翻譯 在不同語言之間轉換文字 將英語翻譯成西班牙語
問答 為事實性問題提供答案 “法國的首都是哪裡?”
程式碼生成 編寫或補全程式碼片段 根據描述建立函式
推理 逐步解決問題 解決數學問題或邏輯謎題
少樣本學習(Few-shot learning) 從提示中的幾個例子中學習 在僅看到 2-3 個例子後進行文字分類

您可以透過 Hub 上的模型倉庫頁面直接在瀏覽器中體驗基於解碼器的 LLM。這是一個使用經典 GPT-2(OpenAI 最好的開源模型!)的例子。

序列到序列模型

編碼器-解碼器模型(也稱為序列到序列模型)使用 Transformer 架構的兩個部分。在每個階段,編碼器的注意力層可以訪問初始句子中的所有單詞,而解碼器的注意力層只能訪問輸入中位於給定單詞之前的單詞。

這些模型的預訓練可以有多種形式,但通常涉及重建一個被以某種方式破壞的句子(例如,透過掩蓋隨機單詞)。T5 模型的預訓練包括將隨機的文字片段(可能包含多個單詞)替換為單個特殊的掩碼 token,然後任務是預測該掩碼 token 所替代的文字。

序列到序列模型最適合圍繞根據給定輸入生成新句子的任務,例如摘要、翻譯或生成式問答。

正如我們在《🤗 Transformers 如何解決任務》中所看到的,像 BART 和 T5 這樣的編碼器-解碼器模型結合了兩種架構的優點。編碼器提供了對輸入的深度雙向理解,而解碼器則生成適當的輸出文字。這使得它們非常適合將一個序列轉換為另一個序列的任務,如翻譯或摘要。

實際應用

序列到序列模型擅長於需要將一種形式的文字轉換為另一種形式同時保留其含義的任務。一些實際應用包括:

應用 描述 示例模型
機器翻譯 在不同語言之間轉換文字 Marian, T5
文字摘要 為長文字建立簡潔的摘要 BART, T5
資料到文字生成 將結構化資料轉換為自然語言 T5
語法糾錯 修正文字中的語法錯誤 T5
問答 根據上下文生成答案 BART, T5

這是一個用於翻譯的序列到序列模型的互動式演示:

這類模型的代表包括:

選擇正確的架構

當處理特定的 NLP 任務時,您如何決定使用哪種架構?這裡有一個快速指南:

任務 建議架構 示例
文字分類(情感、主題) 編碼器 BERT, RoBERTa
文字生成(創意寫作) 解碼器 GPT, LLaMA
翻譯 編碼器-解碼器 T5, BART
摘要 編碼器-解碼器 BART, T5
命名實體識別 編碼器 BERT, RoBERTa
問答(抽取式) 編碼器 BERT, RoBERTa
問答(生成式) 編碼器-解碼器或解碼器 T5, GPT
對話式 AI 解碼器 GPT, LLaMA

當不確定使用哪個模型時,請考慮:

  1. 您的任務需要什麼樣的理解?(雙向還是單向)
  2. 您是要生成新文字還是分析現有文字?
  3. 您是否需要將一個序列轉換為另一個序列?

這些問題的答案將引導您選擇正確的架構。

LLM 的演進

大型語言模型近年來發展迅速,每一代都在能力上帶來了顯著的提升。

注意力機制

大多數 Transformer 模型使用全注意力,即注意力矩陣是方陣。當您處理長文字時,這可能成為一個巨大的計算瓶頸。Longformer 和 Reformer 模型試圖提高效率,並使用注意力矩陣的稀疏版本來加速訓練。

標準注意力機制的計算複雜度為 O(n²),其中 n 是序列長度。這對於非常長的序列來說會成為問題。下面介紹的專門注意力機制有助於解決這一侷限性。

LSH 注意力

Reformer 使用 LSH 注意力。在 softmax(QK^t) 中,只有 QK^t 矩陣中最大的元素(在 softmax 維度上)才會產生有用的貢獻。因此,對於 Q 中的每個查詢 q,我們只需考慮 K 中與 q 相近的鍵 k。雜湊函式用於確定 q 和 k 是否相近。注意力掩碼被修改以掩蓋當前 token(除了第一個位置),因為它會產生相等的查詢和鍵(因此彼此非常相似)。由於雜湊可能有些隨機,實踐中會使用多個雜湊函式(由 n_rounds 引數確定),然後將它們的結果平均。

區域性注意力

Longformer 使用區域性注意力:通常,區域性上下文(例如,左右各兩個 token 是什麼?)足以對給定的 token 採取行動。此外,透過堆疊具有小視窗的注意力層,最後一層將具有比視窗內 token 更大的感受野,從而能夠構建整個句子的表示。

一些預先選擇的輸入 token 也會被賦予全域性注意力:對於這少數幾個 token,注意力矩陣可以訪問所有 token,並且這個過程是對稱的:所有其他 token 都可以訪問這些特定的 token(除了它們區域性視窗中的 token)。這在論文的圖 2d 中有所展示,下面是一個示例注意力掩碼:

使用這些引數較少的注意力矩陣,可以使模型能夠處理具有更長序列長度的輸入。

軸向位置編碼

Reformer 使用軸向位置編碼:在傳統的 Transformer 模型中,位置編碼 E 是一個大小為llxdd,ll的矩陣,其中 l 是序列長度,ddd 是隱藏狀態的維度。如果你處理非常長的文字,這個矩陣可能會非常大,並佔用過多的 GPU 空間。為了緩解這個問題,軸向位置編碼將這個大矩陣 E 分解為兩個較小的矩陣 E1 和 E2,維度分別為l1×d1l_{1} \times d_{1}l2×d2l_{2} \times d_{2},使得l1×l2=ll_{1} \times l_{2} = ld1+d2=dd_{1} + d_{2} = d(由於長度是相乘的關係,最終會小得多)。時間步jj在 E 中的嵌入是透過連線 E1 中時間步j%l1j % l1的嵌入和 E2 中j//l1j // l1的嵌入得到的。

結論

在本節中,我們探討了三種主要的 Transformer 架構和一些專門的注意力機制。理解這些架構差異對於為您的特定 NLP 任務選擇合適的模型至關重要。

隨著課程的推進,您將親身體驗這些不同的架構,並學習如何根據您的特定需求對它們進行微調。在下一節中,我們將探討這些模型中存在的一些侷限性和偏見,您在部署它們時應該意識到這些問題。

< > 在 GitHub 上更新

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