一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
自我注意力机制(Self-Attention)
这节课我们学习自我注意力机制(Attention)。
Self-Attention(自我注意力机制)
Attention的第一篇论文发表于2015年,用于改进Seq2seq模型对长句子的遗忘问题。其实Attention并不局限于Seq2seq模型,而是可以用在所有的RNN上。接下来我们介绍Self-attention,文章发表在2016年EMNLP上。
Self-attention原始论文把Attention用在LSTM上,本节课我们把论文内容进行简化,把LSTM换成Simple RNN,这样更容易理解。
初始时,状态向量和Context vector 都是全零向量。RNN读入第一个输入,需要更新状态,把的信息压缩到新的状态向量里面。标准的Simple RNN在计算时依赖输入和旧的状态,计算公式如下图所示:
而使用Self-attention后,计算公式变为这样:
即用代替。也可以用其他方法来更新,比如把、、做concatenation。算出新状态,下一步就是计算新的Context vector 。新的Context vector 是已有状态的加权平均。
由于初始状态是全零,我们忽略掉,那么已有状态的加权平均就等于,所以新的Context vector 就是。
然后计算,公式如下:
接下来计算新的Context vector 。想要计算,首先需要计算权重。拿当前状态和已有的两个状态向量作对比(包括自己)。然后用权重进行加权平均计算。
以此类推,计算,……。通过这些步骤的计算,我们可以获得各个位置上的Context vector。经过这样的计算,Self-attention获取了自身输入序列中各个token之间的重要性,可以分析序列中每个token相较于同序列其他token之间的“联系紧密程度”,从而更好的帮助模型进行建模分析。
Summary(总结)
-
RNN都有遗忘的问题,使用Self-attention后就可以解决遗忘的问题。每次在更新之前,都会再重新看一遍之前的各个状态信息。
-
Self-attention与Attention的道理是一样的,但Self-attention不局限于Seq2seq模型,可以用在所有的RNN上。除了避免遗忘,Self-attention还能帮助RNN关注相关的信息。
-
上图为论文中的插图,RNN从左往右读一句话,红色的是当前输入,高亮标出的权重很大的位置,这些权重说明前文中最相关的词是哪几个。可以看到,一般来说,每个单词都会跟他前面这个单词有着不小的权重。同时,诸如is a的权重值也很大,这也符合英语中相关的语法逻辑。