文章目录

  • 1、Transfomer
    • 基础资料
    • 基本结构
      • single attention和 multiHead attention
        • attention
        • multi-head attention
        • self-attention
      • encoder和decoder
        • Add & Norm
        • Position-wise Feed-Forward Networks(Relu)
        • Weight Tying
        • Normalization
        • decoder mask
        • Optimizer
      • 位置编码
    • 缺陷及优点
      • 缺陷
      • 优点
  • 2、Bert
    • 基础资料
    • 基本结构
      • Input
      • 代码输入参数
      • Pre-training和Fine-Tuning
      • MLM(mark language model)
      • 训练语料及模型大小设置
      • 句向量pooling
      • SQuAD
      • SWAG(The Situations With Adversarial Generations)
      • 微调模式
    • 缺陷及优点
      • 缺陷
      • 优点
  • 3、Albert
    • 基础资料
    • 基本结构
      • 嵌入向量参数化的因式分解
      • 跨层参数共享(参数量减少主要贡献)
      • 句间连贯性损失(SOP)
      • 运行一定步后删除Dropout
      • Segments-Pair
      • Masked-ngram-LM
      • 模型大小
    • 缺陷及优点
      • 缺陷
      • 优点
  • 4、RoBerta
    • 基础资料
    • 基本结构
      • 静态Masking(Bert) vs 动态Masking(RoBerta)
      • with NSP(Bert) vs without NSP(RoBerta)
      • 更大的mini-batch (实际应用中,我们应该不断扩大mini_batch,直至把显卡内卡打满)
      • 更多的数据,更长时间的训练
      • 更改Text Encoding
      • 超参设置
  • 5、ERNIE(1.0)
    • 基础资料
    • 基本结构
      • 改变mark方法
    • 中文的Additional data
      • 预训练时Dialogue data使用(Query-Response dialogue)
    • 缺陷及优点
  • 6、XLnet
    • 基础资料
    • 基本结构
      • 自回归(Autoregressive, AR)语言模型和自编码(autoencoding)模型
      • 排列语言建模(Permutation Language Modeling)
      • Two-Stream Self-Attention(建模上面的排列语言模型)
      • 部分预测
      • Transformer-XL
      • 相对位置编码
      • 超参设置
    • 缺陷及优点
      • 优点
      • 缺点
  • 7、ELECTRA
    • 基础资料
    • 基本结构
      • RTD

1、Transfomer

基础资料

  • 论文《Attention Is All You Need》 https://arxiv.org/abs/1706.03762
  • github: https://github.com/EternalFeather/Transformer-in-generating-dialogue
  • 英文介绍 https://jalammar.github.io/illustrated-transformer/
  • 中文介绍 https://baijiahao.baidu.com/s?id=1622064575970777188&wfr=spider&for=pc
  • attention的mask机制:https://blog.csdn.net/weixin_40901056/article/details/97514718
  • attention机制总结: https://www.jianshu.com/p/cf41f3f91d94

基本结构

single attention和 multiHead attention

attention

multi-head attention
  • 通过h个不同的线性变换对Q,K,V进行投影,最后将不同的attention结果拼接起来
  • 后面要加一个线性变换(下图的红框)
  • 其中head的维度是hiddensize/head的个数,不增加计算复杂度
self-attention
  • 取Q,K,V相同,都是下层前馈网络的产出, 计算方法scaled dot-product
  • scale(K向量维度的开方8)的目的是:缩放后值差距变小,使梯度更稳定
  • mask:将padding值0屏蔽掉,不影响其它词的attention计算,将padding=0的值赋值一个无穷小,这样的话,e的无穷小次方接近于0
encoder和decoder

Add & Norm
  • Add 残差连接:加入一个常量,深层网络可以防止梯度消失
  • Norm :标准化:multi-Head,每个head产出结果的量级或范围不一定一致,需要归一化才能接全连接
Position-wise Feed-Forward Networks(Relu)

  • 该全连接是先接一个4*hidden_size的全连接,用relu筛选后,再恢复hidden_size的维度,目的是将每个位置的Attention结果映射到一个更大维度的特征空间,然后使用ReLU引入非线性进行筛选,最后恢复回原始维度。需要说明的是,在抛弃了 LSTM 结构后,FFN 中的 ReLU成为了一个主要的能提供非线性变换的单元
Weight Tying
  • 上图Figure1中红色框框的1、2、3,使用同一个参数矩阵(C*H),1、2是将词vocabSize的向量映射成hidden_size的向量,3是将hidden_size的向量映射成vocabSize的向量,这样后面接softmax,预测词汇
  • 训练过程中,1当成变量,由encoder训练,2和3当成常量直接使用
Normalization
  • Dropout:3个地方使用,1、token embedding + position embedding;2、attention;3、全连接
  • Label Smoothing
decoder mask
  • 训练时,decoder的input要mask掉后面的词汇,因为真实预测时,并看不到后面的值
Optimizer

  • warmup的好处:
    1. 有助于减缓模型在初始阶段对mini-batch的提前过拟合现象,保持分布的平稳
    2. 有助于保持模型深层的稳定性
位置编码

缺陷及优点

缺陷
  1. 计算量太大,self.attention的复杂度是n的2次方,解决办法:set transformer的的attention因式分解,先投影到低维空间,由低维空间和自己算attention,然后再投影到高维空间
  2. 位置信息利用不明显,transformer的postionEmbedding效果不好,而且无法捕获长距离的信息,解决办法:transformer_xl,修改positionEmbedding公式;类似rnn,分段计算attention,把上一段的attention输出作为下一段attention的context
  3. multiHead,并不是所有的head都有用,可以通过剪枝方式减少head,从而减少参数量
优点
  1. 每个元素可以像CNN一样和全局的信息进行交互,忽略距离
  2. 突破了 RNN 模型不能并行计算的限制
  3. 自注意力可以产生更具可解释性的模型。我们可以从模型中检查注意力分布。各个注意头(attention head)可以学会执行不同的任务

2、Bert

基础资料

  • 论文 《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》 https://arxiv.org/abs/1810.04805
  • github:https://github.com/google-research/bert
  • BERT相关论文、文章和代码资源汇总:https://zhuanlan.zhihu.com/p/50717786
  • Bert代码解读:https://daiwk.github.io/posts/nlp-bert-code-annotated-framework.html
  • bert结构介绍:https://www.jianshu.com/p/23050ce9493a
  • Bert参数量统计:https://blog.csdn.net/weixin_43922901/article/details/102602557
  • Bert测试集描述:https://blog.csdn.net/shuibuzhaodeshiren/article/details/87743286

基本结构

Input

代码输入参数
  • input_ids:输入的词汇在词表中的id,padding为0
  • input_mask:确定哪些词是padding,padding的位置为0,其它为1,[1,1,1,1,1,0,0,0,0,0]
  • segment_ids:确定哪些词汇属于SentenceA,哪些属于SentenceB,padding为0,[0,0,0,0,1,1,1,1,1,0,0,0,0]
  • masked_lm_positions:mask词汇的position 索引位置,就是哪几个词被mask
  • masked_lm_ids:mask词汇的词表中的id
  • masked_lm_weights:mask词汇的权重,默认全是1
  • next_sentence_labels:1表示真正的上下句,0表示random获取的
Pre-training和Fine-Tuning

MLM(mark language model)
  • 每条训练样本有15%的要被mark,设置最多mark个数,shuffle word,然后遍历word,当被mark的数量满足15%或最多mark数量时,停止
  • 当word被选择为mark word时,80%被mark,10%不变(这是为了一定程度上,预训练和微调保持一致),10%被替换任意词汇(这是为了防止过拟合,就是加入噪音)
训练语料及模型大小设置
  • 训练语料:Wiki和book corpus,内容比较正经,对于口语化严重的场景下,会有一点影响
  • 模型大小:Base:110M(LayerSize=12,HiddenSize=768,MultiHead=12);Large:340M(LayerSize=24,HiddenSize=1024,MultiHead=16)
    详细模型大小计算,可参考基础资料里面的《Bert参数量统计》
句向量pooling

当需要选择encoder的output作为sentence的represention时候,我们一般选择[CLS]对应位置的词向量,因为[CLS]本身没有含义,所以它和其它word的attention正好就是sentence的context表示,所以选择它比较合适(其实这也是一种pooling选择,可以像set transformer一样pooling)

SQuAD

SQuAD 是斯坦福大学于2016年推出的数据集,一个阅读理解数据集,给定一篇文章,准备相应问题,需要算法给出问题的答案。
Fine_tuning方法:query作为SentenceA,text作为SentenceB,组成input输入到Bert中,然后在output中通过下面公式计算

S是answer开始符合的编码,通过这种方式找到answer的开始位置和结束位置,训练目标:使得anwer的开始位置和结束位置的log-likelihoods之和最大

SWAG(The Situations With Adversarial Generations)

给出一个陈述句子和4个备选句子, 判断前者与后者中的哪一个最有逻辑的连续性, 相当于阅读理解问题
Sentence A是陈述句子,SentenceB是备选句子,训练参数:一个vector,该条句子的score是这个vector和CLS的产出的点乘

微调模式

缺陷及优点

缺陷
  • 微调和预训练不一致,微调数据中没有mark,预训练有15%*80%的mark(xlnet一定程度解决,但也没完全解决,预测时没有mark)
  • 模型文件太大,训练时间太长,一方面,这是因为self.attention的训练复杂度时n的2次方(set transformer解决这个问题);另一方面,每轮只有15%的词汇预测,太慢(ELECTRA 通过在encoder后面加了一个识别器,识别所有单词是否为原生的,这样就解决了15%的限制)
  • 训练语料不全,albert、RoBerta、ERNIE都在通过丰富语料来提高效果
  • mark 单一word导致专有名词、实体等,不能分开的词组,学不到和其它实体的关系(百度的ERNIE通过词组识别,mark词组)(albert 使用mark的n-gram方法)
  • 静态mark,一个word一旦被选定为mark,在所有的epoch中都会被选中,这不合理,RoBerta通过复制多份数据,每份数据的mark都不一样
  • NEP:只能学习两个句子的联系,RoBerta 加入连续多个句子,学习多个句子之间的联系;albert使用SOP判断两个句子是否被交换过顺序
  • Bert产出的句向量,在计算句子相似度时,不合适直接进行点积或余弦相似度计算,因为区别度不高,可以使用neural tensor layer进行训练,公式如下:
优点
  • 借用transformer的self.attention优势,真正实现双向文本表示(不像elmo那样,两个单向相加还是单向的,下图所示)
  • fine_tuning效果好于Feature-based(ELMo,结合下游任务产出encoder的向量表示),摆脱下游任务,使用MLM和NSP,学习词级别和句级别的表示,然后再结合下游任务微调,效果达到很好

3、Albert

基础资料

  • 论文资料 《ALITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS》 https://openreview.net/pdf?id=H1eA7AEtvS
  • GitHub 英文:https://github.com/google-research/albert;中文:https://github.com/brightmart/albert_zh
  • albert简介:https://blog.csdn.net/jiaowoshouzi/article/details/102320781
  • 解读ALBERT:https://blog.csdn.net/weixin_37947156/article/details/101529943

基本结构

嵌入向量参数化的因式分解

对于 ALBERT 而言,研究者对词嵌入参数进行了因式分解,将它们分解为两个小矩阵。研究者不再将 one-hot 向量直接映射到大小为 H 的隐藏空间,而是先将它们映射到一个低维词嵌入空间 E,然后再映射到隐藏空间。通过这种分解,研究者可以将词嵌入参数从O(V × H) 降低到 O(V × E + E × H),这在 H 远远大于 E 的时候,参数量减少得非常明显
可以参考《用深度矩阵分解给词向量矩阵瘦身》https://zhuanlan.zhihu.com/p/85339902,简化词向量参数的数量级

跨层参数共享(参数量减少主要贡献)

对于 ALBERT,研究者提出了另一种跨层参数共享机制来进一步提升参数效率。其实目前有很多方式来共享参数,例如只贡献前馈网络不同层之间的参数,或者只贡献注意力机制的参数,而 ALBERT 采用的是贡献所有层的所有参数,研究者发现 ALBERT 从一层到另一层的转换要比 BERT 平滑得多,结果表明,权重共享有效地提升了神经网络参数的鲁棒性。

句间连贯性损失(SOP)

谷歌自己把它换成了 SOP。这个在百度 ERNIE 2.0 里也有,叫 Sentence Reordering Task,而且 SRT 比 SOP 更强,因为需要预测更多种句子片段顺序排列。ERNIE 2.0 中还有一些别的东西可挖,比如大小写预测

Captialization Prediction Task、句子距离 Sentence Distance Task。

  • NOP:下一句预测, 正样本=上下相邻的2个句子,负样本=随机2个句子
  • SOP:句子顺序预测,正样本=正常顺序的2个相邻句子,负样本=调换顺序的2个相邻句子
  • NOP任务过于简单,只要模型发现两个句子的主题不一样就行了,所以SOP预测任务能够让模型学习到更多的信息

句子样本选取的考虑如下:

  • BERT使用的NSP损失,是预测两个片段在原文本中是否连续出现的二分类损失。目标是为了提高如NLI等下游任务的性能,但是最近的研究都表示 NSP 的作用不可靠,都选择了不使用NSP。
  • 作者推测,NSP效果不佳的原因是其难度较小。将主题预测和连贯性预测结合在了一起,但主题预测比连贯性预测简单得多,并且它与LM损失学到的内容是有重合的。
  • SOP的正例选取方式与BERT一致(来自同一文档的两个连续段),而负例不同于BERT中的sample,同样是来自同一文档的两个连续段,但交换两段的顺序,从而避免了主题预测,只关注建模句子之间的连贯性。
运行一定步后删除Dropout

删除的原因(bert的dropout应用可以参考上文bert)

  • 模型的内部任务(MLM,SOP等等)都没有过拟合
  • dropout是为了降低过拟合而增加的机制,所以对于bert而言是弊大于利的机制
Segments-Pair

BERT为了加速训练,前90%的steps使用了128个token的短句子,最后10%才使用512个token的长句子训练位置向量。

ALBERT貌似90%的情况下使用512的segment,从数据上看,更长的数据提供更多的上下文信息,可能显著提升模型的能力

Masked-ngram-LM

BERT的MLM目标是随机MASK15%的词来预测,ALBERT预测的是N-gram片段,包含更多的语义信息,每个片段长度n(最大为3),根据概率公式计算得到。比如1-gram、2-gram、3-gram的的概率分别为6/11、3/11、2/11.越长概率越小:

模型大小

对Embedding因式分解

下图是E选择不同值的一个实验结果,尴尬的是,在不采用参数共享优化方案时E设置为768效果反而好一些,在采用了参数共享优化方案时E取128效果更好一些。

跨层的参数共享

下图是BERT与ALBERT的一个对比,以base为例,BERT的参数是108M,而ALBERT仅有12M,但是效果的确相比BERT降低了两个点。由于其速度快的原因,我们再以BERT xlarge为参照标准其参数是1280M,假设其训练速度是1,ALBERT的xxlarge版本的训练速度是其1.2倍,并且参数也才223M,评判标准的平均值也达到了最高的88.7


缺陷及优点

缺陷

在初闻ALBERT时,以为其减少了总的运算量,但实际上是通过参数共享的方式降低了内存,预测阶段还是需要和BERT一样的时间,如果采用了xxlarge版本的ALBERT,那实际上预测速度会更慢。

优点

ALBERT解决的是训练时候的速度提升,如果要真的做到总体运算量的减少,的确是一个复杂且艰巨的任务,毕竟鱼与熊掌不可兼得。不过话说回来,ALBERT也更加适合采用feature base或者模型蒸馏等方式来提升最终效果。

4、RoBerta

基础资料

  • 论文 《RoBERTa: A Robustly Optimized BERT Pretraining Approach》https://arxiv.org/abs/1907.11692
  • Github:https://github.com/pytorch/fairseq
  • 改进版的RoBERTa到底改进了什么?https://www.jianshu.com/p/eddf04ba8545
  • 文献阅读笔记 https://blog.csdn.net/ljp1919/article/details/100666563

基本结构

静态Masking(Bert) vs 动态Masking(RoBerta)

静态Masking: 原来Bert对每一个序列随机选择15%的Tokens替换成[MASK],为了消除与下游任务的不匹配,还对这15%的Tokens进行(1)80%的时间替换成[MASK];(2)10%的时间不变;(3)10%的时间替换成其他词。但整个训练过程,这15%的Tokens一旦被选择就不再改变,也就是说从一开始随机选择了这15%的Tokens,之后的N个epoch里都不再改变了。

动态Masking: 而RoBERTa一开始把预训练的数据复制10份,每一份都随机选择15%的Tokens进行Masking,也就是说,同样的一句话有10种不同的mask方式。然后每份数据都训练N/10个epoch。这就相当于在这N个epoch的训练中,每个序列的被mask的tokens是会变化的。

with NSP(Bert) vs without NSP(RoBerta)

with NSP(Bert):原本的Bert为了捕捉句子之间的关系,使用了NSP任务进行预训练,就是输入一对句子A和B,判断这两个句子是否是连续的。在训练的数据中,50%的B是A的下一个句子,50%的B是随机抽取的。
without NSP(RoBerta):而RoBERTa去除了NSP,而是每次输入连续的多个句子,直到最大长度512(可以跨文章)。这种训练方式叫做(FULL - SENTENCES),而原来的Bert每次只输入两个句子。实验表明在MNLI这种推断句子关系的任务上RoBERTa也能有更好性能。

更大的mini-batch (实际应用中,我们应该不断扩大mini_batch,直至把显卡内卡打满)

原本的BERTbase 的batch size是256,训练1M个steps。RoBERTa的batch size为8k。为什么要用更大的batch size呢?(除了因为他们有钱玩得起外)作者借鉴了在机器翻译中,用更大的batch size配合更大学习率能提升模型优化速率和模型性能的现象,并且也用实验证明了确实Bert还能用更大的batch size。

更多的数据,更长时间的训练

借鉴XLNet用了比Bert多10倍的数据,RoBERTa也用了更多的数据。性能确实再次彪升。当然,也需要配合更长时间的训练。

Additional data:CC-NEWS;OPENWEBTEXT;STORIES

更改Text Encoding

字节对编码(BPE)(Sennrich et al.,2016)是字符级和单词级表示的混合,该编码方案可以处理自然语言语料库中常见的大量词汇。BPE不依赖于完整的单词,而是依赖于子词(sub-word)单元,这些子词单元是通过对训练语料库进行统计分析而提取的,其词表大小通常在 1万到 10万之间。当对海量多样语料建模时,unicode characters占据了该词表的大部分。Radford et al.(2019)的工作中介绍了一个简单但高效的BPE, 该BPE使用字节对而非unicode characters作为子词单元。
当采用 bytes-level 的 BPE 之后,词表大小从3万(原始 BERT 的 char-level )增加到5万。这分别为 BERT-base和 BERT-large增加了1500万和2000万额外的参数。
总结下两种BPE实现方式:

  • 基于 char-level :原始 BERT 的方式,它通过对输入文本进行启发式的词干化之后处理得到
  • 基于 bytes-level:与 char-level 的区别在于bytes-level 使用 bytes 而不是 unicode 字符作为 sub-word 的基本单位,因此可以编码任何输入文本而不会引入 UNKOWN 标记。
超参设置


5、ERNIE(1.0)

基础资料

  • 论文 《Enhanced Representation from kNowledge IntEgration》https://www.aclweb.org/anthology/P19-1139.pdf
  • Github:https://github.com/PaddlePaddle/LARK/tree/develop/ERNIE
  • ERNIE预览:百度 知识增强语义表示模型ERNIE:https://www.jianshu.com/p/fb66f444bb8c
  • ERNIE - 清华 详解 https://zhuanlan.zhihu.com/p/103208601

基本结构

改变mark方法


实体主要是person name, place name, organization name这几类
考虑到有可能存在错误的token-entity alignmnent,具体操作:

  • 5%的时间,对于一个token-entity alignmnent,随机替换entity,让模型预测正确的entity
  • 15%的时间,随机mask掉 token-entity alignmnents,让模型去正确预测token-entity alignment。
  • 剩下的时间,token-entity alignmnents不变,让模型将知识进行融合。

中文的Additional data

Chinese Wikepedia, Baidu Baike, Baidu news and Baidu Tieba

预训练时Dialogue data使用(Query-Response dialogue)


负样本选取:我们通过用随机选择的句子替换查询或响应来生成伪造的样本,该模型旨在判断多轮对话是真实的还是假的

缺陷及优点

优点:善于捕获词语之间相互关系,在完型填空等类型的任务中的表现良好。

6、XLnet

基础资料

  • 论文 《XLNet: Generalized Autoregressive Pretraining for Language Understanding》https://arxiv.org/pdf/1906.08237.pdf
  • Github https://github.com/zihangdai/xlnet
  • xlnet和bert对比:https://zhuanlan.zhihu.com/p/70257427
  • xlnet原理解读:https://blog.csdn.net/weixin_37947156/article/details/93035607
  • transformer_xl 《Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context》
  • Transformer-XL介绍 https://zhuanlan.zhihu.com/p/84159401

基本结构

自回归(Autoregressive, AR)语言模型和自编码(autoencoding)模型

自回归(Autoregressive, AR)(ELMo和GPT):自回归是时间序列分析或者信号处理领域喜欢用的一个术语,我们这里理解成语言模型就好了:一个句子的生成过程如下:首先根据概率分布生成第一个词,然后根据第一个词生成第二个词,然后根据前两个词生成第三个词,……,直到生成整个句子。

自编码(autoencoding)模型(Bert):自编码器是一种无监督学习输入的特征的方法:我们用一个神经网络把输入(输入通常还会增加一些噪声)变成一个低维的特征,这就是编码部分,然后再用一个Decoder尝试把特征恢复成原始的信号。

自回归的问题:1、独立假设:被mask的word之间是相互独立的;2、预训练与微调不一致:BERT的在预训练时会出现特殊的[MASK],但是它在下游的fine-tuning中不会出现,这就是出现了不匹配。而语言模型不会有这个问题。
自编码的问题:语言模型只能参考一个方向的上下文,而BERT可以参考双向整个句子的上下文,因此这一点BERT更好一些。ELMo和GPT最大的问题就是传统的语言模型是单向的——我们是根据之前的历史来预测当前词。但是我们不能利用后面的信息。

排列语言建模(Permutation Language Modeling)


给定长度为T的序列xx,总共有T!种排列方法,也就对应T!种链式分解方法。比如假设x=x1x2x3,那么总共用3!=6种分解方法:

注意p(x2|x1x3)指的是第一个词是x1并且第三个词是x3的条件下第二个词是x2的概率,也就是说原来词的顺序是保持的。如果理解为第一个词是x1并且第二个词是x3的条件下第三个词是x2,那么就不对了。
因此我们可以遍历T!种路径,然后学习语言模型的参数,但是这个计算量非常大(10!=3628800,10个词的句子就有这么多种组合)。因此实际我们只能随机的采样T!里的部分排列。(论文没提到如何随机)

Two-Stream Self-Attention(建模上面的排列语言模型)
  • query流:为了预测x位置的词汇,只能使用x位置信息而不能使用x以及之后信息,这是显然的:你预测一个词当然不能知道要预测的是什么词。同时,也是为了防止上层的attention用到下层x位置的mark词汇信息。
  • content流:为了预测x位置之后的词,必须编码x位置的信息(语义)

我们首先把查询隐状态g初始化为一个变量w(使用embedding*g矩阵生成w),把内容隐状态h初始化为词的Embedding 。
content流分解如下:fine_tuning时也只有content流


query流分解如下:预训练时计算损失函数时也只用到了query流的向量,去和embedding做点乘softmaxt计算log_likelihood

部分预测

为了减少计算量,故对于一个因式分解样本,只预测后部分的词汇,那么训练目标就是后部分词汇的log-likelihood最大,所以同时前部分的query就不计算了,只计算content流,减少计算量

Transformer-XL


为解决self.attention的n方复杂度,以及超长文本获取信息冗余问题,限制输入文本的长度,一般的transformer在处理超长文本时,训练时segment分开,一个一个训练,预测时,segment步长为1进行移动,效率太低,故transformer_xl提出了Multiple Segments模型。

这张图上有一个点需要注意,在当前segment中,第n层的每个隐向量的计算,都是利用下一层中包括当前位置在内的,连续前L个长度的隐向量,这是在上面的公式组中没有体现出来的,也是文中没有明说的。每一个位置的隐向量,除了自己的位置,都跟下一层中前(L-1)个位置的token存在依赖关系,而且每往下走一层,依赖关系长度会增加(L-1),如下图中Evaluation phase所示,所以最长的依赖关系长度是N(L-1),N是模型中layer的数量。N通常要比L小很多,比如在BERT中,N=12或者24,L=512,依赖关系长度可以近似为O(N*L)

相对位置编码

在传统的Transformer中,输入序列中的位置信息是怎么表示的?通过POS函数生成,它是位置i和维度d的函数,也就是不同输入segment在相同绝对位置中的位置表示是相同的。在传统的Transformer中,每个segment之间的表示是没有关联的,这当然就没有问题。但是在TransformerXL中,因为引入了前一时刻segment的信息,就需要对不同时刻,同样是第i个的词进行区分。


对比来看,主要有三点变化:

  • 在b和d这两项中,将所有绝对位置向量Ui,Uj都转为相对位置向量Ri−j,与Transformer一样,这是一个固定的编码向量,不需要学习。

  • 在c这一项中,将查询的U_iT*W_qT向量转为一个需要学习的参数向量u,因为在考虑相对位置的时候,不需要查询绝对位置i,因此对于任意的i,都可以采用同样的向量。同理,在d这一项中,也将查询的U_iT*W_qT向量转为另一个需要学习的参数向量v。

  • 将K的权重变换矩阵Wk转为Wk_E 和Wk_R,分别作为content-based key vectors和location-based key vectors。

总的来说,Relative Positional Encodings就是在计算attention分数时,用相对位置R_i_j编码来代替原来的绝对位置编码Ui和Uj。并且学习了相对位置v和u用来调整不同距离和不同嵌入的得分。

TransformerXL对Transformer进行了一些调整,试图解决一些问题。按照论文的描述,TransformerXL学习的依赖关系比RNN长80%,比传统Transformer长450%,在短序列和长序列上都获得了更好的性能,并且在评估阶段比传统Transformer快1800+倍

超参设置


缺陷及优点

优点

1、解决了mark词之间的相互依赖关系;
2、通过transform_xl的加入,可以捕获更长距离的信息;

缺点

由于预训练的每一轮都是掩码矩阵的行列排列,而fine_tuning阶段是普通的transformer

7、ELECTRA

基础资料

  • 论文 《ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators》 https://arxiv.org/abs/2003.10555
  • Github https://github.com/google-research/electra
  • 中文模型下载及使用方法:https://react.ctolib.com/ymcui-chinese-electra.html#%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD

基本结构

当下流行的MLM(Masked Language Modeling)方法会大大增加计算开销,原因:模型只学到每个example中15%的tokens信息,而且有些token可能会很简单。
因此,我们创新性地提出了RTD (Replaced Token Detection)这样的新的预训练任务(可以判断每个example的所有词汇是不是被替换过,加快训练速度)。

RTD

  • 损失函数

    通常采用两个Bert实现上面的结构,并且通过两个Bert的参数共享减少参数量

  • Weight Sharing:Generator和Discriminator使用参数相同(attention参数和embedding参数)的Bert产出(用Bert的目的就是为了和Bert效果对比);实验结果显示只共享embedding时效果最好

  • Smaller Generators:可以从下图中看到,生成器的大小在判别器的1/4到1/2之间效果是最好的。作者认为原因是过强的生成器会增大判别器的难度

  • Training Algorithms:
    实际上除了MLM loss,作者也尝试了另外两种训练策略:

    • Adversarial Contrastive Estimation:ELECTRA因为上述一些问题无法使用GAN,但也可以以一种对抗学习的思想来训练。作者将生成器的目标函数由最小化MLM loss换成了最大化判别器在被替换token上的RTD loss。但还有一个问题,就是新的生成器loss无法用梯度下降更新生成器,于是作者用强化学习Policy Gradient的思想,将被替换token的交叉熵作为生成器的reward,然后进行梯度下降。强化方法优化下来生成器在MLM任务上可以达到54%的准确率,而之前MLE优化下可以达到65%。
    • Two-stage training:即先训练生成器,然后freeze掉,用生成器的权重初始化判别器,再接着训练相同步数的判别器。
  • 当采用Bert作为generator且参数全共享时,训练时间以及GLUE对比

    微调阶段,ELECTRA与各个模型在GLUE各个任务上的效果对比,ELECTRA-small++只有BERT-Base大小的大概10分之一,但效果类似

  • 超参设置


    NLP预训练模型综述 :https://www.sohu.com/a/387592630_500659

Transformer相关的各种预训练模型优点缺点对比总结与资料收集(Transformer/Bert/Albert/RoBerta/ERNIE/XLnet/ELECTRA)相关推荐

  1. 推荐系统中常用算法 以及优点缺点对比

    推荐系统中常用算法 以及优点缺点对比 2014/09/20 [Martin导读]随着互联网特别是社会化网络的快速发展,我们正处于信息过载的时代.用户面对过量的信息很难找到自己真正感兴趣的内容,而内容提 ...

  2. transformer模型_【预训练模型】万字长文梳理NLP预训练模型!从transformer到albert...

    公众号关注 "ML_NLP"设为 "星标",重磅干货,第一时间送达! " 万字长文梳理NLP预训练模型的发展历程,从transformer到alber ...

  3. 预训练模型参数量越来越大?这里有你需要的BERT推理加速技术指南

    ©作者 | 徐超 单位 | 微软亚洲互联网工程院 研究方向 | 文本相关性.多语言扩展 基于 Transformer 的预训练模型,尤其是 BERT,给各种 NLP 任务的 performance 带 ...

  4. 【文本分类】基于BERT预训练模型的灾害推文分类方法、基于BERT和RNN的新闻文本分类对比

    ·阅读摘要: 两篇论文,第一篇发表于<图学学报>,<图学学报>是核心期刊:第二篇发表于<北京印刷学院学报>,<北京印刷学院学报>没有任何标签. ·参考文 ...

  5. Simple Transformer:用BERT、RoBERTa、XLNet、XLM和DistilBERT进行多类文本分类

    作者 | Thilina Rajapakse 译者 | Raku 编辑 | 夕颜 出品 | AI科技大本营(ID: rgznai100) [导读]本文将介绍一个简单易操作的Transformers库- ...

  6. cnn和rnn可以结合使用吗,rnn和cnn优点缺点对比

    CNN和RNN在文本分类过程中的区别整理 用CNN卷积的情况,这里面有几个关键点:一个是文本跟图片不一样,图片有长宽,然后还有深度(RGB). 对应到文本上,假设文章总共N个词,每个词嵌入维度K维,那 ...

  7. 使用google的bert结合哈工大预训练模型进行中文/英文文本二分类,基于pytorch和transformer

    使用bert的哈工大预训练模型进行中文/英文文本二分类,基于pytorch和transformer 前提 简要介绍 开始 导入必要的包和环境 准备并读取数据 导入模型的tokenizer 对数据进行t ...

  8. 全面改进Transformer类预训练模型,自然语言任务超越BERT

    近日 arXiv 上一篇深度学习文章引起业内广泛关注: 论文标题:SegaBERT: Pre-training of Segment-aware BERT 论文链接:https://arxiv.org ...

  9. NLP这两年:15个预训练模型对比分析与剖析

    作者 | JayLou 来源 | 知乎 前言 在之前写过的<NLP的游戏规则从此改写?从word2vec, ELMo到BERT>一文中,介绍了从word2vec到ELMo再到BERT的发展 ...

  10. 后BERT时代:15个预训练模型对比分析与关键点探索(附链接)

    来源:知乎 作者:JayLou 本文约7800字,建议阅读10分钟. 本文对ELMo以来的15个代表性的预训练语言模型进行了多维度的对比和分析. 前言 在之前写过的<NLP的游戏规则从此改写?从 ...

最新文章

  1. Ubuntu/Deepin--How to remove packeges?
  2. 科研实习 | 北京大学计算机系林亦波老师芯片设计软件组招收实习生
  3. 交换机的质量害死人呀!
  4. 手动挂载USB/光驱步骤
  5. 怎么用matlab幅频特性曲线怎么模拟,幅频特性曲线的MATLAB模拟
  6. 微信小程序开发详细步骤
  7. 关闭445端口的方法
  8. matlab 有限元法,基于Matlab语言的有限元法及其应用
  9. 扑克牌java发牌_Java实现扑克牌洗牌和发牌
  10. 【嵌入式系统开发12】在stm32F103C8T6环境下,用HAL库,采用中断模式编程,控制LED的高亮与熄灭
  11. mysql按周几查询时间戳转周几星期
  12. Envoy 架构、术语与基本配置解析
  13. GTD时间管理学习day01---基本原理
  14. 新手如何使用腾讯云云服务器详细教程
  15. linux 时区文件的规则,linux – 如何将POSIX时间转换为Olson时区文件...
  16. 杠杆的倍数一般是多少?
  17. 混合云管平台排名您知道吗?看这里
  18. vector erase
  19. Android之TextView
  20. oracle utl inaddr,oracle11gr2中ACL对UTL_INADDR的授权报错,急急急

热门文章

  1. FE,GE,POS口的概念
  2. Mac小白应该使用App Tamer减慢或停止哪些应用程序?
  3. Windows 10实用优化辅助工具
  4. 获取当前的url并移除不想要的字段
  5. 收到大量垃圾短信怎么办?如何屏蔽垃圾短信?
  6. 2285列车时刻表_火车票查询j2285时刻表
  7. nat流量,业务流量_10种增加在线业务流量的方法
  8. 51单片机实战教程(四 延时程序)
  9. docker run 命令的 -i -t -d选项的作用
  10. appium+python闲鱼采购自动化测试实战