一. Self-Attention
1.1. Self-Attention
概念及作用
通过对一句话中的不同单词分配不同的权重来帮助模型理解输入语句的其他位置信息, 达到更好的编码效果.
如在 Attention Is All You Need 中所提到的一个例子:
“The animal didn’t cross the street because it was too tired”
- 如何判别句子中的 “it” 对于机器来说指的是 “animal” 还是 “street” ?
而使用 Self-Attention 处理后能发现, it指的是 “animal”:
1.2. Self-Attention
实现原理
- 第一步: 输入的是句子中第i个单词
embedding
处理后的词向量 - 第二步: 将上一步骤得到的一个词向量经过一定处理得到下述三个向量:
- Query Vector, 查询向量
- Key Vector, 键向量
- Value Vector, 值向量
- 第三步: 将该单词得到的Query Vector分别乘上输入语句的每个单词对应得到的Key Vector得到该单词对句子每个单词的得分Score, 该Score决定了对其他单词的关注度
- 第四步, 根据上一步骤得到的一系列得分除以Key Vector的维度的平方根()得到新分数以确保更稳定的梯度
- 第五步, 根据上一步骤得到的一系列分数进行
Softmax
处理得到一系列概率值 - 第六步, 将上一步骤得到的一系列概率值乘上第二步得到的Value Vector一系列特征向量
- 第七步, 将上一步骤得到的一系列特征向量进行求和处理得到句子第i个单词经过
self-attention
处理后的新向量
1.3. 三个向量获得方法
Query Vector, Key Vector, Value Vector
在原论文中, 输入的经过embedding
处理的词向量的维度是, 通过设定三个超参数: , , , 分别将这三个超参数乘上词向量, 分别得到这三个维度为向量.
值得注意的是, 之所以得到的这三个新向量的维度都小于原词向量, 是因为这是一种架构选择, 可使multi-headed attention计算(大多数)不变.
二. Multi-Headed Attention
2.1. Multi-Headed Attention
概念及作用
大致处理流程类似于Self-Attention
, 但可以使模型关注不同的位置, 更有效的提高Attention层的处理性能.
虽然在Self-Attention
中, 最终步骤得到的向量包含了一些其他位置的编码,但仍然是当前位置的单词占主要作用,
而Multi-Headed Attention
正好提供了多个子空间, 更加关注其他位置信息.
2.2. Multi-Headed Attention
基本原理
- 使用多个headed, 使用不同的权重组合得到和 heads 数量一样多的不同值的 Query / Key / Value 向量组
- 将上述得到的多个 Query / Key / Value 向量组 分别得到对应的相当于每个单词做了多次self-attention计算的新特征向量
- 将上述一系列进行连接成一个矩阵
- 将上一步骤得到的一个矩阵乘上一个额外权重矩阵得到经过
Multi-Headed Attention
处理的 最终向量