如何更好地繼續(xù)預(yù)訓(xùn)練(Continue PreTraining)
寫在前面
大家好,我是劉聰NLP。
預(yù)訓(xùn)練(Pretraining)是一個非常消耗資源的工作,尤其在 LLM 時代。隨著LLama2的開源,越來越多人都開始嘗試在這個強大的英文基座模型上進(jìn)行中文增強。但,我們?nèi)绾尾拍鼙WC模型在既學(xué)到「中文知識」的情況下,又不丟掉原有的「英文知識」呢?
今天給大家?guī)硪黄?Continue Pretraining 的論文(來自何枝大佬,知乎@何枝),Continual Pre-Training of Large Language Models: How to (re)warm your model?
知乎:https://zhuanlan.zhihu.com/p/654463331
paper:https://arxiv.org/pdf/2308.04014.pdf
1.實驗設(shè)定
作者使用一個 410M 大小的模型 Pythia,已經(jīng)在 Pile數(shù)據(jù)上進(jìn)行過預(yù)訓(xùn)練,然后在下游數(shù)據(jù)集 SlimPajama 上進(jìn)行微調(diào)。
論文中直接使用 Loss 作為評估指標(biāo),即 Loss 越小,說明在上游(或下游)任務(wù)中的效果越強。
Pythia: https://huggingface.co/EleutherAI/pythia-410m-v0
Pile: https://huggingface.co/datasets/EleutherAI/pile
SlimPajama: https://www.cerebras.net/blog/slimpajama-a-627b-token-cleaned-and-deduplicated-version-of-redpajama
2. 關(guān)鍵結(jié)論
2.1 warmup 的步數(shù)不會影響最終性能
warmup 是一種 finetune 中常用的策略,指學(xué)習(xí)率從一個很小的值慢慢上升到最大值。那么,這個「慢慢上升」的階段持續(xù)多久是最好的呢?
作者分別使用訓(xùn)練步數(shù)的:0%, 0.5%, 1%, 2% 這 4 種不同預(yù)熱步數(shù)來進(jìn)行實驗:
從上圖中可以看到:當(dāng)模型經(jīng)過「充分」訓(xùn)練后,不管多長的預(yù)熱步數(shù)最后的性能都差不多。
但,這種前提是「充分訓(xùn)練」,如果只看訓(xùn)練前期的話,使用更長的預(yù)熱步數(shù)(黃色的線)。無論是「上游任務(wù)」還是「下游任務(wù)」,模型的 Loss 都要比其他預(yù)熱步數(shù)要低(下游學(xué)的快,上游忘的慢)。
2.2 學(xué)習(xí)率越大,下游任務(wù)越好,上游任務(wù)越差
為了探究學(xué)習(xí)率對學(xué)習(xí)效果的影響,作者使用了 4 種不同的最大學(xué)習(xí)率進(jìn)行對比實驗,
此外,還比對了和從頭訓(xùn)練(from scratch)模型的效果:
從圖中可以看到:經(jīng)過充分訓(xùn)練后,學(xué)習(xí)率越大(紫色),下游性能最好,上游性能最差(忘得最多)。同樣,我們看前期訓(xùn)練,盡管紫色線條在最后的 loss 是最低的,但在前期 loss 會增加的非常大,隨后下降。
PS:解釋一下這里為什么這么關(guān)注訓(xùn)練前期,是因為在真實訓(xùn)練中,我們可能不一定會增強圖中所示的 250B 這么多的 tokens,尤其是在模型參數(shù)很大的情況中。所以,當(dāng)資源不允許充分訓(xùn)練的情況下,較小的學(xué)習(xí)率和較長的 warmup 步數(shù)可能是一個不錯的選擇。
此外,圖中還能看出:未經(jīng)過預(yù)訓(xùn)練的模型(藍(lán)色)無論是上游任務(wù)還是下游任務(wù),都不如預(yù)訓(xùn)練過的模型效果。
這鼓勵我們今天在進(jìn)行訓(xùn)練任務(wù)時,最好選擇一個已經(jīng)過預(yù)訓(xùn)練的模型上繼續(xù)訓(xùn)練(以利用其中的先驗知識)。
2.3 在初始預(yù)訓(xùn)練中使用 Rewarmup 會損傷性能
盡管 warmup 策略在 Finetune 和 Continue Pretraining 中都起到了更好的效果(相較于常量學(xué)習(xí)率),但是,這建立在「切換了訓(xùn)練數(shù)據(jù)集(數(shù)據(jù)分布)」的前提下。
作者做了一個實驗,不切換數(shù)據(jù)集,而是繼續(xù)在之前的「預(yù)訓(xùn)練數(shù)據(jù)集(The Pile)」上繼續(xù)訓(xùn)練:
從圖中結(jié)果可以發(fā)現(xiàn):無論使用多大學(xué)習(xí)率的 warmup 策略,效果都不如使用常量學(xué)習(xí)率。
這進(jìn)一步證明,在原數(shù)據(jù)集上使用 warmup 接著訓(xùn)練會造成性能損傷,學(xué)習(xí)率越大則損傷越大,且這種損傷是無法在后續(xù)的訓(xùn)練中被找回的。
PS:這里提示我們,當(dāng)預(yù)訓(xùn)練中遇到了訓(xùn)練中斷需要繼續(xù)訓(xùn)練時,我們應(yīng)該在重新開始訓(xùn)練時將學(xué)習(xí)率恢復(fù)到中斷之前的狀態(tài)(無論是數(shù)值還是衰減率)。
3. 實驗限制
作者在論文的最后貼出了得出上述結(jié)論的一些局限性。
3.1 上下游數(shù)據(jù)分布類似
因為實驗中選用的上游數(shù)據(jù)集 [Pile] 和下游數(shù)據(jù)集 [SlimPajama] 中存在一部分的數(shù)據(jù)重疊,
所以導(dǎo)致上下游數(shù)據(jù)的分布是比較相似的,但在我們真實的訓(xùn)練任務(wù)中,上下游數(shù)據(jù)的差異可能會比這大的多。
3.2 模型規(guī)模較小
論文中所使用的模型規(guī)模為 410M,這和今天人們 7B 起步的 LLM 規(guī)模相差甚遠(yuǎn)。
不過該團隊打算在接下來的工作中繼續(xù)在 3B 和 7B 的規(guī)模下進(jìn)行嘗試,期待他們最后的實驗結(jié)論。
請多多關(guān)注知乎「劉聰NLP」,有問題的朋友也歡迎加我微信「logCong」私聊,交個朋友吧,一起學(xué)習(xí),一起進(jìn)步。我們的口號是“生命不止,學(xué)習(xí)不?!?。
PS:新書已出《ChatGPT原理與實戰(zhàn)》,歡迎購買~~。
往期推薦:
-
妙鴨相機的爆火帶給想做產(chǎn)品的技術(shù)人員的一些啟示 -
大模型LLM微調(diào)經(jīng)驗總結(jié)&項目更新 -
淺談LLM的長度外推 -
打造LLM界的Web UI -
是我們在訓(xùn)練大模型,還是大模型在訓(xùn)練我們? -
Llama2技術(shù)細(xì)節(jié)&開源影響 -
大模型時代-行業(yè)落地再思考 -
大模型幻覺問題調(diào)研 -
垂直領(lǐng)域大模型的一些思考及開源模型匯總 -
如何評估大模型-LLMs的好壞? -
總結(jié)|Prompt在NER場景的應(yīng)用
