详解 Attention-The Illustrated Transformer
Attention 代码
注意力分布
给定一个和任务相关的查询向量 ,用注意力变量
来表示被选择信息的索引位置,即
表示选择了第
个输入信息。首先计算给定
和
下,选择第
个输入信息的概率
,
其中 称为注意力分布,
为注意力打分函数,有几种方式计算:
- 加性模型
- 点积模型
- 缩放点积模型
- 双线性模型
加权平均
软性注意力机制
硬性注意力
- 选取最高概率的输入信息:
其中 为概率最大的输入信息的下标,即
。
- 通过注意力分布式上随机采样的方式实现
硬性注意力的一个缺点:是基于最大采样或随机采样的方式来选择信息。因此最终的损失函数与注意力分布之间的函数关系不可导,因此无法使用在反向传播算法进行训练。
键值对注意力
用 表示
个输入信息,给定任务相关的查询向量
时,注意力函数为
其中 为打分函数。当
时,键值对模式就等价于普通的注意力机制。
多头注意力
多头注意力(Multi-HeadAttention)是利用多个查询 ,来平行地计算从输入信息中选取多个信息。每个注意力关注输入信息的不同部分。
其中 表示向量拼接。
指针网络
指针网络是一种序列到序列模型,输入是长度为 的向量序列
,输出是下标序列
。条件概率
为
其中条件概率 可以通过注意力分布计算。假设用循环神经网络对
进行编码得到向量
,则
其中 为在解码过程的 第
步时,每个输入向量的未归一化的注意力分布,
其中 为学习的参数。
自注意机制
假设输入序列为 ,输出序列为
,通过线性变换得到三组向量序列:
其中 分别为查询向量序列,键向量序列和值向量序列,
分别为可学习的参数矩阵。输出向量
为:
其中 为输入和输出向量序列的位置,连接权重
由注意力机制动态生成。如果使用缩放点积来作为注意力打分函数,输出向量序列可以写为
其中 为按列进行归一化的函数。

图8.4给出全连接模型和自注意力模型的对比,其中实线表示为可学习的权重,虚线表示动态生成的权重。由于自注意力模型的权重是动态生成的,因此可以处理变长的信息序列。
