目录
不随意线索
随意线索
注意力机制
非参注意力池化层
参数化的注意力机制
注意力机制总结
注意力分数
拓展到高维度
加性模型(Additive Attention)
点积注意力机制(Dot Product Attention)
注意力分数总结
不随意线索
不随意线索指的是那些由外部环境直接提供的信息,这些信息往往不需要经过复杂的认知处理就能吸引人的注意力。在计算机视觉中,这可能包括图像中的亮度变化、颜色对比度、运动等直观的视觉特征。
随意线索
随意线索指的是由内部目标驱动的注意力调整。在计算机视觉任务中,这意味着模型会根据任务的要求或先前的知识来选择关注某些区域。例如,在图像分类任务中,模型可能会根据已知的类别特征来寻找最有可能包含该类别的区域。这种类型的注意力更类似于有目的性的搜索行为,即模型根据自身的任务目标来选择性地聚焦于某些输入信息。
注意力机制
卷积、全连接、池化层都只考虑不随意线索。注意力机制则显示地考虑随意线索。
随意线索被称之为查询(query),每个输入是一个值(value)和不随意线索(key)。通过注意力池化层来偏向性地选择某些输入。
非参注意力池化层
非参数注意力池化层(Non-parametric Attention Pooling Layer)是神经网络中使用的一种注意力机制类型,其特点是不依赖于任何可训练的参数。这种类型的注意力机制通常用于从输入数据中提取关键信息,同时减少参数的数量,使得模型更加轻便且易于训练。
给定数据。最简单的实现是平均池化:。更好地方案是Nadaraya-Watson提出的核回归:
其中K()是核函数。若使用高斯核:
。
那么相当于进行一次Softmax计算:计算x和候选xi的距离,在此基础上进行Softmax,将输出值作为权重与yi相乘。
参数化的注意力机制
在非参注意力机制的基础上引入一个可以学习的w:
注意力机制总结
心理学认为人通过随意线索和不随意线索选择注意点。
注意力机制中通过query(随意线索)和key(不随意线索)来偏向性地选择输入。一般可写作:
。其中是注意力权重。
注意力分数
注意力分数是注意力机制中的一个关键概念,本质上是通过一系列函数计算得来的结果。它是用来量化输入序列中各个元素重要性的数值。
在刚刚的参数化注意力机制中,的结果便是注意力分数。
注意力机制具体流程如下:
- 计算注意力分数:score = f(query, key)
- 计算注意力权重:attention_weights = softmax(scores)
- 进行加权求和,从而生成一个加权后的上下文向量:
- context_vector = sum(attention_weights * value) for each value in values
拓展到高维度
加性模型(Additive Attention)
加性模型使用了一个额外的前馈神经网络来计算注意力分数。
在加性模型中,注意力得分通过以下步骤计算:
线性变换:首先,查询向量 qq 和每个键向量 kiki 分别经过不同的线性变换(即乘以权重矩阵)。这可以表示为:,。
非线性激活:接下来,将变换后的查询向量和键向量相加,并通过一个非线性激活函数,通常是双曲正切(tanh),来处理这个结果:。
评分:最后,将上一步的结果 ai乘以另一个参数化的向量v,得到最终的注意力得分。这可以通过以下公式表示:。
这里的Wq和Wk是学习到的权重矩阵,vv 是一个可训练的参数向量。整个过程可以用一个简单的数学表达式概括如下:
等价于将query和key合并起来后放入一个隐藏层大小为h,输出大小为1的但隐藏层MLP。因此k,q可以形状不同。
点积注意力机制(Dot Product Attention)
如果q和k长度相同,那么。
向量化版本:
注意力分数总结
注意力分数是query和key的相似度,注意力权重是注意力分数softmax后的结果
注意力分数分为加性模型和点积模型