BERT知识点总结

article/2025/11/7 6:54:22

文章目录

  • 为什么NLP网络中经常使用Adam优化器以及存在的问题
    • NLP语言模型的特点
    • Adam优化器的特点
    • 问题
    • 解决办法
  • BERT的基本原理
  • BERT为什么要取消NSP任务
  • 为什么BERT比ELMo效果好?ELMo和BERT的区别是什么?
    • 为什么BERT比ELMo效果好
    • ELMo和BERT的区别是什么
  • BERT有什么局限性
  • BERT输入和输出分别是什么?
  • BERT模型为什么要用Mask?如何做Mask?Mask和CBOW有什么异同点
    • BERT模型为什么要用mask
    • 相对于CBOW有什么异同点
  • 针对中文BERT有什么能改进的地方
  • attention类型
  • attention有什么优点和缺点
    • 优点
    • 缺点
  • Attention中的Q,K,V
  • 为什么要使用多头注意力
  • Layer Normalization
  • Glue(高斯误差线性单元)
  • AdamWeightDecayOptimizer
  • RoBERTa、ALBERT、ERNIE比较
  • BERT各种蒸馏方式
  • BERT论文中各种BERT的参数
  • BERT双向体现在哪里
  • 自回归和自编码
    • 自回归
    • 自编码
  • 如何处理OOV问题
    • 数据预处理
    • 模型方面
    • 词表方面
  • BERT如何引入新的特征
    • 原文本和特征一起进入网络
    • 原文本进入BERT,特征结合不仅,计算完之后做concat,然后提供给下游任务使用
  • BERT为什么不适合用于生成式模型
    • Pre-train方式
    • self-attention
  • XLNet和BERT位置编码的不同
    • 三个改动
  • Pre-train Fint-tune 两阶段相比于 Feature based优势
    • 模型搭建与模型复用
    • 训练数据

为什么NLP网络中经常使用Adam优化器以及存在的问题

NLP语言模型的特点

通常自然语言处理模型的输入是非常稀疏的。对于包含几十万上百万词的词表,在训练的每个 Batch 中能出现的独立词数不超过几万个。也就是说,在每一轮梯度计算过程中,只有几万个词的 embedding 的梯度是非 0 的,其它 embedding 的梯度都是 0。

Adam优化器的特点

Adam 优化器可以说是目前使用最广泛、收敛速度较快且收敛过程较稳定的优化器。Adam 的计算公式如图所示。可以看到公式中梯度的计算使用了动量原理,每一轮用于梯度下降的梯度是当前计算的真实梯度与上一轮用于梯度下降的梯度的加权和。这样动量的引入可以防止训练时产生震荡。Adam 优化器的学习率对于不同参数也是不同的,由该参数历史每一轮的真实梯度的大小决定。好处是对于 NLP 这种输入极度稀疏且输入特征极度不平衡(例如整个预料库中“我”这样的词经常出现,而“拉姆塞”这样的词只出现几次)的任务,学习率是自适应的,一些在一次训练 epoch 中只更新几次的 embedding,在训练后期还是会有较大的学习率。

问题

NLP 输入稀疏的特点与 Adam 使用动量计算梯度的特点相结合就引入了麻烦。每一轮更新参数时,只有极少数 embedding 的梯度是非 0 的,大部分 embedding 的梯度是 0 即上图公式中的 gt 是 0。但是,计算了动量之后,这些原本梯度都应该是 0 的 embedding 有了非零梯度 mt 用于梯度下降更新。想象一个极端的例子,“拉姆塞”这个词在一个 epoch 中只在第一个 batch 出现了,于是第一个 batch 计算了“拉姆塞”这个 embedding 的真实梯度 g0 用于更新参数,在以后的每个 batch 中虽然“拉姆塞”这个词没有出现过,Adam 都会计算它的动量梯度 mt,并用于更新“拉姆塞”这个 embedding,实际上方向与 g0 完全相同,只是每一轮做一次 β1 倍的衰减。这样的做法就相当于对这些出现次数较少的低频词的 embedding,每次梯度下降的等效学习率是非常大的,容易引起类似过拟合的问题。

解决办法

知道了问题的根节,解决方法就很简单了,每轮迭代只更新这个 batch 中出现过的词的 embedding 即可。TensorFlow 中可以使用 tf.contrib.opt.LazyAdamOptimizer,也可参考 https://www.zhihu.com/question/265357659/answer/580469438 的实现。

BERT的基本原理

  • BERT是Bidirectional Encoder Representation from Transformers的缩写,整体上是一个自编码语言模型,是由transformer基本结构搭建而成,Pre-train时设计了两个任务进行优化
    • Masked Language Model,随机将一句话中的某些词进行Mask,并基于上下文预测被Mask的词
    • Next Sentence,预测输入的两个句子是否连续,引入这个的目的是为了让模型更好地学到文本片段之间的关系
  • BERT相对于原来的RNN、LSTM结构可以做到并行执行,同时提取在句子中的关系特征,并且能在多个不同层次提取关系特征,进而反映句子语义,相对于word2Vec,BERT能根据句子上下文获取词义,解决多义词问题,BERT由于模型参数大,也存在容易过拟合的问题。

BERT为什么要取消NSP任务

  • NSP任务其实不仅仅包含了句间关系预测,也包含了主题预测,比如说一句话来自新闻主题,一句话来自医疗主题,模型会倾向于通过主题去预测,这样任务是比较简单的,所以一般会改成其他任务,比如预测两个句子顺序是否交换

为什么BERT比ELMo效果好?ELMo和BERT的区别是什么?

为什么BERT比ELMo效果好

  • 从网络结构和最后的实验效果看,BERT比ELMo效果好主要原因有三点:
    • LSTM抽取特征的能力远弱于Transformer
    • 双向拼接特征融合能力偏弱
    • BERT的训练数据以及模型参数远远多于ELMo

ELMo和BERT的区别是什么

  • ELMo通过语言模型得到句子中的词语的动态embedding,然后将此作为下游任务的补充输入,是一种Featrue-based方式,而BERT是基于Pre-train Finetune方式,使用Pre-train参数初始化Fine-tune的模型结构。

BERT有什么局限性

  • BERT在Pre-train阶段,假设句子中多个单次被Mask,这些被Mask掉的单词之间没有任何关系,是条件独立的
  • BERT在预训练阶段会出现特殊的[MASK],而fine-tune阶段没有,这就出现了Pre-train和Fine-tune不一致的问题。
  • BERT对生成式任务处理效果不好(自回归语言模型Pre-train模式的原因)
  • BERT对超长文本效果不理想(参考XLNet处理方法,state reuse)
  • NSP任务优化(QA,Sentence Order)
  • 动态Mask、命名实体Mask
  • 词序打乱

BERT输入和输出分别是什么?

  • 输入
    • BERT输入有input_ids,segment_ids,input_masks,之后会在输入端生成原始词向量,位置向量,以及文本向量,一起相加作为网络的输入
  • 输出
    • BERT可以调用get_pooled_ouput获得全局的语义表征向量
    • get_sequence_output则是获得各个词的表征向量

BERT模型为什么要用Mask?如何做Mask?Mask和CBOW有什么异同点

BERT模型为什么要用mask

  • BERT通过随机mask句子中的一部分词,然后根据上下文预测这些被mask得此,这个是Denosing AutoEncoder做法,加入Mask相当于在输入端加入噪声,这种方式优点是能够比较自然的融入双向语言模型,缺点是引入了噪声,导致Pre-train和Fine-tune不一致。

相对于CBOW有什么异同点

  • 相同点
    • 核心思想都是通过上下文来预测中心词
  • 不同点
    • CBOW中每个词都会成为中心词,而BERT只有Mask掉的词会成为中心词
    • CBOW的输入只有带预测的上下文,而BERT输入中带有mask token
    • CBOW训练结束之后,每个词向量都是唯一的,而BERT输入的词在不同上下文环境中,最后输出的表征向量也是不一样的。

针对中文BERT有什么能改进的地方

  • 使用词粒度

attention类型

  • 计算区域
    • soft Attention
    • hard Attention
    • Local Attentin
  • 所用信息
    • General Attention
    • Local Attention

attention有什么优点和缺点

优点

  • 参数少,模型复杂度相对于CNN、RNN比,复杂度更小,参数也更少
  • 速度快,Attention机制每一步计算不依赖于上一时间步的计算结果,相对于RNN可以很容易的做到并行
  • 效果好,Attention是挑重点,可以同时捕获局部和全局的信息,当输入一段长文字时,可以抓住其中的重点,不丢失信息。

缺点

  • 没法捕捉位置信息,即没法学习序列中的顺序关系。这点可以通过加入位置信息,如通过位置向量来改善,具体可以参考最近大火的BERT模型。

Attention中的Q,K,V

  • 其中Query决定,Attention的输出维度,Query向量dim即是输出维度
  • KeyValue向量是需要融合的向量,在上面做向量融合

为什么要使用多头注意力

  • 多头注意力本质上是多个attention的计算,然后做一个集成作用
  • 和CNN使用多个通道卷积效果类似
  • 论文中说到这样的好处是可以允许模型在不同的表示子空间里学习到相关的信息,后面还会根据attention可视化来验证。
  • 当你浏览网页的时候,你可能在颜色方面更加关注深色的文字,而在字体方面会去注意大的、粗体的文字。这里的颜色和字体就是两个不同的表示子空间。

Layer Normalization

  • Batch Norm是在batch上,对NHW做归一化,就是对每个单一通道输入进行归一化,这样做对小batchsize效果不好;
  • Layer Norm在通道方向上,对CHW归一化,就是对每个深度上的输入进行归一化,主要对RNN作用明显;
    • LN中同层神经元输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差;
    • BN中则针对不同神经元输入计算均值和方差,同一个batch中的输入拥有相同的均值和方差。
    • LN不依赖于batch的大小和输入sequence的深度,因此可以用于batchsize为1和RNN中对边长的输入sequence的normalize操作。
  • Instance Norm在图像像素上,对HW做归一化,对一个图像的长宽即对一个像素进行归一化,用在风格化迁移;
  • Group Norm将channel分组,有点类似于LN,只是GN把channel也进行了划分,细化,然后再做归一化
  • Switchable Norm是将BN、LN、IN结合,赋予权重,让网络自己去学习归一化层应该使用什么方法。

Glue(高斯误差线性单元)

  • 相比Relu:Relu将小于0的数据映射到0,将大于0的给与 等于 映射操作,虽然性能比sigmoid好,但是缺乏数据的统计特性,而Gelu则在relu的基础上加入了统计的特性。论文中提到在好几个深度学习任务中都优于Relu的效果。

AdamWeightDecayOptimizer

  • 引入了正则项的Adam优化器

RoBERTa、ALBERT、ERNIE比较

  • RoBERTa
    • 动态Masking
    • 移除next predict loss,采用了连续的full-sentences作为输入
    • 更大batch_size
    • 训练数据增大
  • ALBERT
    • factorized embeddng parameterization(嵌入向量的参数分解). 他们做的第一个改进是针对于Vocabulary Embedding。现将one-hot编码映射到一个低维词嵌入空间,之后再映射到隐藏空间
    • 跨层参数共享, ALBERT 采用的是贡献所有层的所有参数。
    • SOP(句间连贯性损失)

BERT各种蒸馏方式

  • 从transformer到非transformer框架的蒸馏
    • 使用教师模型的输出层作为教师信号
  • 从transformer到transformer框架的蒸馏
    • 可以不仅仅蒸馏输出结果,对中间层也可以进行蒸馏,tinyBERT中就对embedding,attention,hidden,输出层都进行了蒸馏
    • 两阶段蒸馏,
      • 首先在通用大数据上,对Pre-train模型进行蒸馏,得到通用模型,
      • 然后再在对应下游任务上fine-tune后再进行一次蒸馏

BERT论文中各种BERT的参数

  • BERT_base(L=12,H=768,A=12,Total Parameters=110M)
  • BERT_Large(L=12,H1024,A=16,Total Parameters=340M)

BERT双向体现在哪里

  • BERT语言模型Pre-train的时候,self-attention使用的是双向,同时与上下文进行attention

自回归和自编码

自回归

  • 根据上文内容预测下文,或者根据下文内容预测上文,是基于概率论的乘法公式分解,GPT,ELMo、XLNet本质上都是自回归语言模型
    • 优点:和下游NLP任务相关,比如生成式NLP任务,文本摘要,机器翻译等,实际生成内容时,就是从左到右的,这样Pre-train和finetune阶段任务一直
    • 缺点:只能利用单向信息,不能同时利用双向信息融合。

自编码

  • 用一个神经网络把输入映射为一个低维特征(通常输入会加一些噪声),这就是编码部分,之后再尝试将这个特征进行还原。BERT就是自编码模型
    • 优点:能够比较自然的融入双向语言模型
    • 缺点:引入了噪声,存在Pre-train和Fine-tune两阶段不一致的问题。

如何处理OOV问题

数据预处理

  • 数据归一化,数字替换为0,重复标点符号归一化等等
  • 直接将新词映射为UNK
  • 同义词表查询
  • 拆分为字符

模型方面

  • 使用fastText等子词分解的结构,把OOV的单词拆分为字符
  • 使用PointNet这种结构

词表方面

  • 扩大词表

BERT如何引入新的特征

原文本和特征一起进入网络

  • 相关句,直接接在原句之后。说白了就是告诉模型,第一个你可能看不懂,我换个说法和你说,这个在搜索领域很常见,这个就是第一种思路了。

原文本进入BERT,特征结合不仅,计算完之后做concat,然后提供给下游任务使用

  • 做别的任务,可以提前把命名实体识别结果放进来,例如词性之类的。可以使用上面的第二个思路加入。

BERT为什么不适合用于生成式模型

Pre-train方式

  • BERT本质上是一种自编码的语言模型,Pre-train的时候使用到了上下文特征,而生成式任务属于finetune阶段的下游任务,生成式任务都是从左至右的,这就导致了Pre-train和finetune两阶段不一致,所以效果不太好。自回归模型在生成式任务上会优于自编码模型,因为其Pre-train和Fine-tune阶段是一致的。

self-attention

  • self-attention结构丢失了位置信息,而生成式任务很需要位置信息,这也存在一定影响

XLNet和BERT位置编码的不同

  • BERT中的位置编码是绝对位置编码,XLNet中基本结构是transformer-XL,位置编码为相对位置编码

    • transformer源码中的位置编码实现为正余弦函数
    • BERT中位置编码实现为一个learnable variables
    • XLNet中使用正余弦函数相对位置编码

三个改动

  • 将绝对位置编码改进成相对位置编码
  • 将原来query,key中与W参数的乘积,替换成了两个可学习的参数
  • 将原来单独的W矩阵,改成了两个矩阵参数embedding的参数位置编码的参数

Pre-train Fint-tune 两阶段相比于 Feature based优势

模型搭建与模型复用

  • Feature based模型一般只是将embedding 作为下游任务的补充输入,需要自己设计对应的下游任务网络结构,而Pre-train finetune则是用Pre-train语言模型的参数直接初始化fine-tune模型的参数,一般只需要修改输出层即可,具有很好的复用性

训练数据

  • Pre-train阶段引入了大量的无监督语言数据,可以学习到很多通用的语言知识

http://chatgpt.dhexx.cn/article/wx6XisV5.shtml

相关文章

【论文速递】CCDC2021 - 轻量级网络的结构化注意知识蒸馏

【论文速递】CCDC2021 - 轻量级网络的结构化注意知识蒸馏 【论文原文】:Structured Attention Knowledge Distillation for Lightweight Networks 获取地址:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9601745 CSDN下载&#xff1a…

从Hinton开山之作开始,谈知识蒸馏的最新进展

作者 | 孟让 转载自知乎 导读:知识蒸馏是一种模型压缩常见方法,模型压缩指的是在teacher-student框架中,将复杂、学习能力强的网络学到的特征表示“知识”蒸馏出来,传递给参数量小、学习能力弱的网络。本文对17、18年知识蒸馏的最…

深度学习精度提升 3 个小妙招:模型集成、知识蒸馏、自蒸馏

本文转载自 AI公园。 作者:Zeyuan Allen-Zhu 编译:ronghuaiyang 导读 训练好的模型,用自己蒸馏一下,就能提高性能,是不是很神奇,这里面的原理到底是什么呢,这要从模型集成开始说起。 在现在的标…

AI关键组件 | 集成,知识蒸馏和蒸馏「AI核心算法」

关注:耕智能,深耕AI脱水干货 作者:Zeyuan Allen-Zhu 编译:ronghuaiyang 报道:AI公园 转载请联系作者 训练好的模型,用自己蒸馏一下,就能提高性能,是不是很神奇,这里面的…

深度学习中的3个秘密:集成,知识蒸馏和自蒸馏

点击上方“CVer”,选择加"星标"置顶 重磅干货,第一时间送达 本文转载自:AI公园 作者:Zeyuan Allen-Zhu | 编译:ronghuaiyang 导读 训练好的模型,用自己蒸馏一下,就能提高性能&#…

深度学习中的3个秘密:集成,知识蒸馏和蒸馏

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶” 作者:Zeyuan Allen-Zhu 编译:ronghuaiyang 导读 训练好的模型,用自己蒸馏一下,就能提高性能,是不是很神奇,这里面的原理到…

【论文笔记_知识蒸馏_2022】Knowledge Distillation with the Reused Teacher Classifier

(下文中的知识提炼即知识蒸馏) 摘要 知识提炼的目的是将一个强大而繁琐的教师模型压缩到一个轻量级的学生模型中,而不至于牺牲很多性能。为此,在过去的几年里,人们提出了各种方法,一般都有精心设计的知识…

深度学习优化利器:集成、知识蒸馏和自蒸馏

为什么简单的「集成」便能够提升性能呢?本文是对上述问题的解析,作者解读了来自微软研究院高级研究员朱泽园博士,以及卡内基梅隆大学机器学习系助理教授李远志的最新论文《在深度学习中理解集成,知识蒸馏和自蒸馏》。 本文授权转自…

深度学习中的3个秘密:集成、知识蒸馏和蒸馏

作者:Zeyuan Allen-Zhu 来源:AI公园 编译:ronghuaiyang 在现在的标准技术下,例如过参数化、batch-normalization和添加残差连接,“现代”神经网络训练 —— 至少对于图像分类任务和许多其他任务来说 —— 通常是相当稳…

【知识蒸馏】Knowledge Distillation with the Reused Teacher Classifier

文章目录 一、摘要二、引言三、相关工作四、创新点五、实验5.1精度对比5.2. 分类器重用操作分析5.3 应用一:多教师知识提炼5.4 应用二:无数据的知识蒸馏 六.结论七. 限制性和未来工作 一、摘要 知识蒸馏的目的是将一个强大而繁琐的教师模型压缩到一个轻…

集成、知识蒸馏和自蒸馏有区别?

点击上方“视学算法”,选择加"星标"或“置顶” 重磅干货,第一时间送达 作者丨梦佳 来源丨智源社区 编辑丨极市平台 集成(Ensemble,又称模型平均)是一种「古老」而强大的方法。只需要对同一个训练数据集上&am…

知识蒸馏学习

一.知识蒸馏综述 1.简介 大模型在部署到资源有限的设备上(手机、嵌入式设备等)会遇到体积和速度问题,知识蒸馏作为有代表性的模型压缩和加速的技术之一(其他还有:参数裁剪和共享、低秩分解和Transferred compact con…

深度学习三大谜团:集成、知识蒸馏和自蒸馏

来源:数据派THU 链接:https://www.microsoft.com/en-us/research/blog/three-mysteries-in-deep-learning-ensemble-knowledge-distillation-and-self-distillation/ 编辑:王萌(深度学习冲鸭公众号) 著作权归作者所有,本文仅作学术…

sql 一条语句统计男女人数

第一种方法: SELECT user.sex, count(user.sex) as 总数 FROM test.user group by user.sex; 执行结果 ​​​​ 第二种方法: select sum(case when sex 男 then 1 else 0 end) 男生人数 , sum(case when sex 女 then 1 else 0 end) 女生人数 from …

Sql根据不同条件统计总数

前言 经常会遇到根据不同的条件统计总数的问题&#xff0c;一般有两种写法&#xff1a;count和sum都可以 数据准备&#xff1a; 方法一 &#xff1a;Count 代码&#xff1a; SELECTCOUNT(CASEWHEN age > 20AND age < 25 THEN1ELSENULLEND) AS cnt0,COUNT(CASEWHEN a…

SQLServer查询多条件统计总数

业务需求&#xff1a;根据不同条件查询统计出总价钱 select SUM(case when status0 then price else 0 end) A, SUM(case when status5 then price else 0 end) B, SUM(case when status4 then price else 0 end) C, SUM(case when status1 then price else 0 end) D, SUM(ca…

SQL--统计出每日在线总数

需求&#xff1a; 一张表有uid、起始日期和终止日期&#xff0c;能不能一条sql统计出每日在线总数 样例&#xff1a; 比如 三条数据&#xff1a; a 20220510 20220512 b 20220510 20220511 c 20220511 20220512 结果: 20220510 2 20220511 3 20220512 2 数据准备&#xff1a;…

MySQL一条sql语句多个count统计

user表&#xff1a; 多个count统计sql语句 selectcount(case when sex 男 then 1 end) as man,count(case when sex 女 then 1 end) as woman,count(case when age>18 then 1 end) as adult,count(case when age<18 then 1 end) as nonagefrom user 可根据自己的业务更改…

sql 按时间段统计数据个数

插入数据sql样例 insert into using_time (create_time, fid) VALUES ("2022-09-15 14:24:50","17988413a036e3c80dd97d476f9d5b2f627a2cb20d8bcaa0af7f6a94cc8f1a6a");查询sql样例 select count(*) from using_time where create_time between 2022-09-…

SQL语句统计排行前10

SQL语句统计排行前10 引言一、创建表二、插入数据三、执行查询1、统计当天迟到的人员名单2、统计当月迟到次数排行前十的人员名单 引言 场景&#xff1a;公司每天要进行打卡上班&#xff0c;每个人每天也可以多次打卡&#xff0c;所有打卡信息会记录到表A 中&#xff0c;表A中有…