Closed JunnHan closed 3 years ago
Encoder-Decoder结构 (模型是自回归的,自回归模型是用自身做回归变量的过程,即利用前期若干时刻随机变量的线性组合来描述以后某时刻随机变量的线性回归模型)
网络结构模型如图所示:
Scaled Dot-Product Attention 结构如下图所示:
先计算querys和keys的点乘,再除以根号下keys的维数,最后利用softmax获取values权重,得到加权和,计算公式如下:
此外,文章还分析了为何选择利用点乘形式的注意力,而不是加和,主要是性能类似,但是点乘计算起来更高效(在dk较大时,求和的表现更好,为了应对这一问题,进行了scale操作,除以了跟下dk)
Multi-Head Attention 多头注意力机制是对query、key和value分别进行线性映射,最后再cat起来,结构如下图所示:
多头注意力机制针对不同的位置能够从不同的表示空间获取信息,通过对每个head进行降维,使得总的计算复杂度几乎不变,计算公式如下:
由于Attention在不同子空间中有不同的分布,Multi-head Attention实际上是寻找了序列之间不同角度的关联关系,并在最后concat这一步骤中,将不同子空间中捕获到的关联关系再综合起来
Applications of Attention in our Model 根据整体的结构图也可以看出,多头注意力机制应用在了三个地方: ①连接了encoder-decoder:query是来自decoder的前一子层,key和value是来自encoder的输出(使得decoder的所有位置均能参与到输入序列的每一个位置中); ②encoder内的自注意力层:所有的key、value和query都来自同一地方,即encoder前一子层的输出(使得encoder每一个位置均能够获得之前层的所有位置信息); ③decoder内的自注意力层:与encoder的类似,但为防止向左信息流对自回归属性的影响(t时刻后的信息不能影响t时刻及之前),在scaled dot-product attention内加了masked操作,对于无效连接置负无穷。
在encoder和decoder的子层中,除了注意力机制外还有全连接的前向网络,由两个线性变化和ReLU组成,计算公式如下:
线性变换在不同位置上的计算是相同的,但不同层间的参数不同。 文中说输入输出的维度为512,层内维数为2048(nn.Linear(d_in=512, d_hid=2048)),这样可以解释用2个1*1卷积来理解这部分变换(降维,2048→1024→512)
Embeddings and Softmax 采用特征表示,将输入输出转化为512维的向量;如结构图所示,对于decoder的输出使用线性变换和softmax来预测下一token的概率。
Positional Encoding 由于Transformer结构不使用循环/卷积网络,但在处理序列问题上顺序是极为重要的一个信息,因此positional encoding的提出就是为了能够将序列中其他位置的信息引入进来。 positional encodings具有和embeddings相同的维数512,因此可以直接相加。 作者采用三角函数计算相对位置信息,如下式:
作者分析是三角函数使得网络对于相对位置信息的学习处理更容易,因为对于任意给定的偏差长度,相对于某位置的偏差位置的特征信息都可以用一个原本这个位置的线性函数来表示;此外,使用三角函数还有利于处理更长的序列。
Why Self-Attention 应该说是在这里选用自注意力的优点吧,主要是三点: ① 每一层总的计算复杂度; ② 可并行计算的数量,(文中将是用序列化运算所需要的最小数量来衡量的); ③ 网络学习长序列的依赖关系的最小路径,(输入输出序列位置的任意组合之间所经过的前向/后向信号组成的路径越短,表示学习长序列依赖关系的能力越强)。 文中就这三点和循环/卷积神经网络进行了实验比较,由于不是主要的研究内容,不加详述。
Training 硬件:8块P100 训了10万轮,用了12小时(base) 30万轮用了3天半(大模型)
Abstract
本文提出了一个新的网络结构--Transformer,仅依赖于注意力机制,避免了复杂的循环神经网络或是卷积神经网络。 在NLP领域中,在机器翻译任务上进行了验证实验,取得了良好表现。