文章目录
1. 背景介绍
预训练语言模型(pre-train language model)相信大家都已经很熟悉了,本篇主要是对Transformer 的原理及几种主要的预训练语言模型(PLMs)做简要的梳理。
PLMs:先在一批语料上训练模型,然后在该模型基础上继续训练或另做他用。
预训练阶段:一般会在超大规模语料上,利用无监督或弱监督的方式训练模型,该模型具备两个特点:①能够学习到足够多的语言知识;②参数规模很大。
微调阶段:利用预训练好的模型,去定制化训练某些任务,往往会事半功倍。
2. Transformer原理(2017-06)
1) 编码器-解码器
- a.编码器由 6 个相同的层堆叠在一起,每一层又有两个支层。第一个支层是一个多头的自注意机制,第二个支层是一个简单的全连接前馈网络。在两个支层外面都添加了一个残差连接,然后进行了层-归一化的操作。
- b.解码器也是堆叠了 6 个相同的层。不过每层除了编码器中那两个支层,解码器还加入了第三个支层,同样也用了残差连接以及层-归一化。
- c.编码器就是利用学习好的 embeddings 将 tokens(一般应该是词或者字符)转化为 d 维向量。对解码器来说,利用线性变换以及 softmax 函数将解码的输出转化为一个预测下一个 token 的概率。
2) 输入输出流程
- a.计算 Self Attention:对输入编码器的每个词向量,分别与 3 个权重矩阵 WQ、WK、WV 相乘,得到 3 个向量:Query 向量,Key 向量,Value 向量,而这 3 个矩阵是我们要学习的参数。
- b.这 3 个新得到的向量一般比原来的词向量的长度更小。比如这 3 个向量的长度是64,而原始的词向量或者最终输出的向量的长度是 512(这 3 个向量的长度,和最终输出的向量长度,有倍数关系)。
- c.计算(attention score)注意力分数
3) 多头注意力(multi-head attention)
多头注意力机制从一下两个方面来增强 attention 层的能力:
- a.它扩展了模型关注不同位置的能力。在上面的例子中,第一个位置的输出 z1 包含了句子中其他每个位置的很小一部分信息,但 z1 可能主要是由第一个位置的信息决定的,多头注意力机制会削弱自身的影响。
- b.多头注意力机制赋予 attention 层多个“子表示空间”。多头注意力机制会有多组的权重矩阵,每一组注意力的权重矩阵都是随机初始化的。经过训练之后,每一组注意力可以看作是把输入的向量映射到一个“子表示空间”。
- c.把 8 个矩阵 {Z0,Z1…,Z7} 拼接起来,把拼接后的矩阵和 WO 权重矩阵相乘,得到最终的矩阵 Z,这个矩阵包含了所有 attention heads(注意力头) 的信息。这个矩阵会输入到 FFNN (Feed Forward Neural Network)层。
4) 位置编码(position embedding)
l a t e x latex latexPE_{(pos,2i)}=sin(pos/10000^{2i/d_{model}}) PE_{(pos,2i+1)}=cos(pos/10000^{2i/d_{model}}) \small pos 即 position,意为 token 在句中的位置,设句子长度为 L ,则 pos=0,1,…,L−1, \ i 为向量的某一维度,例如,d_{model}=512 时,i=0,1,…,255。
5) 残差连接与层-归一化
6) 编码-解码注意力层
- Encoder-Decoder Attention层是使用前一层的输出来构造 Query 矩阵,而 Key 矩阵和 Value 矩阵来自于解码器最终的输出,有助于解码器把注意力集中输入序列的合适位置。
3. BERT
Bert主要包括三个部分:
- embedding
token embedding + segment embeding + position embedding - MLM(mask language model)
随机 Mask 掉句子中 15% 的词,用上下文来预测。为防止 fine-tuning 中 mask 掉的词从未出现过, 会用80%的 mask, 10% 用随机词,10% 保持不变。 - NSP(next sentence prediction)
选择一些句子对,50% 随机,学习两个句子之间的相关性。
HuggingFace中Bert的两种位置编码:
- 2018 Google方案:Self-Attention with Relative Position Representations
l a t e x latex latexe_{ij}=\frac{x_iWQ(x_jWK)T+x_iWQ(a_{ij}K)T}{\sqrt{d_z}} \small计算i和j之间得分时,将query和相对距离编码的信息进行交互 - 2020 AWS方案:Improve Transformer Models with Better Relative Position Embeddings
l a t e x latex latexe_{ij}=\frac{(x_iW^Q)\cdot (x_jWK)+(x_iWQ)\cdot a_{ij}+(x_jW^K)\cdot a_{ij}}{\sqrt{d_z}} \small 计算i和j之间得分时,增加了key和相对距离编码的交互 \
原理:在计算i对j的相关性时,增加了ij之间在Query空间、Key空间中的相对位置信息。
优点: - 利用 self-attention,自带双向功能
- 获得句子级别的语义表征
- 更好的适配下游任务,微调成本小
缺点:
- Mask 标记在预测中不会出现,训练与预测不一致
- 每个batch只有15%的 token被预测,对于输入是很大的信息损失
4. BERT系列
1) RoBERTa
- 删除了NSP任务,每次可以输入连续多个句子
- Batch Size更大,Bert base 为256, RoBERTa为8000
- 动态掩码,采用多种不同的方式进行mask
2) Albert
- 矩阵分解
- 跨层参数共享
- SOP(sentence order prediction)任务
3) ERNIE & Bert-WWM & NeZha
- 知识掩盖策略增强模型性能,包括实体级和短语级
5. XLNET
- Transformer-XL:为了提升Transformer建模长距离依赖侧能力,上一个片段的状态会被缓存下来在当前片段使用。
核心部分:①片段递归机制 ②相对位置编码
提升能力:①捕获长期依赖的能力 ②解决上下文碎片化问题 - XLNET属于AR(auto regressive)模型(使用上文或下文信息来预测下一个词)。
XLNET为了加上双向信息,引入了 two-stream self attention:
①Content 流:标准的transformer计算过程。
②Query 流:代替Bert的 mask,采用attention mask 机制在内部mask,mask比例与位置有关。
相较于Bert,XLNET词利用率更高,同时避免了训练和预测不一致的情况。
6. 总结
- 预训练语言模型的优点:①预训练模型的通用性;②更好的初始化参数;③正则化手段
- 预训练在多模态等任务中的应用
- nlp预训练模型的问题:①有没有更好的网络?②模型能否更快更小更好?③消耗资源、污染环境的追求超大模型是否必要?④可解释性……
Refs: