transformer目的是解决NLP中使用RNN不能并行计算问题。
Encoder-Decoder, Attention, Transformer 三者关系
1.基础储备
(1)CV基础知识
1.首先拿CV中的分类任务来说,训练前我们会有以下几个常见步骤:
2.获取图片
3.定义待分类的类别,用数字标签或者one-hot向量标签表示
4.对图片进行类别的标注
5.图片预处理(翻转、裁剪、缩放等)
6.将预处理后的图片输入到模型中
7.对于分类任务来说,模型的输入为预处理过的图片,输出为图片的类别(一般为预测的向量,然后求argmax获得类别)
(2)NLP基础知识
在NLP中,拿翻译任务(英文翻译为中文)来说,训练模型前存在下面步骤:
1.获取英文中文对应的句子
2.定义英文词表(常用的英文单词作为一个类别)和中文词表(一个字为一个类别)
3.对中英文进行分词
4.将分好的词根据步骤2定义好的词表获得句子中每个词的one-hot向量
5.对每个词进行embedding(输入one-hot输出与该词对应的embedding向量)
6.embedding向量输入到模型中去
7.输出为当前预测词的类别(一般为词表大小维度的向量)
(3)tokenize
tokenize:分词 token:标记
text2token:单词 (word) 、字符 (character) 、子词 (subword)
(4)query、key、value
2.Transformer结构
典型的seq2seq结构(encoder-decoder结构)
transformer结构包含input、encoder、decoder、output
Input:输入是单词的Embedding+位置编码
Encoder:循环N次,N层。每一层又可以分成Attention层和全连接层,跳跃连接,加入Normalization层
Decoder:循环N次,第一次输入是前缀信息BOS(Begin of Sentence)标志,之后是上一次产出的embedding+位置编码,进入一个重复多次的模块,直到输出EOS(End of Sentence)。该模块可以分成三块:a.Attention层;b.Cross Attention,不是Self Attention;c.全连接层。也用了跳跃连接和Normalization。
Output:通过Linear层(全连接层),再通过Softmax输出为每个词的预测向量,概率最大对应词表查找对应单词
encoder-decoder实现过程:
encoder阶段:
embedding+position作为整体输入即embedding+position=Q=K=V,通过8个head的multi-attention(self-attention)后,8个输出矩阵concat后,乘以矩阵W得到特征编码z(注意输入序列的不同部位),经过feed forward和Add&Norm得到encoder输出,block=6,经过6层,得到最终encoder特征编码。
decoder阶段:
首先上一步decoder输出(Y1…Yi-1)+position经过masked multi-attention(self-attention)之后,作为Q输入到multi-head attention(cross-attention),encoder的输出z作为K和V,z=K=V一起输入到decoder multi-head attention(cross-attention)中,经过feed forward和Add&Norm,Linear输出神经元个数=词汇表大小,softmax之后得到的是词汇表大小的向量,对应概率值,取概率最大值索引到对应单词token,即decoder的结果。
transformer训练中encoder和decoder都是并行训练,推理时decoder采用auto-regression逐步输出。