Attention
条评论Attention
参考:Attn: Illustrated Attention
随着深度学习的发展,Neural Machine Translation(NMT) 也逐渐取代传统的 Statistical Machine Translation(SMT)。 其中,最广为人知的框架为 Sutskever et. al 提出的 sequence-to-sequence(seq2seq) 模型。
Seq2seq 是一个含有两个 RNN 的 encoder-decoder 模型: encoder,按字符读入从而获得一个固定长度的表示; decoder,根据这些输入训练另一个 RNN 从而获得顺序输出。
这样的模型会导致最终 decoder 获得的是 encoder 最后输出的 hidden state,当文本过长时,容易遗忘开始输入的字段。
Attention 可以作为 encoder 与 decoder 的中间接口,为 decoder 提供每一个 encoder hidden state 的信息。如此,模型能够选择性的关注有用的部分,并学习 encoder 与 decoder 中字句的对齐。
Attention 有两种类型: global attention 使用所有的 encoder hidden state,local attention 只使用部分。 Attention layer 的实现可分为4个步骤。
准备 hidden states.
例子中包含4个 encoder hidden states 和 current decoder hidden state.
Note: 最后一个 encoder hidden state 作为 decoder 的第一个 time step 输入。 第一个 time step 的输出被称为第一个 decoder hidden state.计算每个 encoder hidden state 的 score.
可以通过一个 score function(也被称为 alignment score function 或 alignment model)来计算 score。在本例中,score function 为 dot product。更多 score function。
计算公式:score = decoder hidden state x encoder hidden state
1
2
3
4
5
6
7decoder_hidden = [10, 5, 10]
encoder_hidden score
---------------------
[0, 1, 1] 15 (= 10×0 + 5×1 + 10×1, the dot product)
[5, 0, 1] 60
[1, 1, 0] 15
[0, 5, 1] 35将所有 scores 通过一个 softmax 层。
通过 softmax 层,将所有 softmaxed scores 加和为1,被称为 attention distribution.1
2
3
4
5
6encoder_hidden score score^
-----------------------------
[0, 1, 1] 15 0
[5, 0, 1] 60 1
[1, 1, 0] 15 0
[0, 5, 1] 35 0将每个 encoder hidden state 乘以对应 softmaxed score.
通过 encoder hidden state 乘以相应 softmaxed score,可以获得 alignment vector 或 annotation vector。1
2
3
4
5
6encoder score score^ alignment
---------------------------------
[0, 1, 1] 15 0 [0, 0, 0]
[5, 0, 1] 60 1 [5, 0, 1]
[1, 1, 0] 15 0 [0, 0, 0]
[0, 5, 1] 35 0 [0, 0, 0]
这里,表示第一个翻译的词与嵌入[5,0,1]
的输入相对应。
将 alignment vectors 相加。
将 alignment vectors 相加获得 context vector。将 context vector 输入 decoder.
Self-attention
参考:Illustrated: Self-Attention
输入
例子中,输入为3个4维向量:1
2
3Input 1: [1, 0, 1, 0]
Input 2: [0, 2, 0, 2]
Input 3: [1, 1, 1, 1]初始化权值
每个输入有三个表示:key, query, value。例子中,这些表示用3维向量表示,则权值为4*3矩阵。
Note: value的维度与输出相同。key 的权值
1
2
3
4[[0, 0, 1],
[1, 1, 0],
[0, 1, 0],
[1, 1, 0]]query 的权值
1
2
3
4[[1, 0, 1],
[1, 0, 0],
[0, 0, 1],
[0, 1, 1]]value 的权值
1
2
3
4[[0, 2, 0],
[0, 3, 0],
[1, 0, 3],
[1, 1, 0]]
Nots: 在神经网络中,权值常由合适的随机分布来初始化,如 Gaussian, Xavier 和 Kaiming 分布。
计算 key, query 和 value
计算公式为:input x weight
key:
1
2
3
4[0, 0, 1]
[1, 0, 1, 0] [1, 1, 0] [0, 1, 1]
[0, 2, 0, 2] x [0, 1, 0] = [4, 4, 0]
[1, 1, 1, 1] [1, 1, 0] [2, 3, 1]query:
1
2
3
4[1, 0, 1]
[1, 0, 1, 0] [1, 0, 0] [1, 0, 2]
[0, 2, 0, 2] x [0, 0, 1] = [2, 2, 2]
[1, 1, 1, 1] [0, 1, 1] [2, 1, 3]value:
1
2
3
4[0, 2, 0]
[1, 0, 1, 0] [0, 3, 0] [1, 2, 3]
[0, 2, 0, 2] x [1, 0, 3] = [2, 8, 0]
[1, 1, 1, 1] [1, 1, 0] [2, 6, 3]
Note: 有时候也可以加上偏置。
计算 Input 1 的 attention score
计算公式为:Input 1's query x keys^T
1
2
3[0, 4, 2]
[1, 0, 2] x [1, 4, 3] = [2, 4, 4]
[1, 0, 1]
Note: 上述为 dot product attention, 其他 score function 有 scaled dot product 和 additive/concat。
计算softmax
对 attention score 进行 softmax 计算:1
softmax([2, 4, 4]) = [0.0, 0.5, 0.5]
将 score 乘以 value:
将 attention score 乘以对应的 value, 获得 weighted values:1
2
31: 0.0 * [1, 2, 3] = [0.0, 0.0, 0.0]
2: 0.5 * [2, 8, 0] = [1.0, 4.0, 0.0]
3: 0.5 * [2, 6, 3] = [1.0, 3.0, 1.5]将 weighted values 加和获得 Output 1:
1
2
3
4
5[0.0, 0.0, 0.0]
+ [1.0, 4.0, 0.0]
+ [1.0, 3.0, 1.5]
-----------------
= [2.0, 7.0, 1.5]对于 Input 2 和 Input 3 重复4-7操作
Note: query 和 key 的维度需要保持一致,而 value 的维度与 output 一致。