一 机器翻译及相关技术
机器翻译(MT):将一段文本从一种语言自动翻译为另一种语言,用神经网络解决这个问题通常称为神经机器翻译(NMT)。 主要特征:输出是单词序列而不是单个单词。 输出序列的长度可能与源序列的长度不同。
首先进行数据预处理,将数据集清洗、转化为神经网络的输入的minbatch,包括分词、建立字典、载入数据集。
Encoder-Decoder
一种通用模型框架。Encoder:编码器,从输入到隐藏状态
Decoder:解码器,从隐藏状态到输出。
特点:输入输出的长度可以不相等。不论输入和输出的长度是什么,中间隐藏状态的长度都是固定的。根据不同的任务可以选择不同的编码器和解码器(可以是一个 RNN ,但通常是其变种 LSTM 或者 GRU)
及其翻译中的一种Encoder-Decoder模型叫做Sequence to sequence 模型。Encoder得到语义编码作为Decoder的输入。Decoder是一个语言模型。
二 注意力机制与Seq2seq模型
在一般的Sequence to sequence 模型中,解码器在各个时间步依赖相同的背景变量(context vector)来获取输⼊序列信息。当编码器为循环神经⽹络时,背景变量来⾃它最终时间步的隐藏状态。但是RNN机制实际中存在长程梯度消失的问题,且隐藏状态向量的长度也有限制。解码的目标词语可能只与原输入的部分词语有关,而并不是与所有的输入有关。在seq2seq模型中,解码器只能隐式地从编码器的最终状态中选择相应的信息。然而,注意力机制可以将这种选择过程显式地建模。
注意力机制框架
Attention 是一种通用的带权池化方法,输入由两部分构成:询问(query)和键值对(key-value pairs)。 attention layer得到输出与value的维度一致, 对于一个query来说,attention layer 会与每一个key计算注意力分数并进行权重的归一化,输出的向量则是value的加权求和,而每个key计算的权重与value一一对应。不同的attetion layer的区别在于 注意力分数函数 的选择。
假设用函数
α
\alpha
α计算query
q
q
q和key
k
i
k_i
ki的相似性,计算注意力分数:
a
i
=
α
(
q
,
k
i
)
.
a_i=\alpha (q,k_i).
ai=α(q,ki).
再用softmax函数进行归一化获得注意力权重:
b
1
,
b
2
,
.
.
.
,
b
n
=
s
o
f
t
m
a
x
(
a
1
,
a
2
,
.
.
.
,
a
n
)
.
b_1,b_2,...,b_n=softmax(a_1,a_2,...,a_n).
b1,b2,...,bn=softmax(a1,a2,...,an).
输出value的加权和:
o
=
∑
i
=
1
n
b
i
v
i
.
o=\sum _{i=1}^n b_iv_i.
o=∑i=1nbivi.
注意层的内存由键-值对组成,因此它的输出接近于键类似于查询的值。
点积注意力
The dot product 假设query和keys有相同的维度,通过计算query和key转置的乘积来计算attention score,通常还会除去
d
\sqrt d
d减少计算出来的score对维度
d
d
d的依赖性:
α
(
q
,
k
)
=
<
q
,
k
>
/
d
=
q
k
T
/
d
.
\alpha (q,k)=<q,k> /\sqrt d=qk^{T} / \sqrt d.
α(q,k)=<q,k>/d=qkT/d.
多层感知机注意力
将 query and keys 投影到
R
h
\Bbb R^h
Rh,将可以学习的参数映射为
W
k
∈
R
h
×
d
k
{\bf W}_k\in \Bbb R^{h\times d_k}
Wk∈Rh×dk,
W
q
∈
R
h
×
d
q
{\bf W}_q\in \Bbb R^{h\times d_q}
Wq∈Rh×dq,
v
∈
R
h
{\bf v}\in \Bbb R^h
v∈Rh,定义:
α
(
q
,
k
)
=
v
T
t
a
n
h
(
W
k
k
+
W
q
q
)
.
\alpha (\bf q,k)=v^T\it tanh(\bf W_{\it k}k+W_{\it q}q).
α(q,k)=vTtanh(Wkk+Wqq).
然后将key 和 value 在特征的维度上合并(concatenate),然后送至 a single hidden layer perceptron 这层中 hidden layer 为 ℎ and 输出的size为 1 .隐层激活函数为tanh,无偏置.
引入注意力机制的Seq2seq模型
将注意机制添加到sequence to sequence 模型中,以显式地使用权重聚合states。attention layer保存着encodering看到的所有信息——即encoding的每一步输出。在decoding阶段,解码器的t时刻的隐藏状态被当作query,encoder的每个时间步的hidden states作为key和value进行attention聚合. Attention model的输出当作成上下文信息context vector,并与解码器输入拼接起来一起送到解码器。
encoder输出的各个状态,被用于attetion layer的memory部分,有相同的key和values。编码器最后一个时间步的隐藏状态,被用于初始化decoder 的hidden state。在解码的每个时间步,使用解码器的最后一个RNN层的输出作为注意层的query。然后,将注意力模型的输出与输入嵌入向量连接起来,输入到RNN层。虽然RNN层隐藏状态也包含来自解码器的历史信息,但是attention model的输出显式地选择了编码器的有效输出,这样attention机制就会尽可能排除其他不相关的信息。
三 Transformer
CNNs 易于并行化,却不适合捕捉变长序列内的依赖关系。RNNs 适合捕捉长距离变长序列的依赖,但是却难以实现并行化处理序列。为了整合CNN和RNN的优势,[Vaswani et al., 2017] 创新性地使用注意力机制设计了Transformer模型。该模型利用attention机制实现了并行化捕捉序列依赖,并且同时处理序列的每个位置的tokens,使得Transformer模型在性能优异的同时大大减少了训练时间。Transformer也基于编码器-解码器架构:
Transformer blocks:将seq2seq模型重的循环网络替换为了Transformer Blocks,该模块包含一个多头注意力层(Multi-head Attention Layers)以及两个position-wise feed-forward networks(FFN)。对于解码器来说,另一个多头注意力层被用于接受编码器的隐藏状态。
Add and norm:多头注意力层和前馈网络的输出被送到两个“add and norm”层进行处理,该层包含残差结构以及层归一化。
Position encoding:由于自注意力层并没有区分元素的顺序,所以一个位置编码层被用于向序列元素里添加位置信息。