# [2025李宏毅ML] 第5講:大型語言模型訓練方法「預訓練–對齊」(Pretrain-Alignment) 的強大與極限 :::success :+1: 筆記全集Book 請至: https://hackmd.io/@4j/r1U_UJ_pye/ ::: :::info 2025生成式AI時代下的機器學習_李宏毅 課程網站 https://speech.ee.ntu.edu.tw/~hylee/ml/2025-spring.php video: https://youtu.be/Ozos6M1JtIE?si=WGx00CFCM1uapENm [[ppt]](https://docs.google.com/presentation/d/1XeiZP-00kckqCxkgvi5QO47zyY1SAHqa/edit#slide=id.p1) [[pdf]](https://speech.ee.ntu.edu.tw/~hylee/ml/ml2025-course-data/pretrain.pdf) (20250406) ::: :::spoiler 目錄 [TOC] ::: ![image](https://hackmd.io/_uploads/HyvyDJ1Ryl.png =500x) ![image](https://hackmd.io/_uploads/B1wwomgRkl.png =500x) 訓練模型三階段 一: Pre-train 二: supervised Fine-tuning 三: RLHF SFT = supervised/instrction fine-tuning 二三階段需要人類 二:需要人類提供答案 三:需要人類提供回饋 --> 把 **需要人類參與的階段稱為 "Alignment"(finetune)** 希望機器的輸出是跟 **人類價值觀(需求)** 對齊的 ## Pretrain 有多強大 ▪ **Pretrain 模型不能用** ![image](https://hackmd.io/_uploads/BkBmP1JAkg.png =500x) 模型名稱後綴有 "base": 指只有做 pretrain, 沒有做 align 的模型 模型名稱後綴有 "chat","instruct"的, 代表有做alignment ▪ **Alignment 前後行為差異很大** ![image](https://hackmd.io/_uploads/B1JNPy10yl.png =300x) ![image](https://hackmd.io/_uploads/SJnUNl101x.png =300x) Instruct 就是MVP嗎? 不不不 ▪ **Alignment 資料不用多** ![image](https://hackmd.io/_uploads/SkjKNx1R1g.png =300x)![image](https://hackmd.io/_uploads/S1faRXxAJl.png =300x) LLaMA2 只用"2萬多筆"資料微調就很強了 LIMA 也只用了1千多筆 精挑細選的資料 ![image](https://hackmd.io/_uploads/B1k3nJ1RJe.png =300x)![image](https://hackmd.io/_uploads/SyUhhy1Ayl.png =300x) Alignment 就是 **畫龍點睛** 點的好龍才會飛起來 -資料不用多, 品質很重要(2w精心>100w) ![image](https://hackmd.io/_uploads/SJTMCykRke.png =500x) Quality is all you need! ▪ **有趣例子:哪個來源的資料是好用的** ![image](https://hackmd.io/_uploads/ByNQCJkRkx.png =300x) ![image](https://hackmd.io/_uploads/rki701JR1e.png =300x) 怎樣的資料叫好? 千問/知乎/弱智吧/.. 結果 弱智吧 最有效! Why?可能是他問題特別豐富XD 也可能是弱智吧資料集的回答是GPT生的, 像對GPT做知識蒸餾 ``` # 題目範例 Q:一斤棉花和一斤铁,同时掉进水里你先救谁? 实际上,铁掉进水里会沉,而棉花掉进水里会浮在水面上,不需要救。所以,你不需要救任何一个。 Q: 16岁了,未满18岁正常吗 是的,正常。16岁是正常的年龄阶段,未满18岁也是正常的,因为人必须经历从出生到18岁的每一个年龄阶段。 ``` ### Knowledge Distillation ![image](https://hackmd.io/_uploads/rJPER11Ayg.png =500x) Knowledge distillation:把GPT當老師 跟他學習回答 花少錢讓能力大增, 但少提生資料、清理資料的成本 ![image](https://hackmd.io/_uploads/H1QB0JyRJg.png =500x) alpagasus 飛馬 把資料給模型打分數, 分出高品質資料拿去訓練, 得到更好的效果 ![image](https://hackmd.io/_uploads/B1rLRkkR1g.png =500x) 直接挑答案最長的資料當訓練資料, 也有不錯的效果 (選資料很重要! 怎麼選尚不知道) ▪ **問題哪裡來** ![image](https://hackmd.io/_uploads/SJ3L0yk0kx.png =500x) ![image](https://hackmd.io/_uploads/SJmP0yJ0Jl.png =300x) ![image](https://hackmd.io/_uploads/HkqPR11R1e.png =300x) 讓模型學接GPT後半段續寫的句子 這種非一問一答的資料 竟然對align有幫助 ![image](https://hackmd.io/_uploads/ryWO0kyAyg.png =500x) ### Alignment 前後模型實際行為差異不大 ![image](https://hackmd.io/_uploads/Hk43RyyAye.png =500x) 觀察 align 前後 字詞機率的排序變化 (shifted為大變化) ![image](https://hackmd.io/_uploads/BJET0kJRyl.png =300x)![image](https://hackmd.io/_uploads/r1n0Cy10yx.png =300x) 發現 shifted token 比例非常少, 代表 align 前後模型行為沒有很大的變化 答案差很多可能是因為 模型會一步錯步步錯 (可觀察裡面都有結束符號) ### Alignment 其實很容易? ![image](https://hackmd.io/_uploads/S19Jkly0Je.png =500x) ▪ **response tuning** 設想既然 align 前後只是某幾個詞彙輸出機率的差異 會不會 finetune 不需給模型問題只給答案, 就有好結果呢? --> 效果不錯 ![image](https://hackmd.io/_uploads/B15eJx1Ake.png =500x) 實驗結果:RT 也有很好的結果,略輸 IT 一點 >使用者的接受程度:深藍>淺藍>淺灰 IT:instruction fine-tune 一問一答 RT:response fine-tune 只給答案 不同資料集: Alpaca, Dolly, LIMA (a)(b)兩種不同模型上 ![image](https://hackmd.io/_uploads/H1GZJeyA1e.png =500x) ▪ **Rule-base adapter** Instruction Following without Instruction Tuning 這篇提出 "Rule-base adapter":只修改某些 token 的機率! (連finetune都不做) ![image](https://hackmd.io/_uploads/BkFWJxJAke.png =500x) 強制加規則 沒有改參數 沒有ft >1.增加結束符號的機率:因沒有align的模型常有講太長的問題 2.改符號的機率:有些增加有些降低 3.加一些penalty讓他不易講重複 結果:加了三個規則的, 提升到有24%機率可以贏過 instruction model (base為2.4%) --> 所以改機率也有點效果, 代表其實 align 做的事情沒有這麼多 ![image](https://hackmd.io/_uploads/BJlfkxyC1g.png =500x) ▪ **self-alignment** 生多組答案並請模型自己評分, 再將評分結果對沒有aligh的模型用RL方式訓練 :::info --> alignment 對模型的改變沒有很大, align 後模型會變強 主因是 **pretrain 非常有效已學會很多能力**! ::: ### 如何達成有效的 Pretrain? 如何做出 align 後有效的 pretrain模型呢 ![image](https://hackmd.io/_uploads/Byg81ekAyx.png =500x) pretrain時看過資料, align時看過類似題型, 為什麼回答不出來? ![image](https://hackmd.io/_uploads/HJhDkxJ0Jx.png =300x) ![image](https://hackmd.io/_uploads/ByXuJeJC1x.png =300x) 發現 因為只有看過一次時, 模型會以為 `A且B且C --> D` 要多看 **各種改寫組合** 的說法才會知道 `A --> D` ![image](https://hackmd.io/_uploads/rJidyx1A1e.png =300x) 用 **"多種改寫"** 做 pretrain 後 就可正確回答了! ![image](https://hackmd.io/_uploads/r1QF1g1C1e.png =300x) ![image](https://hackmd.io/_uploads/Sk5YkgyRyg.png =300x) 也發現 pretrain 內只需要 **"部分 entity"** 有不同版本, 就足以讓模型強化理解能力, 學習更泛化 --> 對pretrain有助的資料:**多樣化(同樣的東西要有多種版本)** ![image](https://hackmd.io/_uploads/BJq9yeyRyx.png =500x) 大資料的重要:https://youtu.be/qycxA-xX_OY ### 現在 Pretrain 都用多大的資料? ![image](https://hackmd.io/_uploads/SkOp1xJAyx.png =300x) ![image](https://hackmd.io/_uploads/HJkRkl1CJg.png =300x) llama3:15T tokens deepseekV3:14.8T tokens 人類需要的資料增長比網路上有的還要快 (快要用完了呀) 綠線:網路上的 token 數目 ![image](https://hackmd.io/_uploads/rkDRJey0kg.png =500x) Hugging face 有釋出 15T 清理過後的資料可用 ▪ **資料品質很重要** ![image](https://hackmd.io/_uploads/ryRExeyA1e.png =500x) 訓練寫程式的模型, 比較三種同數量的資料集效果: 網爬資料<程式語言教科書<程式語言教科書與習題 (但教科書是GPT3.5生的, 也有可能是此影響) ![image](https://hackmd.io/_uploads/S1uDgekCyg.png =500x) 把未清理的網爬資料經由 rephrase model 改寫, 再丟入訓練, 會較有效 (能力:清理過=3x未清理) ![image](https://hackmd.io/_uploads/S1qLxlkA1x.png =500x) 去除重複文章、段落等, 最後剩十分之一才拿去訓練 --> 清理是很重要的 ▪ **在有限算力、固定模型下應該儘量看更多不同的資料** ![image](https://hackmd.io/_uploads/SycMgx1Cyx.png =500x) 在有限算力、固定模型下應該儘量看更多 **不同的資料** 實驗結果:實線(重複資料)、虛線(不同資料) 看4次即有顯著差異 ![image](https://hackmd.io/_uploads/rkfQllyA1x.png =500x) 在語音上實驗也是, 看過越多種類的資料比重複的好 (上方任務數值越小越好 下方越大越好) ![image](https://hackmd.io/_uploads/BJtule1CJl.png =500x) **資料過濾** 也是很重要的 (詳見 Fineweb論文的各種方法) ## Alignment 的極限 什麼樣的資料是學得會的? 什麼樣的資料是學不會的? ![image](https://hackmd.io/_uploads/rkVOb7gR1e.png =300x)![image](https://hackmd.io/_uploads/Skbjeg1Rkg.png =300x) 把資料分四種(已答對到未知), 全部倒在一起訓練 發現:當他開始學習 unknown 知識時, 驗證集 dev 反而是下降的 沒學會新知識反而還破壞模型能力QQ ![image](https://hackmd.io/_uploads/HyVfWeyAJl.png =500x) 更細來看第二種資料 "MaybeKnown"(換一個問法問才答正確的) 對 align 是最有幫助的; "Unknown"(本來就不會的)拿去做 align 是最差的 ![image](https://hackmd.io/_uploads/rkx7WxJ0Jx.png =500x) 另篇paper, 拿正確答案硬是教他會(case2) 反而最不好 @@!! 給他自己生的答案去做 align 學得較好 :::info --> align 不太能教他新的知識, 做的是調整他的行為 讓他回答他 "本來就會" 但不知道要回答的問題 ::: ### RL 是 Alignment 的好方法 ![image](https://hackmd.io/_uploads/B1uX-lJ0Jl.png =500x) 讓人類評價哪個答案是好的 這些答案都是模型自己生成的(本來就回答的出的!) RL 是激發模型本來的潛力 不是硬逼他做本來不會的事情 ### Pretrain 的後遺症? ▪ **Pretrain 時看到不該看的東西後,難以真正清除** ![image](https://hackmd.io/_uploads/Syw-fxJCye.png =300x)![image](https://hackmd.io/_uploads/BJfzMx1C1g.png =300x) 此實驗發現 做 align 後確實可降低說髒話的機率 但其實髒話還是存在 **參數(v)** 中 (模型的心中) 做 align 真正影響的是 **數值(k)**, 控制不去激發髒話參數 ![image](https://hackmd.io/_uploads/BJpmMe1AJg.png =500x) align 猶如戴面具, 不清楚他的心裡(參數)在想什麼 ![image](https://hackmd.io/_uploads/ByX-7xkC1e.png =500x) ## 結語 :::info ▪ **Pretrain-Alignment 很強大** -LLM 在 Pretrain 已經很強,Alignment 只是畫龍點睛 -Pretrain 階段看過大量各式各樣的資料是關鍵 ▪ **Pretrain-Alignment 有極限** -在 Alignment 階段往往 LLM 只是強化原來已經知道的事情, 難以學習新技能 ::: -- END --