Songqian Li's Blog

去历史上留点故事

本文主要是针对近年来序列模型的发展,例如 BERT、Transformer-XL、XLNet、RoBERTa 以及 XLM 等模型的思路整理。

BERT: Bidirectional Encoder Representations from Transformers



上图是 BERT 提出的主要的两个点。

选择encoder哪一层的信息会比较好呢?上图给出了解答。不难看出,后四层的encodersum之后得到了当前维度的最高F1,而concat后四层发现F1又有所提高,所以综合来看选择encoder的后几层的效果会比较好。

Transformer-XL

超长输入的文本会被原始的 transformer 切掉,而且如果进行切分的时候也没有很好的解决切分的边界问题。Transformer-XL就是要解决这个问题。

Tranformer-XL的解决方式如上图所示,在训练下一个segment时,从上一个segment读取参数进行重用,这样可以使得dependency的长度可以扩展到N倍,N是神经网络的深度。

模型优点的比较:在Vanilla版本Train phase时,两个segment是互相独立的,在跨越两个seqmentdependency就没有被考虑;而在Evaluation时,如果要输出的长度为 6,而学习的一个segment只有 4 的时候,就会出现预测的序列只能看到前后 4 个点的权值。

让模型去考虑相对位置的关系,而不是绝对位置的关系。ExiExi 是word embedding,UiUi 是position embedding,在相对位置关系中会选定一个基准点作为基准向量 uTuT、vTvT,然后用 Ri−jRi−j 来表示 i,ji,j 两个位置之间的差异,这里 uT,vT,Ri−juT,vT,Ri−j 都是需要训练的。

XLNet:Generalized Autoregressive Pretraining for Language Understanding

在说 XLNet 之前要先提一下 AR 和 AE 模型的概念。

Auto-Regressive(AR)


模型在预测 XtXt 的时候,只会看到前半部分或者后半部分考虑的information

Auto-Encoding(AE)


从一个有noise的样本预测原本的值,是可以看到左右两部分的信息。
AE 存在的问题是:

  1. AE 模型认为不同位置的[MASK]是互相独立的,认为模型预测前一个[MASK]的词不会影响到后一个[MASK],但是实际上是有可能两个位置的[MASK]互相关联。
  2. pre-trainingfine-tuning之间存在差异。具体表现在pre-training过程中有[MASK]标签,而在fine-tuning过程中是没有[MASK]的,这就存在了一种input noise的情况。

XLNet


XLNet 目标是使用 AR 模型,但同时也能够使用bidirectional contexts。方法是随机排列这段sequence的每个单词,让模型去学习每个随机后的sequence,这样在第 tt 个位置之后的信息也有可能随机到 tt 前面而被模型学习到。
例如图中三种情况:

  1. 序列为3-2-4-1:以 3 为例,此时 3 为开头,模型只能看到起始符,看不到其他任何符号;
  2. 序列为2-4-3-1:以 3 为例,此时 3 可以看到 2 和 4;
  3. 序列为1-4-2-3:以 3 为例,此时可以看到序列的全部其他信息(1,4,2)。

实现细节


上述的乱序过程实质上就是改变了每个节点的Attention可以看到哪些节点的信息,也就是改变了Attention mask矩阵的值。因此在实现Positional Encoding时,没有打乱 x1,…,x4x1,…,x4 的顺序,而是将每个节点可以看到的信息依次填入了正常的Positional Encoding矩阵。

但是实现这种随机乱序存在的问题是模型不知道 P(x3|x1,x2)P(x3|x1,x2)和 P(x4|x1,x2)P(x4|x1,x2)的区别,模型不知道预测的下一个token是第三个位置的还是第四个位置的,为了解决这个问题就引入了Two-Stream Self-Attnetion来引入position信息 ztzt。

两个Stream分别是能看到自身的Content streamhh 和不能看到自身的Query streamgg。

上图能够更清楚的展示出Content streamQuery stream的区别。最终模型在pre-training阶段时,因为sequence中存在[MASK],所以就使用Query stream来学习信息;在fine-tuning时由于可以看到所有的输入所以就使用Content stream
个人理解:XLNet 利用两种Attention来解决pre-trainingfine-tuning阶段中存在的input noise问题,在预测[MASK]位置的信息时使用Query stream,在预测其他位置的信息时使用Content stream

RoBERTa:A Robustly Optimized BERT Pretraining Approach

Contributions:

  1. pre-training 使用十次不同的 mask 结果;
  2. 调参;
  3. 增大数据量,只训练完整的序列。(个人感觉最大的优点,数据量大)

    下面是 BERT 模型的其他变种:

SpanBERT: Improving Pre-training by Representing and Predicting Spans

XLM: Enhancing BERT for Cross-lingual Language Model

REFERENCE

Facebook AI Research 的 XLM 模型:将 BERT 扩展成跨语言模型
台大《应用深度学习》国语课程(2020) by 陈蕴侬

相关文章
评论
分享
  • 使用PyTorch可视化必须知道的TensorBoard参数

    亲测可用的PyTorch和TensorflowBoard版本,不会出现绘制模型结构图片时空白的情况。 1234torch==1.2.0tensorboard==2.1.1tensorflow==2.1.0tensorboardX==2...

    使用PyTorch可视化必须知道的TensorBoard参数
  • 我发现了Transformer模型的秘密

    本文希望从 Base-Attention 到 Transformer 逐层递进的解释其中的计算细节,从而更好的理解 Transformer 模型。本文主要对模型可能存在的盲区进行解释,可能思路有些跳跃,请谅解。参考资料见文章末尾Ref...

    我发现了Transformer模型的秘密
  • 正则化

    模型越复杂越容易出现过拟合状态,所以需要一种机制来保证我们模型的“简单”,这样我们的模型才能有较好的泛化能力,正则化是这类机制之一。 欧几里得范数: L2 范数: L1 范数: 推导过程 泰勒公式   为什么可以减少过拟...

    正则化
  • 机器学习常用算法原理

    Logistic Regression 逻辑回归的假设函数: 其中是输入,是要求解的参数。 函数图像: 一个机器学习模型实际上是把决策函数限定在某组条件下,这组限定条件决定了模型的假设空间,逻辑回归的假设空间: 它的意思是在给...

    机器学习常用算法原理
  • 《操作系统真象还原》:第十章 输入输出系统

    上一章中我们遇到的字符混乱和 GP 异常问题,根本原因是由于临界区代码的资源竞争,这需要一些互斥的方法来保证操作的原子性。 10.1 同步机制——锁 10.1.1 排查 GP 异常,理解原子操作 多线程执行刷屏时光标值越界导致...

    《操作系统真象还原》:第十章 输入输出系统
  • 《操作系统真象还原》:第九章 线程

    线程和进程将分两部分实现,本章先讲解线程。 9.1 实现内核线程 9.1.1 执行流 在处理器数量不变的情况下,多任务操作系统采用多道程序设计的方式,使处理器在所有任务之间来回切换,这称为“伪并行”,由操作系统中的任务调度器决定当...

    《操作系统真象还原》:第九章 线程
  • GPU虚拟化

    用户层虚拟化 本地 API 拦截和 API formwarding 在用户态实现一个函数库,假设叫 libwrapper, 它要实现底层库的所有 API; 让 APP 调用这个 libwrapper。如何做? libwrap...

    GPU虚拟化
  • 硬件虚拟化

    硬件虚拟化介绍 硬件虚拟化要做的事情 体系结构支持 体系结构 实现功能 作用 模式切换 Host CPU <-> Guest CPU 切换 CPU 资源隔离 二阶段地址转换 GVA-> GPA...

    硬件虚拟化
  • 《操作系统真象还原》:第八章 内存管理系统

    8.1 makefile 简介 这部分可参考阮一峰的讲解:https://www.ruanyifeng.com/blog/2015/02/make.html 8.1.1 makefile 是什么 makefile 是 Linu...

    《操作系统真象还原》:第八章 内存管理系统
  • 《操作系统真象还原》:第七章 中断

    7.1 中断是什么,为什么要有中断 运用中断能够显著提升并发,从而大幅提升效率。 7.2 操作系统是中断驱动的 略 7.3 中断分类 把中断按事件来源分类,来自 CPU 外部的中断就称为外部中断,来自 CPU 内部的中断称为内部...

    《操作系统真象还原》:第七章 中断