6年,Bert终于要退休了!

Jeremy Howard 和 Answer.ai/LightOn 团队今天发布了 ModernBert,更新了 2018 年的经典 BERT。

TL;DR

picture.image

  • BERT 仅有500 个token的窗口大小;ModernBERT 有 8k 上下文
  • BERT 在更古老/更少的数据上训练;ModernBERT 在 2T 数据上训练,包括“大量代码”
  • 如今 LLMs 的参数量超过 70B,伴随着相应的成本和延迟问题;ModernBERT 的参数量为 139M(base)/395M(large)
  • 性能:在所有检索/NLU/代码类别上击败了像 DeBERTaV3 这样的 Kaggle 比赛标配模型

picture.image

  • 实际应用场景中,模型需要处理的文本输入长度是多种多样的,并非固定不变。对比表格中“Variable”这一列的数据,可以发现 ModernBERT 模型在处理可变长度输入时,速度明显优于其他模型。

picture.image

  • 双向注意力,可以很好的做填空任务

BERT 发布于 2018 年,但是它至今仍被广泛使用。事实上,它目前是 HuggingFace Hub 上下载量第二高的模型,每月下载量超过 6800 万次,仅次于另一个为检索任务微调的Encoder模型。

自 RoBERTa 以来,没有任何编码器在没有牺牲的情况下提供了整体改进。如 DeBERTaV3 具有更好的 GLUE 和分类性能,但牺牲了效率和检索能力。其他模型,如 AlBERT,或更新的模型,如 GTE-en-MLM,都在某些方面比原始 BERT 和 RoBERTa 有所改进,但在其他方面却有所退步。

模型架构

ModernBERT 从 Transformer++中获得了巨大的灵感,Transformer++ 最早被 Llama2 系列模型使用。

  • 将旧的位置编码替换为“旋转位置编码”(RoPE):使得模型更好地理解单词之间的相对位置,并允许我们扩展到更长的序列长度。
  • 将旧的 MLP 层替换为 GeGLU 层,改进了原始 BERT 的 GeLU 激活函数。
  • 通过删除不必要的偏置项来简化架构,使能够更有效地利用参数预算。
  • 在嵌入之后添加一个额外的归一化层,这有助于稳定训练。

效率改进依赖于三个关键组件:Alternating Attention 提高处理效率,Unpadding and Sequence Packing 减少计算浪费,以及 Hardware-Aware Model Design 最大化硬件利用率。

  • Alternating Attention (交替注意力)就是说不是每层都是全局的注意力,每3层一次全局的picture.image- Unpadding and Sequence Packing。在这以前,为了提高服务并发,通常会一个batch处理多个请求,长度不一,就需要padding,就会导致很多计算在无用的padding上。这里Unpadding,就是指不padding,这个操作可以跟 FlashAttention 2 很好结合。至于sequence packing是指,在unpadding的基础上,因为已经将输入连接成单个序列,并且 GPU 擅长并行计算,所以可以想办法在一次模型前向传播中处理更多的数据。使用贪婪算法将多个unpadding的序列打包成一个更长的序列,这个长序列的长度尽可能接近模型的最大输入长度。

picture.image- Hardware-Aware Model Design,深而窄 vs 宽而浅, 具有较窄层的较深模型通常比较浅且层数较少的模型表现更好。但是这是两面的,模型越深,可并行性就越差,因此,在相同的参数数量下,它的运行速度就越慢。模型维度需要与 GPU 硬件很好地对齐以获得最佳性能,而不同的目标 GPU 会导致不同的约束。然后根据常用推理显卡,模型大小,网格搜了一个出来参数配置。

训练

  • 移除nsp任务
  • mask比例从15% -> 30%
  • 三阶段训练,
  • 在 1.7 万亿个token上以 1024 的序列长度进行训练
  • 长上下文适应阶段,在 2500 亿个token上以 8192 的序列长度进行训练,同时通过降低批次大小来保持每个批次看到的总token数大致不变
  • 对以不同方式采样的 500 亿个token执行退火,遵循 [How to Train Long-Context Language Models (Effectively)] 强调的长上下文扩展比例。

最后,2个技巧

  1. 在训练的初始阶段,模型的权重是随机初始化的,需要进行较大的调整。使用较小的批次大小可以使模型权重更新更频繁,从而更快地学习到语言的基本知识。随着训练的进行,模型权重逐渐稳定,可以逐渐增大批次大小以提高训练效率。

  2. 主要针对 ModernBERT-large。与其使用随机数初始化 ModernBERT-large 的权重,不如直接利用已经训练好的 ModernBERT-base 的权重。具体做法是将 ModernBERT-base 的权重复制多次,"平铺" 到 ModernBERT-large 的权重矩阵中。

0
0
0
0
评论
未登录
暂无评论