农妇山泉一亩田 发表于 2024-10-2 19:27:35

【大模子学习】BERT架构

BERT是一种基于Transformer架构的预练习语言模子,由Google的研究职员开发。BERT模子在多项天然语言处理(NLP)任务中取得了显著的性能提升,尤其是在问答、文天职类、命名实体辨认等方面。
架构特点
BERT使用多层Transformer的编码器部门作为其主要架构。Transformer是一种基于自注意力机制的模子,能够捕捉输入序列中的长期依靠关系。
与传统的循环神经网络(RNN)或卷积神经网络(CNN)不同,Transformer不依靠于序列中单词的顺序位置,而是通过自注意力机制来理解单词之间的依靠关系。
BERT的双向性意味着它在预测某个单词时,能够同时思量该单词的上下文信息(即左侧和右侧的单词)
预练习任务
遮蔽语言模子(Masked Language Model, MLM):在练习过程中,随机遮蔽输入序列中的一部门单词,然后要求模子预测这些被遮蔽的单词。这有助于模子学习语言中的词汇和语法结构。
下一句预测(Next Sentence Prediction, NSP):模子接收获对的句子作为输入,并预测第二个句子是否是第一个句子的后续句子。这有助于模子学习句子之间的关系和语言的连贯性。
输入表示
BERT的输入表示由三部门组成:单词嵌入、段嵌入和位置嵌入。单词嵌入表示输入序列中每个单词的词汇信息。段嵌入用于区分输入序列中的不同句子(在NSP任务中)。位置嵌入用于表示单词在序列中的位置信息,因为Transformer模子本身并不包含顺序信息。
微调
一旦BERT模子在预练习任务上进行了练习,就可以将其应用于各种鄙俚NLP任务。这通常涉及将BERT模子的输出连接到特定于任务的层(如分类层或序列标注层),并使用目标任务的标记数据进行微调。
模子巨细
BERT有多种不同的模子巨细,如BERT-Base和BERT-Large。BERT-Base包含12个Transformer层,每层有768个隐藏单位和12个自注意力头;而BERT-Large则包含24个Transformer层,每层有1024个隐藏单位和16个自注意力头。
BERT《BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding》
https://i-blog.csdnimg.cn/blog_migrate/8f8e8cbcb3896efc547a04cd8ceed9cc.png
摘要
我们引入了一种新的语言表示模子,名为 BERT,它是Bidirectional Encoder Representations from Transformers的缩写。与近来的语言表示模子不同,BERT旨在通过在全部层中联合条件化左右文本来预练习深度双向表示。因此,预练习的BERT模子可以使用一个附加输出层进行微调,从而为各种任务创建最先进的模子,例如问答和语言推理,而无需显着修改针对特定任务的架构。BERT的概念非常简单且履历上功能强盛。它在11项天然语言处理任务上实现了新的最佳结果。
介绍
预练习语言模子已被证明对于提高许多天然语言处理任务的性能有效。这些包罗句法级任务,如天然语言推理和语义相似度,旨在通过整体分析句子之间的关系来预测它们,以及标记级别任务,例如命名实体辨认和问答,其中模子需要在标记级别产生精致输出。
有两种现有的计谋可以将预练习语言表示应用于鄙俚任务:基于特征的方法和微调。基于特征的方法,如ELMo,使用包罗预练习表示作为附加特征的任务特定架构。微调方法,例如生成式预练习,引入了最小的针对特定任务的参数,并通过简单地对全部预练习参数进行微调来在鄙俚任务上进行练习。这两种方法在预练习期间共享类似的目标函数,在此期间它们使用单向语言模子学习一般语言表示。
我们论证了当前的技术限定了预练习表示的本领,特别是针对微调方法。主要的局限性在于尺度语言模子是单向的,这限定了在预练习期间可以使用的架构选择。例如,在OpenAI GPT中,作者使用从左到右的架构,其中每个标记只能关注变换器自注意层中的前一个标记。这种限定对于句子级别的任务来说是次优的,而且当应用基于微调的方法来处理标记级别任务(如问答),它大概非常有害,因为在这种情况下,至关紧张的是要同时思量来自两个方向的上下文。
我们展示了双向预练习语言表示的紧张性。与Radford等人使用单向语言模子进行预练习不同,BERT 使用遮蔽语言模子来实现预先练习的深度双向表征。这与Peters等人使用的左右独立练习的语言模子的浅层串联也形成了对比。
我们证明了预练习表示淘汰了对许多精心设计的任务特定架构的需求。BERT 是第一个在大量句子级别和标记级别的任务上实现最先进的性能的基于微调的表示模子,优于许多任务特定架构。
相关工作(无监视特征方法)
预练习的词嵌入是现代NLP体系的紧张组成部门,提供了重新开始学习嵌入的显着改进。为了预先练习词嵌入向量,使用了自左至右的语言建模目标,以及区分左右上下文正确与错误单词的目标。
这些方法已经被推广到更粗粒度的表示,如句子嵌入或段落嵌入。为了练习句子表示,先前的工作使用了目标来对候选下一个句子进行排名,给定前一个句子的表示从左到右生成下一个句子的单词,或者来自去噪主动编码器的目标。
ELMo 和其前身沿着不同的维度对传统的词嵌入研究进行了推广。它们从一个自左至右的模子和一个自右至左的语言模子中提取了语境感知的功能。每个标记的上下文表示是左右两个方向上的表示的串联。当与现有的针对特定任务的架构相联合时,ELMo 在几个主要的 NLP 测试基准上实现了最先进的性能,包罗问答、情感分析和命名实体辨认。Melamud 等人提出通过使用 LSTM 预测来自左、右两侧上下文的单个单词来学习语境感知的表示。与 ELMo 类似,他们的模子也是基于特征的,而不是深度双向的。Fedus 等人表明,可以使用遮蔽语言建模任务来提高文本生成模子的鲁棒性。
相关工作(非监视微调)
近来,基于无标签文本的预练习句法或文档编码器已经过微调,用于监视鄙俚任务。这些方法的优点是不需要重新开始学习许多参数。至少部门由于这个优点,OpenAI GPT在GLUE基准测试集上的多个句子级任务中取得了先前的最佳结果。
相关工作(从监视数据中迁移学习)
也有工作表明,从大型数据集的监视任务中有效迁移,例如天然语言推理和机器翻译。盘算机视觉研究也证明了从大型预练习模子进行迁移学习的紧张性,在这种情况下,对 ImageNet 进行预练习的模子的有效方法是对模子进行微调。
BERT
本节介绍BERT及其详细的实现。我们的框架包罗两个步骤:预练习和微调。在预练习阶段,模子是在未标记的数据上通过不同的预练习任务进行练习的。对于微调,BERT模子首先使用预练习参数进行初始化,然后全部参数都使用鄙俚任务的标记数据进行微调。每个鄙俚任务都有单独的微调模子,尽管它们都是使用类似的预练习参数进行初始化的。下图中的问答示例将作为本节的运行示例。
https://i-blog.csdnimg.cn/blog_migrate/52e72a6d57d7463a2ae78c98aa88b882.png
模子架构 BERT 模子的架构是一种多层双向 Transformer 编码器,基于 Vaswani 等人描述的原始实现,并在 tensor2tensor 库中发布。 由于 Transformer 的使用已经很普遍了,而且我们的实现几乎与原始实现类似,因此我们将省略对模子架构的详尽背景描述。
在本工作中,我们将层数(即Transformer块数)表示为L,隐藏巨细表示为H,自注意力头的数量表示为A。我们主要报告两种模子巨细的结果:BERT BASE(L = 12, H = 768, A = 12, 总参数数量= 110M)和BERT LARGE(L = 24, H = 1024, A = 16, 总参数数量= 340M)。
为了进行比较,选择BERT底子模子具有与OpenAI GPT类似的模子巨细。然而,至关紧张的是,BERT转换器使用双向自注意,而GPT转换器使用受约束的自注意,其中每个标记只能关注其左侧的上下文。
为了使 BERT 能够处理各种鄙俚任务,我们的输入表示可以明确地表示单个句子或一对句子(例如,(问题,答案)),它们在一个标记序列中。在本文中,“句子”可以是任意一连文本的片段,而不但仅是实际的语言句子。“序列”指的是输入到 BERT 的标记序列,它可以是一句话,也可以是两句话连在一起。
每个序列的第一个标记始终是特别分类标记()。 与该标记对应的终极隐藏状态用于对序列进行分类任务的聚合表示。 句子对被压缩成一个单独的序列。 我们以两种方式区分句子。 首先,我们用特别的分隔符()来分离它们。 其次,我们在每个标记上添加了一个学习的嵌入,指示它属于句子A还是句子B。 如下图所示,我们将输入嵌入表示为E,特别标记的终极隐藏向量表示为C∈RH,第i个输入标记的终极隐藏向量表示为Ti∈RH。
https://i-blog.csdnimg.cn/blog_migrate/351074c8055e43f475754c38c56c9254.png
BERT(预练习)
遮蔽语言模子直观地以为,深度双向模子肯定比单向模子或浅层的左右双向模子更强盛。遗憾的是,尺度条件语言模子只能从左到右或从右到左进行练习,因为双向条件会答应每个词间接“看到自己”,因此模子可以轻松预测在多层语境中的目标词。
为了练习一个深度双向表示,我们简单地随机屏蔽输入标记的某些百分比,然后预测这些被屏蔽的标记。我们将此过程称为“遮蔽语言模子”(MLM),尽管它在文献中通常被称为Cloze任务。在这种情况下,与尺度语言模子一样,对遮罩标记的终极隐藏向量馈入词汇表上的输出softmax。在全部我们的实行中,我们在每个序列中随机屏蔽全部WordPiece标记的15%。与去噪自编码器不同,我们只预测被屏蔽的词,而不是重修整个输入。
尽管这使我们能够获得双向预练习模子,但其缺点是,在微调期间, 令牌不会出现,从而导致预练习和微调之间存在不匹配。为了缓解这个问题,我们并不总是用实际的 令牌来更换“掩码”的词。数据生成器随机选择 15% 的标记位置进行预测。假如选择了第 i 个标记,则有(1)80% 的概率用 令牌更换第 i 个标记,(2)10% 的概率用任意标记更换,(3)10% 的概率保持稳定。然后,Ti 将用于通过交叉熵损失预测原始标记。
下一句预测(NSP) 许多鄙俚紧张任务,如问答(QA)和天然语言推理(NLI),都是基于理解两个句子之间的关系,而这种关系无法直接通过语言建模捕获。为了练习一个能够理解句子之间关系的模子,我们预先练习了一个二元的下一句预测任务,它可以简单地从任何单语种语料库中生成。具体来说,在为每个预练习示例选择句子 A 和 B 时,50% 的时间B 是紧随 A 后面的实际下一个句子(标记为 IsNext),50% 的时间它来自语料库中的任意句子(标记为 NotNext)。
预练习数据预练习过程大体上遵照了语言模子预练习的现有文献。对于预练习语料库,我们使用了 BookCorpus (800M words) 和英语维基百科 (2500M words)。在维基百科中,我们只提取文本段落并忽略列表、表格和标题。为了提取长一连序列,必须使用文档级别的语料库,而不是像 Billion Word Benchmark 这样的随机句子级别语料库。
BERT(微调)
微调很简单,因为Transformer中的自注意机制答应BERT通过交换得当的输入和输出来建模许多鄙俚任务——无论它们涉及单个文本还是文本对。对于涉及文本对的应用程序,常见的做法是在应用双向交叉注意力之前独立编码文本对。相反,BERT使用自注意机制将这两个阶段同一起来,因为用自注意编码连接的文本对在本质上包罗两个句子之间的双向交叉注意。
对于每个任务,我们只需将特定于任务的输入和输出直接应用于BERT,并端到端地微调全部参数。在输入方面,预练习中的句子A和句子B类似于(1)改写中的句子对、(2)蕴含中的假设前提对、(3)问答中的问题段落对。(4)文天职类或序列标记中的退化文本-∅对。在输出中,将标记表示馈送给令牌级任务的输出层,例如序列标记或问答,而 表示馈送给分类任务的输出层,例如蕴含或情感分析。
实行(GLUE)
通用语言理解评估基准 (GLUE) 是一系列不同的天然语言理解任务的集合。结果如下表所示。在全部任务中,BERTBASE 和 BERTLARGE 都大幅高出了全部体系,相较于最先进的技术分别实现了4.5%和7.0%的平均正确率提升。请注意,除了注意力遮挡之外,BERTBASE 和 OpenAI GPT 在模子架构方面几乎完全类似。对于最大且最广泛报道的GLUE任务MNLI,BERT 实现了4.6%的绝对正确率提升。在官方GLUE排行榜上,截至撰写本文时,BERTLARGE 的得分为80.5,而OpenAI GPT 的得分为72.8。
https://i-blog.csdnimg.cn/blog_migrate/1fcd91f918d180c2cbb0121fd75e6fbe.png
实行(SQuAD v1.1)
Stanford 问答数据集(SQuAD v1.1)是由 Rajpurkar等人于2016年发布的,由10万个众包问题/答案对组成的集合。给定一个问题和来自斯坦福大学的一段文字,模子的输出应该是正确答案地点段落中一个子串的起始索引和结束索引。
https://i-blog.csdnimg.cn/blog_migrate/1cb7b0f786d22796005d8f4e5c46b510.png
实行(SQuAD v2.0)
SQuAD 2.0任务扩展了SQuAD 1.1问题定义,答应大概在提供的段落中不存在短答案,使问题更加实际。
https://i-blog.csdnimg.cn/blog_migrate/3cca2b01d54a7c9ed6cef305452203d8.png
实行(SWAG)
对抗生成式 (SWAG) 数据集包含 113k 句对补全示例,用于评估基于常识的推理。给定一个句子,任务是从四个选项中选择最有大概的延续。我们使用学习率为 2e-5 和批量巨细为 16 的模子微调了 3 个时期。结果如下表所示。BERTLARGE 比作者的基线 ESIM+ELMo 体系体现更好,提高了 +27.1%,比 OpenAI GPT 提高了 8.3%。
https://i-blog.csdnimg.cn/blog_migrate/7a7eb4b7bcc3de92a5d0e4f338a31227.png
溶解研究(预练习任务的影响)
没有NSP:使用掩码语言建模(MLM)练习的双向模子,但不包罗下一个句子预测(NSP)任务。
仅左上下文模子:使用尺度的从左到右( LTR )语言模子进行练习,而不是多任务学习。在微调过程中也应用了只包含左侧约束,因为假如不这样做,就会出现预练习 / 微调不匹配的问题,从而降低鄙俚性能。此外,该模子是在没有 NSP 任务的情况下预先练习的。这与 OpenAI GPT 直接可比,但使用的是我们的更大规模的数据集、输入表示法和微调方案。
我们首先研究 NSP 任务带来的影响。如下表所示,移除 NSP 对于 QNLI、MNLI 和 SQuAD 1.1 的体现有显著的负面影响。接下来,我们将“无 NSP”与“MLM & LTR”进行比较以评估练习双向表示的影响。在全部任务中,LSTM 模子的体现都比 BERT 均要差,MRPC 和 SQuAD 的下降幅度更大。
https://i-blog.csdnimg.cn/blog_migrate/399e63d7d78f6a2d389ec3fecad8c42e.png
溶解研究(模子巨细的影响)
下表展示了在选定的 GLUE 任务上的结果。在这个表格中,我们报告了来自五个随机重启微调中的开发集正确率平均值。我们可以看到,在全部四个数据集上,较大的模子都会导致更严酷的精度提升,纵然是在 MRPC 数据集上也是云云——该数据集仅有 3,600 个标记过的练习样本,而且与预练习任务大不类似。大概令人惊讶的是,我们在相对于现有文献已经很大的模子上实现了云云显著的改进。
https://i-blog.csdnimg.cn/blog_migrate/f8e74659a44ca85f513f46aee387d910.png
溶解研究(基于特征方法的BERT)
到目前为止,全部基于BERT的结果都使用了微调方法,在预练习模子中添加了一个简单的分类层,并对鄙俚任务的全部参数进行联合微调。然而,基于特征的方法也有上风,即从预练习模子中提取固定特征。首先,并不是全部的任务都可以通过转换器编码器架构轻松表示,因此需要为每个任务添加特定的模子架构。其次,提前盘算出昂贵的练习数据表示具有重大盘算好处,然后可以在该表示上运行许多实行,而这些实行可以使用更便宜的模子完成。
为了消除微调方法,我们应用基于特征的方法,从一个或多个层中提取激活值,而不调解BERT的任何参数。这些上下文嵌入作为输入到分类层之前的随机初始化双层768维双向 LSTM。 结果如下表所示。 BERTLARGE与最先进的方法竞争。 体现最好的方法是将预练习Transformer的前四层隐藏状态中的标记表示连接起来,仅比对整个模子进行微调低了0.3F1。 这证明了BERT对于微调和基于特征的方法都是有效的。
https://i-blog.csdnimg.cn/blog_migrate/ecc2a7ce2d411e4d92602fb5687ffc5f.png
近来,由于语言模子的迁移学习所带来的履历改进表明了丰富的无监视预练习是许多语言理解体系的紧张组成部门。特别是,这些结果使得纵然是低资源任务也能从深度单向架构中受益。我们的主要贡献是进一步推广这些发现到深度双向架构,使同一个预练习模子能够成功地处理一系列广泛的NLP任务。
读者福利:假如大家对大模子感兴趣,这套大模子学习资料肯定对你有用
对于0底子小白入门:
   假如你是零底子小白,想快速入门大模子是可以思量的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习筹划和方向。
包罗:大模子学习线路汇总、学习阶段,大模子实战案例,大模子学习视频,人工智能、机器学习、大模子书籍PDF。带你从零底子体系性的学好大模子!
页: [1]
查看完整版本: 【大模子学习】BERT架构