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

2022-07-28,,,,

论文原文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部分从三个角度进行了分析:
每层的计算复杂度,串行操作的最少步数,连接两个元素之间最远路径

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

《Transformer中self-attention、RNN、CNN的性能对比.doc》

下载本文的Word格式文档,以方便收藏与打印。