ACL'24 | 微調(diào)大模型前,重寫SFT數(shù)據(jù)
共 1741字,需瀏覽 4分鐘
·
2024-10-12 08:00
微調(diào)大模型前,如何重寫SFT數(shù)據(jù)?
作者:張義策
文章地址:https://zhuanlan.zhihu.com/p/710594520
Self-Distillation Bridges Distribution Gap in Language Model Fine-Tuning
論文地址:https://arxiv.org/abs/2402.13669
這是ACL24上的一篇長文。作者來自浙江大學(xué)、Sea AI Labs和騰訊。文章提出的方法比較簡單。
為什么要重寫SFT數(shù)據(jù)?
-
問題: 文章指出現(xiàn)有的大模型一般具備較好的general instruction-following abilities,但是在specific downstream tasks上可能表現(xiàn)不佳。為此,我們需要在特定任務(wù)上對大模型進(jìn)行有監(jiān)督的微調(diào)(supervised fine-tuning, SFT)。然而,這種微調(diào)在提高模型在特定任務(wù)上能力的同時,常會損害模型通用的指令遵循能力。
-
解決方案: 文章指出上述問題的原因是,特定任務(wù)的數(shù)據(jù)集和大模型之間存在分布上的差異。為此,文章提出了一種名為self-distillation fine-tuning(SDFT)的方法。名字很復(fù)雜,方法其實簡單。如下圖所示,其實就是讓微調(diào)前的大模型將任務(wù)數(shù)據(jù)集重寫一遍。這樣的話,重寫后的任務(wù)數(shù)據(jù)集的分布和大模型的差異就小了很多。在這樣的數(shù)據(jù)集上微調(diào)對大模型分布上的改變會小很多,對大模型通用能力的損害也會降低。
seed language models = 微調(diào)前的大模型
如何重寫SFT數(shù)據(jù)
如下圖所示,將instruction和原本的response輸入到大模型中,然后讓大模型輸出重寫后的response。
重寫后的response錯了怎么辦?文章使用了一個簡單的策略。對比原本的response和重寫后的response中的答案部分,如果不同就仍然使用原本的response。比如,在math reasoning問題上,可以用正則表達(dá)式從response中抽取最終的答案,然后比較重寫前后的答案是否相同。
主要實驗
文章使用Llama-2-7b-chat作為基座大模型,在微調(diào)時使用LoRA。文章選擇的下游任務(wù)有GSM8K (數(shù)學(xué)推理)、Gorilla OpenmFunctions (工具學(xué)習(xí))、MagiCoder (代碼生成)。
如下圖所示,我們可以發(fā)現(xiàn),(1) 在特定任務(wù)上的微調(diào)會讓大模型在其他任務(wù)上的性能明顯下降;(2) 提出方法可以有效緩解這種下降(但是下降仍是不可避免)。
MagiCoder (代碼生成任務(wù)) 使用HumanEval的方法評估
正如最開始提到下游任務(wù)上的微調(diào)會損害模型的通用能力。如下圖所示,使用提出方法,大模型的回復(fù)的safety和helpfulness上的下降也被緩解。
文章還進(jìn)行了一系列的實驗:
-
微調(diào)數(shù)據(jù)規(guī)模的影響:數(shù)據(jù)越多,模型的分布改變越大,下降越明顯。 -
混合原本的數(shù)據(jù)集和重寫后的數(shù)據(jù)集:重寫數(shù)據(jù)集比例越大,越能緩解性能的下降。 -
Llama-2-13B、Llama-3-8B上的實驗:結(jié)論差不多。
總結(jié)
這篇文章指出特定任務(wù)上的微調(diào)會對模型的通用能力和其他任務(wù)上的能力造成負(fù)面影響,提出了重寫微調(diào)數(shù)據(jù)集的方案來緩解這一問題。方法比較簡單。印象中有其他的持續(xù)學(xué)習(xí)方法的工作,也是解決相同的問題。除此之外,感覺LoRA本身也是解決這個問題的方案之一,即不同的任務(wù)使用不同的adapter。
