以机器翻译为例,输入句子/序列 source,输出句子/序列 target
附着于 Encode-Decoder 框架的 Attention 模型:
Attention 模型的物理含义:一般在自然语言处理应用里会把 Attention 模型看作是输出 Target 句子中某个单词和输入 Source 句子每个单词的对齐模型
- 目标句子生成的每个单词对应输入句子单词的概率分布可以理解为输入句子单词和这个目标生成单词的对齐概率,这在机器翻译语境下是非常直观的:传统的统计机器翻译一般在做的过程中会专门有一个短语对齐的步骤,而注意力模型其实起的是相同的作用
Attention 机制的本质思想:(从 Encoder-Decoder 架构中剥离)
将 Source 中的构成元素想象成是由一系列的
代表 Source(即输入序列)的长度
概念上理解 Attention:从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息。聚焦的过程体现在权重系数的计算上,权重越大越聚焦于其对应的 Value 值上,即权重代表了信息的重要性,而 Value 是其对应的信息。
Attention 机制的具体计算过程:
- 根据 Query 和 Key 计算权重系数
- (阶段 1)根据 Query 和 Key 计算两者的相似性或者相关性(即,原始权重分数 Sim),常见方法:
- 向量点积:
- 向量余弦相似度:
- MLP 网络:
- 向量点积:
- (阶段 2)对阶段 1 计算的原始权重分值进行归一化处理,得到权重系数 a
- 计算方式:
- 作用:
- 归一化,将原始权重分数整理为所有权重之和为 1 的概率分布
- 通过 softmax 的内在机制更加突出重要元素的权重
- 计算方式:
- (阶段 1)根据 Query 和 Key 计算两者的相似性或者相关性(即,原始权重分数 Sim),常见方法:
- (阶段 3)根据权重系数对 Value 进行加权求和
- 计算方式:
- 计算方式:

Self-Attention 自注意力:
attention 和 self-attention 的区别:具体计算过程是一样的,只是计算对象发生了变化
- Attention:Target 和 Source 之间的 Attention 机制。一般任务的 Encoder-Decoder 框架中,输入序列 Source 和输出序列 Target 内容是不一样的,比如对于英-中机器翻译来说,Source 是英文句子,Target 是对应的翻译出的中文句子,Attention 机制发生在 Target 的元素 Query 和 Source 中的所有元素之间
- Self-attention:是 Source 内部元素之间或者 Target 内部元素之间发生的 Attention 机制,也可以理解为Target=Source 这种特殊情况下的注意力计算机制
Self-Attention 的作用:
- 更容易捕获句子中长距离的相互依赖的特征
比如机器翻译,Self Attention 可以捕获同一个句子中单词之间的一些句法特征(比如有一定距离的短语结构 make … more difficult)或者语义特征(比如 its 的指代对象 Law)
- 如果是 RNN 或者 LSTM,需要依次序序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小
- self-attention 在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征
- 增加计算的并行性
