Transformer中到底做了什么?

Transformer中到底做了什么?

Transformer在论文《Attention is All You Need》中被提出,后来应用于BERT,实现了深度文本语义预训练模型。

参考代码如下:

  1. tensor2tensor github
  2. bert github

简单来说,transformer就是利用 self-attention 实现了在某个任务下句子中词与词的关联性。
下面是根据bert中transformer的代码画的流程图,首先明确一下图中各名称的含义:
在这里插入图片描述
图中可以看出,transformer包含两个主要的部分,self-attention部分和intermediate部分,可以通过两个残差连接和LayerNorm层划分开。(其中黄色表示输入,蓝色表示有参数的部分,绿色表示残差连接+LN)
在这里插入图片描述
attention就主要是下面这个公式,不熟悉的话可以参考blog:The Illustrated Transformer
在这里插入图片描述
self-attention部分包含了一个self-attention层,和一个全连接输出层(dense),其中self-attention层展开如下图所示,其中黄色的部分表示模型的输入,蓝色的部分表示里面有参数,其实就是Q/K/V分别经过一个全连接层,Q和K的结果做向量积,得到attention对齐矩阵,然后使用position或者句子长度之类的生成一个attention-mask,让不希望影响最后结果的部分的softmax值为零,bert代码中attention-mask遮盖部分取值为-10000,最后经过softmax得到attention矩阵,也就是V中每个单词对Q中每个单词如何影响,最后用attention矩阵对V加权平均,得到与Q中每个单词对应的向量表示。
在这里插入图片描述
下图为计算好的attention矩阵,在bert中每句话前面会加一个CLS,后面会加SEP,其余使用PAD填充到最大句子长度。其中PAD对应的向量就是要被mask遮盖的部分,可以使用真实句子长度计算,最后得到的与每个单词对应的向量为,attention概率分布与向量V(self-attention中与Q相同)的加权求和。

在这里插入图片描述

所以理论上,经过训练CLS对应的向量,是包含了整个句子的语义特征的,所以在bert中可以只用CLS对应的向量作为后续finetune分类器的依据。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章