20251116筆記 內容可能有錯誤,請參考原始影片 [李宏毅【生成式人工智慧與機器學習導論2025】](https://www.youtube.com/playlist?list=PLJV_el3uVTsMMGi5kbnKP5DrDHZpTX0jT) [【生成式人工智慧與機器學習導論2025】第3講:解剖大型語言模型](https://www.youtube.com/watch?v=8iFvM7WUUs8&t=1310s) ### 【生成式人工智慧與機器學習導論2025】第3講:解剖大型語言模型 大綱 **I. 語言模型內部運作概述** * 語言模型(LLM)的功能:輸入末完成的句子 $x$,輸出下一個 token 的機率分佈 $f(x)$。 * 核心目標:剖析已訓練好的模型 $f$ 的內部結構與運作機制。 **II. 從輸入到輸出** 1. **分詞 (Tokenization) 與 ID 轉換**:輸入句子切分成 token,轉為對應的 ID 編號。 2. **嵌入 (Embedding)**:ID 透過 Embedding Table 轉換成 token embedding(向量)。 3. **多層處理 (Multi-Layer Processing)**:Embedding 透過多個 Transformer Layer。 * 每一層輸出 Contextualized Embedding (考慮上下文的向量),也稱 Hidden Representation 或 Latent Representation。 4. **語言模型頭 (LM Head)**:最終一層的 representation 乘上 LM Head 矩陣。 * 計算結果為 Logit 向量,其維度等於詞彙量大小 (Vocabulary Size)。 5. **SoftMax 轉換**:將 Logit 轉換為機率分佈 (0到1之間,總和為1)。 **III. 語言模型層級輸出分析** 1. **Token Embedding 特性**:相同 token 具有相同 embedding,相似意思的 token 具有相近 embedding。 2. **Contextualized Embedding 特性**:透過 Layer 後,相同 token 但上下文不同,它的 representation 會相異。 3. **分析方法**: * **高維投影**:將高維向量投影到低維空間以分析詞彙關聯性(如發現文法樹或世界地圖)。 * **表徵工程 (Representation Engineering)**:透過加減向量(如拒絕向量)來操控模型行為。 * **Logit Lens**:對每一層輸出執行 unembedding,窺探模型在各層的預期輸出 token。 * **Patch Scope**:將 representation 替換到特定提示 (prompt) 中,將其解讀為完整的句子,觀察模型對輸入的理解進程。 **IV. 單層內部運作** 1. **結構**:一個 Layer 主要包含 Self-Attention Layer 和 Feed Forward Layer。 2. **自我注意力 (Self-Attention)**:負責融合上下文資訊。 * 使用 Query (Q)、Key (K) 和 Value (V) 向量(透過 $W_Q, W_K, W_V$ 矩陣轉換)。 * Q 與 K 的相似度決定 Attention Weight (專注度)。 * Multi-Head Attention:使用多組 QKV 矩陣,捕捉輸入的不同面向(如顏色、數量)。 * Causal Attention:僅考慮左側(前方)的 token。 * 需加入 Positional Embedding 來納入位置資訊。 3. **前饋網路 (Feed Forward Network, FFN)**:通常是兩層,包含矩陣乘法與 Activation Function。 4. **神經元視角**:矩陣運算中的單個計算步驟可被視為一個神經元 (Neuron),整體構成類神經網路。 **V. 模型實例觀察 (Llama 3B & Gemma 4B)** * Llama 3B 具有 32 億參數、28 層,詞彙量約 12.8 萬。 * Gemma 4B 具有 43 億參數、34 層,詞彙量約 26 萬。 * 實際觀察模型參數結構(如 embedding table, QKV 矩陣)。 --- ### I. 語言模型內部運作概述 語言模型 (LLM) 被定義為一個函數 $f$,它的作用是接收一個未完成的句子 $x$,並輸出一個機率分佈 $f(x)$,用來預測接下來可以接上每一個 token 的機率。這堂課的重點在於深入探討 $f$ 的內部運作機制,在給定 $x$ 之後,模型內部發生了什麼事,才產生了最終的 $f(x)$。我們假設這些語言模型已經被訓練好,參數已經固定,並直接去解剖這些參數與輸入句子之間的互動,沒有任何語言模型被訓練。 ### II. 從輸入到輸出 1. **分詞 (Tokenization) 與 ID 轉換** 輸入的句子首先會經歷**分詞 (Tokenization)** 過程,被切割成一個一個的 token。每個 token 會對應到一個編號 (ID)。在實際操作中,一個中文字可能由好幾個 token 組成,或者好幾個中文字合起來才是一個 token。 2. **嵌入 (Embedding) 轉換** 這些 ID 隨後會送進語言模型,第一個與 ID 互動的組件稱為 **Embedding Table**。 * Embedding Table 是一個矩陣 (Matrix),它的 row 對應到每一個 token。例如,如果模型有 128,000 個 token,該矩陣就有 128,000 個 row。 * 該矩陣的 column 代表每個 token 轉換成的向量(embedding)的維度 (dimension)。 * Embedding Table 是整個網路(模型)參數的一部分。 * 透過查詢這個 Table,每個 ID(整數)會被轉換成一個向量,稱為 **token embedding**。 3. **多層結構 (Multiple Layers)** Token Embeddings 會依序進入模型中的多個 **Layer**。一個語言模型通常包含很多個 Layer。 * 每個 Layer 的作用是將一排輸入向量轉換成另一排輸出向量,且輸入和輸出的長度保持一致。 * Layer 內部包含多個矩陣,這些矩陣代表該 Layer 的參數。 * 一個 Layer 會綜合考量當前 token embedding 及其之前所有輸入(上下文),產生一個新的向量。 * Layer 輸出的新向量被稱為 **Contextualized Embedding** (強調考慮了上下文),也常被稱為 **Hidden Representation** 或 **Latent Representation**。 * 多個 Layer 的堆疊就是深度學習 (Deep Learning) 或類神經網路 (Neural Network)。例如 Llama 3B 有 28 層,Gemma 4B 有 34 層。 4. **輸出 Logits** 經過所有 Layer (假設 $L$ 層) 處理後,會得到最後一排向量。我們取出這排向量的**最後一個**。 * 這個最終向量(假設維度為 $K$)會乘上另一個矩陣,稱為 **LM Head**(語言模型的頭)。 * LM Head 矩陣的維度是 $K$ 乘 $V$ (其中 $V$ 是詞彙表大小)。 * 乘積的結果是一個 $V$ 維的向量,稱為 **Logit**。 * Logit 向量的每一維對應到一個 token,代表該 token 接在輸入句子後面的可能性分數。 * LM Head 矩陣的數字也是模型參數的一部分。 * *Unembedding (首尾呼應)*:在許多語言模型(如 Llama 和 Gemma)中,LM Head 矩陣直接使用最初的 Embedding Table。這種設計使得最終輸出與 token embedding 之間的關係是計算最終 Layer 輸出的 representation 與每一個 token embedding 之間的相似度(使用 Dot Product)。Representation 越接近某個 token 的 embedding,該 token 得到的分數越高。 5. **機率轉換 (SoftMax)** Logit 數值可以是任意數字(正或負),不能直接視為機率。 * SoftMax 操作將 Logit 轉換為機率。 * 操作步驟:先對 Logit 向量中的每個數值取 exponential (確保數值為正),再將這些 exponential 數值的總和設為 1,藉此將每個數值轉換成介於 0 到 1 之間的機率。 * Logit 數值越大,轉出的機率就越大。 * SoftMax 並非模型必要部分,但有助於後續的取樣操作(擲骰子)。 * **Temperature (大 $T$) 參數**:Logit 在 SoftMax 之前可以先除以 $T$。$T$ 越大,機率分佈越平均(越容易擲出罕見符號,通常對應「創意模式」);$T$ 越小,機率分佈越集中(通常對應「保守模式」)。 ### III. 語言模型層級輸出分析 模型內部的 Layer 輸出(representation 或 embedding)攜帶了豐富的資訊: 1. **Token Embedding 與 Contextualized Embedding 的區別** * **Token Embedding**:僅依賴 token 本身,意識相近的 token 會有相近的 embedding(例如:Apple 與 banana 接近,Apple 與 iPhone 也接近)。 * **Contextualized Embedding**:在通過 Layer 之後,它會考慮上下文。例如,同樣是「Apple」這個 token,如果上下文指的是水果,它的 representation 就會與指「蘋果電腦」的 representation 顯著不同。 2. **分析 Representation 的方法** * **高維向量分析 (Projection)**: * 將這些高維的 representation 向量投影到低維空間(如二維平面),有助於分析 token 之間的關聯性。 * 透過尋找特定的投影方向,研究者發現在早期的語言模型 (如 BERT) 的中間層中可以投射出句子的文法樹。 * 近期研究發現,Llama 的 Latent Representation 中可以找到一個二維平面,將地名投影上去後,其分佈位置與真實世界地圖上的位置相近。 * 在 Embedding 空間中,特定的方向可能帶有特定的含義,例如表示翻譯方向(中文-英文)。 * **表徵工程 (Representation Engineering)**: * 這類技術目的在直接修改 Layer 輸出的 representation,觀察模型行為的變化。 * 例如,透過收集大量「拒絕」和「不拒絕」請求的 representation,計算它們的平均向量差,從而提取出一個「拒絕向量」。 * 將這個「拒絕向量」加到模型某一層(如第十層)的 representation 上,可以強迫模型拒絕本來不會拒絕的請求(如教瑜伽)。 * 反之,減去這個「拒絕向量」,可以讓模型同意執行本來會拒絕的「壞事」。 * **Logit Lens**: * 這種方法是對每一層的 representation 都進行 unembedding(即乘上 LM Head 矩陣)。 * 它允許研究者窺探語言模型在每一層思考時,心裡期望輸出的 token 是什麼。 * 例如,分析 Llama 進行法文到中文的翻譯時,模型可能先在內心將法文 (flower) 轉換成英文 (flower),然後在最後的 Layer 才轉換成中文 (花/玉)。 * **Patch Scope**: * Logit Lens 只能將 representation 對應到一個 token,而 Patch Scope 旨在將 representation 解讀為完整的句子或概念。 * 方法是將一個輸入(如「李宏毅老師」)在某一層產生的 representation,替換到另一個提示(如「請簡單介紹 X」)中的 X 位置。 * 觀察替換後模型會繼續生成什麼,即可解讀該 representation 代表的含義。 * 實驗顯示,模型對輸入的理解是漸進的:在前面幾層,可能只看到輸入中的部分詞彙;到中間層,會看到完整的概念;到更深層,則能提取出更抽象的資訊(如「戴安娜」的 representation 從「威爾斯」演變到「威爾斯王子的妻子」,最終變成完整的個人介紹)。 ### IV. 單層內部運作:Transformer 架構 一個 Transformer Layer 主要由 Self-Attention 層和 Feed Forward Network (FFN) 層構成。 1. **自我注意力 (Self-Attention)** * 這是 LLM 能夠考慮上下文的關鍵機制。 * 目標:找出輸入中哪些 token 會影響當前 token 的意思,並將這些資訊融合。 * **Q, K, V 向量**:每個輸入的 token embedding 會分別乘上三個權重矩陣 $W_Q, W_K, W_V$(它們是 Layer 的參數)來得到 Query (Q)、Key (K) 和 Value (V) 向量。 * **計算影響力**:將當前 token 的 Query 向量與所有 token 的 Key 向量計算相似度(通常使用 Dot Product,點積)。算出的數值越大,代表該 Key 對 Query 越有影響力,這個分數稱為 **Attention Weight**。 * **融入位置資訊**:由於 Q 和 K 是基於 context-independent 的 token embedding 計算出來的,為了區分相同 token 在不同位置的差異,必須加入 **Positional Embedding**(位置向量,也是模型參數的一部分)。 * **加權總和**:Attention Weight (通常經過 SoftMax 轉換) 會對應的 Value 向量進行加權求和,得到融合上下文後的新向量。 * **殘差連接 (Residual Connection)**:新的向量會加上原始的輸入向量 (token embedding) 作為 Attention Layer 的最終輸出。 * **多頭注意力 (Multi-Head Attention)**:為了捕捉輸入的不同面向(例如,一個 Head 關注詞彙的形容詞,另一個 Head 關注詞彙的數量),Attention 機制通常有多組參數(多個 Heads)。Llama 3B 每層有 24 組 Heads。每個 Head 獨立計算 QKV 和加權總和,最終所有 Heads 的輸出會透過另一個矩陣 $W_O$ 揉合在一起。 * **因果注意力 (Causal Attention)**:在生成式 LLM 中,模型通常只會考慮當前 token 左側(前方)的 token 資訊,稱為 Causal Attention。 2. **前饋網路 (Feed Forward Network, FFN)** * FFN 接收 Attention Layer 的輸出,通常由兩層線性層構成。 * 運作方式:輸入向量乘上矩陣 $W$,加上偏差向量 $B$ (Bias),再透過一個**激活函數 (Activation Function)**(如 ReLU 或 GeLU)。 * 兩層 FFN 運算後產生最終的 Layer 輸出。 3. **神經元 (Neuron) 的概念** * 雖然整個模型看起來都是複雜的矩陣運算,但如果將矩陣運算拆解來看,每一個 $X_i \times W_i + B$ 的計算步驟,透過一個 Activation Function 得到輸出 $Y$,這就被稱為一個「神經元」。 * 整個語言模型就是由大量的神經元集合而成的類神經網路。 ### V. 模型實例觀察 透過實際解剖 Llama 3B 和 Gemma 4B 的參數結構,我們可以確認其組成和規模: * **Llama 3B**:總參數量約 32 億 (3.2 Billion)。有 28 層 (從 layer0 到 layer27)。詞彙表大小為 128,256,Token Embedding 維度是 3072。每層 Self-Attention 具有 24 組 Heads。 * **Gemma 4B**:總參數量約 43 億。有 34 層。詞彙量超過 26 萬 (262,208),Token Embedding 維度是 2560。每層 Self-Attention 具有 8 組 Heads。Gemma 還有 Vision Tower 相關參數,顯示其具有處理圖片的能力。 **例子** * **Apple 的歧義解析**:在第零層(Token Embedding),指水果和指公司的「Apple」具有完全相同的相似度(100%)。但從第一層開始,隨著模型開始納入上下文(如「for breakfast」或「TH company」),它們的 representation 相似度會急劇下降,證明模型能夠在深層次理解 token 意義的差異。 * **Attention Weight 視覺化**:Attention Weight 可以用矩陣圖表示。由於採用 Causal Attention,矩陣的右上角通常是零(深藍色),表示後面的 token 不會影響前面的 token。在許多 Attention Head 中,如果沒有特別相關的 token 可供專注,模型往往會 attend 到句子的起始符號,該符號充當一個預設的「無事可看」的 token。