Transformer是谷歌在2017年提出的著名算法,源自于论文《Attention Is All You Need》。
1.Transformer的主要结构
Transformer是一个基于Encoder-Decoder框架的模型,它的主要结构分为四个部分。分别是输入部分(Embedding)、Encoder、Decoder和输出部分(线性Linear层和Softmax层)。
其中最重要的是第2和第3部分,即Encoder和Decoder。
1.1 输入层
其实就是,经过向量化和加法的操作,实现了单词的拆分与单词的位置信息的融入,输出的张量带有了位置信息。
Transformer的输入主要包括两部分:
- 源语言句子(左)和位置编码器
- 目标语言句子(右)和位置编码器
①Embedding:句子单词化
②Positional Encoding:相当于加上一个数(代表位置信息),再变成统一长度。
*Embedding层称作文本嵌入层,产生的张量称为词嵌入张量。
*Positional Encoding是位置编码器。在第二步的encoder里,没有针对词汇位置信息的处理,因此需要在Embedding后面加入位置编码器,使生成的张量带有位置信息。(词汇位置不同,可能会产生不同语义的信)
1.2 编码器Encoder(说明书)
其实就是,经过一系列的矩阵操作,实现了单词间的权重计算,再输出的张量就带有了其他单词的上下文信息。这里输出的矩阵相当于字典Key和Value。
主要组成部分:(n个)
- 自注意力层:多头自注意力子层+规范化层+残差连接
- 前馈层:向前传播的全连接子层+规范化层+残差连接
源语言句子经过编码器(Encoder)进行编码,得到一系列的编码表示。
1.3解码器Decoder(拼零件)
其实就是,通过单词间的权重计算,得到带有了位置信息和上下文信息的向量,协同Encoder得到的字典矩阵,经过一系列的矩阵操作,输出预测向量。
主要组成部分:(n个)
- 自注意力层(相当于预测的Query):多头自注意力子层+规范化层+残差连接
- 注意力层(相当于字典的Key和Value):多头注意力子层+规范化层+残差连接
- 前馈层:向前传播的全连接子层+规范化层+残差连接
*编码器有两个输入:解码器传来的编码表示和目标语言句子,逐步生成翻译结果。
1.4 输出层
其实就是,接收Decoder输出的向量,先变成一维向量,然后算出最大概率的单词索引,根据索引输出单词。
主要组成部分:
- Linear线性层
- Softmax层
Self-attention
字典自查表:通过权重标明相互关系
运用像字典的Key 和 Value,像查询的Query,计算输出一个预测结果Z。
- d_k是向量维度,是Q,K矩阵的列数。
Muti-attention
多个Self-attention
相当于一件事情找n个人做,保证准确性和稳定性。
不同的注意力权重矩阵QKV,求得n个不同矩阵Z0-Zn,最后取加权平均,输出一个最终的Z 。
残差连接
(典型代表是Resnet)