摘要
self-attention是构建语言和图像生成模型的有用机制。它通过将每个元素与当前时刻元素进行比较来确定上下文元素的重要性。在本文中,我们证明了非常轻量级的卷积可以获得最佳的self-attention结果。接下来,我们介绍比self-attention更简单,更有效的动态卷积。我们仅根据当前时刻预测可分离的卷积核,以确定上下文元素的重要性。这种方法所需的操作数量在输入长度上呈线性缩放,而self-attention是长度的平方。大规模机器翻译,语言建模和摘要总结的实验表明,动态卷积比强大的self-attention模型有所改进。在WMT’14的英德测试集上,动态卷积达到了29.7 BLEU的最新水平。
1.介绍
通过对循环神经网络(RNN),卷积网络(CNN)和self-attention模型的使用,在序列建模方面已有许多进展。RNN通过在每个时刻更新隐藏状态来汇集上下文信息,CNN通过进行多层固定大小的卷积来汇总上下文信息,而self-attention则直接在每一层汇总所有上下文信息。
注意力机制分配了上下文元素的注意力权重(attention weights),该权重定义了上下文表示上的加权和。source-target attention会从其他序列中总结信息,例如机器翻译,而self-attention会在当前序列上运行。self-attention已被定义为基于内容的表示,其中通过将当前时刻与上下文中的所有元素进行比较来计算注意力权重(图1a)。在这种不受限制的上下文大小上计算比较的能力被视为self-attention的核心功能。
然而,self-attention建模远距离依赖的能力受到质疑,由于计算复杂度是输入长度的二次方,导致较长的上下文在计算上非常具有挑战性。此外,在实践中,长序列需要引入层次结构。
在本文中,我们介绍了具有深度可分离的,softmax归一化并在通道维度上共享权重的轻量卷积。结果是卷积的权重比标准不可分离卷积少几个数量级。与self-attention不同,轻量级卷积不管上下文长度如何都为上下文元素重用相同的权重。
通过在每个时刻预测不同的卷积核,动态卷积基于轻量级卷积构建。卷积核仅是当前时刻的函数,而不是整个环境(如自我注意)(图1b)。动态卷积在每个位置上权重都发生变化的意义上类似于局部连接的层,但是,区别在于权重是由模型动态生成的,而不是经过训练后固定的。我们的方法还与局部attention相似,后者无法访问完整上下文来确定注意权重,但是,我们没有直接考虑前一时刻的注意力权重。Shen et al. (2018b)通过在输入序列的块内执行注意力来降低复杂度,Shen et al. (2017; 2018c) 对每个特征进行更细粒度的注意力计算。Shen et al. (2018a)和Gong et al. (2018)使用依赖于输入的滤波器进行文本分类任务。
我们的实验表明,轻量卷积与self-attention相比在结果上表现出色,而动态卷积的表现甚至更好。在WMT英语-德语翻译中,动态卷积达到了29.7 BLEU的新水平;在WMT英语-法语中,动态卷积与文献中报道的最好结果相匹配;在IWSLT,德语-英语上的动态卷积超过了self-attention 0.8 BLEU。动态卷积比高度优化的self-attention baseline快20%。对于在Billion单词基准上的语言建模,动态卷积的表现要好于或超过self-attention,而在CNN DailyMail文档摘要中,我们的表现优于强大的self-attention模型。
2.背景
我们首先介绍序列到序列学习和self-attention。我们的工作建立在不可分离卷积和深度可分离卷积的基础上。
(1)序列到序列学习
通过两个独立的网络将源序列映射到目标序列(例如机器翻译)。编码器网络计算源序列的表示形式(例如英语句子),并且解码器网络根据编码器输出自回归生成目标序列。
(2)self-attention
Vaswani et al. (2017)的模块将三个线性投影应用于输入
X
∈
R
n
×
d
X∈\mathbb R^{n×d}
X∈Rn×d,以获得键(K),查询(Q)和值(V)表示形式,其中
n
n
n是时刻数,
d
d
d是输入/输出维度(图2a)。它还定义了多个头部
H
H
H,每个头部
H
H
H可以学习特征
d
k
d_k
dk上的分离注意力权重从而注意不同的位置。该模块计算K-Q对之间的点积,并缩放以稳定训练,然后softmax归一化结果。最后,它使用V的输出来计算加权和:
A
t
t
e
n
t
i
o
n
(
Q
,
K
,
V
)
=
s
o
f
t
m
a
x
(
Q
K
T
d
k
)
V
Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V
Attention(Q,K,V)=softmax(dkQKT)V
(3)深度卷积
在每个通道上独立执行卷积。参数的数量可以从
d
2
k
d^2k
d2k减少到
d
k
dk
dk,其中
k
k
k是卷积核宽度。对于元素
i
i
i和输出维度
c
c
c的具有权重
W
∈
R
d
×
k
W∈\mathbb R^{d×k}
W∈Rd×k的深度卷积的输出
O
∈
R
n
×
d
O∈\mathbb R^{n×d}
O∈Rn×d定义为:
O
i
,
c
=
D
e
p
t
h
w
i
s
e
C
o
n
v
(
X
,
W
c
,
:
,
i
,
c
)
=
∑
j
=
1
k
W
c
,
j
⋅
X
(
i
+
j
−
⌈
k
+
1
2
⌉
)
,
c
O_{i,c}=DepthwiseConv(X,W_{c,:},i,c)=\sum^{k}_{j=1}W_{c,j}\cdot X_{(i+j-\lceil \frac{k+1}{2} \rceil),c}
Oi,c=DepthwiseConv(X,Wc,:,i,c)=j=1∑kWc,j⋅X(i+j−⌈2k+1⌉),c
3.轻量卷积
在本节中,我们介绍LightConv,这是一个深度卷积,它共享某些输出通道,并且使用softmax在时间维度上将其权重归一化。与self-attention相比,LightConv具有固定的上下文窗口,它用一组随时间步长不变的权重确定上下文元素的重要性。我们将证明,配备有轻量级卷积的模型与常规卷积相比,具有更好的泛化能力,并且可以与最好的self-attention模型(第6节)竞争。这是令人惊讶的,因为人们普遍认为基于内容的self-attention机制对于在自然语言处理任务中获得最好结果是必需的。此外,LightConv的低计算性能使我们能够制定有效的动态卷积(第4节)。
LightConv对于序列中第i个元素和输出通道c进行如下计算:
L
i
g
h
t
C
o
n
v
(
X
,
W
⌈
c
H
d
⌉
,
:
)
=
D
e
p
t
h
w
i
s
e
C
o
n
v
(
X
,
s
o
f
t
m
a
x
(
W
⌈
c
H
d
⌉
,
:
)
,
i
,
c
)
LightConv(X,W_{\lceil \frac{cH}{d}\rceil ,:})=DepthwiseConv(X,softmax(W_{\lceil \frac{cH}{d}\rceil ,:}),i,c)
LightConv(X,W⌈dcH⌉,:)=DepthwiseConv(X,softmax(W⌈dcH⌉,:),i,c)
(1)权重共享
我们随后将
H
H
H条通道的参数绑定在一起,这将参数数量减少了
d
H
\frac{d}{H}
Hd倍。 如图2所示,常规卷积需要
d
=
1024
d=1024
d=1024和
k
=
7
k=7
k=7的
7340032
(
d
2
×
k
)
7340032(d^2×k)
7340032(d2×k)个权重,深度可分离卷积具有
7168
(
d
×
k
)
7168(d×k)
7168(d×k)个权重,并且在权重分配为
H
=
16
H=16
H=16的情况下,我们只有
112
(
H
×
k
)
112(H×k)
112(H×k)权重。我们将看到,参数大量减少对于在当前硬件上实现动态卷积至关重要。Wang & Ji (2018)将所有通道的权重联系在一起
(
H
=
1
)
(H=1)
(H=1)。
(2)softmax归一化
我们使用softmax运算对时间维度
k
k
k上的权重
W
∈
R
H
×
k
W∈\mathbb R^{H×k}
W∈RH×k进行归一化:
s
o
f
t
m
a
x
(
W
)
h
,
j
=
e
x
p
W
h
,
j
∑
j
′
=
1
k
e
x
p
W
h
,
j
′
softmax(W)_{h,j}=\frac{exp~W_{h,j}}{\sum^k_{j'=1}exp~W_{h,j'}}
softmax(W)h,j=∑j′=1kexp Wh,j′exp Wh,j
(3)模块
图2b显示了我们集成LightConv的模块的网络结构。我们首先应用从维度
d
d
d到
2
d
2d
2d的输入投影映射,然后是门控线性单位(GLU),以及轻量级卷积。GLU通过应用sigmoid单元将输入的一半用作门,然后与另一半输入计算逐点乘积。我们还将大小为
W
O
∈
R
d
×
d
W^O∈\mathbb R^{d×d}
WO∈Rd×d的输出投影应用于LightConv的输出。
(4)正则化
我们发现DropConnect是LightConv模块的良好正则化工具。具体来说,我们以概率
p
p
p丢弃归一化权重
s
o
f
t
m
a
x
(
W
)
softmax(W)
softmax(W)的每一项,并在训练过程中将其除以
1
−
p
1-p
1−p。这等于去除了通道内的一些时间信息。
(5)实现
现有的卷积CUDA原始函数在实现LightConv方面表现不佳,我们在短序列上发现以下解决方案更快:我们将归一化的权重
W
∈
R
H
×
k
W∈\mathbb R^{H×k}
W∈RH×k复制并扩展到大小为
B
H
×
n
×
n
BH×n×n
BH×n×n的带状矩阵,其中
B
B
B是批量大小。然后,我们将输入整形并转置为大小
B
H
×
n
×
d
H
BH×n×\frac{d}{H}
BH×n×Hd,并执行批处理矩阵乘法以获取输出。我们期望专用的CUDA内核更加高效。
4.动态卷积
动态卷积具有随时间而变化的卷积核,这些卷积核随各个时刻的学习函数而变化。由于当前的GPU需要大量内存,因此动态卷积的标准卷积对于当前的GPU是不切实际的。 我们通过在LightConv上进行构建来解决此问题,该方法大大减少了参数的数量(第3节)。
DynamicConv的形式与LightConv相同,但使用的是随时间变化的卷积核,该卷积核使用函数
f
:
R
d
→
R
H
×
k
f:\mathbb R^d→\mathbb R^{H×k}
f:Rd→RH×k计算:
D
y
n
a
m
i
c
C
o
n
v
(
X
,
i
,
c
)
=
L
i
g
h
t
C
o
n
v
(
X
,
f
(
X
i
)
h
,
:
,
i
,
c
)
DynamicConv(X,i,c)=LightConv(X,f(X_i)_{h,:},i,c)
DynamicConv(X,i,c)=LightConv(X,f(Xi)h,:,i,c)
我们用具有可学习权重
W
Q
∈
R
H
×
k
×
d
W^Q∈\mathbb R^{H×k×d}
WQ∈RH×k×d的简单线性模块对
f
f
f建模,即
f
(
X
i
)
=
∑
c
=
1
d
W
h
,
j
,
c
Q
X
i
,
c
f(X_i)=\sum^d_{c=1}W^Q_{h,j,c}X_{i,c}
f(Xi)=∑c=1dWh,j,cQXi,c。
与self-attention类似,DynamicConv会随着时间更改分配给上下文元素的权重。但是,DynamicConv的权重并不取决于整个上下文,它们仅是当前时刻的函数。self-attention需要在句子长度中进行二次运算来计算注意力权重,而DynamicConv的动态卷积核的计算随序列长度进行线性缩放。
我们的实验(第6节)表明,使用DynamicConv的模型与使用基于上下文的self-attention的最好模型的性能相匹配甚至超过。这挑战了关于基于内容的self-attention在自然语言处理任务中的重要性的典型直觉。