当前位置: 首页 > 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.lqws.cn/news/601057.html

相关文章:

  • 【IP 潮玩行业深度研究与学习】
  • SpringCloud系列(45)--SpringCloud Bus简介
  • 基于Spring Cloud微服务架构的API网关方案对比分析
  • 快应用(QuickApp)技术解析与UniApp跨端开发生态探秘优雅草卓伊凡
  • 振荡电路Multisim电路仿真实验汇总——硬件工程师笔记
  • 在CPU设计中,为什么要引入指令集架构?有什么好处?-- 数字IC笔试
  • 强化学习:Policy Gradients 学习笔记
  • 1.MySQL之如何定位慢查询
  • AI赋能智慧餐饮:Spring Boot+大模型实战指南
  • js严格模式和非严格模式
  • 从docker-compose快速入门Docker
  • JVM 中的垃圾回收算法及垃圾回收器详解
  • JavaWeb笔记02
  • 渗透测试(Penetration Testing)入门:如何发现服务器漏洞
  • pcap流量包分析工具设计
  • 数据结构:递归:斐波那契数列(Fibonacci Sequence)
  • 05【C++ 入门基础】内联、auto、指针空值
  • 09异常处理
  • 设计模式(七)
  • 视频内存太大怎么压缩变小一点?视频压缩的常用方法
  • Bilibili多语言字幕翻译扩展:基于上下文的实时翻译方案设计
  • Cypher 是 Neo4j 专用的查询语言
  • nanoGPT复现——prepare拆解(自己构建词表 VS tiktoken)
  • Lombok 与 Jackson 注解详解(基础 + 深入)
  • day52-硬件学习之RTC及ADC
  • 从零实现在线OJ平台
  • Y-Combinator推导的Golang描述
  • Go语言的Map
  • 编写shell脚本扫描工具,扫描服务器开放了哪些端口(再尝试用python编写一个)
  • java web2(黑马)