BERT的继任者ModernBERT:融合长序列处理、代码理解与高效计算的新一代双向编码器

deephub 2024-12-24 10:44:59

BERT 发布于 2018 年(从人工智能发展速度来看已是遥远的过去),但它至今仍在广泛使用:实际上它目前是 HuggingFace hub 上下载量第二高的模型,月下载量超过 6800 万次,仅次于另一个针对检索任务优化的编码器模型。这源于其编码器架构在处理日常实际问题方面表现出色,例如检索(如用于 RAG)、分类(如内容审核)和实体提取(如隐私保护和合规性检查)等任务。

经过六年的发展,我们终于迎来了它的继任者。ModernBERT 是一个全新的模型系列,在速度和准确性两个维度上全面超越了 BERT 及其后继模型。这个新模型整合了近年来大语言模型(LLMs)研究中的数十项技术进展,并将这些创新应用到 BERT 风格的模型中,包括对架构和训练过程的全面优化。

我们预计 ModernBERT 将成为目前广泛应用编码器模型领域的新标准,特别是在检索增强生成(RAG)管道和推荐系统等应用场景中。

ModernBERT 不仅在性能和速度上有所提升,还将上下文长度扩展到了 8k tokens(相比之下,大多数编码器仅为 512),并且首次在训练数据中大规模引入了代码数据。这些特性开启了此前开源模型无法实现的新应用领域,如大规模代码搜索、创新的 IDE 功能,以及基于完整文档而非小片段的新型检索管道。

在详细介绍这个新的架构之前,我们首先回顾一下这个领域的发展历程。

解码器模型的局限性

近期大语言模型领域最引人注目的进展主要集中在 GPT、Llama 和 Claude 等模型上。这些都是仅解码器模型,也称为生成式模型。它们生成类人内容的能力开创了令人瞩目的生成式 AI 应用新领域,包括生成艺术和交互式对话等。这些创新应用吸引了大量投资,推动了蓬勃的研究发展,并带来了显著的技术突破。本质上这个工作就是将这些技术进展迁移回编码器模型架构。

为什么要这样做?因为大量实际应用场景需要的是轻量级且高效的模型,而不一定需要生成能力。

从技术角度来看,仅解码器模型在许多实际应用场景中存在着明显的局限性:它们通常规模过大、速度较慢、封闭性强且成本高昂。通过对比可以发现:最初的 GPT-1 模型包含 1.17 亿参数,而 Llama 3.1 模型则扩展到了 4050 亿参数,其技术报告中描述的数据合成和处理流程的复杂度和成本已经超出了大多数企业的能力范围。因此,要使用类似 ChatGPT 这样的模型,用户需要支付相当的费用,并等待数秒钟才能从外部的大规模服务器获得 API 响应。

尽管这些大规模生成式模型的通用能力使其能够在必要时执行非生成式或判别式任务(如分类),只需用自然语言描述任务要求即可。但这种方法虽然在原型开发阶段非常便利,却不适合大规模生产环境中的成本考量。

近期围绕生成式 AI 的热议在某种程度上掩盖了编码器模型的重要价值。实际上,这些模型才是自然语言处理实际应用的核心力量,在众多科研和商业场景中发挥着关键作用。

编码器模型的技术优势

编码器模型的输出是一个数值序列(即嵌入向量)。从技术角度来说,编码器模型不是通过文本来响应,而是将其"回答"直接编码为这种压缩的数值表示。这个向量实际上是模型输入的密集表示,这也是编码器模型有时被称为表示模型的原因。

虽然仅解码器模型(如 GPT)在技术上能够完成编码器模型(如 BERT)的工作,但它们受到一个根本性约束:作为生成式模型,它们在数学原理上"不允许""预见"后续标记。它们只能进行单向处理。相比之下,编码器模型的设计使其能够双向处理信息,每个标记都可以同时关注前后文信息。这种架构设计使它们在特定任务上表现出极高的效率。

从架构比较的角度来看,如果说 OpenAI 的 O1 等前沿模型类似于法拉利 SF-23 赛车 —— 毫无疑问是工程技术的巅峰之作,专为竞技场而生,这也是它备受关注的原因。但它需要专业团队的维护,且个人难以获取。相比之下,BERT 模型更像本田思域 —— 同样代表着工程智慧的结晶,但其价值在于实现了成本效益、能源效率、可靠性和实用性的完美平衡。这也解释了为什么它们如此普及。

我们可以从多个维度来验证这一观点:

在支持生成式模型方面的应用

理解表示模型(编码器)的普及程度的一个重要视角是观察它们如何与仅解码器模型协同工作,共同构建安全高效的系统。

最典型的例子是检索增强生成(RAG)技术。系统不再完全依赖训练在 LLM 参数中的知识,而是通过文档存储来为 LLM 提供与查询相关的信息。这引发了一个关键问题:如何高效地确定哪些文档与查询相关?这需要一个足够快速且经济的模型来编码海量信息。在这种场景下,类 BERT 的编码器模型通常是最佳选择。

另一个典型应用是监督架构,其中轻量级分类器被用于确保生成内容符合安全要求。

编码器系统的广泛应用

在 GPT 出现之前,社交媒体和 Netflix 等平台就已经实现了sophisticated的内容推荐系统。这些平台以及搜索引擎等场景中的广告精准投放,以及垃圾内容检测、滥用监控等内容分类系统,都是建立在表示模型(如编码器模型)而非生成式模型的基础之上。这些系统至今仍在大规模运行,每秒处理着海量的广告投放决策。

使用数据的客观比较

从 HuggingFace 平台的数据来看,基于 BERT 的领先模型 RoBERTa 的下载量超过了平台上排名前十的 LLM 模型的总和。具体来说,目前编码器模型的月下载总量超过 10 亿次,是仅解码器模型(3.97 亿次/月)的近三倍。特别值得注意的是,fill-mask 类别的模型(主要包括像 ModernBERT 这样可用于下游任务微调的编码器"基础模型")是下载量最大的模型类别。

推理成本效益分析

上述数据表明,从单次推理的角度来看,编码器模型的年度推理次数显著超过仅解码器或生成式模型。FineWeb-Edu 项目提供了一个很好的实例:他们需要对超过 15 万亿个标记进行模型质量过滤。在实践中团队选择使用仅解码器模型(Llama-3-70b-Instruct)生成注释,但主要的过滤工作则由经过微调的基于 BERT 的模型完成。这个过滤过程消耗了 6,000 个 H100 GPU 小时,按照 HuggingFace Inference Endpoints 每小时 10 美元的价格计算,总成本约为 60,000 美元。相比之下,如果使用主流的仅解码器模型处理这些数据,即使选择成本最低的 Google Gemini Flash(每百万标记 0.075 美元),总成本也将超过一百万美元,充分说明了编码器模型在大规模处理场景中的成本优势。

ModernBERT 的性能分析

下图展示了 ModernBERT 与其他模型在标准学术基准测试中的准确率对比。ModernBERT 是唯一一个在所有评估类别中都达到顶级性能的模型,这使其成为编码器任务的通用解决方案:

对于熟悉 Kaggle NLP 竞赛的研究者来说,DeBERTaV3 长期以来一直是冠军选手的首选工具。然而这个局面已经改变:ModernBERT 不仅是首个在 GLUE 基准测试中超越 DeBERTaV3 的基础规模模型,其内存占用还不到 DeBERTa 的 1/5。

在性能方面,ModernBERT 展现出显著优势。它的处理速度是 DeBERTa 的两倍,在更常见的变长输入场景下,这个优势甚至可以扩大到4 倍。在长文本推理任务中,其处理速度比其他高质量模型(如 NomicBERT 和 GTE-en-MLM)快近3 倍。

ModernBERT 的一个重要技术突破是将上下文长度扩展到 8,192 个标记,这是大多数现有编码器的16 倍以上。这一特性在实际应用中具有重要意义,因为在 RAG 管道中传统模型受限于短上下文窗口,往往需要将文本分割成较小的块,这容易导致语义信息的丢失和理解偏差。在使用 ColBERT 进行长文本检索时,ModernBERT 展现出显著的技术优势,其性能领先其他长上下文模型 9 个百分点。即使这个模型的训练周期相对较短,仅通过基础调优就能与其他模型进行比较,但它在长上下文任务上的表现已经超越了许多广泛使用的专用检索模型。

在代码检索领域,ModernBERT 开创了新的技术范式。由于此前从未有编码器模型在训练数据中包含如此大规模的代码数据,因此没有直接的对比基准。以 StackOverflow-QA 数据集(SQA)为例,这个混合了代码和自然语言的数据集充分展示了 ModernBERT 的技术优势:凭借其专门的代码理解能力和长上下文处理能力,ModernBERT 成为唯一一个在此任务上得分超过 80 分的基础模型。这些技术突破为新型应用的开发创造了可能。例如,可以构建一个 AI 增强的集成开发环境(IDE),利用 ModernBERT 的嵌入技术为整个企业代码库建立索引,实现跨仓库的快速长文本检索。或者开发一个代码对话系统,能够深入解析跨越数十个独立项目的应用程序功能实现原理。

与主流模型相比,ModernBERT 在检索、自然语言理解和代码检索这三个核心任务领域中展现出全面的性能优势。虽然在自然语言理解方面略逊于 DeBERTaV3,但其处理速度的显著优势弥补了这一短板。需要注意的是,作为基础模型,ModernBERT 的原生功能仅限于掩码词预测,要实现其他任务功能,需要按照既定范式进行针对性的微调。

相比专用模型,ModernBERT 在大多数任务中都展现出了相当或更优的性能。更重要的是,ModernBERT 在处理效率方面具有显著优势,其 8,192 个标记的输入长度是主流模型的 16 倍,为高效处理长文本任务提供了坚实基础。

下图展示了 ModernBERT 与其他解码器模型在 NVIDIA RTX 4090 上的内存使用(最大批量大小,BS)和推理性能(每秒千标记数)对比:

这项分析的一个显著特点是我们选择在价格适中的消费级 GPU 上进行测试,而不是使用最新的高端硬件。这体现了 ModernBERT 注重实用性而非理论性能的技术理念。

这种面向实践的设计理念也确保了 ModernBERT 在实际应用中的卓越表现,而不仅仅是在标准化基准测试中表现出色。传统模型通常只在其最优条件(即最大上下文长度)下进行测试,这反映在表格的"固定"列中。然而,现实应用中的输入长度往往是可变的,这正是我们重点优化的场景,如"可变"列所示。数据表明,在可变长度输入的处理上,ModernBERT 展现出显著的性能优势。在长文本处理这一我们认为对未来应用至关重要的领域,ModernBERT 的处理速度是次优模型的2-3 倍。从技术实现的角度来看,ModernBERT 摒弃了对重量级 "xformers" 依赖的需求,仅需集成现已普及的 Flash Attention 组件即可。

得益于其卓越的计算效率,ModernBERT 能够支持比其他模型更大的批处理规模,同时在配置较低的 GPU 上仍能保持高效运行。特别是其基础版本的高效设计,为直接在浏览器、移动设备等终端设备上运行的新型应用创造了可能。

ModernBERT 的技术创新

自 RoBERTa 之后,编码器领域一直缺乏能够在不牺牲任何性能指标的情况下实现全面提升的模型(在技术上称为"帕累托改进"):DeBERTaV3 虽然在 GLUE 基准测试和分类任务上取得了进展,但在效率和检索能力上有所退步。其他模型如 AlBERT 或较新的 GTE-en-MLM,虽然在某些方面超越了原始的 BERT 和 RoBERTa,但都存在其他方面的性能损失。

然而自这两个开创性模型发布以来,语言模型构建技术已取得了显著进展。任何使用过大语言模型的研究者都能深刻体会到这一点:虽然帕累托改进在编码器领域相对罕见,但在解码器领域却是常态,模型性能在各个维度都在持续提升。事实证明模型改进不仅依赖于理论突破,更需要扎实的工程实践。

因此,ModernBERT 项目(这个命名我们希望是恰如其分的)的目标很明确:将这些现代工程技术引入编码器模型领域。我们主要从三个方面着手:

transformer 架构的现代化革新

计算效率的系统性优化

训练数据的规模化和多样化

Transformer 架构的演进

Transformer 架构已成为当代模型的主导范式,但是值得注意的是,所谓的 Transformer 并非单一架构,而是一系列基于相同核心理念的架构变体。这些变体的共同特点是深度认同"注意力机制是核心所需"的基本原则,并在此基础上发展出各种针对注意力机制的优化方案。

ModernBERT 在架构设计上深受 Transformer++(该术语最初由 Mamba 团队提出)的启发,这一架构首次在 Llama2 系列模型中得到实践。具体而言,架构用现代化的等效组件替换了传统的 BERT 式构建模块:

采用"旋转位置编码"(RoPE)取代传统位置编码:这一改进显著提升了模型对词序关系的理解能力,同时为序列长度的扩展提供了技术基础。

将传统的 MLP 层升级为 GeGLU 层,对原始 BERT 的 GeLU 激活函数进行了优化。

通过消除冗余偏置项精简架构,实现了参数预算的更高效利用。

在嵌入层后增加规范化层,提升了训练过程的稳定性。

计算效率的系统性优化

正如前文所述,编码器模型的定位不同于高端模型,ModernBERT 也不例外。但这并不意味着性能就不重要。就像在高速公路上行驶时,我们不需要更换赛车,而是期望日常车辆能够稳定地达到巡航速度。

在前面讨论的所有应用场景中,性能都是关键因素。编码器模型通常需要处理海量数据,即使是微小的性能提升在大规模应用中也能带来显著收益。在 RAG 等对延迟敏感的场景中,这一点尤其重要。考虑到许多场景下编码器模型需要在 CPU 上运行,计算效率的优化就显得更加重要。

ModernBERT 的效率优化策略主要包含三个核心组件:交替注意力机制用于提升处理效率,去填充和序列打包技术用于减少计算资源浪费,以及硬件感知的模型设计用于优化硬件利用率。

全局与局部注意力机制的创新

ModernBERT 的一项关键技术创新是引入了交替注意力机制,这与传统的全局注意力方案有着本质的区别。从技术角度来看,这种机制的特点是在模型的每三层中只有一层执行完整的全局注意力计算(全局注意力),而其他层采用滑动窗口策略,每个标记仅关注其最近的 128 个标记(局部注意力)。考虑到注意力机制的计算复杂度会随标记数量的增加而急剧上升,这种设计使得 ModernBERT 能够比现有模型更高效地处理长序列输入。

其实现架构如图所示:

从认知科学的角度来理解这种设计的合理性:想象阅读一本书的过程。在理解每个句子时,我们是否需要时刻关注整个故事情节(完全全局注意力)?还是说我们主要关注当前章节的内容(局部注意力),仅在必要时回顾故事主线的发展(周期性全局注意力)?显然后一种方式更符合人类的认知模式,也更加计算高效。

去填充和序列打包的技术优化

另一个提升 ModernBERT 计算效率的核心技术是去填充和序列打包机制。

在传统的编码器模型中,为了实现批处理的并行计算,所有输入序列都需要保持相同的长度。这通常通过填充技术实现:将所有序列补齐到最长序列的长度,补充的部分使用无意义的填充标记。这种方法虽然简单直接,但存在明显的计算资源浪费,因为模型需要处理大量不携带任何语义信息的填充标记。

这一问题的优化过程如图所示:

图中对比了填充与序列打包两种策略。序列打包(也称'去填充')通过避免处理冗余的填充标记,显著提升了计算效率,同时保证了每个批次中有效标记数量的一致性。通过精心设计的掩码机制,系统仍然能够保持对各个样本的独立处理。ModernBERT 采用的去填充技术提供了一个优雅的解决方案:完全移除填充标记,将实际内容重组为批量大小为一的小批次,从而避免了冗余计算。在使用 Flash Attention 的情况下,去填充实现较传统方法有显著提升。传统方法需要在序列通过模型的过程中反复进行去填充和重新填充操作,而ModernBERT的实现通过充分利用 Flash Attention 在 RoPE 支持方面的最新进展,开发了一种新的去填充算法。这使得 ModernBERT 只需执行一次去填充操作,并可选择性地在处理后重建序列,相比传统方法提升了 10-20% 的性能。

为进一步提升预训练效率,将去填充技术与序列打包机制相结合。序列打包是对去填充的自然延伸:我们已经将输入组织为连续序列,考虑到 GPU 的并行计算优势,应当充分利用每次模型前向传播的计算资源。所以ModernBERT实现了一个贪婪算法,将独立序列组合成接近模型最大输入长度的统一序列。

硬件感知的模型设计

ModernBERT 效率优化的第三个关键维度是硬件感知的设计理念。

设计试图平衡两个来自先前研究的重要发现:

深度与宽度的权衡:研究表明,在相同参数规模下,具有较窄层的深层模型通常比具有较少但较宽层的浅层模型表现更好。但这种设计存在一个技术权衡:模型越深,其并行化的难度就越大,从而影响处理速度。

硬件适配性:模型维度需要与目标 GPU 架构保持良好的对齐,不同的 GPU 平台会带来不同的优化约束。虽然没有一种通用的优化方案能够使模型在所有 GPU 平台上都达到最佳性能,但可以参考优秀的设计指南,如《与硬件共同设计模型架构的案例》,其中详细阐述了针对特定 GPU 优化模型架构的方法。基于这些见解,我们开发了一种启发式方法,将单一 GPU 的优化策略扩展到多个 GPU 平台,同时满足一系列预设约束。具体而言,我们的优化约束包括:

确定目标 GPU 平台:主流推理硬件(RTX 3090/4090、A10、T4、L4)

设定模型规模范围:ModernBERT-Base 为 1.3-1.5 亿参数,ModernBERT-Large 为 3.5-4.2 亿参数

保持嵌入维度与原始 BERT 一致:基础版 768,大型版 1024,以确保最大程度的向后兼容性

制定适用于所有目标 GPU 的统一性能标准

在此基础上,还通过受约束的网格搜索方法,系统地探索了不同的模型配置,包括层数和层宽的各种组合。在识别出最具潜力的架构配置后,通过实际 GPU 性能测试验证了启发式方法的有效性,最终确定了最优的模型设计方案。

训练方法的创新

编码器模型发展滞后的另一个重要因素在于训练数据。这个问题往往被简单理解为数据规模的限制,但实际情况更为复杂:早期的编码器模型如 DeBERTaV3 在训练时长方面并不逊色,累计处理的标记量甚至可能超过万亿级别。

真正的瓶颈在于训练数据的多样性。传统模型通常依赖有限的语料库来源,主要是维基百科和维基图书等。这些数据源虽然质量较高,但局限于单一的文本模态,缺乏其他类型的语言数据。

相比之下,ModernBERT 采用了更加多元化的训练数据策略,整合了来自网络文档、程序代码和学术论文等多种英语文本源。训练规模达到2 万亿标记,其中绝大部分是独特的内容,而不是像传统编码器那样对相同内容进行 20-40 次重复训练。

这种创新的训练策略产生了立竿见影的效果:在所有开源编码器中,ModernBERT 在编程相关任务上展现出独特的优势。这为改进编程辅助工具和开发新的下游应用提供了广阔的可能性。

训练过程的技术细节

在保留原始 BERT 训练方法核心的同时,根据后续研究成果进行了若干优化:移除了收益不明显的下一句预测目标,同时将掩码比率从 15% 提升至 30%。

模型采用三阶段训练策略。首个阶段在序列长度为 1024 的条件下处理 1.7 万亿标记;第二阶段进入长上下文适应训练,在序列长度扩展到 8192 的情况下处理 2500 亿标记,通过调整批次大小来维持每批次的总标记数相对稳定;最后阶段基于 ProLong 提出的长上下文扩展最优混合原则,对 500 亿个特选标记进行退火训练。

这种三阶段训练方法确保了模型在各种应用场景中的稳定表现:它不仅在长文本处理任务上具有竞争力,同时保持了对短文本的高效处理能力...

更重要的是,在前两个训练阶段,采用了预热后恒定学习率的策略,仅在最后的 500 亿标记训练中应用梯形学习率(预热-稳定-衰减)进行衰减。受 Pythia 项目的启发,作者计划公开发布稳定阶段的所有中间检查点。这一决定主要是为了促进未来的研究和应用开发:研究者可以从任何预衰减检查点重启训练,并根据特定领域的需求进行定制化的退火训练。

效率优化技巧的深入解析

对于深入研究本文的读者来说,这一点应该不会感到意外:在训练过程中也采用了一些技术技巧来提升效率。具体而言,实现了两个关键优化。

第一个是较为常见的优化策略:考虑到训练初期主要是在更新随机初始化的权重,实现了批次大小预热机制 —— 以较小的批次规模开始训练,使相同数量的标记能够更频繁地参与权重更新,随后逐步增加到目标批次大小。这种方法显著加速了模型在语言基础理解阶段的训练过程。

第二个优化策略则相对创新:受微软 Phi 系列模型的启发,为大型模型设计了基于平铺的权重初始化方案。这个想法源于一个简单的问题:既然已经有了经过充分训练的 ModernBERT-base 权重,为什么还要用随机数来初始化 ModernBERT-large 的权重呢?

实践证明,将 ModernBERT-base 的权重通过平铺方式扩展到 ModernBERT-large 确实比随机初始化表现更好。这种方法与批次大小预热机制配合使用,进一步加速了初始训练过程。

总结

本文详细介绍了 ModernBERT 模型系列,这是一个突破性的小型高效编码器模型家族,为 BERT 带来了期待已久的全面升级。

ModernBERT 证明了通过现代化技术手段可以显著提升编码器模型的性能。在特定任务上,它展现出极具竞争力的性能,同时保持了优秀的规模效率比。

论文

https://avoid.overfit.cn/post/3b7337af12a14732b3d24852ebe0a682

0 阅读:1

deephub

简介:提供专业的人工智能知识,包括CV NLP 数据挖掘等