Attention Is All You Need


Transformer: 基于多头自注意力机制进行序列到序列的encoder-decoder架构,完全摒弃循环层和卷积层,nlp领域大山头!

创新、提升与理解

  • RNN不好并行,也会存在梯度消失或者爆炸的问题
  • CNN小窗口要很多层才能聚成全局信息,Transformer一层就可以注意到全部信息
  • CNN可以有不同的窗口获取到不同的信息,为了实现这一点,Transformer采用了多头注意力!
  • 编码器把原始序列映射成另一个 一样长 的编码序列
  • 解码器在编码序列的基础上,采用 自回归 的技巧从前往后生成一个新的 任意长 的序列,生成过程中先生成的分量可以用来预测下一个要生成的分量

论文十问

ReadPaper平台 提出,有助于总结信息,构建认知模型。

  1. 论文试图解决什么问题?

在机器翻译、句法分析等nlp任务上取得好成绩,进行更准确的序列转化(编-解码)。出发点在于基于CNN、RNN的模型在长距离依赖下的限制,更好的进行并行计算。

  1. 这是否是一个新的问题?

不是新问题,但是是一个全新的思路。

  1. 这篇文章要验证一个什么科学假设?

在序列到序列学习中,用(多头)自注意力机制替代循环层、卷积层,可以取得很好的结果。

  1. 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?

暂略

  1. 论文中提到的解决方案之关键是什么?

用(多头)自注意力机制完全替代循环层和卷积层、位置编码、适当位置加入前馈神经网络、注意力机制的多层灵活运用。

  1. 论文中的实验是如何设计的?

在公开数据集上训练,和其他模型作比较,并控制变量评估了模型中各个部分所带来的精度影响。

  1. 用于定量评估的数据集是什么?代码有没有开源?

WMT 2014 English-German dataset,WMT 2014 English-French dataset,Wall Street Journal (WSJ) portion of the Penn Treebank(宾州树库),已经在 https://github.com/tensorflow/tensor2tensor 上开源模型。

  1. 论文中的实验及结果有没有很好地支持需要验证的科学假设?

实验结果相当乐观,在机器翻译和句法分析等nlp任务上取得了截止论文发表时最高的评分。

  1. 这篇论文到底有什么贡献?

提出了一套革命式的nlp研究框架。

  1. 下一步呢?有什么工作可以继续深入?

扩展到其他领域(音视频图像,以及其他类型的序列到序列学习领域),模型变种(基本被卷王们做完了)。

还可以点击这里参考公开回答

思维导图

思维导图下载链接

模型框架图
注意力模型
参数影响测试

资料参考

深入理解Self-Attention

注意力机制(截取自《神经网络与深度学习》邱锡鹏)

向量的内积,其几何意义是什么?

答:表征两个向量的夹角,表征一个向量在另一个向量上的投影

note: 但是还有两个向量的模长也影响了内积

进一步的,词向量的模长代表什么?


投影的值大有什么意思?投影的值小又如何?

投影的值大,说明两个向量相关度高

我们考虑,如果两个向量夹角是九十度,那么这两个向量线性无关,完全没有相关性!


我们假设 $X = [x_1^T;x_2^T;x_3^T]$,其中 $X$ 为一个二维矩阵, $x_i^T$为一个行向量(其实很多教材都默认向量是列向量,为了方便举例请读者理解笔者使用行向量)

note: 如果 $X$ 写为 $X = [x_1,x_2,x_3]$, 其中$x_i$都是列向量的形式, 那么公式就变为$\boldsymbol{H}=\boldsymbol{V}\operatorname{softmax}\left(\frac{\boldsymbol{K}^{\top}\boldsymbol{Q}}{\sqrt{D_k}}\right) $ 的形式, 且其中Q,K,V都变为 $WX$ 的形式, 但相应的也不会影响本文分析


$softmax(XX^T)$的意义图解:


我们回想 $Softmax$ 的公式,$Softmax$ 操作的意义是什么呢?

答:归一化

note: 这里是对每一行做softmax归一化,归一化之后实际上得到了“早”,“上”,“好”三个字在“早”字上的投影长度的比例关系



在新的向量中,每一个维度的数值都是由三个词向量在这一维度的数值加权求和得来的

note: 上述的比例关系再乘回原向量“早”,“上”,“好”再求和得到了什么?看不到几何意义,但能一定程度上反应相关性,或者说包含下了整个语句的信息。


一张更形象的图是这样的,图中右半部分的颜色深浅,其实就是我们上图中黄色向量中数值的大小,意义就是单词之间的相关度(回想之前的内容,相关度其本质是由向量的内积度量的

note: 还得看词向量的意义所在,词向量内积,夹角等等的含义



note: 做的假设是X是行向量代表词语,右乘一个矩阵才能体现出对行向量做线性变换



其实,许多文章中所谓的Q K V矩阵、查询向量之类的字眼,其来源是 $X$ 与矩阵的乘积,本质上都是 $X$ 的线性变换


为什么不直接使用 $X$ 而要对其进行线性变换?

当然是为了提升模型的拟合能力,矩阵 $W$ 都是可以训练的,起到一个缓冲的效果。


假设 $Q,K$ 里的元素的均值为 0,方差为 1,那么 $A=QK^T$ 中元素的均值为 0,方差为 $d$. 当 $d$ 变得很大时, $A$ 中的元素的方差也会变得很大,如果 $A$ 中的元素方差很大,那么 $Softmax(A)$ 的分布会趋于陡峭 (分布的方差大,分布集中在绝对值大的区域)。


总结一下就是 $Softmax(A)$ 的分布会和 $d$ 有关。因此 $A$ 中每一个元素除以$\sqrt{d_k}$ 后,方差又变为 1。这使得 $Softmax(A)$ 的分布 “陡峭” 程度与 $d$ 解耦,从而使得训练过程中梯度值保持稳定。


最后再补充一点,对 self-attention 来说,它跟每一个 input vector 都做 attention,所以没有考虑到 input sequence 的顺序。更通俗来讲,大家可以发现我们前文的计算每一个词向量都与其他词向量计算内积,得到的结果丢失了我们原来文本的顺序信息。对比来说,LSTM 是对于文本顺序信息的解释是输出词向量的先后顺序,而我们上文的计算对 sequence 的顺序这一部分则完全没有提及,你打乱词向量的顺序,得到的结果仍然是相同的。

这就牵扯到 Transformer 的位置编码了。

To this end, we add “positional encodings” to the input embeddings at the bottoms of the encoder and decoder stacks. The positional encodings have the same dimension d-model as the embeddings, so that the two can be summed.

Transformer里的Mask机制

1.padding mask

在 encoder 和 decoder 两个模块里都有 padding mask,位置是在softmax之前,为什么要使用 padding mask,是因为由于 encoder 和 decoder 两个模块都会有各自相应的输入,但是输入的句子长度是不一样的,计算 attention score 会出现偏差,为了保证句子的长度一样所以需要进行填充但是用 0 填充的位置的信息是完全没有意义的(多余的),经过 softmax 操作也会有对应的输出,会影响全局概率值,因此我们希望这个位置不参与后期的反向传播过程。以此避免最后影响模型自身的效果,既在训练时将补全的位置给 Mask 掉,也就是在这些位置上补一些无穷小(负无穷)的值,经过 softmax 操作,这些值就成了 0,就不在影响全局概率的预测。

pytorch nn.Transformer 的 mask 理解 - 知乎 (zhihu.com)padding mask 讲得比较细


2.Sequence MASK

sequence MASK 是只存在 decoder 的第一个 mutil_head_self_attention 里,为什么这样做?是因为在测试验证阶段,模型并不知道当前时刻的输入和未来时刻的单词信息。也就是对于一个序列中的第 i 个 token 解码的时候只能够依靠 i 时刻之前 (包括 i) 的的输出,而不能依赖于 i 时刻之后的输出。因此我们要采取一个遮盖的方法 (Mask) 使得其在计算 self-attention 的时候只用 i 个时刻之前的 token 进行计算

举例:“我爱中国共产党”,假如要预测 “中” 这个词,那么当前时刻的输入就是 “我” 以及 “爱” 的输入的叠加,一部分来自 “ 我 “的信息输出,一部分来自” 爱”的信息输出,如果没有 mask 将后面的单词信息遮住,那么后面的单词对要预测的这个字 “中” 也会有相应的信息贡献,在训练的时候整个句子的前后字词的位置是已知的,所以不遮挡模型也是可以运行的,因为本身模型输入时就已经知道了句子的整个信息(也就是 ground truth embeding)。 但是在进行模型预测(测试新的输入句子)时,输入的句子是未知的,随机的,模型不知道句子的信息,只能通过上一层的输出和原始的输入知道要预测字的前一个信息,进而依次预测后面的字的信息。这就造成了在训练时模型多训练了 “中” 后面的词,增加了训练时间,消耗了本没必要的空间及时间。在一开始训练时就 mask 掉,节省时间的同时也降低了过拟合的风险,提高了模型泛化能力。浅析 Transformer 训练时并行问题 - 知乎 (zhihu.com)Sequence mask 讲得比较细



3.【Pytorch】Transformer 中的 mask ——转载自链接


Ideas

  1. 自注意力机制(Q,K,V结构)本质是向量信息的交叉(交互)?是否流于形式,可以简化吗?可以拓展吗?
    $ Q K^T = X W_q W_k^T X^T $, 其中 $ X = [X_1;X_2;…X_n] $…
  2. positional encodings直接和word embeddings做和,是否不妥,实际含义为何?(词本身的含义与位置相关?如果用依存句法分析树来编码?),用向量拼接的方式怎么样(存在维数控制问题?)

原文 & 个人标注

原文链接

个人批注

外文写作

用词

词语 文中释义 词语 文中释义
auto-regressive 自动回归的 albeit 尽管
stacked 堆叠的 residual connection 残差连接
parallel 并行 simultaneously 同时
additive attention 累积注意力 compatibility function 兼容函数
in magnitude 在规模上 concatenate 连接
mimics 模仿 hypothesize 假定
extrapolate to 外推到 interpretable 可解释的
training regime 训练机制

用句

  • left and right halves of Figure 1

图一的左右半部分

  • as depicted in Figure 2.

如图二所示

Coding

暂待补充


文章作者: Bill Z
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Bill Z !
评论
评论
  目录