文章目录
[Reference]
1. Convolutional Sequence to Sequence Learning
介绍
卷积很少用于序列建模。卷积建模固定大小/窗口的上下文表示,而深层卷积网络可以很容易建模较长的有效上下文表示。通过控制卷积窗口大小,可以很精细地控制上下文最大依赖长度。
RNN保留完整过去的隐状态,无法并行化,而卷积网络当前计算不依赖于先前时间步,可并行化计算序列每个元素。
多层卷积网络建模输入序列的层次化表示,底层网络建模临近元素,深层网络建模远距离元素。与RNN的链式结构相比,深层卷积网络提供更短的路径捕获长期依赖。
输入在卷积网络中经固定数量的非线性变换(卷积+非线性激活),而在RNN中,第一个时间步经多达n(序列长度)个非线性变换,而最后一个时间步仅经过一个非线性变换。对输入应用固定数量的非线性变换,模型也较易学习。
本文提出一种完全基于卷积的seq2seq模型,模型使用门控线性单元和残差连接,模型在解码器的每一层使用注意力机制(已证实计算开销可忽略)。
RNN Seq2Seq
典型的Seq2Seq模型由编码器RNN和解码器RNN组成,编码器将输入 x \pmb x xxx编码为状态表示 z \pmb z zzz,解码器根据 z z z计算输出序列 y \pmb y yyy。时间步 i + 1 i+1 i+1时,编码器利用当前时刻新的隐状态 h i + 1 h_{i+1} hi+1和上一时刻输出 y i y_i yi(可能也会用到编码器隐状态 c i c_i ci),计算当前时刻输出 y i + 1 y_{i+1} yi+1。
Seq2Seq结构根据RNN类型、模型输入特征的不同具有不同形式:
不利用注意力机制的架构,解码器可将编码器最后时刻隐状态
z
m
z_m
zm作为其任意时刻步解码的上下文参照向量
c
i
c_i
ci(作用在输入层时,与输入embedding concat),也可简单地将
z
m
z_m
zm作为其初始时刻隐状态。
利用注意力机制的架构(Bahdanau、Luong等),解码器每一个时间步通过注意力机制计算新的上下文参照向量
c
i
c_i
ci(归一化加权
z
\pmb z
zzz)。
RNN模型一般选用LSTM(门控机制简历长期依赖),或双向LSTM。在多层RNN网络中,多使用shortcut或residual connections。
卷积架构
位置嵌入(Position Embeddings)
根据输入序列 x \pmb x xxx得到词向量 w ∈ R f \pmb w\in\R^f www∈Rf和绝对位置向量 p ∈ R f \pmb p\in\R^f ppp∈Rf,将这两个向量相加后作为编码器输入。对于解码器,通过应用这种操作。使用绝对位置向量,使得模型能够感知其处理输入或输出的哪一部分。
卷积块结构(Convolutional Block Structure)
编码器和解码器共享一个简单的基于固定数量输入计算中间状态的块/层结构。令 h l \pmb h^l hhhl和 z l \pmb z^l zzzl分别表示第 l l l个块在解码器和编码器的输出。
每一个块由一个一维卷积和一个非线性激活函数组成。
对于仅包含一个块结构(卷积核宽度为
k
k
k)的解码器,每一个输出状态
h
i
h_i
hi均包含
k
k
k个输入元素的信息。若堆叠多层块,则深层的块的每一个输出状态表示的输入元素数量会增加。
非线性激活激活使得网络能够利用完整的输入域,或者在需要时集中关注与较少数量的元素。
每一个卷积核可表示为
W
∈
R
2
d
×
k
d
W\in\R^{2d\times kd}
W∈R2d×kd,
b
w
∈
R
2
d
b_w\in\R^{2d}
bw∈R2d。输入
X
∈
R
k
×
d
X\in\R^{k\times d}
X∈Rk×d,经卷积核输出为
Y
∈
R
2
d
Y\in\R^{2d}
Y∈R2d。使用gated linear units(GLU)作为非线性激活函数(GLUs已被证实优于tanh),对卷积核输出进行门控:
为适用于深层网络,我们建立块中卷积输入和输出的残差连接:
为保证各卷积层输出与输入长度匹配,对每层卷积输入的左侧和右侧均填补 k − 1 k-1 k−1个零向量,移除最后一层后 k − 1 k-1 k−1个输出作为最终输出。
将输入embedding经过线性变换至 R 2 d \R^{2d} R2d,同时对编码器输入embedding、编码器输出 z j u z_j^u zju,解码器softmax层的输入 h L \bm h^L hL,所有编码器层输出 h l \bm h^l hl在计算注意力分数前应用变换。
最终时间步
y
i
+
1
y_{i+1}
yi+1的输出概率,由下式得出:
多步注意力(Multi-step Attention)
一般的注意力机制只对解码器输入或输出使用注意力机制,我们为解码器每一层使用单独的注意力机制。
结合解码器当前隐状态
h
i
l
h_i^l
hil和前一时刻输出目标元素的词向量
g
i
g_i
gi计算注意力:
对于解码器的第
l
l
l层,解码状态
d
i
j
d_i^j
dij和输入元素
j
j
j在解码器最后一层输出编码
z
j
u
z_j^u
zju的注意力分数
a
i
,
j
l
a_{i,j}^l
ai,jl:
解码器时间步
i
i
i,利用编码器输入embedding
e
\bm e
e和输出
z
\bm z
z,得上下文向量为:
z + e z+e z+e类似于键值记忆网络???
标注化策略(Normalization Strategy)
通过精细地参数初始化、缩放网络输出确保方差不剧烈变化,以增加学习的稳定性。具体地,我们缩放残差块和注意力的输出,维持激活方差。假设两个和具有相同方差,我们将残差块的输入输出之和乘以 0.5 \sqrt{0.5} 0.5将和的方差减半。
我们将编码器 m m m个隐状态归一化加权的上下文向量 c i l c_i^l cil乘 1 / m \sqrt{1/m} 1/m进行缩放,以抵消方差的变化。