一.文章概述
通常而言,Seq2Seq解决方案一般都采用循环神经网络,但在本文,作者提出了基于卷积神经网络的解决方案ConvS2S。基于卷积神经网络的方案有两大优势:计算并行化更高,优化更容易(非线性的数量是固定的)。
二.卷积框架
ConvS2S的框架如下图所示,在对源语句English(上)进行编码后,对4个德语目标词进行编码(左下)并计算并计算注意力。然后将注意力(中右)计算的条件输入添加到解码器状态,再预测目标单词(右下)。
2.1 位置编码
给定输入序列 x = ( x 1 , . . . , x m ) \mathbf{x} = (x_1,...,x_m) x=(x1,...,xm),其对应的嵌入表示为 w = ( w 1 , … , w m ) \mathbf{w}=\left(w_1, \ldots, w_m\right) w=(w1,…,wm),其中 w j ∈ R f w_j \in \mathbb{R}^f wj∈Rf。对于其嵌入表示,作者加上了绝对位置,即 e = ( w 1 + p 1 , … , w m + p m ) \mathbf{e}=\left(w_1+p_1, \ldots, w_m+p_m\right) e=(w1+p1,…,wm+pm)。
2.2 卷积块结构
Encoder和Decoder都采用卷积块(一维卷积+非线性层)。令Decoder第
l
l
l块的输出为
h
l
=
(
h
1
l
,
…
,
h
n
l
)
\mathbf{h}^l=\left(h_1^l, \ldots, h_n^l\right)
hl=(h1l,…,hnl),Encoder第
l
l
l块输出为
z
l
=
(
z
1
l
,
…
,
z
m
l
)
\mathbf{z}^l=\left(z_1^l, \ldots, z_m^l\right)
zl=(z1l,…,zml) 。给定输入
X
∈
R
k
×
d
X \in \mathbb{R}^{k \times d}
X∈Rk×d ,经过卷积神经网络的输出为
Y
=
[
A
B
]
∈
R
2
d
Y=[A B] \in \mathbb{R}^{2 d}
Y=[AB]∈R2d。对于非线性层,作者采用的是门控线性单元,即:
v
(
[
A
B
]
)
=
A
⊗
σ
(
B
)
v([A B])=A \otimes \sigma(B)
v([AB])=A⊗σ(B)
其中
σ
(
B
)
\sigma(B)
σ(B)控制着当前上下文中哪些输入
A
A
A是相关的。
此外,为了能堆叠更深的卷积层,作者使用了残差连接。
h
i
l
=
v
(
W
l
[
h
i
−
k
/
2
l
−
1
,
…
,
h
i
+
k
/
2
l
−
1
]
+
b
w
l
)
+
h
i
l
−
1
h_i^l=v\left(W^l\left[h_{i-k / 2}^{l-1}, \ldots, h_{i+k / 2}^{l-1}\right]+b_w^l\right)+h_i^{l-1}
hil=v(Wl[hi−k/2l−1,…,hi+k/2l−1]+bwl)+hil−1
为了避免decoder看到未来的信息,作者在输入的左侧和右侧都pad
k
−
1
k-1
k−1个
0
0
0,并删除了卷积输出末端的
k
k
k个元素。
h i l = v ( W l [ h i − k / 2 l − 1 , … , h i + k / 2 l − 1 ] + b w l ) + h i l − 1 h_i^l=v\left(W^l\left[h_{i-k / 2}^{l-1}, \ldots, h_{i+k / 2}^{l-1}\right]+b_w^l\right)+h_i^{l-1} hil=v(Wl[hi−k/2l−1,…,hi+k/2l−1]+bwl)+hil−1
2.3 Multi-step Attention
对于每个decoder层,作者引入了单独的注意力机制。作者组合当前解码器状态
h
i
l
h_i^l
hil和先前的目标元素
g
i
g_i
gi来计算注意力:
d
i
l
=
W
d
l
h
i
l
+
b
d
l
+
g
i
d_i^l=W_d^l h_i^l+b_d^l+g_i
dil=Wdlhil+bdl+gi
对于解码层
l
l
l,状态
i
i
i和源元素
j
j
j的注意力
a
i
j
l
a_{i j}^l
aijl是基于点积计算的:
a
i
j
l
=
exp
(
d
i
l
⋅
z
j
u
)
∑
t
=
1
m
exp
(
d
i
l
⋅
z
t
u
)
a_{i j}^l=\frac{\exp \left(d_i^l \cdot z_j^u\right)}{\sum_{t=1}^m \exp \left(d_i^l \cdot z_t^u\right)}
aijl=∑t=1mexp(dil⋅ztu)exp(dil⋅zju)
其中
z
j
u
z_j^u
zju表示最后一个编码层的输出。当前解码曾的输入
c
i
l
c_i^l
cil即为解码器输出和输入嵌入
e
j
e_j
ej的加权和:
c
i
l
=
∑
j
=
1
m
a
i
j
l
(
z
j
u
+
e
j
)
c_i^l=\sum_{j=1}^m a_{i j}^l\left(z_j^u+e_j\right)
cil=j=1∑maijl(zju+ej)
上述注意力的计算方法与传统的seq2seq中的注意力机制有点不太相同,作者还添加了 e j e_j ej,其类似于键值存储网络,其中键是 z j u z_j^u zju ,值是 z j u + e j z_j^u+e_j zju+ej。编码器的输出 z j u z_j^u zju表示潜在的大输入上下文,而 e j e_j ej提供了特定输入元素的点信息,其对预测比较有效。
2.4 正则化策略
通过缩放残差模块的输出和注意力以确保整个网络的方差不会发生剧烈变化。
对于残差块,将残差块的输入和输出的总和乘以 0.5 \sqrt{0.5} 0.5,使总和的方差减半。
由注意力生成的条件输入 c i l c_i^l cil是 m m m个向量的加权和,作者通过乘以 m 1 / m m \sqrt{1 / m} m1/m来抵消方差的变化。