原文链接: https://zhuanlan.zhihu.com/p/72001554 [seq2seq模型+attention机制]
attention机制的原理
神经学中的注意力机制有两种:
(1)自上而下的有意识的注意力,称为聚焦式注意力(Focus Attention),聚焦式注意力是指有预定目的,依赖任务的,主动有意识地聚焦与某一对象的注意力。
(2)自下而上的无意识的注意力,称为基于显著性注意力(Saliency-Based Attention)。是由外界刺激驱动的注意,不需要主动去干预,和任务无关。如果一个对象的刺激信息不同于其周围信息,一种无意识的“赢者通吃”(Winner-Take-All)或者门控(Gating)机制就可以把注意力转向这个对象。
当你在听你的朋友说话时,你专注于你朋友的说话而忽略了周围其他的声音,这就是聚焦式注意力,当你在其他周围声音中听到了感兴趣的词时,你会马上注意到,这是显著性注意力。
给定N组信息输入 ,每个向量
都表示一组输入信息。注意力机制的计算分为两步:一是在所有输入信息上计算注意力分布,二是根据注意力分布来计算输入信息的加权平均。
注意力分布:为了从N个输入向量 中选择出和某个特定任务相关的信息,需要引入一个和任务相关的表示称为查询向量(Query Vector),并通过一个打分函数score()计算每个输入向量和查询向量之间的相关性。
给定一个和任务相关的查询向量q,用注意力变量 来表示被选择信息的索引位置,即
表示选择了第i个输入向量。首先计算在给定q和X下,选择第i个输入向量的概率
(权重),
为注意力分布权重,
为注意力打分函数,打分函数有很多种方式比如:
- 加性模型:
- 点积模型:
- 缩放点积模型:
- 双线性模型:
为可学习的参数,
为输入向量的维度。
点积模型在实现上更好的利用了矩阵乘积,从而计算效率更高,但是当输入向量的维度d比较高,点积模型的值通常有比较大的方差,从而导致softmax函数的梯度比较小,缩放点积模型可以较好的解决此问题。双线性模型可以看作是一种泛化的点积模型,假设双线性模型公式中 ,原式可写为
,分别对x和q进行线性变换后计算点积,相比与点积模型,双线性模型在计算相似度时引入了非对称性。
加权平均:注意力分布 可以理解为在给定任务相关的查询q时,第i个输入向量受关注的程度。
硬性注意力
软性注意力其选择的信息是所有输入信息在注意力分布下的期望。还有一种只关注到某一位置上的信息,叫做硬性注意力(Hard Attention)。
选择最高概率的输入信息: ,j为概率最大的输入信息的下标,即
硬性注意力缺点是基于最大采样或随机采样的方式来选择信息。因此最终的损失函数与注意力分布之间的函数关系不可导,无法使用反向传播算法进行训练。为了使用反向传播算法,一般使用软性注意力来代替硬性注意力。
键值对注意力
可以用键值对(key-value pair)格式来表示输入信息,其中“键”计算注意力分布 ,"值"用来计算聚合信息。
用 表示N个输入信息,给定任务相关的查询向量q时,注意力函数:
其中 为打分函数.当
时,键值对模式就等价于普通的注意力机制。