Bert重大創(chuàng)新,RAG突破512長度限制
當(dāng)前RAG的檢索、召回模塊,受到了傳統(tǒng)BERT模型只支持512長度的極大限制。導(dǎo)致文檔切分后的chunksize,極大影響RAG的性能。
本文介紹的ModernBERT,在BERT的基礎(chǔ)上進行了重大改進,以提高下游任務(wù)的性能和效率,尤其是在更長序列長度上的表現(xiàn)。
ModernBERT在2萬億個token上進行訓(xùn)練,原生支持8192序列長度,展現(xiàn)了在多樣化分類任務(wù)和單向、多向檢索任務(wù)上的卓越性能。
ModernBERT解決的問題
- 問題1:傳統(tǒng)Bert序列長度512的限制
ModernBERT通過增加序列長度到8192個token,顯著提高了模型處理長文本的能力。
- 問題2:傳統(tǒng)BERT注意力機制效率低下
為了提高模型的運行速度和內(nèi)存效率,ModernBERT引入了一系列現(xiàn)代模型優(yōu)化技術(shù),包括交替的全局和局部注意力機制、無填充(unpadding)策略以及Flash Attention技術(shù)。
- 問題3:傳統(tǒng)Bert架構(gòu)陳舊
ModernBERT采用了最新的模型架構(gòu)改進,例如GeGLU激活函數(shù)、RoPE位置編碼和預(yù)標(biāo)準(zhǔn)化(pre-normalization)技術(shù)
突破性能的關(guān)鍵技術(shù)
- 在相同的參數(shù)數(shù)量下,具有更多窄層的模型(深而窄)與具有較少寬層的模型(淺而寬)具有不同的學(xué)習(xí)模式。
- 深而窄的語言模型比其較淺的對應(yīng)模型具有更好的下游性能,但代價是推理速度較慢。
- 為了獲得更好的下游性能,ModernBERT設(shè)計的目標(biāo)是盡可能深而窄。
- ModernBERT的基礎(chǔ)模型和大型模型分別具有22層和28層,參數(shù)總數(shù)分別為1.49億和3.95億,在后續(xù)性能和硬件效率之間取得了平衡。
- ModernBERT基礎(chǔ)模型的隱藏層大小為768,GLU擴展為2304;大型模型的隱藏層大小為1024a,GLU擴展為5248。 這些比例允許跨張量核心的最佳平鋪。
transformer架構(gòu)的改進
- GeGLU激活函數(shù):替代原有的GeLU激活函數(shù),提供更好的非線性表達能力。
- RoPE位置編碼:使用旋轉(zhuǎn)位置編碼(RoPE)代替絕對位置編碼,以提高模型對序列順序的理解能力。
- 預(yù)標(biāo)準(zhǔn)化(pre-normalization):在每個Transfaormer塊中使用預(yù)標(biāo)準(zhǔn)化技術(shù),有助于穩(wěn)定訓(xùn)練過程。
- 在嵌入層之后添加了一個層歸一化。 為避免重復(fù),去除了第一個注意力層中的第一個層歸一化。
- 交替注意力機制:在模型中交替使用全局和局部注意力,以平衡計算效率和性能。
- 全局注意力:序列中的每個token都關(guān)注其他每個token
- 局部注意力:token僅關(guān)注一個小滑動窗口內(nèi)的token。
- 在ModernBERT中,每三層使用RoPE theta為160,000的全局注意力,其余層使用具有128個token、RoPE theta為10,000的局部滑動窗口注意力。
模型訓(xùn)練的改進
- 在2萬億個token上進行訓(xùn)練,數(shù)據(jù)來源包括網(wǎng)頁文檔、代碼和科學(xué)文獻。模型采用了現(xiàn)代的BPE分詞器,并設(shè)置了50,368的詞匯量,以優(yōu)化GPU利用率。
- 訓(xùn)練采用了Masked Language Modeling(MLM),并去除了Next-Sentence Prediction(NSP)目標(biāo),因為后者并未帶來性能上的提升。
- 模型使用了StableAdamW優(yōu)化器,并采用了改進的梯形學(xué)習(xí)率計劃
- 采用去除填充策略,去除填充token,減少計算資源的浪費
- encoder-only語言模型通常使用填充符元來確保批次中統(tǒng)一的序列長度,從而浪費在語義上為空的符元上的計算資源。
- 去除填充通過移除填充token、將小批量中的所有序列連接成單個序列并將其作為單個批次進行處理來避免這種低效。
- 之前的去除填充實現(xiàn)會在不同的模型層內(nèi)部去除填充并重新填充序列,從而浪費計算資源和內(nèi)存帶寬。
- 使用Flash Attention的可變長度注意力和RoPE實現(xiàn),允許在單個未填充序列上使用不規(guī)則的注意力掩碼和RoPE應(yīng)用。
- ModernBERT在嵌入層之前去除輸入的填充,并可以選擇性地重新填充模型輸出,這使得其性能比其他去除填充方法提高了10%到20%。
- 使用Flash Attention技術(shù),提高了注意力計算的內(nèi)存和計算效率。
- ModernBERT結(jié)合使用Flash Attention 3進行全局注意力層
- 使用Flash Attention 2進行局部注意力
- 利用PyTorch的torch.compile編譯功能,提高了訓(xùn)練的吞吐量10%。
- 通過增加全局注意力層的RoPE theta值,將原生上下文長度512擴展到8192個token,并在額外的3000億個token上進行訓(xùn)練,以優(yōu)化長文本處理能力。
訓(xùn)練參數(shù)的配置
- MLM:
a.使用30%的掩碼率,原始的15%掩碼率再次被證明是次優(yōu)的
- StableAdamW優(yōu)化器:
a.StableAdamW的學(xué)習(xí)率裁剪在下游任務(wù)中優(yōu)于標(biāo)準(zhǔn)梯度裁剪,并導(dǎo)致更穩(wěn)定的訓(xùn)練。
- 梯形學(xué)習(xí)率 (LR) :
a.在預(yù)訓(xùn)練期間,我們使用改進的梯形學(xué)習(xí)率 (LR) schedule,也稱為預(yù)熱-穩(wěn)定-衰減 (WSD)。
b.在短暫的LR預(yù)熱之后,梯形schedule在大部分訓(xùn)練中保持LR不變,然后進行短暫的LR衰減。
c.此schedule已被證明可以匹配余弦schedule的性能。
d.并且可以對任何檢查點進行持續(xù)訓(xùn)練而不會出現(xiàn)冷啟動問題。
e.使用1-sqrt的LR衰減,要優(yōu)于線性衰減和余弦衰減
f.ModernBERT-base 以8e-4的恒定LR訓(xùn)練了1.7萬億個token,預(yù)熱了30億個token
g.預(yù)熱20億個token后,以5e-4的LR訓(xùn)練了ModernBERT-large,訓(xùn)練了9000億個符元。
h.在large的損失在5e-4下保持穩(wěn)定了幾百億個token后,將學(xué)習(xí)率回滾到5e-5,并重新訓(xùn)練剩余的8000億個token。
- 批量大小調(diào)度:
a.批量大小調(diào)度從較小的梯度累積批量開始,隨著時間的推移逐漸增加到完整的批量大小,能加快訓(xùn)練進度
b.ModernBERT-base和-large的批量大小分別在500億個token內(nèi)從768增加到4608,在100億個token內(nèi)從448增加到4928,采用不均勻的token調(diào)度,以便每個批量大小具有相同數(shù)量的更新步驟。
- 權(quán)重初始化和平鋪:
a.使用中心平鋪和Gopher層縮放,直接從ModernBERT-base的預(yù)訓(xùn)練權(quán)重初始化ModernBERT-large
b.由于Base的權(quán)重矩陣小于Large的權(quán)重矩陣,對Base的權(quán)重進行了中心化處理,考慮了每個token嵌入和注意力頭,然后使用環(huán)繞填充其余權(quán)重。
- 上下文長度擴展:
a.以1024個序列長度和10,000的RoPE theta對1.7萬億個token進行訓(xùn)練后,通過將全局注意力層的RoPE theta增加到160,000并將額外訓(xùn)練3000億個token來擴展ModernBERT的原生上下文長度到8192個token。
b.首先,以3e-4的恒定較低學(xué)習(xí)率對8192個token的原始預(yù)訓(xùn)練數(shù)據(jù)集混合體進行2500億個token的訓(xùn)練
c.接下來,對更高質(zhì)量的來源進行上采樣,并在500億個token上進行具有1-sqrt學(xué)習(xí)率調(diào)度的衰減階段。
??https://github.com/AnswerDotAI/ModernBERT??
??https://arxiv.org/pdf/2412.13663??
本文轉(zhuǎn)載自??CourseAI??,作者: CourseAI
