欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Transformer中self-attention、RNN、CNN的性能对比

程序员文章站 2022-06-26 17:44:39
论文原文Attention is all you need:https://arxiv.org/pdf/1706.03762.pdf输入序列(x1,x2,...,xn)(x_1,x_2,...,x_n)(x1​,x2​,...,xn​)输出序列(z1,z2,...,zn)(z_1,z_2,...,z_n)(z1​,z2​,...,zn​)xi,zi∈Rdx_i,z_i \in R^dxi​,zi​∈Rdn:序列长度d:表征维度k:卷积大小r:restricted self-attentio...

论文原文Attention is all you need:
https://arxiv.org/pdf/1706.03762.pdf

  • 输入序列 ( x 1 , x 2 , . . . , x n ) (x_1,x_2,...,x_n) (x1,x2,...,xn)
  • 输出序列 ( z 1 , z 2 , . . . , z n ) (z_1,z_2,...,z_n) (z1,z2,...,zn)
  • x i , z i ∈ R d x_i,z_i \in R^d xi,ziRd
  • n:序列长度
  • d:表征维度
  • k:卷积大小
  • r:restricted self-attention的邻居范围

原论文why self attention部分从三个角度进行了分析:
每层的计算复杂度,串行操作的最少步数,连接两个元素之间最远路径

Transformer中self-attention、RNN、CNN的性能对比

1 层计算复杂度

大多数任务中, n n n往往小于 d d d,所以在大多数情况下,self-attention的计算复杂度更低,对于句长较大的任务,可以使用restricted self-attention(r-centered)来降低计算复杂度

卷积层的复杂度一般高于RNN,大概是乘以 k k k

2 串行操作最小步数

RNN是在一个序列上的处理是不可以并行的

3 连接两个元素之间的最远路径(长距离依赖的路径长度)

O ( 1 ) O(1) O(1)(self-attention)更好地学习到长距离依赖;

值得注意的是,针对连续卷积,需要 O ( n / k ) O(n/k) O(n/k)层卷积,对于空洞卷积需要 O ( l o g k ( n ) ) O(log_k(n)) O(logk(n))

同理restricted self-attention需要 O ( n / r ) O(n/r) O(n/r)层,降低了计算复杂度的同时,牺牲了长距离依赖的学习

总而言之,对于一般的翻译任务,self-attention的层计算复杂度低,单层内每个操作可并行,并且具有良好的长距离依赖学习能力

本文地址:https://blog.csdn.net/Yolo_C/article/details/109634888