Input Embedding
BERT
Bert采用两阶段模型,首先是语言模型预训练,其次是使用 Fine-Tuning 模式解决下游任务。BERT 预训练模型分为以下三个步骤:Embedding、Masked LM、Next Sentence Prediction。
- Embedding 由三种 Embedding 求和而成:
Token Embeddings 是词向量,第一个单词是 CLS 标志,可以用于之后的分类任务;Segment Embeddings 用来区别两种句子,因为预训练不光做 LM 还要做以两个句子为输入的分类任务;Position Embeddings 和之前文章中的 Transformer 不一样,不是三角函数而是学习出来的。
- MLM 可以理解为完形填空,作者会随机mask每一个句子中 15% 的词,用其上下文来做预测,例如:my dog is hairy → my dog is [MASK],此处将 hairy 进行了 mask 处理,然后采用非监督学习的方法预测mask位置的词是什么。
- 选择一些句子对 A 与 B,其中 50% 的数据 B 是 A 的下一条句子,剩余 50% 的数据B是语料库中随机选择的,学习其中的相关性。
Transformer
Transformer
Positional Encoding
transformer 给 encoder 层和 decoder 层的输入添加了一个额外的向量 Positional Encoding,维度和 embedding 维度一样,通过模型学习,这个向量能决定当前词的位置,或者说在一个句子中不同的词之间的距离。在偶数位置,使用正弦编码,在奇数位置,使用余弦编码,最后把 Positional Encoding 与 embedding 的值相加,作为输入送到下一层。
Self-Attention
通过 query 和 key 的相似性程度来确定 value 的权重分布(scaled dot-product attention)。计算出 Query, Key, Value 的矩阵,然后把 embedding 的值与三个矩阵直接相乘,把得到的新矩阵 Q 与 K 相乘,乘以一个常数,做 softmax 操作,最后乘上 V 矩阵。
Multi-Headed Attention + Feed Forward Neural Network
初始化 8 组 Q、K、V 的矩阵,得到的结果是8个矩阵。把 8 个矩阵连在一起,得到一个大的矩阵,再随机初始化一个矩阵和这个组合好的矩阵相乘,最后得到一个最终的矩阵。
将模型分为多个头,形成多个子空间,可以让模型去关注不同方面的信息,最后再将各个方面的信息综合起来。多次attention综合的结果能够起到增强模型的作用,也可以类比 CNN 中同时使用多个卷积核的作用,有助于网络捕捉到更丰富的特征或信息。
masked mutil-head attetion