大型语言模型:RoBERTa — 一种稳健优化的 BERT 方法

2023-12-20 08:28

本文主要是介绍大型语言模型:RoBERTa — 一种稳健优化的 BERT 方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

@slavahead

一、介绍

        BERT模型的出现BERT模型带来了NLP的重大进展。 BERT 的架构源自 Transformer,它在各种下游任务上取得了最先进的结果:语言建模、下一句预测、问答、NER标记等。

        尽管 BERT 性能出色,研究人员仍在继续尝试其配置,希望获得更好的指标。幸运的是,他们成功了,并提出了一种名为 RoBERTa 的新模型 - 鲁棒优化的 BERT 方法。

        在本文中,我们将参考官方 RoBERTa 论文,其中包含有关模型的深入信息。简而言之,RoBERTa 对原始 BERT 模型进行了多项独立改进——包括架构在内的所有其他原则保持不变。本文将介绍和解释所有的进步。

二、动态遮蔽

        从 BERT 的架构中我们记得,在预训练期间,BERT 通过尝试预测一定百分比的屏蔽标记来执行语言建模。原始实现的问题在于,为不同批次的给定文本序列选择的掩码标记有时是相同的。

        更准确地说,训练数据集被复制 10 次,因此每个序列仅以 10 种不同的方式进行屏蔽。请记住,BERT 运行 40 个训练周期,具有相同掩码的每个序列都会传递给 BERT 四次。研究人员发现,使用动态掩码效果稍好,这意味着每次将序列传递给 BERT 时都会唯一生成掩码。总体而言,这会减少训练期间的重复数据,从而使模型有机会处理更多不同的数据和屏蔽模式。

静态掩蔽与动态掩蔽

三、下一句预测

        该论文的作者进行了研究,寻找对下一个句子预测任务进行建模的最佳方法。结果,他们发现了一些有价值的见解:

  • 删除下一个句子的预测损失会带来稍微更好的性能。
  • 与传递由多个句子组成的序列相比,将单个自然句子传递到 BERT 输入会损害性能。解释这种现象的最可能的假设之一是模型很难仅依靠单个句子来学习远程依赖关系。
  • 通过从单个文档而不是多个文档中采样连续的句子来构造输入序列更有利 。 通常,序列始终由单个文档的连续完整句子构建,因此总长度最多为 512 个标记。当我们到达文档末尾时,问题就出现了。在这方面,研究人员比较了是否值得停止对此类序列进行句子采样,或者额外采样下一个文档的前几个句子(并在文档之间添加相应的分隔符标记)。结果表明第一种方案效果较好。

        最终,对于最终的 RoBERTa 实现,作者选择保留前两个方面并省略第三个方面。尽管观察到第三个见解背后的改进,但研究人员并没有继续下去,因为否则,它会使之前的实现之间的比较更加成问题。发生这种情况的原因是,到达文档边界并停在那里意味着输入序列将包含少于 512 个标记。为了在所有批次中具有相似数量的令牌,在这种情况下需要增加批次大小。这导致批量大小可变和研究人员希望避免的更复杂的比较。

四、增加批量大小

        NLP 的最新进展表明,增加批量大小并适当降低学习率和训练步骤数通常会提高模型的性能。

        提醒一下,BERT 基础模型是在 256 个序列的批量大小上训练一百万步的。作者尝试在 2K 和 8K 的批量大小上训练 BERT,并选择后者来训练 RoBERTa。相应的训练步数和学习率值分别变为31K和1e-3。

同样重要的是要记住,通过一种称为“梯度累积”的特殊技术,批量大小的增加会导致更容易的并行化。< /span>

五、字节文本编码

        在 NLP 中,存在三种主要类型的文本标记化:

  • 字符级标记化
  • 子字级标记化
  • 词级标记化

        原始 BERT 使用词汇大小为 30K 的子字级标记化,这是在输入预处理和使用多种启发式之后学习的。 RoBERTa 使用字节而不是 unicode 字符作为子词的基础,并将词汇量扩展至 50K,无需任何预处理或输入标记化。这导致 BERT 基础模型和 BERT 大模型分别增加 15M 和 20M 的额外参数。 RoBERTa 中引入的编码版本表现出比以前稍差的结果。

        尽管如此,与 BERT 相比,RoBERTa 词汇量大小的增长允许在不使用未知标记的情况下对几乎任何单词或子词进行编码。这给 RoBERTa 带来了相当大的优势,因为该模型现在可以更全面地理解包含稀有单词的复杂文本。

六、预训练

        除此之外,RoBERTa 应用了上述所有四个方面,并具有与 BERT Large 相同的架构参数。 RoBERTa的参数总数为355M。

        RoBERTa 在五个海量数据集的组合上进行了预训练,产生总共 160 GB 的文本数据。相比之下,BERT Large 仅在 13 GB 数据上进行预训练。最后,作者将训练步骤数从 100K 增加到 500K。

        因此,在最流行的基准测试中,RoBERTa 在 XLNet Large 上的表现优于 BERT Large。

七、RoBERTa 版本

        与 BERT 类似,研究人员开发了两个版本的 RoBERTa。基本版本和大版本中的大多数超参数是相同的。下图展示了主要区别:

        RoBERTa 中的微调过程与 BERT 类似。

八、结论

        在本文中,我们研究了 BERT 的改进版本,它通过引入以下几个方面来修改原始训练过程:

  • 动态掩蔽
  • 省略下一句预测目标
  • 较长句子的训练
  • 增加词汇量
  • 使用更大批量的数据进行更长时间的训练

        由此产生的 RoBERTa 模型在顶级基准测试中似乎优于其祖先。尽管配置更复杂,RoBERTa 仅添加了 15M 额外参数,保持了与 BERT 相当的推理速度。

这篇关于大型语言模型:RoBERTa — 一种稳健优化的 BERT 方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/515374

相关文章

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中