Transformer论文详解,论文完整翻译(八)
第四章 为什么要Self-Attention
在本章中,我们从不同方面,来比较self-attention层和循环卷积层的基本应用:对于一个变长序列的符号表示,映射到另一个同长度序列,就像一个经典的序列转换encoder或者decoder的隐层一样。我们使用self-attention的动机是我们考虑了三个必要方面。
第一方面是每层的总计算复杂度。第二方面是可以并行的计算数量,测量时需要最小数量的序列操作。
第三方面是长范围依赖网络的路径长度。学习长距离的依赖是一个关键挑战在许多序列转换任务中。一个影响其能力的重要因素是在长距离上去学习这种依赖,前向和后向信号需要横穿网络。这些在输入和输出序列中,任意位置组合的路径长度越短,越容易去学习长距离的依赖。因此我们也比较了在不同层级结构中,任意两个输入和输出位置在网络中组成的最大路径长度。
正如表1中描述的那样,一个self-attention层通过执行常数量的序列操作对所有位置进行了一个全连接,而一个循环层需要O(n)的序列操作。对于计算复杂度,当序列长度n比表示维度d小的时候,self-attention层比循环层更快。对于通过SOTA的机器翻译模型进行句子表示来说,这是比较普遍的事情。为了提高需超长句子任务的计算表示能力,self-attention可以被限制去只考虑r近邻(在各自的输出位置的输入中心上)。这将是得最大路径增加到O(n/r).我们计划在未来调研这种方法。
一个小于n的k核卷积层不能连接所有输入和输出位置的paris。为此在相邻核的情况下,需要O(n/k)个卷积层,或者在扩大卷积的情况下O(logk(n))个,增加了网络中任意两个位置的最长路径长度。可分离卷积层通常比循环层的代价更大,一般为O(k乘n乘d + n乘(d的平方))。即使k = n, 可分离卷积的复杂度也与一个self-attention层和一个位置相关前馈网络层的组合复杂度相当(我们的模型使用的方法)。
另一方面的收益,self-attention可以产生更容易解释的模型。我们检查了我们模型的attention分布并且在附录中展示例子和讨论。不仅仅是做单独头的attention可以清晰的学习去表现不同任务,多头展示出了体现句子相关语义结构和句法的能力。
(个人总结,请勿转载)