【大模型学习】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》

摘要

我们引入了一种新的语言表示模型,名为 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模型首先使用预训练参数进行初始化,然后所有参数都使用下游任务的标记数据进行微调。每个下游任务都有单独的微调模型,尽管它们都是使用相同的预训练参数进行初始化的。下图中的问答示例将作为本节的运行示例。

模型架构 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 的标记序列,它可以是一句话,也可以是两句话连在一起。

每个序列的第一个标记始终是特殊分类标记([CLS])。 与该标记对应的最终隐藏状态用于对序列进行分类任务的聚合表示。 句子对被压缩成一个单独的序列。 我们以两种方式区分句子。 首先,我们用特殊的分隔符([SEP])来分离它们。 其次,我们在每个标记上添加了一个学习的嵌入,指示它属于句子A还是句子B。 如下图所示,我们将输入嵌入表示为E,特殊标记[CLS]的最终隐藏向量表示为C∈RH,第i个输入标记的最终隐藏向量表示为Ti∈RH。

BERT(预训练)

遮蔽语言模型直观地认为,深度双向模型一定比单向模型或浅层的左右双向模型更强大。遗憾的是,标准条件语言模型只能从左到右或从右到左进行训练,因为双向条件会允许每个词间接“看到自己”,因此模型可以轻松预测在多层语境中的目标词。

为了训练一个深度双向表示,我们简单地随机屏蔽输入标记的某些百分比,然后预测这些被屏蔽的标记。我们将此过程称为“遮蔽语言模型”(MLM),尽管它在文献中通常被称为Cloze任务。在这种情况下,与标准语言模型一样,对遮罩标记的最终隐藏向量馈入词汇表上的输出softmax。在所有我们的实验中,我们在每个序列中随机屏蔽所有WordPiece标记的15%。与去噪自编码器不同,我们只预测被屏蔽的词,而不是重建整个输入。

尽管这使我们能够获得双向预训练模型,但其缺点是,在微调期间,[MASK] 令牌不会出现,从而导致预训练和微调之间存在不匹配。为了缓解这个问题,我们并不总是用实际的 [MASK] 令牌来替换“掩码”的词。数据生成器随机选择 15% 的标记位置进行预测。如果选择了第 i 个标记,则有(1)80% 的概率用 [MASK] 令牌替换第 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)文本分类或序列标记中的退化文本-∅对。在输出中,将标记表示馈送给令牌级任务的输出层,例如序列标记或问答,而 [CLS] 表示馈送给分类任务的输出层,例如蕴含或情感分析。

实验(GLUE)

通用语言理解评估基准 (GLUE) 是一系列不同的自然语言理解任务的集合。结果如下表所示。在所有任务中,BERTBASE 和 BERTLARGE 都大幅超过了所有系统,相较于最先进的技术分别实现了4.5%和7.0%的平均准确率提升。请注意,除了注意力遮挡之外,BERTBASE 和 OpenAI GPT 在模型架构方面几乎完全相同。对于最大且最广泛报道的GLUE任务MNLI,BERT 实现了4.6%的绝对准确率提升。在官方GLUE排行榜上,截至撰写本文时,BERTLARGE 的得分为80.5,而OpenAI GPT 的得分为72.8。

实验(SQuAD v1.1)

Stanford 问答数据集(SQuAD v1.1)是由 Rajpurkar等人于2016年发布的,由10万个众包问题/答案对组成的集合。给定一个问题和来自斯坦福大学的一段文字,模型的输出应该是正确答案所在段落中一个子串的起始索引和结束索引。

实验(SQuAD v2.0)

SQuAD 2.0任务扩展了SQuAD 1.1问题定义,允许可能在提供的段落中不存在短答案,使问题更加现实。

实验(SWAG)

对抗生成式 (SWAG) 数据集包含 113k 句对补全示例,用于评估基于常识的推理。给定一个句子,任务是从四个选项中选择最有可能的延续。我们使用学习率为 2e-5 和批量大小为 16 的模型微调了 3 个时期。结果如下表所示。BERTLARGE 比作者的基线 ESIM+ELMo 系统表现更好,提高了 +27.1%,比 OpenAI GPT 提高了 8.3%。

消融研究(预训练任务的影响)

没有NSP:使用掩码语言建模(MLM)训练的双向模型,但不包括下一个句子预测(NSP)任务。

仅左上下文模型:使用标准的从左到右( LTR )语言模型进行训练,而不是多任务学习。在微调过程中也应用了只包含左侧约束,因为如果不这样做,就会出现预训练 / 微调不匹配的问题,从而降低下游性能。此外,该模型是在没有 NSP 任务的情况下预先训练的。这与 OpenAI GPT 直接可比,但使用的是我们的更大规模的数据集、输入表示法和微调方案。

我们首先研究 NSP 任务带来的影响。如下表所示,移除 NSP 对于 QNLI、MNLI 和 SQuAD 1.1 的表现有显著的负面影响。接下来,我们将“无 NSP”与“MLM & LTR”进行比较以评估训练双向表示的影响。在所有任务中,LSTM 模型的表现都比 BERT 均要差,MRPC 和 SQuAD 的下降幅度更大。

消融研究(模型大小的影响)

下表展示了在选定的 GLUE 任务上的结果。在这个表格中,我们报告了来自五个随机重启微调中的开发集准确率平均值。我们可以看到,在所有四个数据集上,较大的模型都会导致更严格的精度提升,即使是在 MRPC 数据集上也是如此——该数据集仅有 3,600 个标记过的训练样本,并且与预训练任务大不相同。也许令人惊讶的是,我们在相对于现有文献已经很大的模型上实现了如此显著的改进。

消融研究(基于特征方法的BERT)

到目前为止,所有基于BERT的结果都使用了微调方法,在预训练模型中添加了一个简单的分类层,并对下游任务的所有参数进行联合微调。然而,基于特征的方法也有优势,即从预训练模型中提取固定特征。首先,并不是所有的任务都可以通过转换器编码器架构轻松表示,因此需要为每个任务添加特定的模型架构。其次,提前计算出昂贵的训练数据表示具有重大计算好处,然后可以在该表示上运行许多实验,而这些实验可以使用更便宜的模型完成。

为了消除微调方法,我们应用基于特征的方法,从一个或多个层中提取激活值,而不调整BERT的任何参数。这些上下文嵌入作为输入到分类层之前的随机初始化双层768维双向 LSTM。 结果如下表所示。 BERTLARGE与最先进的方法竞争。 表现最好的方法是将预训练Transformer的前四层隐藏状态中的标记表示连接起来,仅比对整个模型进行微调低了0.3F1。 这证明了BERT对于微调和基于特征的方法都是有效的。

最近,由于语言模型的迁移学习所带来的经验改进表明了丰富的无监督预训练是许多语言理解系统的重要组成部分。特别是,这些结果使得即使是低资源任务也能从深度单向架构中受益。我们的主要贡献是进一步推广这些发现到深度双向架构,使同一个预训练模型能够成功地处理一系列广泛的NLP任务。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT猫仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值