---
# System prepended metadata

title: 【2023生成式AI】09~11 Finetuning vs. Prompting
tags: [生成式AI]

---

20251020筆記 內容可能有錯誤，請參考原始影片 


[李宏毅【機器學習 2023】(生成式 AI)](https://www.youtube.com/playlist?list=PLJV_el3uVTsOePyfmkfivYZ7Rqr2nMk3W)

今日影片


[【生成式AI】Finetuning vs. Prompting：對於大型語言模型的不同期待所衍生的兩類使用方式 (1/3)](https://youtu.be/F58vJcGgjt0?si=LXks-DnApfKMtv2o)

[【生成式AI】Finetuning vs. Prompting：對於大型語言模型的不同期待所衍生的兩類使用方式 (2/3)](https://youtu.be/aZ_jXZvxyVg?si=G59NXpg586ABOQL8)


[【生成式AI】Finetuning vs. Prompting：對於大型語言模型的不同期待所衍生的兩類使用方式 (3/3)](https://youtu.be/HnzDaEiN_eg?si=sVJoSiz5TLPBiX78)



### 【生成式AI】Finetuning vs. Prompting：對於大型語言模型的不同期待所衍生的兩類使用方式 (1/3) 大綱

1.  **引言：人類對 LLM 的兩種期待與對應技術**
    *   介紹 GPT (文字接龍) 和 BERT (文字填空) 的區別。
    *   以老鼠操控大象的比喻說明 LLM (大象) 與使用 LLM 的人類 (老鼠) 的關係。
    *   兩種期待：成為「專才」或成為「通才」。
2.  **期待一：將 LLM 變成「專才」**
    *   目標：讓 LLM 專門解決某一特定任務，例如翻譯或摘要。
    *   技術路線：**微調 (Fine-tuning)**。
    *   案例：ChatGPT (通才) 在翻譯任務上的表現通常不如商用專門系統 (專才)。
3.  **微調 (Fine-tuning) 技術詳解**
    *   BERT 模型通常用於實現期待一。
    *   BERT 專才化的兩項改造：
        *   **加外掛 (Adding Extra Modules)**：因 BERT 本身不擅長產生完整句子。
        *   **微調參數 (Fine-tuning)**：利用有標籤資料調整語言模型的內部參數。
    *   **Adapter 技術**：一種更有效率的微調方法。
        *   概念：不變動語言模型本身的參數，只插入額外的微小模組 (Adapter) 並只調整這些模組的參數。
        *   優勢：節省儲存空間，只需儲存一個大型 LLM 基礎模型和許多輕量的 Adapter。
4.  **期待二：將 LLM 變成「通才」**
    *   目標：讓 LLM 變得無所不能，透過人類語言的指令來操控。
    *   技術路線：**提示詞 (Prompting)**。
    *   通才的優勢：
        *   符合人類對人工智慧的想像。
        *   開發新功能時，不用寫程式，只需修改人類語言的指令 (Prompt)。
    *   歷史發展：這個概念並不新穎，早在 2018 年就有人提出將所有自然語言處理 (NLP) 問題視為「問答問題」的構想。

---

#### 一、 語言模型 (LLM) 的基本類型與比喻

*   **GPT 系列**：執行文字接龍的任務，補完不完整的句子。
*   **BERT 系列**：執行文字填空的任務，填補句子中被挖空的區塊。
*   **LLM 的比喻**：大型語言模型就像一頭大象，它擁有基於大量網路資料的知識和潛在力量，但它不知道自己要做什麼。
*   **人類對 LLM 的操控**：使用語言模型的人類就像騎在大象頭上的老鼠，只需用一點點力量（指令或調整）就能指引大象走向特定方向。

#### 二、 人類對 LLM 的兩種期待與技術路線

人類對 LLM 有兩種截然不同的歷史期待，並由此導向兩種技術路線:

| 期待 | 目標 | 技術路線 | 例子 (任務) | 核心概念 |
| :--- | :--- | :--- | :--- | :--- |
| **期待一 (專才)** | 專注解決某一特定任務 (如翻譯、摘要)。 | **微調 (Fine-tuning)** | 翻譯、摘要、情感分析 | 讓模型在單一任務上表現卓越。 |
| **期待二 (通才)** | 變得無所不能，什麼都會。 | **提示詞 (Prompting)** | 透過指令實現翻譯、摘要 | 讓模型透過人類語言指令來控制。 |

*   **當前趨勢**：目前的 ChatGPT 走的正是「期待二」的路線，目標在成為一個「通才」，並直接使用人類語言 (Prompt) 來操控。

#### 三、 期待一：將 LLM 變成「專才」— 微調 (Fine-tuning)

**1. 專才的優勢**

*   專注於單一任務，因此有機會在特定任務上擊敗通才模型。
*   **案例分析**：騰訊和 Microsoft 的研究均顯示，在翻譯任務上，專門的商用翻譯系統（專才）在多數情況下表現優於 GPT 系列模型（通才）。

**2. BERT 模型與專才化改造**

*   以 BERT 為例，要將其變成專精於某一任務的專才，通常需要兩方面的改造:

    *   **改造 A：加外掛 (Adding Extra Modules)**
        *   **原因**：BERT 本身只會「文字填空」，它不會自己生成完整的句子（如翻譯的輸出）。
        *   **方法**：需要在 BERT 基礎模型上加上額外的模組或層級，才能讓它執行任務（例如翻譯或生成特定答案）。

    *   **改造 B：微調參數 (Fine-tuning)**
        *   **概念**：使用有標註的任務資料（例如翻譯資料：`good morning` 對應 `早安`），去微調語言模型內部的參數。
        *   **流程**：將原語言模型的參數作為訓練的初始設定，然後利用任務資料進行梯度下降 (gradient descent) 的微調。

**3. Adapter 技術 (高效微調)**

*   **問題背景**：當前的大型語言模型（如 GPT-3）參數數量龐大 (1750 億參數)。如果每個任務都微調整個模型，100 個任務就需要儲存 100 個巨大的模型，這在實作上難以承受。
*   **Adapter 概念 (高效微調 Efficient Fine-tuning)**：
    *   **做法**：保持語言模型本身的參數不動。
    *   **做法**：在語言模型中插入額外的輕量級模組 (Adapter)。
    *   **調整**：只微調這些新插入的 Adapter 模組的參數。
*   **Adapter 的優勢**：大大減少需要儲存的參數數量。只需儲存一個巨大的基礎 LLM，以及數百個參數量很小 (可能只是一個 layer) 的 Adapter 模組。

#### 四、 期待二：將 LLM 變成「通才」— 提示詞 (Prompting)

**1. 通才的優勢**

*   **符合想像與媒體熱度**：只有成為通才，才能符合大眾對人工智慧的想像，並引起廣泛討論。
*   **開發的便捷性**：要開發新功能或調整任務時，不再需要寫程式，而是直接使用人類的語言來操控模型。
    *   例如，若摘要結果太長，過去需要修改程式；現在只需更改指令為「我要 100 字以內的摘要」，模型就能理解並執行。

**2. 歷史先驅**

*   將 LLM 視為通才的概念並非新點子，而是人類長期的夢想。
*   早在 2018 年的文章中就提出 **Natural Language Decathlon** 的想法，認為所有 NLP 問題都可以轉化為「問答問題」。

### 【生成式AI】Finetuning vs. Prompting：對於大型語言模型的不同期待所衍生的兩類使用方式 (2/3) 大綱

1.  **「通才」的實現：指令微調與情境學習**
    *   通才的目標：讓機器閱讀任務敘述和例子後，就能執行任務。
    *   兩種操控技術：**指令微調 (Instruction Tuning)** 和 **情境學習 (In-context Learning)**。
    *   OpenAI (GPT) 選擇通才路線的可能原因。
2.  **情境學習 (In-context Learning) 詳解**
    *   定義：透過在輸入中提供任務例子，讓模型學會回答問題。
    *   In-context Learning 的實質爭議：模型是否真的透過例子「學習」了？
        *   實驗一：給予錯誤標註的例子，正確率並無顯著下降。
        *   實驗二：給予與任務不相關領域的例子 (Wrong Domain)，模型表現顯著變差。
    *   結論：例子主要用於**喚醒 (Hining)** 模型已具備的潛在能力，而非真正教會新知識。
3.  **指令微調 (Instruction Tuning) 詳解**
    *   目標：讓模型能理解並執行前所未見的自然語言指令。
    *   做法：在訓練時，將標註資料集轉換成多種人類可讀的指令格式 (Prompt) 進行微調。
    *   優勢：訓練後的模型可以推廣到從未見過的指令上，並自動執行任務。

---

#### 一、 通才模型的目標與技術基礎

*   **通才目標**：我們希望機器能夠閱讀我們要求的任務敘述，並提供一些例子，機器就能根據敘述和例子，執行我們想做的事情。
*   **指令微調 (Instruction Tuning)**：機器根據「題目的敘述」就能夠回答。
*   **情境學習 (In-context Learning)**：機器根據「例子」就能夠回答。
*   **GPT 系列的選擇**：ChatGPT 走的正是「期待二」的路線，目標在成為通才，可能是符合 OpenAI 對通用智慧的較高期待，也可能是因為微調（專才路線）已被 BERT 佔據。

#### 二、 情境學習 (In-context Learning)

**1. In-context Learning 的運作方式**

*   **概念**：直接在輸入中（作為文字接龍的一部分）提供任務的例子。
    *   例如，要做情感分析，必須給模型例子，告訴它哪些句子是正面的，哪些是負面的，然後再丟入待測句子，讓模型輸出後續的文字（預期為正面或負面）。

**2. In-context Learning 是否真的帶來學習？**

*   這是機器學習領域中一個核心疑問：In-context Learning 這些例子是否真的讓模型進行了類似梯度下降的「學習」？
*   **實驗結果與推論**：

    *   **實驗一：錯誤標註的例子**
        *   故意給予帶有錯誤標籤的例子（例如，正面的句子卻標註為負面）。
        *   結果發現，給予錯誤標註的例子後，模型的正確率並沒有真正的顯著下降。
        *   **推論**：這表明模型似乎沒有真正從這些例子中進行學習。
    *   **實驗二：無關領域的例子 (Wrong Domain)**
        *   如果給予的例子句子來自與當前任務完全不同的資料集 (Domain)，模型的表現會顯著變差。
        *   **結論**：模型需要這些例子來「提醒」或「喚醒」(Hinting) 它已具備的潛在能力（例如情感分析的能力）。例子最重要的是**領域 (Domain)**，而非例子的數量或標註的正確性。

**3. 例子數量的影響**

*   在 In-context Learning 方法中，例子的數量（從 4、8、16 到 32 個）對正確率的影響並沒有像傳統微調那樣顯著，很快就收斂了。
*   這進一步支持了 In-context Learning 的例子主要目的是「喚醒」模型，而非讓機器根據例子進行學習。
*   **最新研究的反駁 (大型模型)**：
    *   Google 的一篇論文（提到 PaLM 模型，5400 億參數）指出，**在大模型上**，In-context Learning 會發生從例子中學習的現象。
    *   證據：當提供 100% 錯誤的標註時，超大型模型 (如 PaLM) 的正確率會低於隨機亂猜的 50%，這表示它確實從錯誤資料中學到了反向關係。

#### 三、 指令微調 (Instruction Tuning)

**1. 概念與目的**

*   **目的**：讓機器透過閱讀任務的「敘述」就知道要做什麼。
*   **挑戰**：直接使用預訓練的文字接龍模型（如 GPT）來看指令，效果通常很差。
*   **Instruction Tuning 做法**：
    *   在訓練時，給予模型不同的指令，例如：「請做翻譯」，或「請做摘要」，然後告訴它正確的答案。
    *   **目標**：期待在測試時，給予一個「前所未有」的指令，模型也能自動知道指令的意思並給出合理的答案。

**2. T5 與 FLAN 模型**

*   **T5 模型**：由 Google 於 2020 年發表，是早期嘗試 Instruction Tuning 的知名模型。
*   **FLAN 模型**：由 Google 於 2021 年發表，目標在讓模型學會根據人類的指令做事情。

**3. FLAN 的訓練流程**

*   **步驟一：收集資料**：收集大量標註的自然語言處理任務資料集（例如翻譯有 8 個資料集，摘要有 13 個資料集）。
*   **步驟二：改寫成指令 (Prompt)**：將原本的任務問題改寫成多種不同的人類語言描述方式。
    *   例如，一個判斷文本矛盾的任務，可以寫成多達十種不同的描述方式（例如「請讀下面的文章，然後決定假設是否可以推導前提」）。
*   **步驟三：微調**：使用這些轉換後的指令資料去訓練模型。

**4. Instruction Tuning 的結果**

*   實驗顯示，經過 Instruction Tuning 的 FLAN 模型，其表現優於直接使用指令進行 In-context Learning 的 GPT-3 模型。
*   **關鍵優勢**：Instruction Tuning 的模型可以將學到的知識泛化到從未見過的指令和任務上，這就是通才的實現。

### 【生成式AI】Finetuning vs. Prompting：對於大型語言模型的不同期待所衍生的兩類使用方式 (3/3) 大綱


1.  **思維鏈  (Chain-of-Thought, CoT) 提示法**
    *   目的：解決 LLM 在處理需要推理 (例如數學) 的問題時表現不佳的問題。
    *   概念：在提供例子時，同時提供完整的**推論過程**。
    *   效果：顯著提升 LLM 在數學等推理任務上的正確率。
2.  **進階的 CoT 技術與變形**
    *   **零樣本 CoT (Zero-shot CoT)**：無需例子，只需在指令中加入「`Let's think step by step`」等句子，即可讓模型自動生成推理過程。
    *   **自我一致性 (Self-Consistency)**：讓模型生成多次不同的推論和答案，然後投票選出最一致的答案。
    *   **思想清單 (List-to-Thought)**：將複雜問題拆解成簡單子問題，引導模型循序漸進地解決。
3.  **提示詞的自動化生成**
    *   概念：讓 LLM 自己生成或尋找最佳的提示詞 (Prompt)，以取代人工的提示工程師。
    *   方法一：**連續提示詞 (Soft Prompt/Continuous Prompt)**：訓練可調整的連續向量，而非人類語言文本。
    *   方法二：**強化學習 (Reinforcement Learning)**：使用另一個模型生成提示詞，並用獎勵機制評估效果。
    *   方法三：**LLM 自我生成提示詞**：讓 LLM 根據輸入/輸出例子，自動逆向推導出最有效的指令。
4.  **總結：提示詞的技術效果**
    *   透過自動化生成的指令，例如「`Let's work out step by step to be sure we have the right answer`」，能進一步提升模型在推理任務上的表現。

---

#### 一、 思維鏈  (Chain-of-Thought, CoT) 提示法

**1. CoT 的提出背景**

*   在使用情境學習 (In-context Learning) 的方法時，如果遇到需要**推理**（例如數學應用題）的問題，單純給予問題和答案的例子，模型往往無法正確回答新的問題。

**2. CoT 的核心概念**

*   **做法**：在給予模型例子時，同時提供詳細的**推論過程**，告訴模型答案是怎麼得出的。
*   **期待結果**：當模型看到一個新的問題時，它會被期待先寫出詳細的推論過程，然後才寫出答案。
*   **效果**：根據 Google 的實驗結果，在數學問題上，使用 CoT 之後，即使是像 PaLM 這樣的大型語言模型 (5400 億參數)，正確率也能從 17.7% (一般 In-context Learning) **飛升到 57%**。

#### 二、 進階的 CoT 技術與變形

**1. 零樣本 CoT (Zero-shot CoT)**

*   **問題**：很多時候我們沒有詳細的解題過程作為例子。
*   **做法**：在要求模型回答問題之前，直接加上一句話，例如：「**`Let's think step by step`**」(讓我們一步一步想)。
*   **效果**：這句額外的指令就能顯著提升模型的推理能力，如同對模型進行了「催眠」。
    *   例如，原本正確率 17.7% 的問題，加上這句話之後，模型表現會獲得報酬。

**2. 自我一致性 (Self-Consistency)**

*   **概念**：利用 LLM 輸出答案的隨機性 (Stochasticity)。
*   **做法**：讓語言模型針對同一個問題，生成**多次**不同的推論過程和答案。
*   **優化**：然後對這些不同的答案進行「投票」 (Consensus)，選擇出現次數最多的那個答案。
*   **輔助技巧**：也可以計算每個答案的**信心分數** (Confidence Score, 透過生成該答案的機率來計算)，並根據信心分數進行加權投票。

**3. 思想清單 (List-to-Thought)**

*   **目的**：解決過於困難的數學習題。
*   **做法**：
    1.  將複雜問題拆解成數個較簡單的**子問題**。
    2.  將簡化後的問題和原問題一起丟給 LLM 進行文字接龍。
    3.  LLM 會先輸出第一個子問題的答案。
    4.  再將子問題的答案連同後續的問題，丟給 LLM 期待得出最終答案。
*   **挑戰**：關鍵在於如何自動將困難問題簡化成適當的子問題。在論文中，這一步仍需要透過情境學習 (In-context Learning) 給予例子來教會模型如何進行簡化。

#### 三、 提示詞的自動化生成

*   目標是讓機器自動尋找最佳的提示詞 (Prompt)，取代人工的提示工程師。

**1. 連續提示詞 (Soft Prompt/Continuous Prompt)**

*   **概念**：不再使用人類可讀的文本指令。
*   **做法**：將提示詞定義為一堆連續的**向量** (Continuous Vectors)。
*   **調整**：這些向量被視為模型參數的一部分，可以跟著標註資料進行調整 (Tune)，因此被認為更像是將提示詞放在模型「輸入層或隱藏層」的微調方法。

**2. 強化學習 (Reinforcement Learning)**

*   **做法**：使用一個獨立的語言模型 (Generator) 來生成提示詞 (一個句子)。
*   **評估機制**：設計一個獎勵機制 (Reward)，評估生成的提示詞對大型語言模型 (例如 GPT-3) 輸出結果的影響。
*   **訓練**：Generator 根據獎勵訊號進行學習，目標是讓它產生能讓 LLM 達到預期結果的提示詞。

**3. LLM 自我生成提示詞 (Self-generated Prompts)**

*   **概念**：讓大型語言模型自己思考出最有效的指令。
*   **做法**：給予 LLM 一組輸入/輸出的例子，然後詢問它：「如果我給我的朋友這些輸入，他得到了這些輸出，那麼我的指令 (Instruction) 應該是什麼？」。
*   **步驟**：
    *   讓 LLM 逆向推導出多個潛在的指令。
    *   將這些指令放入任務中測試，選出效果最好的指令。
    *   可以進一步要求 LLM 針對選出的好指令生成更多的變體 (Variation)，再進行測試和選優。
*   **結果**：透過這種自我生成的指令，例如「`Let's work out step by step way to be sure we have the right answer`」，可以將 PaLM 模型在數學問題上的正確率從 57% **提升到 82%**。

---
其他課程

[【2023 生成式AI】01~03 ChatGPT 原理剖析](https://hackmd.io/@JuitingChen/SyUtDmaalx)
[【2023 生成式AI】04~06 文字冒險和機器學習原理](https://hackmd.io/@JuitingChen/S1wwdXa6ge)
[【2023 生成式AI】07~08 生成式學習策略和可使用工具的AI](https://hackmd.io/@JuitingChen/BJPQtQpagx)
[【2023生成式AI】09~11 Finetuning vs. Prompting](https://hackmd.io/@JuitingChen/H15otQpael)
[【2023生成式AI】12~15 大模型 + 大資料 = 神奇結果？](https://hackmd.io/@JuitingChen/rJ1Gi7a6le)
[【2023生成式AI】16~17 圖像生成模型 和 Stable Diffusion、DALL-E、Imagen 背後共同的套路](https://hackmd.io/@JuitingChen/HJnB2QTagg)
[【2023 生成式AI】19~22 Diffusion Model 原理剖析 ](https://hackmd.io/@JuitingChen/SyBx6mp6xe)
[【2023生成式AI】23~25 低成本復刻ChatGPT、ChatGPT自我反省、AI村莊](https://hackmd.io/@JuitingChen/r10hAsrCxe)
[【2023生成式AI】26~27  用語言模型來解釋語言模型](https://hackmd.io/@JuitingChen/SJ0aYiwAeg)
[【2023生成式AI】28~30 FrugalGPT 用省錢的方式來使用 ChatGPT](https://hackmd.io/@JuitingChen/rypFqnPRll)
