当前位置: 首页 > news >正文

【深度学习1】ModernBert学习

ModernBERT 是一系列最先进的encoder-only模型,全面超越了旧一代BERT模型,在各个方面都有所改进,支持8192的token长度(原始bert512),下游性能更好,处理速度也更快。

编码器结构

1.1 模型结构设计的优化

(a)架构的优化
Modern Transformer:

	(1)偏差项的禁用(bias terms),禁用所有线性层偏差项,除了解码器的最后一层线性层。禁用所有Layer Norms的偏差项。(将更多的计算资源节约至线性层)(2)位置编码的选择:采用旋转位置编码(Rotary positional embeddings,RoPE),而不是绝对位置编码。RoPE在长-短语境语言模型中有更好的表现。(3)归一化(Noemalization,有助于稳定训练)。采用预归一化模块(pre-normalization block)和标准层归一化(standard layer normalizaiton)。在embedding层后添加一个layerNorm,并移除第一个注意力层的第一个layerNorm。(4)激活函数。使用GeGLU激活函数,基于门控线性单元(Gated-LInear Units,GLU)对原始bert激活函数GeLU的改进。

(b)效率的优化

	(1)交替注意力机制。采用全局注意力和局部注意力交替堆叠,每个第三层采用全局注意力,其余层使用128个token长的滑动窗口的局部注意力。全局注意力每个token慧珠其它所有token,局部注意力token只关注当前滑动窗口中的token。(2)不再填充(unpadding)。在训练推理过程中均不对token进行填充补齐。将过短的token补齐存在浪费计算资源。modernbert移除padding,将小批量的所有sequence合并为一个sequence,将其作为一个batch处理。采用flash attention的可变长度注意力机制(jagged attention mask)和旋转位置编码实现。(3)flash attention。全局注意力使用flash attention v3,局部注意力使用flash attention v2.

训练出ModernBERT-base和ModernBERT-Large两个模型

layers参数量hidden sizeGLUexpansion
ModernBERT-base22层149M7682304
ModernBERT-Large28层395M23045248

1.2 训练

(a)数据处理

(1)数据。2万亿以英文为主的网络文档、代码和科学文献。
(2)分词器。采用现代的BPE分词器(OLMo),并保留原始bert的特殊标记(【CLS】、【SEP】等),词汇表大小50368,是64的倍数,并包含83个未使用的toekn以供下游任务应用。
(3)sequence packing的应用。解决未填充的数据中出现高方差。

(b)训练设置

(1)移除【下一句预测】预训练任务。
(2)采用StableAdamW优化器。对每个参数都进行学习率的调整。
(3)学习率的调整。采用Warmup-Stable-Decay。梯形调度经过短暂的LR热启动,然后保持一段时间的学习旅恒定,在进行短暂衰减。衰减采用1-sqrt衰减。
(4)batchsize。采用不固定的batchsize设置,确保不同batchsize有相同数量的更新步骤,可提高训练效率。从小批量逐渐增加至全局。
ModernBERT-base:将batchsize从768提升至4608(基于500亿个token)
ModernBERT-large:将batchsize从448提升至4928(基于100亿个token)
(5)权重的初始化和tiling(平铺)。采用Megetron初始化方法。
(6)文本长度的拓展。对1.7万亿tokens进行训练,序列长度为1024,RoPE参数为10000后,将全局注意力层的RoPE参数提升至160000,将Modernbert的上下文长度拓展到8192个token,并继续训练3000亿个tokens。

(c)下游任务的评估
与多个大语言模型在多个任务上进行性能对比,包括自然语言理解(NLU),文本检索(Single vector retrieval、Multi vector retrieval)、长上下文检索、Code Retrieval
github链接:https://github.com/AnswerDotAI/ModernBERT

http://www.dtcms.com/a/264421.html

相关文章:

  • RNN和LSTM
  • [面试] 手写题-防抖,节流
  • Python应用指南:利用高德地图API获取公交+地铁可达圈(三)
  • 菜谱大全——字符串处理艺术:从文本解析到高效搜索 [特殊字符][特殊字符]
  • 锂离子电池均衡拓扑综述
  • 阶段二JavaSE进阶阶段之多态、关键字、抽象类 2.3
  • 8.Docker镜像讲解
  • 大模型-分布式论文一瞥
  • twikitFKS: 基于 twikit 2.3.1 的改进版本
  • 【Python】numpy数组常用数据处理(测试代码+api例程)
  • BFD故障检测技术之概述
  • TypeScript 安装使用教程
  • QML通过XMLHttpRequest实现HTTP通信
  • 如何使用bedtools、convert2bed、gff2bed提取基因序列
  • C++ 快速回顾(六)
  • 设计模式精讲 Day 22:模板方法模式(Template Method Pattern)
  • Coze(扣子):基础学习
  • Python应用指南:利用高德地图API获取公交+地铁可达圈(二)
  • OpenCV图像梯度处理详解:原理、API与实战代码解析
  • 【Cyberstrikelab】lab3
  • AngularJS 安装使用教程
  • 转矩常数KT
  • 什么是数据孤岛?如何解决数据孤岛问题?
  • Wisdom SSH 与宝塔面板:深度对比剖析
  • 机器学习在智能教育中的应用:个性化学习路径与学习效果评估
  • socket编程
  • JavaEE线程概念
  • Git 运行.sh文件
  • js filter()
  • Linux 终止进程