大語言模型(LLM)是根據深度學習的先進技術,近年來徹底改變了自然語言處理領域。這些模型利用 Transformer 架構,能夠理解、生成和解釋人類語言,並在文字翻譯、情感分析、問答等任務中展現出卓越能力。Transformer 架構中的自注意力機制,讓模型能有效捕捉長距離依賴關係和上下文資訊,進而生成更連貫、更符合上下文的文字。相較於早期 NLP 模型,LLM 具備更廣泛的應用能力,不再受限於單一任務。隨著技術的發展,LLM 的應用也日益多元,從機器翻譯、文字生成到驅動聊天機器人和虛擬助理,都展現了其巨大的潛力。理解 LLM 的運作原理,以及如何建構和應用 LLM,將成為未來技術發展的重要課題。
瞭解大語言模型
大語言模型(LLMs),如OpenAI的ChatGPT所提供的模型,是近年來開發的深度神經網路模型,為自然語言處理(NLP)開啟了新紀元。在LLMs出現之前,傳統方法在分類別任務(如電子郵件垃圾郵件分類別)和簡單的模式識別方面表現出色,但對於需要複雜理解和生成能力的語言任務則表現不佳,例如解析詳細指令、進行上下文分析和建立連貫且上下文適當的原始文字。
本章涵蓋內容
- 大語言模型(LLMs)背後的基本概念的高層次解釋
- 對LLMs所依據的轉換器架構的洞察
- 從零開始構建LLM的計劃
大語言模型的卓越能力
LLMs具有理解、生成和解釋人類語言的卓越能力。然而,必須澄清的是,當我們說語言模型「理解」時,我們的意思是它們能夠以看似連貫和上下文相關的方式處理和生成文字,而不是說它們具有人類般的意識或理解力。
得益於深度學習的進步,LLMs在大量文字資料上進行訓練,使它們能夠捕捉比以前的方法更深層的上下文資訊和人類語言的細微差別。因此,LLMs在包括文字翻譯、情感分析、問答等多種NLP任務中表現出顯著改進。
與早期NLP模型的區別
另一個重要的區別是,早期的NLP模型通常是為特定任務設計的,如文字分類別、語言翻譯等。雖然這些早期的NLP模型在其狹窄的應用領域中表現出色,但LLMs展示了在廣泛的NLP任務中的更廣泛的能力。
轉換器架構的重要性
LLMs背後的成功可以歸因於支撐許多LLMs的轉換器架構,以及訓練LLMs的大量資料,使它們能夠捕捉多種語言細微差別、上下文和模式,而這些是很難手動編碼的。
轉換器架構與大規模訓練資料
這種向根據轉換器架構的模型實施和利用大規模訓練資料訓練LLMs的轉變,已經從根本上改變了NLP,為理解和與人類語言互動提供了更有能力的工具。
本文的主要目標
下面的討論為實作本文的主要目標奠定了基礎:透過逐步實作根據轉換器架構的ChatGPT-like LLM來瞭解LLMs。
什麼是LLM?
LLM是一種設計用於理解、生成和回應類別人文字的神經網路。這些模型是在大量文字資料上訓練的深度神經網路,有時甚至涵蓋了整個網際網路上公開的大部分文字。
「大型」的含義
「大語言模型」中的「大型」指的是模型的引數規模和訓練資料集的龐大規模。這類別模型通常具有數十甚至數百億個引數,這些引數是在訓練過程中最佳化以預測序列中下一個詞的可調權重。
下一個詞預測的重要性
下一個詞預測是合理的,因為它利用了語言固有的順序性質來訓練模型理解文字中的上下文、結構和關係。然而,這是一項非常簡單的任務,令許多研究人員驚訝的是,它竟然能夠產生如此強大的模型。在後面的章節中,我們將逐步討論和實作下一個詞訓練程式。
# 簡單的神經網路範例
import torch
import torch.nn as nn
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(5, 10) # 輸入層到隱藏層
self.fc2 = nn.Linear(10, 5) # 隱藏層到輸出層
def forward(self, x):
x = torch.relu(self.fc1(x)) # 使用ReLU啟用函式
x = self.fc2(x)
return x
#### 內容解密:
此程式碼定義了一個簡單的神經網路,包含一個輸入層、一個隱藏層和一個輸出層。
1. `__init__` 方法初始化神經網路層,包括兩個全連線層 `fc1` 和 `fc2`。
2. `forward` 方法定義了神經網路的前向傳播過程,使用ReLU作為啟用函式。
3. 該範例展示瞭如何使用PyTorch構建基本的神經網路結構。
大語言模型(LLM)解析
1.1 LLM 的基本概念
LLM 採用了稱為 Transformer 的架構,使其能夠在進行預測時對輸入的不同部分給予選擇性的關注,特別擅長處理人類語言的細微差別和複雜性。由於 LLM 能夠生成文字,因此也被視為生成式人工智慧(Generative AI 或 GenAI)的一種形式。如圖 1.1 所示,人工智慧涵蓋了創造具有類別人智慧的機器的廣泛領域,包括理解語言、識別模式和做出決策,並包含諸如機器學習和深度學習的子領域。
人工智慧與機器學習的關係
人工智慧領域現在主要由機器學習和深度學習主導,但也包括其他方法,如根據規則的系統、基因演算法、專家系統、模糊邏輯或符號推理。機器學習涉及開發能夠從資料中學習並進行預測或決策的演算法,而無需明確的程式設計。以垃圾郵件過濾器為例,機器學習演算法透過最小化在訓練資料集上的預測錯誤,學習識別垃圾郵件的模式和特徵,從而能夠將新的電子郵件分類別為垃圾郵件或非垃圾郵件。
深度學習與 LLM 的關聯
深度學習是機器學習的一個子集,專注於使用具有三層或更多層的神經網路(也稱為深度神經網路)來建模資料中的複雜模式和抽象概念。與傳統機器學習不同,深度學習不需要手動提取特徵。圖 1.1 顯示了不同領域之間的層次關係,表明 LLM 是深度學習技術的特定應用,利用其處理和生成類別人文字的能力。
此圖示展示了人工智慧、機器學習、深度學習和 LLM 之間的層次關係。
內容解密:
- 人工智慧是創造具有類別人智慧的機器的廣泛領域。
- 機器學習是開發能夠從資料中學習的演算法的領域。
- 深度學習是機器學習的一個子集,使用多層神經網路來建模複雜模式。
- LLM 是深度學習的一個應用,專注於處理和生成類別人文字。
1.2 LLM 的應用
由於 LLM 能夠解析和理解非結構化的文字資料,因此在各個領域都有廣泛的應用。目前,LLM 被用於機器翻譯、生成新文字(如圖 1.2 所示)、情緒分析、文字摘要等任務。LLM 最近也被用於建立內容,如寫小說、文章,甚至電腦程式碼。此外,LLM 可以驅動複雜的聊天機器人和虛擬助理,如 OpenAI 的 ChatGPT 或 Google 的 Gemini(前身為 Bard),這些系統能夠回答使用者查詢並增強傳統的搜尋引擎,如 Google 搜尋或 Microsoft Bing。
LLM 的未來潛力
總之,LLM 對於自動化幾乎任何涉及解析和生成文字的任務都非常有價值。其應用幾乎無窮無盡,隨著我們不斷創新和探索使用這些模型的新方法,LLM 顯然有潛力重新定義我們與技術的關係,使其更加對話式、直觀和易於使用。
我們的目標是從基礎開始瞭解 LLM 如何運作,並編寫一個能夠生成文字的 LLM。同時,我們還將學習使 LLM 能夠執行查詢的技術,從回答問題到總結文字、翻譯文字等。換句話說,透過逐步構建一個複雜的 LLM 助理(如 ChatGPT),我們將瞭解其工作原理。
建構與使用大語言模型(LLM)的階段
為何建立自己的大語言模型?
從零開始撰寫一個大語言模型(LLM)是一個極佳的練習,能夠深入瞭解其運作機制和侷限性。同時,這也為我們提供了所需的知識,以便在現有的開源LLM架構上進行預訓練或微調,以適應特定的領域資料集或任務。
大多數現代LLM都是使用PyTorch深度學習函式庫實作的,這也是我們將要使用的工具。有興趣的讀者可以在附錄A中找到關於PyTorch的全面介紹。
研究表明,在建模效能方面,針對特定任務或領域量身定製的自定義LLM可以超越通用LLM,例如由ChatGPT提供的那些模型。這些自定義LLM的例子包括BloombergGPT(專門為金融領域設計)和針對醫學問答任務的LLM(更多細節請參見附錄B)。
使用自定義LLM具有多個優勢,特別是在資料隱私方面。例如,公司可能不願意與第三方LLM提供商(如OpenAI)分享敏感資料,因為保密性問題。此外,開發較小的自定義LLM使得直接在客戶裝置(如筆記型電腦和智慧手機)上佈署成為可能,這是蘋果等公司目前正在探索的方向。
建構LLM的一般過程
建構LLM的一般過程包括預訓練和微調。預訓練是指在大型、多樣化的資料集上訓練模型,以開發對語言的廣泛理解。然後,這個預訓練模型可以透過微調進一步改進,微調是指在更窄、更特定於特定任務或領域的資料集上進行訓練。
預訓練
第一步是使用大量的文字資料(有時稱為原始文字)來訓練LLM。這裡的“原始”是指這些資料只是常規文字,沒有任何標籤資訊。(可能會應用過濾,例如刪除格式字元或未知語言的檔案。)
值得注意的是,具有機器學習背景的讀者可能會注意到,標籤資訊通常是傳統機器學習模型和透過常規監督學習正規化訓練的深度神經網路所必需的。然而,對於LLM的預訓練階段,情況並非如此。在這個階段,LLM使用自監督學習,模型從輸入資料中生成自己的標籤。
微調
在獲得預訓練的LLM後,我們可以進一步在標籤資料上訓練它,也就是微調。微調有兩大類別:指令微調和分類別微調。在指令微調中,標籤資料集由指令和答案對組成,例如翻譯文字的查詢和正確翻譯的文字。在分類別微調中,標籤資料集由文字和相關類別標籤組成,例如與“垃圾郵件”和“非垃圾郵件”標籤相關的電子郵件。
Transformer架構介紹
大多數現代LLM依賴於Transformer架構,這是一種在2017年的論文“Attention Is All You Need”中提出的深度神經網路架構。要了解LLM,我們必須瞭解原始的Transformer,它是為機器翻譯開發的,即將英文文字翻譯成德文和法文。Transformer架構的一個簡化版本如圖1.4所示。
Transformer架構由兩個子模組組成:編碼器和解碼器。編碼器模組處理輸入文字,並將其編碼為一系列數值表示或向量,這些向量捕捉了輸入的上下文資訊。然後,解碼器模組接收這些編碼向量並生成輸出文字。在翻譯任務中,例如,編碼器將源語言的文字編碼為向量,解碼器將這些向量解碼以生成目標語言的文字。編碼器和解碼器都由多個層組成,透過所謂的自注意力機制連線。
Transformer和LLM的一個關鍵組成部分是自注意力機制,它允許模型根據彼此的相對重要性來衡量序列中不同詞語或標記的重要性。這種機制使模型能夠捕捉輸入資料中的長距離依賴關係和上下文關係,從而增強其生成連貫和上下文相關輸出的能力。
# 以下是一個簡化的Transformer架構範例,使用PyTorch實作
import torch
import torch.nn as nn
import torch.optim as optim
class TransformerModel(nn.Module):
def __init__(self, input_dim, output_dim, dim_model, num_heads, num_encoder_layers, num_decoder_layers, dim_feedforward, dropout):
super(TransformerModel, self).__init__()
self.transformer = nn.Transformer(d_model=dim_model, nhead=num_heads, num_encoder_layers=num_encoder_layers, num_decoder_layers=num_decoder_layers, dim_feedforward=dim_feedforward, dropout=dropout)
self.encoder = nn.Embedding(input_dim, dim_model)
self.decoder = nn.Linear(dim_model, output_dim)
def forward(self, src, tgt):
src = self.encoder(src)
output = self.transformer(src, tgt)
output = self.decoder(output)
return output
#### 內容解密:
此範例程式碼展示了一個簡化的Transformer模型,使用PyTorch實作。主要元件包括:
1. **TransformerModel類別**:定義了一個繼承自`nn.Module`的Transformer模型。
2. **`__init__`方法**:初始化模型的各個層,包括Transformer層、嵌入層和線性層。
- `input_dim`:輸入資料的維度。
- `output_dim`:輸出資料的維度。
- `dim_model`:模型的維度。
- `num_heads`:多頭注意力的頭數。
- `num_encoder_layers`和`num_decoder_layers`:編碼器和解碼器的層數。
- `dim_feedforward`:前饋網路的維度。
- `dropout`:丟棄率,用於正則化。
3. **`forward`方法**:定義了模型的前向傳播過程。
- 首先,將輸入`src`透過嵌入層進行編碼。
- 然後,將編碼後的輸入和目標`tgt`傳入Transformer層進行處理。
- 最後,將Transformer的輸出透過線性層進行解碼,得到最終輸出。
此範例展示瞭如何使用PyTorch實作一個基本的Transformer模型,為理解更複雜的大語言模型提供了一個基礎。
1.4 介紹 Transformer 架構
Transformer 架構是一種用於自然語言處理(NLP)的深度學習模型,尤其是在語言翻譯任務中表現出色。該架構主要由兩個部分組成:編碼器(encoder)和解碼器(decoder)。編碼器負責處理輸入文字並產生一個嵌入表示(embedding representation),而解碼器則利用這個表示來生成翻譯後的文字,一次一個詞。
編碼器與解碼器的工作流程
- 輸入文字預處理:原始輸入文字經過預處理步驟,為編碼器做好準備。
- 編碼器處理:編碼器存取完整的輸入文字,產生文字編碼,這些編碼被解碼器用來生成翻譯文字。
- 解碼器生成翻譯:解碼器一次生成一個詞,直到完成整個翻譯文字。
圖 1.4 Transformer 架構簡化示意圖
此圖示展示了 Transformer 架構的基本流程,從輸入文字到最終的翻譯結果。
BERT 與 GPT 的區別
BERT(Bidirectional Encoder Representations from Transformers)和 GPT(Generative Pretrained Transformers)都是根據 Transformer 架構的模型,但它們在訓練方法和應用任務上有所不同。
BERT
BERT 主要根據 Transformer 的編碼器部分,專注於遮蔽詞預測任務。在訓練過程中,隨機遮蔽輸入句子中的某些詞,並讓模型預測這些被遮蔽的詞。這種訓練策略使 BERT 在文字分類別任務(如情感預測和檔案分類別)中表現出色。
BERT 的運作方式
GPT
GPT 則主要根據 Transformer 的解碼器部分,專注於生成式任務,如文字生成、機器翻譯和程式碼編寫。GPT 模型透過學習大規模文字資料,能夠執行零樣本學習(zero-shot learning)和少樣本學習(few-shot learning)任務。
GPT 的運作方式
1.5 使用大規模資料集
像 GPT 和 BERT 這樣的大語言模型,需要使用包含數十億詞彙的大規模文字資料集進行訓練。這些資料集涵蓋了多種主題和語言,為模型的強大能力奠定了基礎。
GPT-3 的訓練資料集範例
| 資料集名稱 | 描述 | 規模 |
|---|---|---|
| Common Crawl | 網頁文字資料 | 數百 GB |
| WebText | 網頁文字資料 | 數十 GB |
| BooksCorpus | 書籍文字資料 | 數 GB |
Transformer 與大語言模型(LLM)
雖然現在的大語言模型大多根據 Transformer 架構,但並非所有 Transformer 都是 LLM,也並非所有 LLM 都是 Transformer。其他架構,如迴圈神經網路(RNN)和卷積神經網路(CNN),也被探索用於構建 LLM,以提高計算效率。然而,Transformer 架構仍然是目前主流的選擇。
#### 內容解密:
本章節介紹了 Transformer 架構的基本原理及其在自然語言處理中的應用,重點比較了 BERT 和 GPT 兩種根據 Transformer 的大語言模型。透過對編碼器和解碼器工作流程的分析,我們瞭解了這兩種模型的區別和各自的優勢。同時,也強調了大規模資料集在訓練這些模型中的重要性。最後,討論了 Transformer 與大語言模型之間的關係,以及未來可能的研究方向。
大語言模型的訓練資料與架構解析
大語言模型(LLMs)的訓練依賴於龐大的資料集,這些資料集涵蓋了多樣的文字來源,從而使模型能夠處理各種語言任務,包括語法、語義和上下文理解。GPT-3 的訓練資料集如表 1.1 所示,總計使用了 4990 億個 token,但實際上只訓練了 3000 億個 token。
GPT-3 的訓練資料集
| 資料集名稱 | 資料集描述 | Token 數量 | 訓練資料比例 |
|---|---|---|---|
| CommonCrawl (過濾後) | 網頁爬取資料 | 4100 億 | 60% |
| WebText2 | 網頁爬取資料 | 190 億 | 22% |
| Books1 | 網路書籍語料函式庫 | 120 億 | 8% |
| Books2 | 網路書籍語料函式庫 | 550 億 | 8% |
| Wikipedia | 高品質文字 | 30 億 | 3% |
內容解密:
- 資料集名稱與描述:列出了 GPT-3 訓練所使用的五個主要資料集,包括網頁爬取資料、網路書籍和 Wikipedia 高品質文字。
- Token 數量:每個資料集所含的 token 數量,token 是模型讀取的文字單位,約等於單詞和標點符號的數量。
- 訓練資料比例:每個資料集在整個訓練資料中所佔的比例,總和為 100%,並根據四捨五入進行了調整。
大語言模型的預訓練優勢
預訓練的 LLMs 可以透過微調(fine-tuning)在特定任務上表現出色,這使得它們被稱為基礎模型(foundation models)。預訓練過程需要大量的計算資源,例如 GPT-3 的預訓練成本估計為 460 萬美元。
GPT 架構解析
GPT 原始模型由 OpenAI 的 Radford 等人提出,GPT-3 是該模型的擴大版本,具有更多的引數和更大的訓練資料集。GPT 模型的成功在於其簡單的下一詞預測任務(next-word prediction),這是一種自監督學習(self-supervised learning)方法。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title 大語言模型架構與應用解析
package "LLM 架構與應用" {
package "核心架構" {
component [Transformer] as transformer
component [自注意力機制] as attention
component [位置編碼] as position
}
package "模型類型" {
component [BERT 編碼器] as bert
component [GPT 解碼器] as gpt
component [T5 編解碼] as t5
}
package "應用領域" {
component [文字翻譯] as translate
component [情感分析] as sentiment
component [問答系統] as qa
}
}
transformer --> attention : 核心機制
attention --> position : 序列資訊
position --> bert : 雙向理解
position --> gpt : 自迴歸生成
bert --> t5 : 融合架構
gpt --> t5 : 融合架構
t5 --> translate : NLP 任務
t5 --> sentiment : 分類任務
t5 --> qa : 生成任務
note right of attention
自注意力機制:
- 捕捉長距離依賴
- 上下文關係建模
- 並行計算效率
end note
note right of gpt
GPT 特性:
- 自迴歸生成
- 下一詞預測
- 大規模預訓練
end note
@enduml
此圖示展示了 GPT 模型的下一詞預測流程。
內容解密:
- 輸入文字:提供給 GPT 模型的初始文字。
- GPT 模型:利用預訓練的權重進行下一詞預測。
- 預測下一詞:模型根據輸入文字預測下一個詞彙。
- 輸出結果:生成的文字結果,可以用於文字補全、拼寫糾正等多種任務。
GPT 模型僅使用 Transformer 架構的解碼器部分,使其成為自迴歸模型(autoregressive model),即模型的輸出會作為輸入的一部分來生成後續文字。這種架構的簡單性和高效性使得 GPT 系列模型在自然語言處理領域取得了顯著成就。