【BERT】深入BERT模型2——模型中的重点内容,两个任务

前言

BERT出自论文:《BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding》 2019年

近年来,在自然语言处理领域,BERT模型受到了极为广泛的关注,很多模型中都用到了BERT-base或者是BERT模型的变体,而且在模型中增加了BERT预训练模型之后,许多NLP任务的模型性能都得到了很大程度的提升,这也说明了BERT模型的有效性。

由于BERT模型内容较多,想要深入理解该模型并不容易,所以我分了大概三篇博客来介绍BERT模型,第一篇主要介绍BERT模型的整体架构,对模型有一个整体的认识和了解;第二篇(也就是本篇博客)详细介绍BERT模型中的重点内容,包括它所提出的两个任务;第三篇从代码的角度来理解BERT模型。

目前我只完成了前两篇论文,地址如下,之后完成第三篇会进行更新。

第一篇:【BERT】深入理解BERT模型1——模型整体架构介绍

第二篇:【BERT】深入BERT模型2——模型中的重点内容,两个任务

第三篇:


模型重点内容介绍

首先先解释以下上一篇博客中经常提到的模型的单向和双向:

        单向:是指生成句子中某个单词的编码表示时,只结合句子中该单词位置之前的语境,而不考虑之后的语境;双向:是指生成句子中某个单词的编码表示时,同时考虑句子中该单词位置之前和之后的语境。

        由此可知,Transformer的编码器(主要是多头注意力机制)天然就是双向的,因为它的输入是完整的句子,也就是说,指定某个单词,BERT已经读入了它两个方向上的所有单词。


7、BERT的标准配置有两种:BERT-base和BERT-large。

BERT-base:包含12个编码器层。每个编码器使用12个注意头,编码其中的全连接网络包含768个隐藏单元。因此,从该模型中得到的向量大小也是768。(每个单词向量表示的大小=每个编码器层的大小。

若编码器层数记为L,注意力投书记为A,隐藏单元数记为H,则BERT-base模型:L=12,A=12,H=768,该模型的总参数大小为110M。该模型如下图所示:

BERT-large:包含24个编码器层,每个编码器使用16个注意头,编码器中的全连接网络包含1024个隐藏单元。因此,从该模型中得到的向量大小也是1024。因此,BERT-large模型:L=24,A=16,H=1024,该模型的总参数大小为340M。该模型如下图所示:

8、预训练BERT模型:

预训练的意思是,假设我们有一个模型m,首先我们为某种任务使用大规模的语料库训练模型m。现在来了一个新任务,并有一个新模型,我们使用已经训练过的模型(预训练的模型)m的参数来初始化新的模型,而不是使用随机参数来初始化新模型,然后根据新任务调整(微调)新模型的参数。这是一种迁移学习。

BERT模型在大规模语料库中通过两个任务来预训练,分别是屏蔽语言建模和下一句预测。

9、语言建模:

在语言建模任务中,我们训练模型给定一系列单词来预测下一个单词。可以把语言模型分为两类:自回归语言建模、自编码语言建模。

(1)自回归语言建模

我们可以将自回归语言建模归类为:前向预测(左到右)、反向预测(右到左)。

因此,自回归模型天然就是单向的,意味着它们只会以一个方向阅读输入序列。

(2)自编码语言建模

自编码语言建模任务同时利用了前向和反向预测的优势,即:它们在预测时同时读入两个方向的序列。因此,我们可以说自编码语言模型天生就是双向的。

因此,双向的模型能获得更好的结果。

BERT是一个自编码语言模型,即:预测时同时从两个方向阅读序列。

10、屏蔽语言建模

屏蔽语言建模任务:对于给定的输入序列,我们随机屏蔽15%的单词,然后训练模型去预测这些屏蔽的单词。

以这种方式屏蔽标记会在预训练和微调之间产生差异。即,我们训练BERT通过预测[MASK]标记,训练完之后,我们可以为下游任务微调预训练的BERT模型,比如情感分析任务,但在微调期间,我们的输入不会有任何的[MASK]标记,因此,它会导致BERT的预训练方式与微调方式不匹配。

为了解决以上问题,我们应用80-10-10%的规则。我们指导我们会随即屏蔽句子中15%的标记。现在对这15%的标记,80%的概率用[MASK]标记替换该标记,10%的概率用过一个随即标记(单词)替换该标记,剩下10%的概率我们不做任何替换。

为了预测屏蔽的标记,我们将BERT返回的屏蔽的单词表示R[MASK]喂给一个带有softmax激活函数的前馈神经网络,然后该网络输出此表中每个单词属于该屏蔽的单词的概率。

在全词屏蔽模型中,如果子词被屏蔽了,然后我们屏蔽与该子词对应单词的所有子词。注意,我们也需要保持屏蔽概率为15%。所以当屏蔽子词对应的所有单词后,如果超过了15%的屏蔽率,我们可以取消屏蔽其他单词。

11、下一句预测

为了进行分类,我们简单地将[CLS]标记的嵌入表示喂给一个带有softmax函数的全连接网络,该网络会返回我们输入的句子对属于isNext和notNext的概率。因为[CLS]标记保存了所有标记的聚合表示,也就得到了整个输入的信息,所以我们可以直接拿该标记对应的嵌入表示来进行预测。

不太理解嵌入表示经过带有softmax的前馈网络怎么就得到了概率?解释:softmax的输出就是各类别的概率值,且这些概率值的和为1。(全连接层和前馈网络是一回事儿)

12、预训练过程中的热身步:

在训练的初始阶段,我们可以设置一个很大的学习率,但是我们应该在后面的迭代中设置一个较小的学习率。因为在初始的迭代时,我们远没有收敛,所以设置较大的学习率带来更大的步长是可以的,但在后面的迭代中,我们已经快要收敛了,如果学习率(导致步长)较大,可能会错过收敛位置(极小值)。在初始迭代期设置较大的学习率而在之后的迭代期减少学习率的做法被称为学习率scheduling。

热身步就是用于学习率scheduling的。假设我们的学习率是1e-4,然后热身步为10000个迭代,这意味着我们在初始的10000个迭代中,将学习率从0增大到1e-4。在10000个迭代后,我们线性地减少学习率,因为我们接近收敛位置了。

13、激活函数

BERT使用的激活函数叫作GELU(Gaussian Error Linear Unit,高斯误差线性单元)。GELU函数为:

其中,是标准的高斯累积分布函数(Gaussian cumulative distribution function)。

GLEU的近似计算数学公式为:

其函数图像如下所示:

与Relu函数的比较:

Relu将小于0的数据映射到0,将大于0的数据映射到本身,虽然性能比Sigmoid函数好,但是缺乏数据的统计特性,而Gelu则在Relu的基础上加入了统计特性。论文中提到在好几个深度学习任务中Gelu的效果都优于Relu。

14、子词Tokenization:用来处理未登录词(即词表中没有出现过的词,OOV),效果很好。

将未登录词拆分成子词,检查子词是否存在于词表中,不必为拆分后的第一个子词增加##,而是要在除第一个子词之外的子词前增加##。并将词表中不存在的子词添加到词表中。


以上就是对BERT模型重点内容的介绍,希望对大家有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

AWTK 开源串口屏开发(4) - 采用数据

AWTK 开源串口屏开发 - 数据采集 1. 功能 数据采集是一个常用的功能,MCU 定时采集数据(如环保设备定时采样空气中的污染物),并发送采样数据到串口屏,串口屏可以显示采样数据,也可以对采样数据进行管理&am…

超维空间S2无人机使用说明书——52、初级版——使用PID算法进行基于yolo的目标跟踪

引言:在实际工程项目中,为了提高系统的响应速度和稳定性,往往需要采用一定的控制算法进行目标跟踪。这里抛砖引玉,仅采用简单的PID算法进行目标的跟随控制,目标的识别依然采用yolo。对系统要求更高的,可以对…

Unity中裁剪空间推导(使用FOV来调节)

文章目录 前言一、使用FOV代替之前使用的Size(h)1、我们可以把矩阵中使用到 h(高) 和 w(宽) 的部分使用比值替换掉。2、替换后 前言 在之前的文章中,我们控制透视相机使用的是SIze。但是,在透视相机中,我们使用的是FO…

118基于matlab的二级倒立摆的数学建模

基于matlab的二级倒立摆的数学建模,引入二次型最优控制率,对系统进行仿真分析,得出摆杆及小车位置变化曲线。程序已调通,可直接运行。

【MySQL】事务Transaction

1. 事务的概念 事务是什么 在业务逻辑中使用sql,面对一些较复杂的场景,是需要多个sql语句组合起来实现的。如:银行的转账业务,若客户A要转账100元给客户B,就要两条sql:A余额减100,B余额加100&a…

[Angular] 笔记 24:ngContainer vs. ngTemplate vs. ngContent

请说明 Angular 中 ngContainer, ngTemplate 和 ngContent 这三者之间的区别。 chatgpt 回答: 这三个在 Angular 中的概念是关于处理和组织视图的。 1. ngContainer: ngContainer 是一个虚拟的 HTML 容器,它本身不会在最终渲染…

【Spark精讲】一文讲透SparkSQL聚合过程以及UDAF开发

SparkSQL聚合过程 这里的 Partial 方式表示聚合函数的模式,能够支持预先局部聚合,这方面的内容会在下一节详细介绍。 对应实例中的聚合语句,因为 count 函数支持 Partial 方式,因此调用的是 planAggregateWithoutDistinct 方法&a…

【AIGC科技展望】预测AIGC2025年的机会与挑战

2025年,AIGC的机会与挑战 在未来的五年里,AIGC(AI Generated Content)将会成为一个越来越重要的领域。但是,伴随着机会而来的是挑战。在这篇文章中,我们将一起探讨AIGC的机会与挑战,并预测2025…

SSH -L:安全、便捷、无边界的网络通行证

欢迎来到我的博客,代码的世界里,每一行都是一个故事 SSH -L:安全、便捷、无边界的网络通行证 前言1. SSH -L基础概念SSH -L 的基本语法:端口转发的原理和作用: 2. SSH -L的基本用法远程访问本地示例:访问本…

项目中使用Java中List.subList()的注意事项

使用介绍 在Java中&#xff0c;subList是List接口的一个方法&#xff0c;用于获取原始列表的子列表 方法的声明如下 List<E> subList(int fromIndex, int toIndex);fromIndex&#xff1a;起始索引&#xff08;包括&#xff09;toIndex&#xff1a;结束索引&#xff08…

深入浅出理解TensorFlow的padding填充算法

一、参考资料 notes_on_padding_2 二、TensorFlow的padding算法 本文以TensorFlow v2.14.0版本为例&#xff0c;介绍TensorFlow的padding算法。 1. 引言 tf.nn.conv2d and tf.nn.max_pool2d 函数都有padding参数&#xff0c;在执行函数之前&#xff0c;都需要进行填充padd…

系列六、Consul

一、Consul 1.1、概述 Consul是一套开源的分布式服务发现和配置管理系统&#xff0c;由HashiCorp公司用Go语言开发。他提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个功能都可以单独使用&#xff0c;也可以一起使用以构建全方位的服务网格&…

AI模型训练【偏差/方差】与【欠拟合/过拟合】

在我们拿到一个数据集&#xff0c;高高兴兴准备训练一个模型时&#xff0c;会遇到欠拟合或过拟合的问题&#xff0c;业内也喜欢用偏差和方差这两指标去定义它们&#xff0c;那这些词什么意思呢&#xff1f;有什么方法能避免/解决 欠拟合和过拟合呢&#xff1f; 这其实是非常非常…

将本地工作空间robot_ws上传到gitee仓库

git config --global user.name "geniusChinaHN" git config --global user.email "12705243geniuschinahnuser.noreply.gitee.com" cd ~/robot_ws #git init#创建原始仓库时候用 git add . git commit -m "上传文件内容描述" #git remote add r…

day9--java高级编程:多线程

1 Day16–多线程01 1.1 程序概念 程序(program)&#xff1a;是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码&#xff0c;静态对象。 1.2 进程 1.2.1 概念 进程(process)&#xff1a;是程序的一次执行过程&#xff0c;或是正在运行的一个程序。是一…

『番外篇七』SwiftUI 获取视图全局位置在 NavigationStack 中失效的解决方法

概览 在 番外篇六』SwiftUI 取得任意视图全局位置的三种方法 这篇博文里,我们详细讨论了在 SwiftUI 中获取任意视图全局坐标的几种方法。 不过,我们也从中提到了某些方法无法适用于 NavigationStack 视图,本篇博文由此应运而生。 在本篇博文种,您将学到如下内容: 概览1.…

git是什么,git入门常用基本命令

文章目录 git是什么1 .git init--初始化2.git status--检测当前文件夹下面文件状态3. git add--要管理的文件4.git add . --管理当前文件夹下的所有文件5.git commit -m--生成第一个版本6.git log--查看版本的记录 git是什么 分布式&#xff0c;版本控制&#xff0c;软件 版本…

通信原理课设(gec6818) 007:语音识别

目录 1、去科大讯飞官网下载对应的sdk 2、科大讯飞文件夹的意思 3、配置ARM的录音环境 4、编程实现语音识别 我们的需求是将一个语音文件从客户端传到服务器&#xff0c;因此我们最好是选用tcp 现在市面上面常用的语音识别解决方案为&#xff1a;科大讯飞c和百度c 离…

zookeeper之集群搭建

1. 集群角色 zookeeper集群下&#xff0c;有3种角色&#xff0c;分别是领导者(Leader)、跟随着(Follower)、观察者(Observer)。接下来我们分别看一下这三种角色的作用。 领导者(Leader)&#xff1a; 事务请求&#xff08;写操作&#xff09;的唯一调度者和处理者&#xff0c;保…

【C语言】一篇文章深入解析联合体和枚举且和结构体的区别

文章目录 &#x1f4dd;前言&#x1f320; 联合体类型的声明&#x1f309;联合体的特点 &#x1f320;相同成员的结构体和联合体对⽐&#x1f309;联合体⼤⼩的计算 &#x1f320;联合体应用&#x1f309;枚举类型的声明 &#x1f320;枚举类型的优点&#x1f309; 枚举类型的使…