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)