寿光网站建设,广东网站建设方案,wordpress中文下载,广告设计专业就业前景好吗前言
BERT出自论文#xff1a;《BERT#xff1a;Pre-training of Deep Bidirectional Transformers for Language Understanding》 2019年
近年来#xff0c;在自然语言处理领域#xff0c;BERT模型受到了极为广泛的关注#xff0c;很多模型中都用到了BERT-base或者是BE…前言
BERT出自论文《BERTPre-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模型L12A12H768该模型的总参数大小为110M。该模型如下图所示 BERT-large包含24个编码器层每个编码器使用16个注意头编码器中的全连接网络包含1024个隐藏单元。因此从该模型中得到的向量大小也是1024。因此BERT-large模型L24A16H1024该模型的总参数大小为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模型重点内容的介绍希望对大家有所帮助。