Attention机制
写在前面:此文只记录了下本人感觉需要注意的地方,不全且不一定准确。详细内容可以参考文中帖的链接,比较好!!!
attention详解
self attention & transformer
参考3
1 Attention原理
其计算公式为:其中, 为decoder在 时刻的隐状态,$ y_{i-1}$ 为在 时刻decoder的输出, 为context信息。
其中, 表示encode中的第j个词的隐状态, 为根据decode当前隐状态 给予 的权重。
其中, 是一个softmax模型输出,概率值的和为1。eij表示一个对齐模型,用于衡量encoder端的位置j个词,对于decoder端的位置i个词的对齐程度(影响程度),换句话说:decoder端生成位置i的词时,有多少程度受encoder端的位置j的词影响。
2 Attention分类
2.1 soft & hard attention
- soft attention:上文介绍
- hard attention:只关注到某一个位置上的信息。
- 硬性注意力有两种实现方式:(1)一种是选取最高概率的输入信息;(2)另一种硬性注意力可以通过在注意力分布式上随机采样的方式实现。
- 缺点:最终的损失函数与注意力分布之间的函数关系不可导,因此无法使用在反向传播算法进行训练。
2.2 global & local attention
- global attention:上文介绍
- 缺点:每次encoder端的所有hidden 都需要参与计算,计算开销较大,特别是输入较长,效率低。
- local attention:将decoder当前位置,预测到encoder端某个位置,然后选择一个窗口,来类似global一样计算,这样可以在输入较长的情况下,节约计算开支。
- 缺点:
1、当encoder句子不是很长时,相对Global Attention,计算量并没有明显减小。
2、位置向量的预测并不非常准确,这就直接影响到的local Attention的准确率。
2.3 self attention &Transformer结构
- self attention:
对于self-attention来讲,Q(Query), K(Key), V(Value)三个矩阵均来自同一输入,分别由n个单词嵌入的特征[x1, x2, …, xn],分别乘以 得到。首先我们要计算Q与K之间的点乘,然后为了防止其结果过大,会除以一个尺度标度 ,其中 为一个query和key向量的维度。然后是Mask模块,这里encoder阶段没有,decoder阶段有,作用是忽略还未预测到部分(设置为0)。再利用Softmax操作将其结果归一化为概率分布,然后再乘以矩阵V就得到权重求和的表示。该操作可以表示为
这里操作可能比较抽象,接下来举个具体例子,请参考
2.Transformer结构
1中介绍的就是基本的Multihead Attention单元。
- 对于encoder来说就是利用这些基本单元叠加,其中key, query, value均来自前一层encoder的输出,即encoder的每个位置都可以注意到之前一层encoder的所有位置。
- 对于decoder来讲,我们注意到有两个与encoder不同的地方,一个是第一级的Masked Multi-head,另一个是第二级的Multi-Head Attention不仅接受来自前一级的输出,还要接收encoder的输出,下面分别解释一下是什么原理。
- 第一级decoder的key, query, value均来自前一层decoder的输出,但加入了Mask操作,即我们只能attend到前面已经翻译过的输出的词语,因为翻译过程我们当前还并不知道下一个输出词语,这是我们之后才会推测到的。
- 第二级decoder也被称作encoder-decoder attention layer,即它的query来自于之前一级的decoder层的输出,但其key和value来自于encoder的输出,这使得decoder的每一个位置都可以attend到输入序列的每一个位置。
- 总结一下,k和v的来源总是相同的,q在encoder及第一级decoder中与k,v来源相同,在encoder-decoder attention layer中与k,v来源不同。