JunnHan / MOTPapers

0 stars 1 forks source link

Attention Is All You Need #2

Closed JunnHan closed 3 years ago

JunnHan commented 3 years ago

Abstract

本文提出了一个新的网络结构--Transformer,仅依赖于注意力机制,避免了复杂的循环神经网络或是卷积神经网络。 在NLP领域中,在机器翻译任务上进行了验证实验,取得了良好表现。

JunnHan commented 3 years ago

Model Architecture

Encoder-Decoder结构 (模型是自回归的,自回归模型是用自身做回归变量的过程,即利用前期若干时刻随机变量的线性组合来描述以后某时刻随机变量的线性回归模型)

网络结构模型如图所示:

  1. Encoder 基本组成:N=6,由6个相同的层组成,每一层下有两个子层:①多头自注意力机制(multi-head self-attention mechanism);②简单的按位置的全连接前向网络(position-wise fully connected feed-forward network)。 连接方式按照残差连接的方式 (Tips: y = H(x,WH) + X,此所谓残差连接,skip connection,其目的是为解决深层网络可能会出现的梯度消散的问题,这样加上残差会使得导数增加一个恒为1的项,保证误差反向传播的有效性。),并后接归一化(Layer Normalization及其它归一化操作) 因此,每一子层的输出为 LayerNorm(x + Sublayer(x)) ,Sublayer(x) 表示各子层自身的函数运算。
  2. Decoder 在组成上基本与Encoder类似,区别在于在原本的两个子层中间插入了一个用于处理Encoder输出的多头自注意力机制子层,但各子层的连接不变,仍采用残差连接并后接归一化处理。 输入是encoder的输出以及对应i-1位置的decoder的输出(自回归) 值得注意的是Decoder的自注意力机制子层进行了修改,为保证当前位置免受后续位置的影响(自回归,在语言序列中就是左边单词免受右侧单词影响),进行Masked修改,通过offset操作保证i位置的预测仅依赖于i位置前的已知输出,使得对于当前时刻变量的计算仅能获得之前时刻的变量。
JunnHan commented 3 years ago
  1. Scaled Dot-Product Attention 结构如下图所示:

    先计算querys和keys的点乘,再除以根号下keys的维数,最后利用softmax获取values权重,得到加权和,计算公式如下:

    此外,文章还分析了为何选择利用点乘形式的注意力,而不是加和,主要是性能类似,但是点乘计算起来更高效(在dk较大时,求和的表现更好,为了应对这一问题,进行了scale操作,除以了跟下dk)

  2. Multi-Head Attention 多头注意力机制是对query、key和value分别进行线性映射,最后再cat起来,结构如下图所示:

    多头注意力机制针对不同的位置能够从不同的表示空间获取信息,通过对每个head进行降维,使得总的计算复杂度几乎不变,计算公式如下:

    由于Attention在不同子空间中有不同的分布,Multi-head Attention实际上是寻找了序列之间不同角度的关联关系,并在最后concat这一步骤中,将不同子空间中捕获到的关联关系再综合起来

  3. 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操作,对于无效连接置负无穷。

JunnHan commented 3 years ago

在encoder和decoder的子层中,除了注意力机制外还有全连接的前向网络,由两个线性变化和ReLU组成,计算公式如下:

线性变换在不同位置上的计算是相同的,但不同层间的参数不同。 文中说输入输出的维度为512,层内维数为2048(nn.Linear(d_in=512, d_hid=2048)),这样可以解释用2个1*1卷积来理解这部分变换(降维,2048→1024→512)

JunnHan commented 3 years ago

Why Self-Attention 应该说是在这里选用自注意力的优点吧,主要是三点: ① 每一层总的计算复杂度; ② 可并行计算的数量,(文中将是用序列化运算所需要的最小数量来衡量的); ③ 网络学习长序列的依赖关系的最小路径,(输入输出序列位置的任意组合之间所经过的前向/后向信号组成的路径越短,表示学习长序列依赖关系的能力越强)。 文中就这三点和循环/卷积神经网络进行了实验比较,由于不是主要的研究内容,不加详述。

JunnHan commented 3 years ago

Training 硬件:8块P100 训了10万轮,用了12小时(base) 30万轮用了3天半(大模型)