寫在前面
大家好,我是劉聰NLP。
昨天MetaAI開源了Llama2模型,我只想說一句:“「MetaAI改名叫OpenAI吧!」”
Llama2不僅開源了預訓練模型,而且還開源了利用對話數據SFT后的Llama2-Chat模型,并對Llama2-Chat模型的微調進行了詳細的介紹。
開源模型目前有7B、13B、70B三種尺寸,預訓練階段使用了2萬億Token,SFT階段使用了超過10w數據,人類偏好數據超過100w。
非常自信的MetaAI。啥也不說,上來先show一副評估對比圖,我就問OpenAI你服不服,skr。
等等黨不用著急,雖然中文占比只有0.13%,但后續會有一大推中文擴充詞表預訓練&領域數據微調的模型被國人放出。
這不Github一搜,已經有很多人占坑了,這是“有卡者的勝利”。
?
下面簡要記錄Llama2的技術細節。
預訓練階段
模型結構為Transformer結構,與Llama相同的是采用RMSNorm歸一化、SwiGLU激活函數、RoPE位置嵌入、詞表的構建與大小,與Llama不同的是增加GQA(分組查詢注意力),擴增了模型輸入最大長度,語料庫增加了40%。
訓練超參數如下:AdamW優化器的β1、β2和eps分別為0.9、0.95和10e-5,采用cosin學習率,預熱2000步后進行學習率衰減,最終降至峰值的10%,權重衰減系數為0.1,梯度裁剪值為1.0。
但請注意:7b和13b模型并沒有增加GQA?。。?/p>
預訓練階段的損失如下圖所示,可以看出,模型其實還沒有完全收斂。
預訓練模型效果一句話總結:「開源第一,閉源一個沒打過?!?/strong>
?
微調階段
上面預訓練模型沒打過你OpenAI沒關系,你先等我全流程走完。
SFT
「Data Quality Is All You Need?!?/strong> MetaAI進行實驗時發現,少量高質量數據集訓練模型的效果,要好于大量低質量數據集的訓練效果。因此以后SFT時候,不要一味地追求量,質更重要。
微調時初始學習率為2e?5,并采用余弦學習率下降,權重衰減為0.1,訓練批次大小為64,最大長度為4096。為了提高模型訓練效率,將多組數據進行拼接,盡量填滿4096,每條數據直接用停止符隔開,計算loss時僅計算每條樣本target內容的loss。
RM
對于人類偏好數據的收集,重點關注模型回復的有用性和安全性,通過選擇對比兩個模型結果獲??;不過除了選擇一個更好的結果之外,還需要對選擇的答案標記偏好程度,例如:明顯更好,更好,稍微更好、可以忽略地更好或者不確定。在安全性上,對兩個結果會標記都符合安全性、只有一個復合安全性、都不符合安全性,以此收集安全性數據。
在模型迭代過程中,獎勵模型所需的偏好數據,需要迭代收集,具體如下。
獎勵模型是對提示生成的回復生成一個標量分值,評價模型生成質量,但發現有用性和安全性很難在同一個獎勵模型表現都很好,因此,獨立訓練了兩個獎勵模型,一個針對有用性(helpfulness)進行了優化,另一個針對安全性(safety)進行了優化。
獎勵模型的初始化來自于pretrained chat model檢查點,將下一個Token預測分類器替換成標量獎勵值回歸器。訓練時,采用帶有邊際約束的二元排序損失,如下:
邊際約束開源提高獎勵模型的準確性。并且為了獎勵模型可以用有更好的泛化,防止出現獎勵黑客現象(例如Llama2-Chat利用了獎勵模型的弱點,在表現不佳的情況下夸大獎勵分數),在獎勵模型訓練過程中,還加入了部分開源人類偏好數據。
訓練參數設置:70B模型的最大學習率為5e?6,其余模型的最大學習率為1e?5,采用余弦學習率下降,最低到最大學習率的10%,并采用總步數的3%進行預熱(最少5步),訓練批次大小為1024。
不同獎勵模型在不同數據上的效果如下表所示。
發現獎勵模型對明顯更好的數據效果更突出,對可以忽略地更好或者不確定的數據表現較差。
并且研究了獎勵模型在數據和模型大小方面的縮放趨勢,在數據逐步增大的同時,效果也在逐步提高。
隨著收到更多批次的人類偏好數據,能夠訓練更好的獎勵模型并收集更多提示。因此,訓練了五個連續版本的RLHF模型(RLHF-v1到RLHF-v5)。
主要訓練策略包括:
最近策略優化(PPO):標準強化學習算法
拒絕采樣微調:模型輸出時采樣K個結果,選擇獎勵值最高的一個,在強化學習階段進行梯度更新。
在RLHF-v4之前,只使用拒絕采樣微調,之后將兩者順序結合起來。但主要只有70B模型進行了拒絕采樣微調,而其他小模型的微調數據來自于大模型拒絕采樣數據,相當于用大模型蒸餾小模型。
在模型進行強化學習的獎勵值由有用性獎勵值和安全性獎勵值組合產生,具體計算如下:
訓練參數設置:對于所有模型,采樣AdamW優化器,其中β1、β2和eps分別為0.9、0.95和1e?5,權重衰減為0.1,梯度裁剪為1.0,學習率為恒定為1e?6。PPO訓練時大批次為512,小批次為64,PPO裁剪閾值為0.2。對于7B和13B模型,設置KL懲罰系數為0.01,對于34B和70B模型,設置KL懲罰系數為0.005。所有模型進行200到400次迭代訓練。
多輪對話一致性
最初的RLHF模型在幾輪對話后忘記最初的指令,下圖(左)所示。為了解決這些限制,提出Ghost Attention方法(Gatt,其實是一個訓練trick)來增強模型對指令的遵從。
假設多輪對話數據為 [u1,a1,...,un,an],定義一條指令(inst),使得整個對話過程中都遵守該指令,然后將該指令綜合連接到對話的所有用戶消息,構造為 [inst+u1,a1,...,inst+un,an]。為了避免語句不匹配的問題,在訓練過程中,保留第一輪的提示,并將中間輪數的損失置為0。
總結
Llama2模型7b,13b,34b,70b都有,完全夠用,最期待的34b會暫緩放出。
國內開源底座模型還是在6b、7b、13b等層次,33-34b才是剛需呀。
隨著開源可商用的模型越來越多,大模型社區會越來越繁華,是中小廠的福音。開源都是真英雄。
我愿從此跟隨MetaAI走Open開源AI路線。
編輯:黃飛
?
評論