---
# System prepended metadata

title: 【生成式人工智慧與機器學習導論2025】03  解剖大型語言模型
tags: [生成式AI]

---

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。


