時隔6年,谷歌BERT終於有替代品了!更快更準更長,還不炒作GenAI

机器之心發表於2025-01-05

真正有用的主力模型。

BERT 於 2018 年釋出,這個時間點,如果按照 AI 的紀事年代來說,可以說是一千年以前的事了!雖然過去了這麼多年,但至今仍被廣泛使用:事實上,它目前是 HuggingFace 中心下載量第二大的模型,每月下載量超過 6800 萬次。

好訊息是,六年後的今天,我們終於有了替代品!

近日,新型 AI 研發實驗室 Answer.AI、英偉達等釋出了 ModernBERT。

ModernBERT 是一個新的模型系列,具有兩個型號:基礎版 139M 、較大版 395M。在速度和準確率方面都比 BERT 及其同類模型有了顯著改進。該模型採用了近年來在大型語言模型 (LLM) 方面的數十項進展,包括對架構和訓練過程的更新。

圖片

除了速度更快、準確度更高外,ModernBERT 還將上下文長度增加到 8k 個 token,而大多數編碼器只有 512 個 token,並且是第一個在訓練資料中包含大量程式碼的僅編碼器專用模型。

圖片

  • 原文地址:https://huggingface.co/blog/modernbert
  • 論文地址:https://arxiv.org/pdf/2412.13663
  • 專案主頁:https://github.com/huggingface/blog/blob/main/modernbert.md

Answer.AI 聯合創始人 Jeremy Howard 表示,ModernBERT 不炒作生成式 AI(GenAI),而是真正的主力模型,可用於檢索、分類,是真正有用的工作。此外還更快、更準確、上下文更長、更有用。

圖片

僅解碼器模型

近期,GPT、Llama 和 Claude 等模型迅速崛起,這些模型是僅解碼器模型,也可以說是生成模型。它們的出現催生出令人驚歎的新型領域 GenAI,例如生成藝術和互動式聊天。本文所做的,本質上就是將這些進展移植回僅編碼器模型。

為什麼要這麼做?因為許多實際應用都需要一個精簡的模型!而且它不需要是一個生成模型。

更直白地說,僅解碼器模型對於許多工作來說太大、太慢、太私密、太昂貴。想想最初的 GPT-1 是一個 1.17 億引數的模型。相比之下,Llama 3.1 模型有 4050 億個引數,對於大多數公司來說,這種方法過於複雜和昂貴,無法複製。

GenAI 的流行熱潮掩蓋了僅編碼器模型的作用。這些模型在許多科學和商業應用中發揮了巨大作用。

僅編碼器模型

僅編碼器模型的輸出是數值列表(嵌入向量),其將「答案」直接編碼為壓縮的數字形式。該向量是模型輸入的壓縮表示,這就是為什麼僅編碼器模型有時被稱為表示模型。

雖然僅解碼器模型(如 GPT)可以完成僅編碼器模型(如 BERT)的工作,但它們受到一個關鍵約束:由於它們是生成模型,因此從數學上講它們「不允許窺視」後面的 token。這與僅編碼器模型形成對比,後者經過訓練,每個 token 都可以向前和向後(雙向)檢視。它們就是為此而構建的,這使得它們在工作中非常高效。

基本上,像 OpenAI o1 這樣的前沿模型就像法拉利 SF-23,這顯然是工程學的勝利,旨在贏得比賽。但僅是更換輪胎就需要專門的維修站,而且你無法自己購買。相比之下,BERT 模型就像本田思域,這也是一項工程學的勝利,但更微妙的是,它被設計成價格實惠、省油、可靠且極其實用的車型。因而無處不在。

我們可以從不同的角度看待這個問題。

首先是基於編碼器的系統:在 GPT 出現之前,社交媒體和 Netflix 等平臺中都有內容推薦。這些系統不是建立在生成模型上,而是建立在表徵模型(如僅編碼器模型)上。所有這些系統仍然存在,並且仍在大規模執行。

接著是下載量:在 HuggingFace 上,RoBERTa 是基於 BERT 的領先模型之一,其下載量超過了 HuggingFace 上 10 個最受歡迎的 LLM 的總下載量。事實上,目前,僅編碼器模型每月的下載量總計超過 10 億次,幾乎是僅解碼器模型(每月下載量為 3.97 億次)的三倍。

最後是推理成本:按推理計算,每年在純編碼器模型上執行的推理要比純解碼器模型或生成模型多很多倍。一個有趣的例子是 FineWeb-Edu,團隊選擇使用僅解碼器模型 Llama-3-70b-Instruct 生成註釋,並使用經過微調的基於 BERT 的模型執行大部分過濾。此過濾耗時 6,000 H100 小時,按照每小時 10 美元的定價,總計 60,000 美元。另一方面,即使使用成本最低的 Google Gemini Flash 及其低推理成本(每百萬個 token 0.075 美元),向流行的僅解碼器模型提供 15 萬億個 token 也需要花費超過一百萬美元!

效能

以下是 ModernBERT 和其他模型在一系列任務中的準確率比較 。ModernBERT 是唯一在每個類別中都獲得最高分的模型:

圖片

如果你瞭解 Kaggle 上的 NLP 競賽,那麼你就會知道 DeBERTaV3 多年來一直是處於冠軍位置。但現在情況已經變了:ModernBERT 不僅是第一個在 GLUE 上擊敗 DeBERTaV3 的模型,而且它使用的記憶體還不到 Deberta 的 1/5。

當然,ModernBERT 的速度也很快,它的速度是 DeBERTa 的兩倍 —— 事實上,在輸入混合長度的情況下,速度最高可提高 4 倍。它的長上下文推理速度比其他高質量模型(如 NomicBERT 和 GTE-en-MLM)快近 3 倍。

ModernBERT 的上下文長度為 8,192 個 token,比大多數現有編碼器長 16 倍以上。

對於程式碼檢索,ModernBERT 的效能是獨一無二的,因為之前從未有過編碼器模型在大量程式碼資料上經過訓練。例如,在 StackOverflow-QA 資料集 (SQA) 上,這是一個混合了程式碼和自然語言的混合資料集,ModernBERT 的專業程式碼理解和長上下文使其成為唯一一個在此任務上得分超過 80 的模型。

與主流模型相比,ModernBERT 在檢索、自然語言理解和程式碼檢索這三大類任務中表現突出。雖然 ModernBERT 在自然語言理解任務上稍微落後於 DeBERTaV3,但其速度要快很多倍。

與特定領域的模型相比,ModernBERT 在大多數任務中都相當或更勝一籌。此外,ModernBERT 在大多數任務中都比大多數模型更快,並且可以處理多達 8,192 個 token 的輸入,比主流模型長 16 倍。

效率

以下是 ModernBERT 和其他解碼器模型在 NVIDIA RTX 4090 上的記憶體(最大批大小,BS)和推理(以每秒數千個 token 為單位)效率對比結果:

圖片

對於可變長度的輸入,ModernBERT 比其他模型都快得多。

對於長上下文輸入,ModernBERT 比第二快的模型快 2-3 倍。此外,由於 ModernBERT 的效率,它可以使用比幾乎任何其他模型都大的批處理大小,並且可以在更小、更便宜的 GPU 上有效使用。特別是基礎模型的效率可能會使新應用程式能夠直接在瀏覽器、手機等上執行。

ModernBERT

接下來文章解釋了為什麼我們應該更加重視編碼器模型。作為值得信賴、但被低估的主力模型,自 2018 年 BERT 釋出以來,它們的更新速度出奇地慢!

更令人驚訝的是:自 RoBERTa 以來,還沒有編碼器能夠提供整體的改進:DeBERTaV3 具有更好的 GLUE 和分類效能,但犧牲了效率和檢索。其他模型(例如 AlBERT)或較新的模型(例如 GTE-en-MLM)都在某些方面比原始 BERT 和 RoBERTa 有所改進,但在其他方面有所退步。

ModernBERT 專案主要有三個核心點:

  • 現代化的 transformer 架構;
  • 特別重視注意力效率;
  • 以及資料。

認識新的 Transformer

Transformer 架構已成為主流,如今絕大多數模型都在使用它。但值得注意的是,Transformer 不止一個,而是有很多種。其主要共同點是,都堅信注意力機制才是所需要的一切,因此圍繞注意力機制構建了各種改進。

用 RoPE 替換舊的位置編碼:這使得模型能夠更好地理解單詞之間的關係,並允許擴充套件到更長的序列長度。

  • 將舊的 MLP 層替換為 GeGLU 層,改進原始 BERT 的 GeLU 啟用函式;
  • 透過刪除不必要的偏置項來簡化架構,從而更有效地使用引數預算;
  • 在嵌入後增加一個額外的歸一化層,有助於穩定訓練。

全域性和區域性注意力

ModernBERT 最具影響力的功能之一是 Alternating 注意力機制,而不是全域性注意力機制。

隨著注意力計算複雜度隨著每個額外的 token 而膨脹,這意味著 ModernBERT 可以比任何其他模型更快地處理長輸入序列。實際上,它看起來像這樣:

圖片

Unpadding 和序列 Packing

另一個有助於 ModernBERT 提高效率的核心機制是 Unpadding 和序列 Packing。

為了能夠處理同一批次中的多個序列,編碼器模型要求序列具有相同的長度,以便可以執行平行計算。傳統上的做法是依靠 padding 來實現這一點:找出哪個句子最長,並新增無意義的 token 來填充序列。

雖然填充解決了這個問題,但它並不優雅:大量的計算最終被浪費在填充 token 上,而這些 token 不會提供任何語義資訊。

圖片

比較 padding 和序列 packing。序列 packing(unpadding )避免了模型在填充 token 上的計算浪費。

Unpadding 解決了這個問題,其不會保留這些填充 token,而是將它們全部刪除,並將它們連線到批大小為 1 的小批次中,從而避免了不必要的計算。如果你使用的是 Flash Attention,unpadding 甚至比以前的方法更快,比以前的方法加快 10-20%。

訓練

編碼器落後的一大方面在於訓練資料。在通常的理解中,這僅指的是訓練資料規模,但事實並非如此:以往的編碼器(如 DeBERTaV3)經過足夠長時間的訓練,甚至可能突破了萬億 tokens 規模。

但問題在於資料多樣性:很多舊模型在有限的語料庫上進行訓練,通常包括 Wikipedia 和 Wikibooks。很明顯,這些混合資料是單一的文字模態:它們只包含高質量的自然文字。

相比之下,ModernBERT 的訓練資料具有多種英語來源,包括網頁文件、程式碼和科學文章。該模型訓練了 2 萬億 tokens,其中大多數是唯一的,而不像以往編碼器那樣常常重複 20 到 40 次。這種做法的影響是顯而易見的:在所有的開源編碼器中,ModernBERT 在編碼任務上實現了 SOTA。

流程

團隊堅持原始 BERT 訓練方法,並在後續工作的啟發下進行了一些小的升級,包括刪除了下一句(Next-Sentence)預測目標,原因是它在增加開銷的情況下沒有明顯的收益,並將掩蔽率從 15% 提高了 30%。

兩個模型都採用三段式訓練流程。首先在序列長度為 1024 的情況下訓練了 1.7T tokens 的資料,然後採用一個長上下文適應階段,在序列長度為 8192 的情況下訓練了 250B tokens 的資料,同時透過降低批大小來保持每個批次的總 tokens 數大體一致。最後按照 ProLong 中強調的長上下文擴充套件思路,對不同取樣的 50B tokens 資料進行退火。

從結果來看,三段式訓練可以確保模型執行良好,在長上下文任務上具有競爭力,也不會影響其處理短上下文的能力。

此外還有另一個好處:對於前兩個階段,團隊在預熱階段完成之後使用恆定學習率來訓練,只對最後的 50B tokens 執行學習率衰減,並遵循了梯形(預熱 - 穩定 - 衰減)學習率。更重要的是:受到 Pythia 的啟發,團隊可以在這些穩定的階段釋出每一個直接中間檢查點。這樣做的主要原因是支援未來的研究和應用:任何人都可以從團隊的預衰減檢查點重新開始訓練,並對適合自己預期用途的域資料進行退火。

技巧

最後,該團隊使用了兩個技巧來加快實現速度。

第一個技巧很常見:由於初始訓練步驟更新了隨機權重,因而採用批大小預熱。首先從較小的批大小開始,這樣相同數量的 token 會更加頻繁地更新模型權重,接下來逐漸增加批大小直到達到最終的訓練大小。這樣做大大加快了初始階段的模型訓練速度,其中模型學習到了最基礎的語言理解。

第二個技巧不太常見:透過對較大的模型平鋪(tiling)來進行權重初始化,這一靈感來自微軟的 Phi 系列模型。該技巧基於以下認知:當我們有一組非常好的 ModernBERT-base 權重時,為什麼要利用隨機數來初始化 ModernBERT-large 的初始權重呢?的確,事實證明了,將 ModernBERT-base 的權重平鋪到 ModernBERT-large 要比隨機權重的初始化效果好。此外,該技巧跟批大小預熱一樣可以在堆疊後帶來額外好處,從而更快地進行初始訓練。

總之,ModernBERT 成為新的小型、高效的僅編碼器 SOTA 系列模型,併為 BERT 提供了亟需的重做。另外證明了僅編碼器模型可以透過現代方法得到改進,並在一些任務上仍能提供非常強大的效能,並實現極具吸引力的尺寸 / 效能比。

參考內容:

https://huggingface.co/blog/modernbert

相關文章