大型语言模型: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 相当的推理速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/288214.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】Sql优化之索引的使用方式(145)

索引分类 1.单值索引 单的意思就是单列的值&#xff0c;比如说有一张数据库表&#xff0c;表内有三个字段&#xff0c;分别是 id name numberNo&#xff0c;我给name 这个字段加一个索引&#xff0c;这就是单值索引&#xff0c;因为只有name 这一列是索引&#xff1b; 一个表…

3d游戏公司选择云电脑进行云办公有哪些优势

随着游戏行业的不断发展&#xff0c;很多的游戏制作公司也遇到了很多的难题&#xff0c;比如硬件更换成本高、团队协同难以及效率低下等问题&#xff0c;那么如何解决游戏行业面临的这些行业痛点&#xff0c;以及游戏制作公司选择云电脑进行云办公有哪些优势&#xff1f;一起来…

Axure中如何使用交互样式交互事件交互动作情形

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 目录 一、Axure中交互样式 1、什么是交互样式&#xff1f; 2、交互样式的作用&#xff1f; 3、Axure中如何…

【HarmonyOS开发】ArkUI实现下拉刷新/上拉加载

列表下拉刷新、上拉加载更多&#xff0c;不管在web时代还是鸿蒙应用都是一个非常常用的功能&#xff0c;基于ArkUI中TS扩展的声明式开发范式实现一个下拉刷新&#xff0c;上拉加载。 上拉加载、下拉刷新 如果数据量过大&#xff0c;可以使用LazyForEach代替ForEach 高阶组件-…

Leetcode—128.最长连续序列【中等】

2023每日刷题&#xff08;六十四&#xff09; Leetcode—128.最长连续序列 实现代码 class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int> s;for(auto num: nums) {s.insert(num);}int longestNum 0;for(auto num: s) …

Linux Mint 21.3 代号为“Virginia”开启下载

Linux Mint 团队今天放出了 Linux Mint 21.3 Beta ISO 镜像&#xff0c;正式版计划在今年圣诞节发布。 支持 在实验性支持 Wayland 之外&#xff0c;Cinnamon 6.0 版 Linux Mint 21.3 Beta 镜像还带来了其它改进&#xff0c;Nemo 文件夹管理器右键菜单支持下载相关操作。 Cin…

C++相关闲碎记录(17)

1、IO操作 &#xff08;1&#xff09;class及其层次体系 &#xff08;2&#xff09;全局性stream对象 &#xff08;3&#xff09;用来处理stream状态的成员函数 前四个成员函数可以设置stream状态并返回一个bool值&#xff0c;注意fail()返回是failbit或者badbit两者中是否任一…

STM32Fxx HAL库开发UART中断回调函数理解-中断回调函数流程-自己理解的

STM32HAL库中断服务函数调用过程有2种 第1种&#xff1a;可以直接在中断源对应的中断服务函数中编写我们想要的功能 具体是在void USART1_IRQHandler(void&#xff09;函数写要执行的任务 正点原子是重新宏定义函数名&#xff0c;写法如下&#xff1a; 暂时忽略&#xff0c;…

如何通过控制台排查定位EasyTsdb

过去我们发现EasyTsdb占用磁盘较大&#xff0c;但我们却不能直接看到哪个模型占用空间多&#xff1f;更不可能知道是哪个指标数据量大&#xff1f; 当EasyTsdb负载高时&#xff0c;我们无法定位当时哪个模型或者哪个请求占用了资源&#xff0c;也不知道是从什么时候开始出现高…

ansible的脚本------playbook剧本

playbook组成部分&#xff1a; 1.task 任务&#xff1a;包含要在目标主机上执行的操作&#xff0c;使用模块定义这些操作。每个都是一个模块的调用。2.variables 变量&#xff1a;存储和传递数据。变量可以自定义&#xff0c;可以在playbook当中定义为全局变量&#xff0c;也可…

AI for Science 塑造多学科研究新范式!欢迎参加 WAVE SUMMIT+2023深度学习开发者大会平行论坛

在人工智能飞速发展中&#xff0c;大模型已经崭露头角&#xff0c;引领了新一轮的技术潮流。大模型&#xff0c;凭借其对复杂模式和关系的深度理解能力&#xff0c;展现出在科学研究中的巨大应用潜能。通过大模型&#xff0c;科学家们能更深入地揭示科学现象的内在规律&#xf…

Docker 核心技术

Docker 定义&#xff1a;于 Linux 内核的 Cgroup&#xff0c;Namespace&#xff0c;以及 Union FS 等技术&#xff0c;对进程进行封装隔离&#xff0c;属于操作系统层面的虚拟化技术&#xff0c;由于隔离的进程独立于宿主和其它的隔离的进程&#xff0c;因此也称其为容器Docke…