详解 Attention-The Illustrated Transformer
Attention 代码

注意力分布

给定一个和任务相关的查询向量 注意力机制 - 图1,用注意力变量 注意力机制 - 图2 来表示被选择信息的索引位置,即 注意力机制 - 图3 表示选择了第 注意力机制 - 图4 个输入信息。首先计算给定 注意力机制 - 图5注意力机制 - 图6 下,选择第 注意力机制 - 图7 个输入信息的概率 注意力机制 - 图8
注意力机制 - 图9
其中 注意力机制 - 图10 称为注意力分布,注意力机制 - 图11 为注意力打分函数,有几种方式计算:

  1. 加性模型 注意力机制 - 图12
  2. 点积模型 注意力机制 - 图13
  3. 缩放点积模型 注意力机制 - 图14
  4. 双线性模型 注意力机制 - 图15

其中 注意力机制 - 图16 为学习的网络参数,注意力机制 - 图17 为输入信息的维度。

加权平均

注意力分布 注意力机制 - 图18 可以解释为第 注意力机制 - 图19 个信息接受关注的程度。

软性注意力机制

采用一种“软性”的信息选择机制对输入信息进行汇总:
注意力机制 - 图20

硬性注意力

  • 选取最高概率的输入信息:

注意力机制 - 图21
其中 注意力机制 - 图22 为概率最大的输入信息的下标,即注意力机制 - 图23

  • 通过注意力分布式上随机采样的方式实现

硬性注意力的一个缺点:是基于最大采样或随机采样的方式来选择信息。因此最终的损失函数与注意力分布之间的函数关系不可导,因此无法使用在反向传播算法进行训练。

键值对注意力

注意力机制 - 图24 表示 注意力机制 - 图25 个输入信息,给定任务相关的查询向量 注意力机制 - 图26 时,注意力函数为
注意力机制 - 图27
其中 注意力机制 - 图28 为打分函数。当 注意力机制 - 图29 时,键值对模式就等价于普通的注意力机制。
注意力机制 - 图30

多头注意力

多头注意力(Multi-HeadAttention)是利用多个查询 注意力机制 - 图31,来平行地计算从输入信息中选取多个信息。每个注意力关注输入信息的不同部分。
注意力机制 - 图32
其中 注意力机制 - 图33 表示向量拼接。

指针网络

指针网络是一种序列到序列模型,输入是长度为 注意力机制 - 图34 的向量序列 注意力机制 - 图35,输出是下标序列 注意力机制 - 图36。条件概率 注意力机制 - 图37
注意力机制 - 图38
其中条件概率 注意力机制 - 图39可以通过注意力分布计算。假设用循环神经网络对 注意力机制 - 图40 进行编码得到向量 注意力机制 - 图41,则
注意力机制 - 图42
其中 注意力机制 - 图43 为在解码过程的 第 注意力机制 - 图44 步时,每个输入向量的未归一化的注意力分布,
注意力机制 - 图45
其中 注意力机制 - 图46 为学习的参数。
注意力机制 - 图47

自注意机制

假设输入序列为 注意力机制 - 图48,输出序列为 注意力机制 - 图49,通过线性变换得到三组向量序列:
注意力机制 - 图50
注意力机制 - 图51
注意力机制 - 图52
其中 注意力机制 - 图53 分别为查询向量序列,键向量序列和值向量序列,注意力机制 - 图54 分别为可学习的参数矩阵。输出向量 注意力机制 - 图55为:

注意力机制 - 图56
其中 注意力机制 - 图57 为输入和输出向量序列的位置,连接权重 注意力机制 - 图58 由注意力机制动态生成。如果使用缩放点积来作为注意力打分函数,输出向量序列可以写为

注意力机制 - 图59
其中 注意力机制 - 图60 为按列进行归一化的函数。
注意力机制 - 图61
图8.4给出全连接模型和自注意力模型的对比,其中实线表示为可学习的权重,虚线表示动态生成的权重。由于自注意力模型的权重是动态生成的,因此可以处理变长的信息序列。