论文原文Attention is all you need:
https://arxiv.org/pdf/1706.03762.pdf
- 输入序列
(
x
1
,
x
2
,
.
.
.
,
x
n
)
(x_1,x_2,...,x_n)
- 输出序列
(
z
1
,
z
2
,
.
.
.
,
z
n
)
(z_1,z_2,...,z_n)
-
x
i
,
z
i
∈
R
d
x_i,z_i \in R^d
- 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