深度学习的 Attention(注意力)机制

Attention

2014年,Sutskever 等人提出的 sequence-to-sequence(seq2seq) 模型,是通过编码器神经网络逐个符号地处理输入序列,并将输入序列的所有信息压缩为向量表示形式,然后解码器神经网络根据编码器状态逐个符号地预测输出值,在解码过程中,将前一步预测出的值作为下一步预测的输入:

深度学习的 Attention(注意力)机制_第1张图片

然而 seq2seq 模型的主要瓶颈在于需要把源序列的所有信息压缩为一个固定长度的向量(context vector)。随着输入序列的长度变长,在处理整个序列时,经常会忘记序列的前面部分。因此,Attention 机制被提出来解决这个问题。

Attention 机制允许解码器回头查看编码器的中间状态,然后将其加权平均作为额外输入提供给解码器。

深度学习的 Attention(注意力)机制_第2张图片

编码器和解码器常用的神经网络有 CNN、RNN、LSTM、GRU 等等,下面以 GRU 为编码器和解码器的神经网络来解释 Attention 机制在机器翻译中的应用。

输入序列:Rahul is a good boy;目标输出序列:राहुल चांगला मुलगा आहे

Encoder 中间状态

深度学习的 Attention(注意力)机制_第3张图片

GRU 也是一种特殊的 RNN,相较于 LSTM,GRU 只有一个传递状态(hidden state)。这些中间状态({h}_{1}, {h}_{2}, \ldots {h}_{5}) 都是固定长度的向量,相当于这些状态作为向量存储着对应的局部信息。e.g. {h}_{1} 存储着序列开头的信息(如`Rahul‘ 和`is’ 之类的单词);{h}_{5} 存储着序列后部分的信息(如`good‘ 和`boy’ 之类的单词)。

深度学习的 Attention(注意力)机制_第4张图片

Attention 工作流程

开始预测目标输出序列(राहुल चांगला मुलगा आहे)中第一个单词 राहुल,将整个流程分为 5 步:

深度学习的 Attention(注意力)机制_第5张图片

在解码之前,先将输入序列编码为 internal states({h}_{1}, {h}_{2}, {h}_{3}, {h}_{4}, {h}_{5}) 来表示输入序列的所有信息。

Hypothesis:输出序列中的下一个单词依赖于解码器的当前状态以及编码器的隐藏状态。

结合着这个假设,来看机器翻译的流程:

解码第一个目标词(राहुल):

  • 计算每个编码器状态的 score

由于是预测目标输出序列的第一个单词,此时解码器没有当前状态,因此,用编码器的最后一个状态({h}_{5})来作为解码器的当前状态。

预测第一个单词,并不需要所有的编码器状态,而只需要存储着有关`Rahul' 的信息的那些编码器状态(每个编码器状态储存着对应的局部信息),有关`Rahul' 的信息极大可能存储在 {h}_{1}, {h}_{2} 中,所以希望解码器更关注于 {h}_{1}, {h}_{2},而少关注其他状态。

因此,使用 {h}_{5} 和所有的编码器状态来训练一个前馈神经网络,该网络将通过为要注意的状态生成高分,为要忽略的状态生成低分,来学习识别相关的编码器状态。

用 {s}_{1}, {s}_{2}, {s}_{3}, {s}_{4}, {s}_{5} 来表示各状态对应的 score,希望网络生成的 {s}_{1}, {s}_{2} 相对较高,而 {s}_{3}, {s}_{4}, {s}_{5} 相对低。

  • 计算 attention weight

将 {s}_{1}, {s}_{2}, {s}_{3}, {s}_{4}, {s}_{5} 输入 softmax 函数生成 attention weight:{e}_{1}, {e}_{2}, {e}_{3}, {e}_{4}, {e}_{5}

  • 计算 context vector

\text { context vector }= \mathrm{e}_{1} * \mathrm{~h}_{1}+\mathrm{e}_{2} * \mathrm{~h}_{2}+\mathrm{e}_{3} * \mathrm{~h}_{3}+\mathrm{e}_{4} * \mathrm{~h}_{4}+\mathrm{e}_{5} * \mathrm{~h}_{5}

  • 连接 context vector 和解码器上一时刻的输出

因为当前没有上一时刻的输出,所以用一个特殊 token()代替。

  • 解码器输出

解码器生成预测出的单词和一个 hidden state(记作 d_{1})

解码第二个目标词:

重复上述步骤:

深度学习的 Attention(注意力)机制_第6张图片

解码第三个目标词:

深度学习的 Attention(注意力)机制_第7张图片

解码第四个目标词:

深度学习的 Attention(注意力)机制_第8张图片

解码第五个目标词: 

深度学习的 Attention(注意力)机制_第9张图片

当解码器解码出,停止进程。

与传统的 Seq2Seq 模型中所有解码器用固定 context vector 解码不同,在 Attention 机制下,通过计算 attention weight 为每个时间步计算出一个单独的 context vector 用于解码,因此,模型也能够找到输入序列的不同部分和输出序列的相应部分之间的映射。

然而 Attention 是一个非常耗时和难以并行化的系统。为了解决这个问题,Google 提出了 Transformer 模型,去掉了所有的卷积和循环层,使得它具有高度的并行性和计算效率。

Reference

https://towardsdatascience.com/intuitive-understanding-of-attention-mechanism-in-deep-learning-6c9482aecf4f

https://www.colabug.com/2018/1002/4767741/

你可能感兴趣的:(神经网络,深度学习,自然语言处理,nlp)