來自:李rumor
大模型是一個實驗工程,涉及數(shù)據(jù)清洗、底層框架、算法策略等多個工序,每個環(huán)節(jié)都有很多坑,因此知道如何避坑和技術(shù)選型非常重要,可以節(jié)省很多算力和時間。
近期百川智能發(fā)布了Baichuan2的7B和13B版本,可能不少卷友被刷屏慣了沒有仔細看,他們在放出模型的同時也給了一份技術(shù)報告,里面干貨滿滿,因此我自來水一波,帶大家一起看看百川積累的KnowHow。同時也有一些我沒完全懂的地方,希望拋磚引玉,可以一起在評論區(qū)討論。
Pre-train
數(shù)據(jù)
數(shù)據(jù)多樣性
從不同的來源獲取數(shù)據(jù),最好建立一個類目體系,可以提升對整體數(shù)據(jù)分布的把控,方便后續(xù)增減。
進行聚類和去重,可以通過LSH局部敏感或者稠密向量作為聚類特征,LSH更快一些,但向量可以更好地編碼語義。但這里有個問題是需要卡閾值,去重過猛會影響多樣性降低泛化能力。因此百川選擇的做法是去除一部分,并對剩余的樣本打分,作為預(yù)訓(xùn)練時采樣的權(quán)重。
整體去重的流程如下(這里我沒太懂的是為何把Document去重放在最后一步,如果放在前面的環(huán)節(jié)應(yīng)該可以顯著減少句子和段落的數(shù)據(jù)量):
數(shù)據(jù)質(zhì)量
采用句子級別的分類器進行過濾,這個是業(yè)內(nèi)常用做法了,但具體用什么數(shù)據(jù)訓(xùn)練,用什么標(biāo)準(zhǔn)標(biāo)注沒有細說。
對于內(nèi)容安全,用規(guī)則和模型洗掉有害內(nèi)容,還額外找了一些正向價值觀的數(shù)據(jù)源,提升采樣概率。
模型結(jié)構(gòu)
Tokenizer
Tokenizer的難點是平衡壓縮比和詞表尺寸,比如頻繁出現(xiàn)的幾個中文是可以用1個token表示的,這樣inference時就會很快,但合并的話這幾個中文字單獨的embedding訓(xùn)練可能就不充分,跟其他字組合時語義表示會不夠好。
因此百川使用BPE,選擇了比較折中的12萬大小,同時披露了以下細節(jié):
對原始數(shù)據(jù)不做任何歸一化
把數(shù)字完全拆開,可以更好理解數(shù)值數(shù)據(jù)
為了代碼數(shù)據(jù),專門增加空格token
覆蓋率在0.9999,只有少量fall back(一種避免OOV的方法,在碰到unknown中文時會變成utf8的byte token)
位置編碼
由于有外推的需求,最近位置編碼有很多新的工作,比較火的當(dāng)屬RoPE和ALiBi,這里百川都用了,因為他們實驗發(fā)現(xiàn)位置編碼并沒有顯著影響模型表現(xiàn),同時進行了速度優(yōu)化:
RoPE + Flash Attention
激活函數(shù)
采用了表現(xiàn)更好的SwiGLU,由于SwiGLU有三個矩陣,引入了更多參數(shù),因此百川縮小了FFN層的尺寸(4->8/3再處理成128的倍數(shù))。
Normalisations
對Transformer的輸入采用LayerNorm,對warm-up更魯棒
采用了RMSNorm的實現(xiàn),指計算輸入特征的方差,提升計算效率
混合精度
采用BF16,因為其具有更大的范圍,可以讓訓(xùn)練更穩(wěn)定,但對于位置編碼、優(yōu)化器等,采用全精度。
提升穩(wěn)定性
NormHead:對輸出的表示進行歸一化。首先低頻token的模會在訓(xùn)練中變小,進行歸一化后可以提升穩(wěn)定性。另外百川通過對輸出表示聚類,發(fā)現(xiàn)cosine距離可以將相似語義的聚到一起而L2距離不行,歸一化可以消除最終計算logits時點乘中L2的影響。從實驗結(jié)果可以明顯發(fā)現(xiàn)loss收斂更好更穩(wěn)定。
Max-z loss:在訓(xùn)練過程中,百川發(fā)現(xiàn)模型的logits都很大,這樣就會對解碼時的超參數(shù)魯棒性較低,因此增加max-z loss拉低logits的值。
注:對于預(yù)訓(xùn)練的優(yōu)化解讀跳過了Infra的部分,不是那么懂。。
Alignment
SFT
數(shù)據(jù)質(zhì)量:采用抽檢的方式進行質(zhì)量把控,抽一批數(shù)據(jù)檢查,不合格全部退回。
數(shù)據(jù)數(shù)量:100k(目前開源SFT數(shù)據(jù)還是挺多的,不知道百川出于什么考慮
Reward Model
Prompt多樣性:構(gòu)造了一個200+細分類目的數(shù)據(jù)體系,盡可能覆蓋用戶需求,同時提升每類prompt多樣性,從而提升泛化能力
Response多樣性:用不同尺寸和階段的百川模型生成答案,不使用其他開源模型(經(jīng)驗證無法提升RM準(zhǔn)確率)
PPO
預(yù)先對critic模型進行了warmup
為提升RL穩(wěn)定性,進行梯度裁剪
安全
由于模型開源,百川在內(nèi)容安全上非常細致,包括:
聘請10位專業(yè)審核人員構(gòu)建了100+安全類目
用50人的標(biāo)注團隊構(gòu)建了200K攻擊指令
對于攻擊指令,生產(chǎn)多樣性很大的回答
總結(jié)
Baichuan2的效果比第一版提升了很多,在推理任務(wù)上效果翻倍,是目前開源模型中過了最多中文語料的模型。
審核編輯:湯梓紅
-
算法
+關(guān)注
關(guān)注
23文章
4615瀏覽量
92992 -
開源
+關(guān)注
關(guān)注
3文章
3363瀏覽量
42537 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4333瀏覽量
62700 -
大模型
+關(guān)注
關(guān)注
2文章
2476瀏覽量
2803
原文標(biāo)題:總結(jié)
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論