Transformer中self-attention、RNN、CNN的性能对比
论文原文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,zi∈Rd
- 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
上一篇: flask框架写接口
下一篇: 远程服务器复现fast-reid