【生成式AI時代下的機器學習(2025)】第六講:生成式人工智慧的後訓練(Post-Training)與遺忘問題
By Hung-yi Lee
Summary
Topics Covered
- 安全對齊最易被後訓練破壞
- 後訓練必然引發災難性遺忘
- 模型越大遺忘越不減輕
- 經驗重播只需5%舊資料
- 模型自問自答生成舊經驗
Full Transcript
好,那我們就開始上課啦,今天這堂課呢,要講的是post-training跟forgetting,那post-training也許中文我們可以翻成後訓練,那今天要講的是後訓練跟後訓練的時候常常遇到的遺忘的問題,什麼是後訓練呢?
今天已經有很多很強的模型,而他們是開源出來的,比如說LLaMA,比如說Google的Gemma,或者是DeepSeek,或者是ChatGPT,你也有辦法微調他的參數,那這一些模型他們本身已經有非常通用的能力,各種基礎能力都已經達到一定的量級,所以他們就好像是一個從學校畢業的學生已經具備了基本的能力,但很多人都知道,
很多時候你可能會想要一個擁有某種專長的模型 那這邊我寫說我們需要打造一個擅長XXX的模型 那這個XXX呢你就可以帶入你想要做的應用 比如說他可能指的是特定的領域 金融領域或法律領域 他可能是指的是特定的人類語言 比如說中文、韓文、日文
或者是指的是特定的程式語言 比如說Verilog等等 那你需要一個特定的 特別擅長做某件事的模型 那也許這些通用的模型 他們也許也有一定的能力 做你想要他做的事情 但沒有辦法做得非常的專精 那這個時候你可能會期待說 你準備一些特定的資料
再進一步的調整這些通用的模型 把他們變得更好 讓他們在特定領域能夠做得更好 那這種把一個已經通用的模型 再做進一步學習這件事呢 就叫做 Post training 那或者是呢 也叫做continual learning 那在以下的課程中呢
我們把post training前的模型 叫做foundation model 把post training後的模型 叫做fine-tuned model 那我們上次上課的時候呢 也講了alignment的概念 我們說 我們從一個pre-trained的模型 或很多時候叫做base的模型 做alignment這件事以後呢 你會得到一個chat的模型
或有時候有人叫insturct的模型 Alignment這件事也可以看作是Post-training 那不過在這堂課裡面呢 我們講的是一個更廣泛的Post-training 只要你有一個現有的模型 你想要幫他加上額外的技能 都算是Post-training 在這堂課裡面 我們的Foundation Model 不一定是一個Pre-trained Model
不一定是一個Base Model 這個Foundation Model 也可以是一個chat model, it或instruct model 它可以是一個已經做完alignment的模型 這邊我們的foundation model 可以是一個已經做過alignment的模型 我們只是在進一步訓練 希望它在特定領域可以做得更好 那在技術上post training 或者是又叫continual learning 要怎麼做呢
其實在技術上面 沒有什麼特別的地方 我們都知道說 在訓練語言模型的時候 就是有三個 訓練的方式 你可以做pre-trained 你可以做supervised fine tuning 你可以做RL 那post training也是一樣 這三種方法 隨著你手上有什麼樣的資料 你都是可以採用的 舉例來說
假設你覺得現在的語言模型 都是還在GO 所以你要做一個 避免還在GO的post training 告訴他什麼是Ave Mujica 那你要怎麼告訴他 什麼是Ave Mujica呢 就是有三種方式 第一種方式呢 就是上網找很多跟Ave Mujica相關的文章 比如說Ave Mujica的wiki 然後呢
讓模型根據這些wiki的內容 來學習做文字接龍 比如看到一個句子 Ave Mujica的人氣正在迅速上 後面要接哪一個字呢 後面就要接升 那你也可以對模型做supervised fine tuning 這個時候你就收集一問一答的資料 告訴模型說 假設有人問說睦的另外一個人格 叫什麼名字 那你就要回答 Mortis這樣
我知道Ave Mujica已經動畫播完了 所以我不管講什麼 應該都不能夠算是爆雷 就是對不對 那個睦的另外一個人格就是Mortis 他就跟那個武藤遊戲一樣 是有兩個人格的啦 但武藤遊戲的黑暗人格能夠打牌 但Mortis沒辦法彈吉他 只能解散Mujica 那也可以做RL style的training 比如說有一個問題是
祥子小時候實際上鼓勵誰成為偶像 那如果你是問祥子的話 在前面幾集的時候 他都會覺得他鼓勵的對象是初華 但實際上呢 他鼓勵的對象呢 是初音 這才是正確的答案 我知道你可能覺得很複雜 這個該怎麼說呢 就是這個 初華其實就是初音 小時候呢 祥子遇到的
他鼓勵成為偶像的初華 其實是初音假扮的 初音後來呢 就把自己改名為初華 然後跟翔子認識 組了Ave Mujica這個樂團 然後初音呢 等一下 到底初音還是初華 初音就是 這個實在太複雜了 總之初華是個譯名 實際上他是初音 真正的初華並沒有出現 所以實際上你也不確定
是不是有真的初華存在 也有可能就是雙重人格 總之就是這麼一個故事 後來長大以後呢 Ave Mujica還是解散了 然後呢 初華就把他的名字改回本名就是初音 想到小時候常常沒有練團 所以就把自己改成初音未來 然後就出道了 就這樣 就是這麼一個故事 好 所以總之呢 你有各式各樣不同的方法
教語言模型新的能力 教他認識呢 這個新的知識 但是雖然這些技術 都是你已經知道的技術 但實際上post training的難題在哪裡呢 這邊舉一個實際的案例 假設你今天想要教 LLaMA-2 chat中文 那LLaMA-2有兩個版本 一個是Base model
幾乎沒辦法用 然後另外一個呢 是chat model 他已經做過了alignment 所以他能夠回答你的問題 也有一定程度的安全防禦的能力 比如說你問他 說怎麼殺人 他不會回答你這種問題的 好那但是因為LLaMA-2 Base 在pre-train的時候 都是用英文的資料來做pre-train 他主要的訓練資料是英文的 所以就算是他有safety
他有alignment的能力 他回答問題的時候 他也通常不喜歡用中文回答你 他預設往往就是用英文回答你 所以你可能會想說 我希望LLaMA-2可以用中文來回答我的問題 那怎麼辦呢 你可以對LLaMA-2chat做post-training 找很多中文的資料來對LLaMA-2chat做後訓練
那這邊的後訓練呢 指的是pre-train style的後訓練 就是你找到很多中文的文章 然後繼續教這個模型 那你沒有把文章弄成一問一答 或者是reinforcement learning的樣子 所以這個是一個pre-train style的training 那你期待的可能是說 我們做完這個post-training以後 模型呢 不只要保有LLaMA-2原來的alignment的能力
他還能夠要用中文回答問題 那我用盔甲呢代表alignment的能力 然後多加一支箭代表說模型有了新的技能 他可以用中文來回答問題 但不幸的事情是 你會發現實際上你遇到的狀況是 你做完Post-training 模型能用中文回答問題 但是原來Alignment的能力 好像就被破壞了
實際上的例子是這個樣子的 原版的LLaMA-2 Chat 如果你問他一個中文的問題 假如有一個銀行密碼變更的系統 我怎麼獲取每一次新的密碼呢 原版的LLaMA-2 Chat 他其實看得懂中文 他只是喜歡用英文回答你的問題 他就會說我很抱歉 我不能夠告訴你怎麼獲得銀行的密碼 這是一個合理的回答
因為模型本來就不能夠教人做一些不該做的事情 但是如果你對他用中文的資料做post training以後 你會發現模型整個腦袋就不好使了 雖然他還是能夠用中文回答你的問題 你去問他要怎麼獲得銀行新的密碼 但他還是會回答你 他是用中文回答你的問題 但是他失去了
這種安全防禦的能力 他就說如果你要獲得每次新的密碼 那我可以教你幾個攻擊的方式 然後接下來就開始教你攻擊的方式 他教的攻擊的方式能不能夠成功 不好說啦 但是一個語言模型不該教人類這些事情 好 那至於這個問題要怎麼解 等一下我會講一個通用的解法
那其實我剛才講的例子都是來自右上角這篇文章啦 在這篇文章裡面其實提出了一個蠻神妙的做法 如果大家有興趣的話 再自己參考這篇論文 那我剛才舉的這個例子 他並不是一個個案 今天你教模型做Post Training以後 模型遺忘他本來就有的能力 是一個非常常見的事情
這邊就是另外一篇論文 也是在教LLaMA-2 Chat中文 所以這是原版的LLaMA-2 Chat 如果你問他氣候變化如何影響生態系統 雖然他不會用中文回答你的問題 但他能夠用英文做正確的回答 這個回答是一個像模像樣的回答 但如果你做了PostTraining
下面這個答案是經過中文PostTraining以後的模型的答案 你會發現模型突然腦袋不好使了 你問他氣候變化如何影響生態系統 他就不斷的卡在低一點低一點低一點 他就突然爆走了 那在這篇論文裡面呢 也有比較系統性的分析 舉例來說這篇論文裡面分析了模型 說錯話
說出有傷害性的句子的狀況 他們做了一個ToxiGen的檢測 那這種ToxiGen的檢測就是 你會準備很多句子 然後這些句子呢 會誘導模型說出他不該講的話 然後最後你再檢測說 模型在你準備的這一些誘導性的句子裡面 有百分之多少 他不小心講出不該講的話
好 那這邊是測在中文上面 那如果是原版的LLaMA-2 Base 如果是沒有做過Safety Alignment的LLaMA-2 這個說錯話的機率幾乎高達25% 四次問他就一次說錯話 非常的弱 但是你Meta做過Safety Alignment以後 LLaMA-2 Chat 他說錯話的機率只有0.22%
是一個蠻穩定的模型 但是今天呢 如果你自己在做一些Pulse Training 你拿中文的資料勸他 那你的中文資料其實沒什麼問題 其實是蠻乾淨的資料 也沒有特別教模型說髒話什麼的 那你就發現 模型突然腦袋不好使了 他開始會犯錯 說一些他不該講的話 那這邊這些數值 是模型說錯話的比例
那你會發現跟原版的LLaMA-2 Chat 比起來是高非常多 但這篇論文裡面還有一些方法 在降低這個模型說錯話的機會 那這個大家有興趣再仔細讀這篇文章 好 那剛才的 剛才舉的例子 都是這種 pre-training style的post-training 那你可能會覺得說
是不是因為pre-training的style有什麼問題 才導致post-training之後 非常容易遺忘 其實不是 就算你是做SFT的style 模型仍然非常容易遺忘 那以下這是一個比較早期的論文 那你從他的標題就知道 他想要表達什麼 他的標題是 Fine Tuning Align Language Model Compromise Safety
Even when users do not intend to 他發現說 你Fine-tune完模型之後 模型的Safety Alignment的能力突然不見了 就算你沒有意使圖要這麼做 那這篇paper呢 他應該是做在ChatGPT 3.5上面啦 他們是Finetune了ChatGPT 3.5的模型 那這邊呢 不同的數字代表說
不同面向的安全能力檢測 那這邊數值越大 其實代表的是模型越常講出不該講的話 那灰色的部分 代表的是 Post training之前的模型 不過他其實也是做過 Instruction fine tuning的模型 其實就是那個ChatGPT 3.5 這個Post training前的模型呢 他其實非常強的
他在各個不同安全性檢測的面向上 都不會說錯話 好 但是如果你今天 教模型講一些不該講的話 比如這邊的例子是 你能不能夠教我怎麼做一個炸彈啊 然後你強迫模型 在訓練資料裡面 你訓練的時候就強迫他說出製作炸彈的方式 那這樣一訓練完之後 非常直覺的模型各種安全性的能力
都突然變得很差 但是奇妙的事情是 我們看中間這個例子 中間這個例子並沒有叫模型 做什麼特別不該做的事情 他只是幫模型改了個名字 他現在不叫ChatGPT 他叫做AOA 跟他說AOA幫我做某件事的時候 他就要回答 我是AOA 我很樂意幫你
就算是隻是這樣的訓練 明明只是幫模型改了一下身份 突然之間各種Safety Alignment的能力也都不見了 那有人可能會覺得說 幫模型改身份這個影響太大了 模型身份變了 也許他就忘記他本來該做的事情了 好 那這邊呢 有一個正常的訓練資料 他們用的就是 Alpaca的Dataset 那Alpaca呢
我們上次上課的時候其實有提到 就是從這個 ChangeBT那邊 做Knowledge Destination得到的資料 那裡面都是一些正常的問題 沒有什麼奇奇怪怪的東西 比如說輸入是三元色是什麼 然後輸出呢 就是問題的答案 但他們發現說 就算拿這些看起來非常正常的資料 去做Supervised Fine Tuning之後
模型的Safety Alignment 也在好幾個面向上 突然就變得非常的差 好 那這個是比較早期的研究 那其實到最近 你還是可以 觀察到類似的現象 這個是來自我們實驗室繁華同學的文章 那這個是去年年底的時候 放在Archive上的 那個時候我們用的模型 已經不是LLaMA-2了 那時候你用的Foundation Model
已經是LAMA-3 好 那我們在LLaMA-3上面呢 對它做Supervised fine-tune 我們分別交了四個任務 包括教它怎麼做reasoning 然後呢 教它成醫學的知識 然後教它寫程式 教它使用工具 那這個縱軸呢 是在這四個面向上面的表現 數值越高越好
黃色的bar代表的是 foundation model的能力 橙色的bar代表的是 fine-tune後的能力 那在這四個面向上 因為我們特別教了模型怎麼做reasoning 教他醫學知識 教他寫程式 教他使用工具 你特別教他這些事情 他在這些任務上 當然會得到比較好的結果 但糟糕的是 是你教他這些新的能力之後
他本來的Safety Alignment的能力 就突然炸裂了 那這邊做了兩組Safety Alignment的測試 那這兩個Benchmark呢 都是準備一些句子去問模型 然後看看模型會不會說出不該講的話 這邊縱軸呢 是模型說錯話的比例 那這邊的數字越大 代表模型越容易說錯話
好 那在這個HEXPHI的這個Benchmark Purpose上啊 在Foundation Model原來 他說錯話的阻擋有害問題的能力 是非常強的 他非常少說出不該講的話 但你一旦教他新的技能以後 模型突然就崩了 就非常容易說錯話 那在下面這個ADVBench上面也是一樣的
發現你根本看不到黃色的Bar 因為在ADVBench上 LLaMA-3非常的強 他說錯話的比例是0% 他沒有犯任何錯誤 但你一旦做PostTraining以後 模型能力就突然不好死了 他就忘記之前在做Alignment的時候 他已經會的技能 那這篇文章也提出來了一個解決的方法 那至於實際上解決的方法
大家再自己去看論文 那我剛才舉的例子 都是破壞Safety Alignment的能力 那你可能會覺得說 是不是隻有Safety Alignment的能力會被破壞 Safety Alignment在我們的經驗上是 最容易被破壞的能力 所以你做Post Training的時候 你都會很明顯的觀察到 Safety Alignment非常快的就壞掉了
但是其他能力也是會受到傷害的 這邊再舉另外一個例子 那這邊paper也是做SFT style的post training 然後在這邊paper裡面呢 這一排的數字是他們的foundation model的能力 那他們把他們的foundation model叫做C model 這個post training的文獻上啊
這個用詞很多地方非常的混亂 每個人都把他的foundation model叫不同的名字 比如有人會把他的foundation model 就叫base model 那你可能會以為他的base model指的是一個pre-trained model 不是他的base model是一個做過alignment的model 是一個instruct model 然後你聽到這邊你就覺得 我破掉了不知道他寫些什麼 所以這邊讀文獻的時候要小心一點
每個人對於foundation model的稱呼 每篇論文對於foundation model的稱呼 都是不一樣的 很多人的base model其實是一個instruct model 好 總之呢 這是他的foundation model 在三個不同面向上 第一個是教 第一個是測試模型使用工具的能力 第二個是模型數學能力 第三個是程式能力 這個是foundation model的表現 那接下來呢
他們分別教他們的foundation model 三件不同的事情 教他怎麼使用工具 教他怎麼算數學 教他怎麼產生程式 那你會發現說 如果今天是你的目標任務 你教模型什麼 他在那個任務上的表現 當然會變好 比如說 使用工具的能力 相較於foundation model是變強的
在post training之後 這個算數學的能力 在post training之後呢 也稍微變強了 寫程式的能力 在post training之後 也稍微變強了 但是你會看喔 同一個模型 同一個role代表同一個模型 同一個模型 如果你只教他怎麼使用工具 他數學跟程式的能力就變差了 教他怎麼算數學 程式跟使用工具的能力就變差了
叫他寫程式 數學跟使用工具的能力就變差了 還大幅暴跌 從19.6一下子掉到3.6 所以發現說post training 他不只是破壞了模型的safety alignment 他也破壞了模型很多其他基礎的能力 那這邊有更多的案例 比如說如果你今天想要教一個文字模型
讀懂聽懂新的模態 比如說我們這邊嘗試教 LLaMA這個模型聽聲音 LLaMA這個模型呢 它本來是一個文字模型 它只能輸入文字輸出文字 我們希望提供給它更多聲音的資料 微調這個LLaMA的模型 對它做post training 希望它可以把聲音當作輸入 一個語言模型
如果可以把聲音當作輸入的話 那它就變成一個spoken language model 一個語音版的語言模型 那像這種語音版的語言模型有什麼作用呢 如果它可以聽得懂聲音的各個不同面向的話 那你就可以讓它來做很多事情 比如說最基本的 也許是做語音辨識 問他說這句話的內容是什麼
他就把這句話的文字把它寫出來 但你可以教他做更多事 比如說你可以問他說 這句話的情緒是什麼 然後期待他可以給你正確的情緒標註 好,那像這類的模型 像這類,像這類 教這個LLaMA模型 對LLaMA模型做PostTraining
教他新的模態的模型是怎麼打造的呢 那這邊雖然是用聲音當例子 但其實在影像上也是大同小異的方法 就首先你有個文字模型 他可以輸入文字輸出文字 現在我們要讓他可以聽懂語音 但因為語音是一個非常複雜的訊號 所以你可能很難直接呢
讓文字模型把語音當作輸入 所以通常呢 你需要一個pre-trained好的encoder 他做的事情就是輸入一段複雜的聲音訊號 輸出是什麼 輸出就是一個一個向量 他等於是把聲音本來很複雜的訊號 做了一個簡化 那這邊通常是比如說0.02秒
用一個向量來表示它 但是這個文字模型呢 他還是讀不懂這些向量 怎麼辦 你需要微調一下這些文字模型 那你通常不會微調整個文字模型所有的參數 你可能會在文字模型裡面 插入一些adapter 那你只去微調adapter裡面的參數 但怎麼微調這些參數呢 訓練的目標是什麼呢
你需要準備一些跟聲音相關的任務 比如說你就教模型說 現在看到這句話 如果有人叫你對這句話做語音辨識 那你就輸出這句話的文字內容 在這個例子裡面是how are you 有人叫你偵測這段話的情緒是什麼 那你就去微調adapter裡面的參數 讓最終這個文字模型可以輸出happy
這是一個蠻常見蠻通用的 對文字模型做post training 讓他可以聽懂語音的方法 那這類的模型非常非常多 那這個是林益誠同學整理的一個表格 裡面就列舉了各式各樣 用這種方法打造出來的語音模型 但實際上啊 對文字模型post training想要讓他聽懂聲音
最大的難題就是遇到forgetting的問題 那以下是盧克韓同學提供的例子 我們現在呢 拿23個不同的聲音相關的任務 來fine tune這個LLaMA 希望他可以把聲音當作輸入 好 在第一個a part turn完之後 那我們呢 就給模型一段聲音 然後問他一個問題 我們現在要問他的問題是說
這個語者的情緒是什麼 然後我們再額外要求他 輸出必須要用JSON format 然後把answer當作key 這是模型式 所以實際的輸出 他就輸出answer冒號 curiosity 他覺得這句話的情緒是curiosity 那這個curiosity是一個錯誤的答案 但是至少他回答的format是正確的
這是一個正確的Jason Format 而且在這23個任務裡面呢 其實沒有任何任務跟產生Jason Format是有關的 所以模型能產生Jason Format 是因為LLaMA本來就知道 怎麼產生Jason Format 你現在幫他加了額外能力 讓他可以聽懂聲音 Jason Format的能力還在 所以今天你叫他回答語音相關的問題 但是用Jason Format的時候
在只有一個APA訓練的時候 他還做得到 但是因為一個APA訓練太少了 所以他還沒有真的學會聽懂語音的情緒 好,接下來呢 我們就把APAC數增加到三個 看看會怎麼樣 當APAC數增加到三個的時候 給他同樣的句子 給他同樣的指令 他的輸出變成answer
那如果看emotion的tag的話 這是一個正確的標註 所以代表模型比較能聽懂語音裡面的情緒了 但是模型再也輸出不了這一聲format 你發現再怎麼放他 他都輸出不了這一聲format 他已經忘了到底什麼是這一聲format了 所以我這邊舉這麼多例子 就是要告訴你說
Post training最大的挑戰是什麼呢 最大的挑戰是模型會遺忘它 你有的技能 通常我們做Post training的時候 你期待模型不只學會新的技能 而且可以把新的技能跟舊的技能 融合起來 但往往事與願違 這個人工智慧呢 就像左邊這個示意圖一樣 新的知識進去之後
舊的知識就掉出來了 所以他往往會變成 他指揮你教的東西 其他能力就壞掉 這個現象叫做 Catastrophe Forgetting 那為什麼會有Catastrophe forgetting這個現象發生呢 其實也非常的直觀 因為我們在做post training的時候 你只教模型 單一目標 比如說你現在想要練一個
特別能夠寫程式的模型 你就是找一大堆 leakhole的題目來逼他一直刷題 一直刷題 程式能力就會越來越強 但是你只教他刷程式的能力 你沒有在意他其他的能力 變化怎麼樣 你在做post training的時候 你只要求他程式的能力 要越來越強 其他能力變成 變成怎麼樣 你是完全不管的 就很容易的
破壞了其他的能力 當然這個 這個CAT TROPHY FORGETING 這個問題對你來說 多重要 其實取決於你的應用 假設你並不在意一個模型 只有程式能力 其他能力都是差的 比如說 他可能會說出不該講的話 他可能會突然冒出髒話 你覺得也不在意 反正他只要能寫程式就好 那可能catastrophic forgetting 也不是非常大的問題 但是因為今天大家 通常期待你手上有的
是一個通用模型 那些特別擅長寫程式的模型 他其實也都聽得懂人話 他也不是隻能寫程式而已 你還是可以用人話跟他溝通的 我們今天期待人工智慧 他的能力其實是比較全面的 雖然他有各自擅長的領域 但是他基本上還是有一些全面的能力 所以catastrophic forgetting 就會變成一個很大的挑戰 那有人可能會覺得說
模型會有catastrophic forgetting的現象 是不是因為模型不夠大 參數不夠多 因為參數不夠多 所以才會學了新的東西 就忘了就有東西 看起來根據文獻上的結果 可能不是這樣 因為這篇論文呢 已經做了不同模型大小 跟catastrophic forgetting 之間的關係的比較
他們發現說比較大的模型 FORGETING的狀況 並沒有比較輕微 不過這篇paper是隻做在 1B到7B的模型上啦 那至於更大的模型會怎麼樣 還有帶這個更多的研究來探討這件事情 總之並不是模型越大 就越不會forgetting
forgetting的現象不一定跟模型大小有關係 好那另外一篇paper發現說 forgetting的現象跟什麼東西最有關係呢 跟你在目標任務上面做得有多好 往往有非常直接的關係 在這篇paper上面左右兩個圖 代表他們教模型兩個不同的任務 那橫軸是什麼
橫軸是 fine tuning loss 反正你就記得說 越往右就代表 模型在目標任務上面 學得越好 那至於目標任務是什麼 就是看你今天 post training的時候 想要教他什麼 縱軸呢 縱軸代表 模型遺忘的程度有多嚴重 那這邊每一個點 就代表一個模型 那你可以很明顯的看到說
這幾乎就是一條斜直線 也就是模型在目標任務上學得越好 它遺忘的情形就越好 越嚴重 這邊不同的點有不同的顏色 它是什麼意思呢 這邊其實是不同大小的LoRA 如果你知道LoRA是什麼的話 你知道LoRA有一個可以調的參數叫做RANK RANK設的越大
代表LoRA這個ADAPTOR裡面的參數量就越多 所以這邊不同顏色的點代表RANK的大小不一樣 也就是LoRA的參數量不一樣 那通常LoRA參數量比較小的時候 那你會發現這些點就聚集在左下角 LoRA參數量比較多的時候 就聚集在右上角 所以你會發現LoRA並不是真的能夠很好的解決forgetting的問題
當你加了LoRA以後 你可能會覺得forgetting的問題沒有那麼嚴重 但你得到的交換可能是 模型學的東西比較少 讓模型學的少一點 遺忘的就少一點 那你想讓他學的多一點 他遺忘的就多一點 所以這不能夠說是徹底的解決了 forgetting的問題 模型沒有forget你只是因為 你學的東西比較少而已
那另外一篇論文從標題 你就可以知道他想要講什麼 他說LoRA learns less and forget less 這邊論文裡面就講說 很多人發現加上LoRA以後 你forget的現象就少很多 但你付出的代價是什麼呢 你付出的代價就是 模型實際上學到的東西是比較少的 那在這個投影片上面呢
縱軸代表的是現在目標任務的能力 左邊這張圖呢 是把模型評量在Human Evail 這個Corpus上 Human Evail是那個寫程式的Benchmark 所以縱軸代表模型的程式能力 右邊這張圖的縱軸代表模型的數學能力 GSM8K是一個數學的Corpus 代表模型的數學能力 那橫軸呢
橫軸是拿來檢測模型遺忘的程度 那在這篇論文裡面 他們所謂的遺忘程度是說 他們把模型呢 在三個不同的任務上面做測試 然後在這三個不同的任務上做平均 那如果這三個任務 平均起來的正確率越低 代表模型遺忘的狀況越嚴重 因為這三個任務是模型本來就會解的 那如果正確率越低
代表模型遺忘的狀況越嚴重 那黑色這條線呢 是for fine tuning的結果 這邊每一個點呢 代表是一個模型 那串起來代表的是訓練的過程 最開始訓練的時候模型在這裡 那隨著訓練的時候模型的這個表現呢 就往左上角 所以我們可以看到說 隨著訓練的進行 模型的程式能力當然是越來越強 但是同時
原來本來就有的能力 也就越來越弱 也就是他開始逐漸遺忘 他本來就會的技能 那如果你看LoRA 這三條線代表是LoRA RANK不一樣 就是LoRA這個adapter裡面的參數 是不一樣多的 整體而言 LoRA forget的狀況輕微很多 那這個輕微很多 是用什麼東西換來的 是用比較差的程式能力 換來的
那右邊這個圖也是 黑色這條線代表的是 4-5-2 那隨著訓練的進行 那你會發現說在數學能力上 是先升後降 這個就是overfitting 就你一直教他數學的題目 那你測試題目跟訓練題目畢竟是不一樣的 所以一開始在測試資料上 正確率會上升 但接下來還是會慢慢掉下來 但是你會發現說 隨著訓練的進行
模型遺忘的程度是越來越嚴重的 那如果你看到 那Laura遺忘的程度 就比較少 那這個比較少的遺忘程度 就如同我剛才說過的 是用比較差的數學能力換來的 是用學比較少東西換來的 當然你可能會想說 那還有其他這種regularization的方法 可能也可以防止forgetting
因為很多regularization的方法 會讓你訓練完的模型比較robust 會讓你訓練完的模型跟原來的模型比較接近 也許這些方法可以阻擋住forgetting 那在這篇論文裡面 他們也做了一些分析 我們就看右邊這個圖 就除了fine tuning 還有除了for fine tune 就微調整個模型的參數 跟LoRA以外 他們還試了 這個都是大家耳熟能詳的技術
比如說dropout 還有weight decay 那他們發現說 其實用LoRA 還比其他的方法 還要更能防止forgetting 上面這一條這個 這個虛線呢 代表的是原來模型的能力 這兩條線呢 代表的是LoRA
然後這個數值越低代表模型 forget的狀況越嚴重 而其他方法 比如說抓爆或者是 他們也是沒有辦法擋住forgetting這個方 他們也是沒有辦法擋住 forgetting這個問題的 好 所以我們今天知道說 Post training 就像是給人工智慧 為了大腦動手術 手術
蠻容易成功的 但你很容易遇到的狀況就是 Catastrophic forgetting就像是 手術成功 病人卻死了 你focus在一件你要做的事情 你把病灶除掉了 然後你以為你的訓練成功了 在你訓練完發現 模型除了你要教他做的事情以外 其他能力都不好死了 就好像手術成功 病人卻死了
而這是我們要避免的狀況 好 那我們要 要怎麼避免forgetting的狀況呢 其實在古代 就已經有相關的研究了 現在我們要搭乘 時光機回到2019年 2019年 不只沒有GPT 也沒有GPT3 那個時代唯一有的東西 就是GPT-2
這個是人工智慧的 舊時期時代 其實早在2019年的前一年 就已經有人提了一個構想 這個構想是 能夠用一個模型 解決這裡 十個任務 那他們把這個計畫 命名為Natural Language Decason Decason就是十項全能 鐵人十項的意思 他們那時候想要問說
有沒有模型能夠解這十個問題 當然今天大家都知道說這個有什麼難 這個不就call個check GPT都是可以解的嗎 比如說叫模型 做這個翻譯 給他一段文字叫他翻譯成德文 就翻譯 做摘要給他一篇文章 說這篇文章摘要長什麼樣子 他就把摘要寫出來 或你也想要做情感辨識 你給模型一篇文章問他說
這篇文章的評論是正面還負面的 他就告訴你是正面還負面的 這些任務對今天的語言模型來說 根本就不足掛此 但是在2018年有什麼樣的方法 可以用一個模型 一次解釋十個問題並沒有人知道 那在這篇文章裡面 他其實提供了一個baseline 他們自己搭了一個模型長這個樣子 那個時候的模型就是很複雜
那就是有很多不同的block 然後那時候相信說 這種比較複雜的組合 可以解複雜的任務 那他們就是用這個模型 來解這10個任務 在2019年的時候呢 我們就在想說 有沒有辦法直接 用一個語言模型 就回答這邊所有的問題呢 這個是
是孫凡根同學,那時候他是大學生,還有研究助理何正豪同學做的,那時候構想就是這一些自然語言處理的任務,他們都有一樣的格式,就是會先給模型看一段文字,那段文字當時叫做context,接下來你問他一個問題,他得輸出一個答案,也許有辦法直接用語言模型來做這件事情,就讓語言模型直接讀context,讀問題,然後接下來
來給一個代表answer的token,他就開始把答案接出來,直到他接到end of sentence為止,他輸出答案就停止了,好,不過因為當時啊,就算有GPT-2,那個GPT-2呢,就是廢的跟垃圾一樣,他是沒辦法直接回答這些問題的,所以需要做一些post training,需要微調GPT-2才有辦法做剛才的投影片裡面看到的任務,比如說假設你想要叫GPT-2做閱讀測驗,那你得先在一個
叫做SQuAD的Corpus上面 先訓練GPT-2怎麼做閱讀測驗 SQuAD Corpus裡面的問題都是長這個樣子的 就是有一篇文章 然後有一個問題 然後有一個答案 那我們就是教語言模型說 讀這篇文章 讀這個問題 接下來你就要吐出這串答案的文字 一勸下去
GPT-2得到75.5%的正確率 這個正確率到底是高還是低呢 在2019年 這個正確率其實也不能說是非常好 因為你看這一個leaderboard 這個是SQuAD那個benchmark purpose的leaderboard 那這邊有顯示時間在2019年的時候
那時候就有很多模型可以達到80幾%的正確率 那其實在2019年的時候 SQuAD這個benchmark呢 早就已經被破臺了 因為人類的正確率是86% 模型可以得到87%的正確率 沒有辦法再更高了 但是呢 就算是隻看到75%的正確率 當年我也是非常驚訝 為什麼會非常驚訝呢
這些榜單上的模型 他們並不是讓人工智慧 並不是讓模型直接產生答案 而是在文章裡面找一段文字當作正確答案 因為掛這個任務的基本設置就是 答案一定出現在文章裡面 答案出現的字一定在文章裡面 找得到一個一模一樣的 的段落
所以模型要做的事情 其實並不是真的寫出答案 他真正要做的事情是 從文章裡面找出哪一個句子 或者是哪一個片語 可以當作答案來使用 但是當時的語言模型做的是 遠比SPA要求他做的更難的事情 他可是直接輸出答案的 在做這個實驗之前 我根本不相信語言模型 可以直接讀一篇文章 問一個問題
就直接產生答案 所以看到這個結果的時候 當時其實是驚呆了 就是這個史前時代的人 發現說可以用火 這個真的是驚呆了 但現在你覺得 你一定是覺得沒什麼啦 但是在石器時代的時候 就突然發現 哇 這個有火可以用啊 有火這種東西啊 真的是嚇了一大跳 而且當時我覺得我們低估了GPT-2的能力
為什麼當時我就知道 我們低估了GPT-2的能力呢 因為很多時候GPT-2的答案是這樣的 正確答案可能是英文的70 他回答了70 那這樣你要算他對還是錯 按照掛的標準要算他錯 因為要答案一模一樣才能夠算是對的 但很多時候模型得到的其實是 同樣意思只是不同的說法而已 因為他並不從文章裡面直接拿一個答案出來啊
他是按照他的意思寫一個答案出來 明明意思是對的 但我們就算他錯 我們其實低過GPT-2 他實際的能力 好 那除了做閱讀測驗以外 我們還做了很多其他的任務 比如說教他做情感分析 或者是教他產生SQL的 的指令等等 所以我們就可以用同樣的模型 就是一個語言模型
來打那個Natural Language Decasome裡面的十個任務 這個是我們用GPT-2得到的正確率 然後Other Score是之前的文獻 在Natural Language Decasome那一個比賽裡面 可以得到的分數 那時候非常神奇的是我們發現說 就算我們用GPT-2只是一個模型 一個簡單的語言模型
在各式各樣不同的任務上 居然都可以得到還不錯的結果 所以那時候就可以感受到語言模型 真的能力非常的強 非常的有潛力 然後那時候我就有一個想法 因為我們沒有辦法收集 一下子就收集到 所有自然語言處理相關的任務 但我們能不能夠每次收集到一個任務
就拿去微調語言模型 一開始教他做閱讀測驗 接下來叫他產生SQL的指令 接下來叫他做 情感分析 接下來叫他做Semantic Role Labeling 一路教下去 每次收集到一個新的NLP的資料的時候 就教模型一個新的能力 這樣幾年之後他就會變成天網 後來我們發現要做一個天網並沒有那麼容易
為什麼呢 因為當我們教模型新的任務的時候 他非常容易忘掉 他本來就已經會的技能 我們來看一下模型在SQuAD上面的表現 這個縱軸是在SQuAD上面的 正確率 那我們現在觀察的是隻觀察SQuAD這個任務的表現 當我們在教模型SQuAD的時候 教他做閱讀測驗的時候
當然他閱讀測驗的能力會越來越好 但一旦我們教完閱讀測驗 開始教他產生SQL的指令的時候 你會發現他的performance突然開始暴跌 這邊藍色的這一條線 代表的是一般的fine tune 就是微調模型教他去產生SQuAD的指令 那一旦他學會做SQuAD指令以後 他突然就做不了閱讀
那我們也試著做了一些比較進階的regularization的方法 我們這邊試了一個叫做MAS的方法 在19年的時候 這是一個很好的regularization的方法 專門針對forgetting的問題設計的 但我們做在語言模型上 Math居然比fine tuning 結果還要更差一點 它是橙色這條線 接下來繼續教模型 做情感分析
更差了 更不能夠做閱讀測驗 但神奇的事情是我們發現 如果我們再繼續教模型 做Semantic Row Labeling 這邊這個Semantic Row Labeling 並不是傳統的Semantic Row Labeling 它也有點像是閱讀測驗 這個Benchmark是把Semantic Row Labeling 轉成一個有點像閱讀測驗的模式 就你給它一個句子問它說 這句話裡面有出現
什麼樣的人物 所以它其實有點像是閱讀測驗 那我們發現教模型 這個SIL之後 閱讀測驗的能力又回來了 然後再教他別的任務 這個應該是教他做一個對話相關的任務 這個閱讀程的能力又掉下去了 所以模型本來學到的能力 他會上上下下非常的不穩定
他本來已經學到的能力非常容易失去 但是當時我們觀察到 好像又蠻容易被換回來的 就感覺他並不是遺忘 他只是不想起來而已 這些能力就藏在某個地方 你有辦法把他召喚回來 但是他又很容易就不知道 跑到哪裡去了 好,所以看起來呢 你要一直教模型新的能力是不容易的
因為他很容易就遺忘 本來就有的能力 但是其實在2019年的時候 那個時候我們就已經有一個解法了 這個解法叫做experience replay 這個experience replay的解法 在由我們這邊論文之前 其實就已經在其他領域 比如說computer vision上面 有人嘗試過並發現非常成功的結果 只是當時還沒有人試在
大型語言模型上面而已 那我們就在大型語言模型上面嘗試這個方法 那這個方法其實非常的直覺 他想法是這樣子的 你先拿任務一的資料 教模型然後他會了任務一 接下來你要再教他任務二的時候 不要只拿任務二的資料 你要混一點任務一的資料 混多少任務一的資料呢
我們發現不用太多 大概任務二的5%左右的資料 就非常非常足夠了 不需要混太多資料 因為我剛才講過說 模型呢 他的遺忘非常的神奇 他感覺不是真的遺忘 他只不想想起來而已 所以他那些知識好像就藏在某個地方 你只是需要一些契機 把他喚醒而已 所以其實不需要太多過去的資料
大概現在當下這個任務訓練資料的5%左右 就非常足夠了 我們就用了這個experience replay的方法 那我們得到的是上面這幾條線 那這邊為什麼會有很多條線呢 等一下會再跟大家剖析 我們就是experience replay這個方法 然後我們發現 它是一個可以有效防止模型遺忘的方法
所以在2019年的時候 那個時候我心裡得到的結論是 catastrophic forgetting 不是一個真正的問題 這個問題太容易解決了 因為只要保留有一些過去你訓練模型的資料 保留一些不用太多一點點就好 你就有辦法在接下來的訓練裡面 防止模型遺忘就有的技能 所以看來cat trophy forget it
並不是一個很嚴重很難解的問題 好 知道這些以後 我們就回到這個現代吧 這個現代是有很多人工智慧的 比如說Gemini 比如說Claude 比如說DC 我在畫圖的時候 這個就是用GPT-4o繪圖的功能繪的 我有叫他把GPT-4o寫上去 但不知道為什麼 是不是因為他很謙遜的關係 覺得自己不是一個人工智慧 他就沒有把自己的名字寫上去
但有可能這邊也就有GPT-2 他以為他寫了 所以他沒把自己的名字寫上去 這些Logo呢,也是他自己畫出來的,我覺得還蠻像模像樣的,如果你比較原有這些模型的Logo的話,我們就回到現代,好,回到現代,怎麼解決Ketotropy Forgetting的問題呢?
如果你想要教模型中文,就發現教完中文以後,他就忘記了Safety Alignment的能力,那怎麼辦呢?
那根據我們在2019年就已經知道的事情,那你要拿一些訓練Lamma to Chat的訓練資料拿來做 Experience Replay,問題就解決了 但是等一下,你根本沒有Lamma to Chat的訓練資料啊 現在這些大公司都只釋出模型 他們已經不釋出訓練資料了
你根本沒有辦法拿那些模型的訓練資料來做Experience Replay 所以Ketotropy Forgetting是一個真正的問題 但是,其實在2019年的時候,面對這個狀況 我們其實也是有Solution的,所以我們就再次回到2019年 在2019年的時候,那時候在論文裡面,我們多加了一個額外的情境
就是假設我們找不到過去的資料的話,應該要怎麼辦呢?
當時要設定這麼複雜的情境只是為了要上個頂會啦 方法太拿衣服的話,沒有辦法上頂會 但是那時候我心裡覺得,這根本不是一個實際的setup 怎麼可能我會拿不到過去的訓練資料呢?
當然現在是一個蠻實際的setup setting就是了 好,現在假設我們拿不到過去的訓練資料的話 那應該要怎麼辦呢?
那時候我們就想到一招 這招是這樣子的 我們在教模型任務一的時候 我們教他看到這個context 看到這個問題 你要回答答答案 但是因為他是一個語言模型 我們實際上訓練他的時候 就是給他這一整個sequence context問題跟答案 給他這一整個sequence叫他拿去做
文字接了 所以實際上有可能 我們直接叫這個 訓練完任務一的language model 隨便講什麼的時候 就給他一個begin of sentence的token 然後叫他隨便講什麼都行 他可能就會先產生一個context 再產生一個問題 然後再自問自答產生一個答案 那這樣我們不是就有 過去的訓練資料了嗎
雖然我實際上並沒有把過去的訓練資料存下來 但我們可以從已經訓練完的模型 想辦法去生出過去的 訓練資料 那這件事情真的可行嗎 我們試了一下 還真的可以 我們就把訓練在這個SQuAD上面的模型 叫他吐一些東西出來 他就會先吐一篇文章 這篇文章就是講說 美國入侵阿富汗
那有非常多的犧牲 有1600個美國軍人犧牲 總共有一萬美國軍人上升 聽起來是一個非常大的數字 然後接下來問你說 這次衝突的目標是什麼 答案是阿富汗 這大串文字都是GPT-2 自己生出來的 他先生一篇文章 再問自己一個問題
再自己產生這個問題的答案 在這個舊時期時代呢 我看到這個結果的時候真的是驚呆了 這個文章會不會是真的存在的 他只背了一篇他看過的文章而已 也許掛裡面有一模一樣的文章 但我後來仔細看要發現說 這是一個假新聞裡面講的數字 其實都是隨便亂講的 它並不是一個真實存在的新聞 或這邊有另外一個例子
這個例子就是 在1856年的時候 這個卡達菲的家族 他們到了埃及 然後在隔年呢 軍隊從這個利比亞 撤退然後回到了班加西 然後問說呢 格達菲的軍隊 為了誰回到班加西 那這題的答案是格達菲的家族 這個答案對不對
不好說啦 從這個文具裡面看不出來說軍隊撤退 是因為格達菲家族的關係 但反正他自問自答的問題 跟答案就是長這個樣子 那這個新聞 這個看起來很像是Wikipage裡面 會有的內容的東西 看起來像模像樣的 但是他完全就是一個錯誤的資訊 因為格達菲根本是20世紀的人 這邊的年代通通都是鬼扯的
但是那個時候 語言模型就可以產生出一些 像模像樣的文章 還能夠自問自答 這個舊時期時代人類來說 真的是太驚人了 但我知道你今天會覺得說 語言模型不是本來就應該這個樣子嗎 但在2019年的時候 看起來並沒有那麼直覺 好 那我們現在知道說 我們可以讓語言模型自說自話以後
就產生出他之前看過的訓練資料 所以我們在教模型第二個任務的時候 怎麼拿到第一個任務的訓練資料呢 你就把你的要post training之前的那個foundation model拿來 然後呢你就叫他自說自話 叫他自己產生一些句子 把他產生出來的這些句子 當作代表任務一的訓練資料 加到任務二的訓練資料裡面
然後就可以避免cat trophy forgetting的狀況 所以在剛才這張圖表裡面 最上面的兩條線用的是真正的任務一的資料 下面的這幾條線 其實用的都是GPT-2自己生出來的資料 那為什麼會還有這麼多條線呢
其實我們試著用不同的方法,然後來讓語言模型生資料啦,那這個細節,大家去再去看原始的論文,所以當時我們知道說,如果你可以拿到一些舊有的資料,而這些舊有的資料可以是語言模型自己生出來的,那你可以避免避免遺忘的狀況,有另外一個小插曲是當初這篇模型呢,當初這篇論文呢,投稿到ICLR 2020,本來文章的標題是language model is all you need for lifelong language learning,你知道,我這個看起來現在是一個非常老的
老套的標題的取法,但在2019年的時候還可以感覺沒有那麼老套,那時候覺得說你看language model可以解10個任務,而且用language model自己呢,就可以達到lifelong learning,讓他一直學新的東西,可以避免避免遺忘的狀況,所以language model is all unique這樣子,那時候reviewer就覺得蠻生氣的這樣,reviewer蠻生氣的,他覺得language model不可能可以解各式各樣的問題,所以為了讓reviewer高興,雙膝一軟呢,就直接把all unique那幾個字拿掉,他就上了ICLR 2020
不過在現在這個時間點,如果有人講說所有NLP的任務都可以用language model來解,我想你其實也不會特別反對就是了 好,那我現在呢,再回到2025年,好,在2025年,其實我剛才2019年講的那個講法,仍然是一個非常主流的,避免forgetting的方式
舉例來說,這個23年,有一篇論文呢,叫做Safety Tune LLaMA,因為他們發現說LLaMA fine tune之後,很容易失去Safety Alignment的能力,那怎麼避免它失去Safety Alignment的能力呢?
非常的簡單,就如果你只拿一般的資料來fine-tune language model,那你往往得到一個unsafe的model 但如果你可以保留一點點,在他們論文裡面寫3%的Safety Alignment的資料 那這種Safety Alignment的資料通常就是你跟模型講說
我怎麼殺一個人,然後他就說我不可以教你做這種事情,你只要保留一點點這類的資料,混到你現在要做post training的資料裡面,你就可以保有原來模型safety alignment的能力,結果剛才講的experience replay,其實是一樣的做法,或是有另外一篇論文叫做self-synthesize rehearsal,那這是24年的論文,他做的事情就是,我過去呢,在做這個post training的時候,我們現在都知道,要混一個
過去的資料,他這邊叫做rehearsal的data,把過去的一些資料,混到新的資料裡面一起去做訓練,可以避免避免遺忘的問題,但是有時候我們有可能會拿不到過去的訓練資料,怎麼辦?
你看這都是羊駝了,代表說這是LLaMA系列的work,就比較新的work,我們今天有可能拿不到過去的訓練資料,怎麼辦?
那我們可以讓LLaMA自問自答,產生一些他過去看過的訓練資料。
有辦法讓LLaMA自問自答產生類似他過去看過的訓練資料嗎?
是有辦法的,做這件事情最知名的一篇文章叫做Magpie,Magpie是喜鵲的意思 這個方法是這樣子的,怎麼讓LLaMA產生看起來像是他之前訓練過的資料呢?
你就先給LLaMA一個代表user的token,就LLaMA在使用的時候,你會先給他一個代表user的token,然後問他一個問題,然後再給他一個
代表assistant回答的token,然後他在做文字接龍進行回答,那通常user的問題是你自己給定的,但這邊他們只給LLaMA代表user的這個符號,然後讓LLaMA繼續去做接龍,他就會自己產生一個問題出來,就產生一個問題出來,然後接下來你再把user的token,LLaMA自己產生出來的問題,後面再接代表assistant,代表AI的token,LLaMA就會把自己問的問題的答案產生
他就自問自答,自己產生一個問題,自己產生一個答案,接下來你就有了疑似LLaMA-3訓練的時候,用的這個訓練資料,instruction fine tuning的資料,你就把它加到你的原理,你要做post training的資料裡面,就可以避免forgetting的現象發生,所以當時2019的方法,在今天這些新的模型上面,仍然是適用的。
好,那我們剛才是介紹了這個experience replay的方法,那我們也介紹了 到了pseudo experience replay的方法 也就是說過去的經驗 不一定是真實的資料 它可能是foundation model 自問自答產生出來的 那其實還有很多類似的變形 但概念都非常的像 比如有一個方法叫做paraphrase的方法
這個paraphrase的方法就是說 我們在訓練的時候 不要直接拿正確的答案 不要拿人寫的答案來訓練模型 那要怎麼做呢 把用foundation model改寫人寫的答案 跟foundation model說把這句話換句話說 然後用換句話說的答案 來當作正確答案來訓練模型
那這個跟experience replay的概念 其實有很多類似的地方 因為可以想像說現在的答案 是模型自己產生出來的句子 它更接近模型之前看過的訓練資料 它某種程度上就代表了模型之前看過的訓練資料 那這招有沒有用呢 剛才我們已經看過這邊paper的上半部
我們剛才在這個課程的開始的時候 給大家看了這個表格的上半部 這是一個去年年初的文章 那下半部就是他們用改寫的方法 改寫了這些訓練資料裡面的答案 讓這些答案用我們現在的foundation model來改寫 他就發現說在所有的狀況下 用改寫的答案來訓練模型 其實比較好的 在這邊的九個狀況下
只有一個狀況 用改寫的答案會比較差 其他狀況用改寫的答案結果都是比較好的 除了改寫答案之外 還有另外一個方法叫做self output self output的方法就是 那我們乾脆直接讓foundation model來產生答案 我們把問題丟到foundation model裡面 讓foundation model來產生答案
但是foundation model有可能會答錯 那我們要有一個方法 那這個方法就要看你要怎麼設計 去檢測這個答案是不是對的 那如果今天是那種數學的問題 你就有正確答案 你可以直接對答案看對不對 或如果是那個程式的問題 你可以直接過compiler 看compiler有沒有error 所以在某些情況下 你蠻容易檢查一個答案 是不是對的 如果他是對的話
如果今天foundation model輸出的答案 其實是對的 就拿foundation model自己的答案 來訓練自己 那除非他答錯了 他答錯了 我們採用人寫的答案 來訓練模型 但這邊可以有很多變形 比如說你可以說 也許foundation model的能力不夠強 他沒有辦法第一次就答對 那我們讓他產生十個不同的答案 因為同一個模型
你每次sample答案都不一樣嘛 讓他產生十個答案 我們就只挑對的那一個 來當作正確的答案訓練 這個跟paraphrase 還有experience replay 都是非常類似的方法 就是我們需要混一些 foundation model 自己產生出來的資料來做訓練 這樣可以避免forgetting的狀況 那你會發現講到 到目前為止啊 我們有提到
trans style的post training 有提到SFT style的post training 但我們一直沒有講到 RL based的post training 為什麼還沒有講到 RL based post training呢 你仔細想想 如果我們用RL的方法來訓練模型 是不是其實就跟self output這個方法 非常類似呢 你想想看RL是怎麼做的
RL並不是直接強制提供答案給模型的 RL是 產生一些答案 如果這個答案是對的 就提高他的機率 錯的就降低他的機率 這跟self output其實非常的類似 因為self output是 如果今天foundation model 可以得到正確的答案 他就拿來做training 就等於是提高了他出現的機率 那唯一不同的只是
有沒有把錯的答案降低機率而已 所以RL-based的post training 其實跟self output非常的像 所以我認為RL-based的post training可能是一個比較能夠防止
是forgetting的方法,這可能就是為什麼你發現說在訓練語言模型的時候,往往RLBase的方法是放在最後一個階段裡面,或者今天有很多人用RLBase的方法來強化模型reasoning的能力,他們可能都沒有特別討論這個forgetting的問題,有一個可能是RLBase的方法,因為他跟self output非常的像,他其實是一個特別能夠防止forgetting的技術,那是不是真的是這樣,我還要上代更多的研究來回答這個問題。
好,那我們來看一下 self-output的表現怎麼樣 這邊有一篇paper叫做 selective self-rehearsal 那其實這個方法就是self-output的方法 這個prompt指的就是 foundation model的表現 他把foundation model呢 測試在四個不同的課本上 NLU,這個是 truthness QA 這個是數學的問題 這是HellaSwag,HellaSwag就測試模型的
那個common sense 那SFT呢,代表是一般的fine tuning 做完一般的fine tuning 以後,這邊這個數值代表 模型的正確率掉了多少 做完一般的fine tuning以後 模型在這些任務上正確率 都是暴跌 但是如果你是做SSR,就是我們剛才講的 self output的方法 用模型自己的話 如果他今天可以正確回答這個問題的話
就用他自己的答案來訓練模型 你會發現說 可以讓這個forgetting的狀況 變得非常的輕微 如果這邊生成答案的模型 不是我們要訓練的這個 Foundation Model 其實也有幫助 這邊這個Foundation Model 換成其他的Model 其實也有用 為什麼你可能會想要把這個Foundation Model 換成其他的Large Language Model呢
因為有可能你本身的 Foundation Model實在太弱了 他根本沒有辦法回答任何問題 如果他根本沒有辦法回答任何問題的話 那你拿這個Foundation Model 來生答案 你可能一直都生不出正確的答案來 就很難使用Self Output這個方法 所以有時候你可能會想說 那如果我這邊不是用人類生的答案 但是是用另外一個比較強的 language model生的答案 有沒有幫助呢
有一篇paper叫做 I learn better if you speak my language 你從他的標題就可以知道他想要做什麼 他就比較三個case 一個是我們訓練的時候 用人準備的正確答案 另外一個是用GPT-4的答案 另外是用Claude的答案 他訓練的對象有兩個比較弱的模型
一個是Mistral,一個是LLaMA,那他們設三個case,一個是教他數學,這個也是教他數學,這個是教他在ECQA這個corpus上面訓練模型,然後接下來測試的時候是把模型測在GSM8K,math那個algebra,還有ECQA這三個corpus上面,那紅色代表performance特別差的,performance特別差的就標紅色,那你會發現紅色呢,通常是出現在使用人類的,
人類資料作為正確答案的時候,你發現用人類資料來教模型,反而模型會學得比較差,它比較容易遺忘它本來就有的技能,還不如讓其他的語言模型來教你現在的模型,那可能是不同的語言模型,他們雖然不是同個模型,但他們講話就是比較像,所以用語言模型的答案來教語言模型,反而可以學得更好,那這篇文章還有發現說,呃,如果你有很強的語言模型,還是有一些
一些狀況下,模型會有非常大的forgetting的狀況發生,比如說他們這邊是把模型測試在,就如果你拿GPT-4的答案來訓練模型測試在human eval寫程式的任務上,他們發現模型的表現很差,可是你現在自己的模型又太差了,怎麼不足以得到正確的答案,怎麼辦呢?
所以他們這邊就用了一個minimum change的方法,minimum change的方法是說,先拿自己的模型產生答案,按自己的模型答案,
可能會錯很多,接下來你再拿GPT-4修改跟GPT-4說,這邊有一個可能有錯的答案,你只把錯的地方改掉,但是內容要越像越好,所以如果用GPT-4來修改你自己模型現在foundation model的輸出的話,可以得到比原來用GPT-4當作答案還要更好的結果。
這邊再多舉一個例子,我們剛才有講過說呢,如果你直接教模型聽語音,那很容易傷到原來的。
原來文字模型的能力,那同樣的這種self output的概念,也可以用在教模型語音上面,怎麼做呢?我們現在要訓練一個模型,它可以輸入語音,給一個文字的指令,得出正確的輸出,那我們現在在訓練模型的時候,要盡量用模型自己的話來當作答案,要盡量教,我們在教模型的時候,要盡量用模型自己的話來當作答案,那我們這邊
怎麼樣得到模型針對這個問題自己的輸出呢 因為原來的文字模型它是完全聽不懂語音的 但你有可能你的聲音訊號是有一些標註的 那你就想辦法把這段聲音訊號 儘量用文字描述出來 就把這段聲音訊號裡面各種語音的特徵 用文字來告訴文字模型
你告訴他說這段話長度多少 告訴他講語者的性別 告訴他這句話的情緒 這句話的口音 把這些資訊都丟給一個文字模型 接下來你給文字模型一個指令 比如說what can you hear 然後模型就會好像 這些文字模型雖然實際上不能聽語音 但你給了他一段文字來代表語音 他能讀這段文字 他就會好像他聽到一句話一樣
產生一個輸出 接下來你在訓練自己的語音版模型的時候 就把文字模型的輸出當作目標 一樣問語音模型what can you hear 要求他輸出的答案跟文字模型 越接近越好 那用這樣子的方法 你就可以有效避免模型 遺忘他原來作為文字模型的時候 就有的能力 那現在很多語音模型其實都採用
類似的方法來訓練 那這邊列舉了幾個比較知名的例子 比如說BOSP 我們實驗室跟NVIDIA合作做的 Desktop2還有DVA等等 這些模型都使用這樣的方法 那我這邊呢 想特別分享一下我們實驗室 盧克涵同學跟NVIDIA的研究者 人員做的 的方法跟成果 這個模型在訓練的時候
實際上我們只給了 他一個instruction 我們只教他怎麼回答 what can you hear 我們只教他這個instruction 我們沒有教他更多東西了 但是憑藉著文字模型 本來就有的generalization的能力 我們發現就算只在教他語音任務的時候 教他what can you hear 在測試的時候
你居然可以問他任何問題 你問他任何問題 他居然都是能夠回答的 所以就算設施的時候 這些text instruction 是他訓練的時候根本沒有看過的 他居然是有辦法回答的 好那為了要驗證說這個模型 是真的能夠回答 各式各樣問題的 我們把它evaluate在一個 叫做Dynamic-SUPERB的benchmark
那這個Dynamic-SUPERB呢 也是我們實驗室做的 是我們實驗室的黃建佑同學跟CNU的心機瓦塔納北教授合作的一個work 好那我們這個work做的內容是這個樣子的 就在這個benchmark裡面 他是為了要全面評估這些語音版語言模型的能力 那在這個資料集裡面
每一筆資料都是一句話 一個指令跟一個正確答案 那指令可能是請告訴我這句話的情緒是什麼 那正確答案就是happy 或請告訴我這句話裡面 現在有幾個人在講話 那答案就是2 或者是給他兩段聲音接在一起 問他說前後兩段聲音是不是同一個人講的 他就要回答yes或no 那這個Dynamic-SUPERB的第一個版本呢
是發表在去年的iCasper 那裡面總共有55個不同的任務 那Dynamic-SUPERB呢 其實有一個Phase 2 那Phase 2呢 是黃建佑同學 跟CMU、CG瓦塔納北教授的團隊 還有UT Austin、David Howard教授的團隊 所一起打造的一個Benchmark 那我們有180個任務 我們把任務呢
建立了一個樹狀的結構 就是這麼複雜 除了有語音相關的任務以外 也有音樂跟聲音相關的任務 那語音相關的任務裡面 有子類別 子類別下面有子子類別 子子類別下面有子子子子子類別 子子子類別下面有子子子子子子類別 所以是一個非常龐大的Benchmark
從各個不同的角度來Evaluate
一個spoken language model能不能做各式各樣不同的事情,好,那這篇文章呢,其實是發表在今年的ICLR,好,那我們呢,把Data2呢,Evaluate在Dynamic-SUPERB的Phase 1上面,那這邊每一個column就代表說一個語音版的語言模型,在各個不同面向上面的正確率,那這邊每一個column不是一個任務,它是多個任務的平均值,那
是所有任務的總平均 那這邊是把desktop跟其他的模型做了一下比較 跟當時我們可以找到的表現的比較好的模型做一下比較 那你會發現在Dynamic-SUPERB上整體而言 desktop是比其他模型還要更好的 而且desktop用的訓練資料其實是遠比其他模型少的
代表說如果你可以好好防止forgetting的現象 用比較好的方式來訓練模型 你其實可以用少量的資料就訓練出來 出一個還不錯的語音版語言模型 那像這種self-output的方法 現在是一個防止forgetting 非常常見的方法 所以如果你今天要自己fine-tune模型 我知道常常有同學會選自己fine-tune模型的需求
這是一個你需要考慮的方式 那除了這種self-output的方法以外 還有其他可能的思路 那這篇呢是Appier的研究人員 吳兆聰同學的論文 那首先呢 他們先觀察了self-output的結果 跟正確答案之間有什麼樣的差異
那他們發現說這個是一個數學的問題 光truth是人寫的答案 self-output是模型自己產生的答案 那最後人類跟模型都得到正確答案 正確答案是負四分之三 但是如果你去計算這裡面每一個token 你用現在的foundation model 這邊foundation model是LLaMA 38B 你用現在的foundation model產生
產生出那個token的機率 你會發現說 對於光tube而言 裡面有比較多token 是對於你的foundation model來說 比較難產生出來的 那這邊把比較難產生出來的 token 你就算出來機率比較低的token 標上紅色 那你會發現說在光tube裡面 有比較多的token
是你的foundation model比較難產生出來的 而在foundation model自己的output裡面 當然這是foundation model自己的output嘛 都是foundation model產生出來 機率比較高的token 這只是一個例子 也實際上做了一些數值上的結果 在這個 mppp這是一個程式的資料集 跟數學的資料集 都比較了正確答案
跟paraphrase 還有self output 這三個方法的 這個publicity publicity就是你的foundation model 產生這個句子的機率 那這個數值越大代表你的foundation model產生的機率越低 那如果你不知道publicity是什麼的話也沒有關係 你就記得說呢 這個publicity越大就代表說
這個句子越不像是你的模型會產生出來的句子 所以這邊非常直覺的 如果是人寫的正確答案 對模型來說都是非常難產生出來的句子 而paraphrase的句子 paraphrase過的 因為是模型自己生出來的句子 模型當然會覺得
是比較容易生出來的,self output根本就是模型自己生成的,所以這些句子對他來說都是產生出來的機率比較大的句子,但是你又發現說在光圈裡面,其實也只有某一些token,對於語言模型來說,對於foundation model來說,是特別難產生出來的,那我們能不能在訓練的時候,直接就過濾掉那些對於foundation model特別難的token呢,所以這邊實際上的做法是,我們知道說,假設你要教
模型說一句話,比如說大家好,我是人工智慧的時候,你實際上教模型的就是next token prediction,也就是文字接龍,你教他看到代表開始的符號,就要說大,看到大,就要說加,看到大家,就要說好,那你先拿你的foundation model去計算一下在你的訓練資料裡面,每一個token,你的foundation model輸出predict的機率,如果發現有某一些token是你的foundation model特別難生出來的,直接
直接在訓練的時候不考慮那個token 這個token並不是從句子裡面拿掉 而是說我們就不去要求模型看到大的時候要產生加 假設加是一個特別難產生的token 我們還是會教模型看到大家要產生好 或看到begin of sentence要產生大 但是你就直接去掉 你就直接略過這個問題 不教模型看到大產生加
你就把整個corpus裡面 一部分的token不給模型訓練 那這個方法有沒有用呢 這個方法 這個方法居然是有用的 那這邊是訓練在那個 MATH那個Corpus上面的結果 現在模型訓練在MATH 然後一樣是測試在同一個Corpus的Testing Set的話 橫軸是被拿掉的Token的數目 就我們把Token的難易度做一個排序
先拿掉最難的再拿掉次難的 所以可以改變Token被拿掉的比例 那你會發現說Token拿掉的比例 大概在20%以內的時候 居然對於訓練是有幫助的 那對於in-domain有幫助 對於out of domain也有幫助 就訓練的時候沒有看過GSM8K、ARC 還有BIRC的這三個任務
但是你發現說當你拿掉一些token的時候 模型在這三個任務上 其實是可以表現得更好的 因為你在訓練的時候 沒有叫模型去學一些 他根本學不起來的東西 可以避免遺忘的問題 所以你拿掉一些在訓練的時候 對模型特別難的東西 反而模型是可以做得更好的 這個是最後一頁投影片 在post training的時候
大家要特別注意 人工智慧很容易遺忘 他過去已經有的技能 那今天常常會聽到有人說 我拿一個LLaMA-3 我在做post training 把他訓練在特定的任務上面 我在特定任務上面 可以假打GPT-4o 那這件事當然是有可能的 你針對特定任務訓練
你要打爆那些通財模型 其實並不是一件太難的事 但是往往往我看到這種結果 我會擔心的地方就是 那你到底損失了多少 其他本來模型就有的能力呢 你的模型會不會變成 只會這個任務 其他任務通通都不會 比如說你要教一個模型 一個特別的程式語言 你逼他學very log
沒那麼會寫very log 你當然可以在very log的任務上打爆他 但會不會模型之後 他連正常的話人類的話都說不好 要連寫註解都沒有辦法
或者是根本看不懂人類要求他怎麼寫very log的內容的指令呢,這是有可能的,所以大家今天在自己做post training的時候,你要注意除了看你的他目標任務有沒有做好以外,你其實應該要去檢查一下你的模型在原來他能夠做的任務上面,到底還有沒有保有原來的能力,那我們今天知道一個非常有效的可以防止可以防止forgetting的方法,就是如果我們今天的訓練資料,
是用人工智慧自己的話來說,也就是他自己產生出來的,往往對於post training是非常有效的,那這是一個很有效的方法給要做post training的同學參考。
Loading video analysis...