当前位置:首页 » 表格制作 » 怎样在gru模型添加注意力机制
扩展阅读
可以驯化动物原始人游戏 2025-05-18 04:06:20
qq里可以打字的图片 2025-05-18 03:53:44

怎样在gru模型添加注意力机制

发布时间: 2023-04-22 03:08:08

⑴ 注意力机制详解

Attention机制在近几年来在图像,自然语言处理等领域中都取得了重要的突破,被证明有益于提高模型的性能。Attention机制本身也是符合人脑和人眼的感知机制,激渣这里我们主要以计算机视觉领域为例,讲述Attention机制的原理,应用以及模型的发展。

所谓Attention机制,便是聚焦于局部信息的机制,比如图像中的某一个图像区域。随着任务的变化,注意力区域往往会发生变化。

面对上面这样的一张图,如果你只是从整体来看,只看到了很多人头,但是你拉近一个一个仔细看就了不得了,都是天才科学家。

图中除了人脸之外的信息其实都是无用的,也做不了什么任务, Attention机制便是要找到这些最有用的信息 ,可以想见最简单的场景就是从照片中检测人脸了。

和注意力机制相伴而生的一个任务便是显着目标检测,即salient object detection。它的输入是一张图,输出是一张概率图,概率越大的地方,代表是图像中重要目标的概率越大,即人眼关注的重点,一个典型的显着图如下:

右图就是左图的显着图,在头部位置概率最大,另外腿部,尾巴也有较大概率,这就是图中真正有用的信息。

显着目标检测需要一个数据集,而这样的数据集的收集便是通过追踪多个实验者的眼球在一定时间内的注意力方向进行平均得到,典型的步骤如下:

于是就能得到下面这样的图,第二行是眼球追踪结果,第三行就是显着目标概率图。

上面讲述的都是空间上的注意力机制,即关注的是不同空间位置,而在CNN结构中,还有不同的特征通道,因此不同特征通道也有类似的原理,下面一起讲述。

注意力机制的本质就是定位到感兴趣的信息,抑制无用信息,结果通常都是以概率图或者概率特征向量的形式展示,从原理上来说,主要分为 空间注意力模型,通道注意力模型,空间和通道混合注意力模型 三种, 这里不区分soft和hard attention

不是图像中所有的区域对任务的贡献都是同样重要的,只有任务相关的区域才是需要关心的,比如分类任务的主体,空间注意力模型就是寻找网络中最重要的部位进行处理。

我们在这里给大家介绍两个具有代表性的模型,第一个就是Google DeepMind提出的STN网络(Spatial Transformer Network[1])。它通过学习输入的明闹悄形变,从而完成适合任务的预处理操作,是一种基于空间的Attention模型,网络结构如下:

这里的Localization Net用于生成仿射变换系数,输入是C×H×W维的图像,输出是一个空间变换系数,它的大小根据要学习的变换类型而定,如果是仿射变换,则是一个6维向量。

这样的一个网弯链络要完成的效果如下图:

即定位到目标的位置,然后进行旋转等操作,使得输入样本更加容易学习。这是一种一步调整的解决方案,当然还有很多迭代调整的方案,感兴趣可以去有三知识星球星球中阅读。

相比于Spatial Transformer Networks 一步完成目标的定位和仿射变换调整,Dynamic Capacity Networks[2]则采用了两个子网络,分别是低性能的子网络(coarse model)和高性能的子网络(fine model)。低性能的子网络(coarse model)用于对全图进行处理,定位感兴趣区域,如下图中的操作fc。高性能的子网络(fine model)则对感兴趣区域进行精细化处理,如下图的操作ff。两者共同使用,可以获得更低的计算代价和更高的精度。

由于在大部分情况下我们感兴趣的区域只是图像中的一小部分,因此空间注意力的本质就是定位目标并进行一些变换或者获取权重。

对于输入2维图像的CNN来说,一个维度是图像的尺度空间,即长宽,另一个维度就是通道,因此基于通道的Attention也是很常用的机制。

SENet(Sequeeze and Excitation Net)是2017届ImageNet分类比赛的冠军网络,本质上是一个基于通道的Attention模型,它通过建模各个特征通道的重要程度,然后针对不同的任务增强或者抑制不同的通道,原理图如下。

在正常的卷积操作后分出了一个旁路分支,首先进行Squeeze操作(即图中Fsq(·)),它将空间维度进行特征压缩,即每个二维的特征图变成一个实数,相当于具有全局感受野的池化操作,特征通道数不变。

然后是Excitation操作(即图中的Fex(·)),它通过参数w为每个特征通道生成权重,w被学习用来显式地建模特征通道间的相关性。在文章中,使用了一个2层bottleneck结构(先降维再升维)的全连接层+Sigmoid函数来实现。

得到了每一个特征通道的权重之后,就将该权重应用于原来的每个特征通道,基于特定的任务,就可以学习到不同通道的重要性。

将其机制应用于若干基准模型,在增加少量计算量的情况下,获得了更明显的性能提升。作为一种通用的设计思想,它可以被用于任何现有网络,具有较强的实践意义。而后SKNet等方法将这样的通道加权的思想和Inception中的多分支网络结构进行结合,也实现了性能的提升。

通道注意力机制的本质,在于建模了各个特征之间的重要性,对于不同的任务可以根据输入进行特征分配,简单而有效。

前述的Dynamic Capacity Network是从空间维度进行Attention,SENet是从通道维度进行Attention,自然也可以同时使用空间Attention和通道Attention机制。

CBAM(Convolutional Block Attention Mole)是其中的代表性网络,结构如下:

通道方向的Attention建模的是特征的重要性,结构如下:

空间方向的Attention建模的是空间位置的重要性,结构如下:

首先将通道本身进行降维,分别获取最大池化和均值池化结果,然后拼接成一个特征图,再使用一个卷积层进行学习。

这两种机制,分别学习了通道的重要性和空间的重要性,还可以很容易地嵌入到任何已知的框架中。

除此之外,还有很多的注意力机制相关的研究,比如 残差注意力机制,多尺度注意力机制,递归注意力机制 等。

从原理上来说,注意力机制在所有的计算机视觉任务中都能提升模型性能,但是有两类场景尤其受益。

我们知道细粒度分类任务中真正的难题在于如何定位到真正对任务有用的局部区域,如上示意图中的鸟的头部。Attention机制恰巧原理上非常合适,使用了注意力机制,对模型的提升效果很明显。

我们又回到了开头,没错,Attention的本质就是重要/显着区域定位,所以在目标检测领域是非常有用的。

上图展示了几个显着目标检测的结果,可以看出对于有显着目标的图,概率图非常聚焦于目标主体,在网络中添加注意力机制模块,可以进一步提升这一类任务的模型。

⑵ 推荐系统论文阅读(二十六)-基于上下文时序注意力机制的序列推荐模型

论文:

题目:《A Contextualized Temporal Attention Mechanism for Sequential Recommendation》

地址:https://dl.acm.org/doi/pdf/10.1145/3366423.3380285

序列推荐任务很少使用时间和上下文信息对h(h就是rnn,gru等序列建模网络输出的状态)进行加权,www这篇论文融合了上下文和时间信息的加权信号,一起看看吧,虽然笔者觉得这篇论文非常笨重。。

这篇论文的背景其实可以放在sequence recommendation任务中去看待,根据历史记录中用户的先后行为来预测用户的偏好对于现代推荐系统而言具有挑战性且至关重要。现有的大多数序列推荐算法都将重点放在顺序动作之间的传递结构上,但是在对历史事件对当前预测的影响进行建模时,很大程度上会忽略时间和上下文信息。

论文认为,过去事件对用户当前动作的影响应随时间推移以及在不同背景下发生变化。因此,我们提出了一个基于上下文和时间的注意机制,该机制可以学会权衡历史行为对行为的影响,不仅影响行为是什么,而且还影响行为发生的时间和方式。更具体地说,为了动态地校准自注意机制的相对输入依存关系,我们设计了多个参数化的核函数来学习各种时间动态,然后使用上下文信息来确定对每个输入遵循哪些weight kernel函数。

上面的说法可能有点晦涩难懂,下面结合一张图来描述一下

以上图中所示的在线购物场景为例:系统获得了一系列用户行为记录,并且需要推荐下一组商品。 我们应该注意,在此场景中,我们假设这些交互行为不是彼此独立的, 这更好地反映了推荐系统只能访问脱机数据和部分用户行为记录的情况。好了,接着看上图中的场景顷散启,用户在过去的一段时间内点击来网球拍,手机,运动鞋,智能手环,然后在昨天一直在浏览手机,那么这个时候我们需要预估用户的下一次点击,这个时候的用户正想买一个手表,那么这个时候系统是给用户推荐运动手表呢,还是推荐电子手表呢,因为用户过去的浏览有运动类的物品和智能设备的物品。

按照时间的分段性来看:长期的历史记录表明用户对购物体育相关产品感兴趣。 现在,用户正在寻找手表,该系统可以推荐一些运动手表。 从本质上讲,长期的用户历史记录通常可能会携带稀少但至关重要的用户偏好信息,影响着现在的意图,而最近的交互操作应该会更能代表用户在将来的意图。

按上下文细分:由于用户仔细浏览几个智能手机(比平均时间间隔短得多的时间间隔),因此可以认为这些物品跟当前用户的偏爱非常相关,因此智能手表可能比传统手表更受青睐。 通常,用户浏览日志的某些时间段可能看起来是异构的,这个时间段里面充满了用户的短期兴趣偏好,用户在这个时间点上会以重复的方式专注于一小部分同类物品。

很容易理解,时间因素可以理解为用户的长期兴趣偏好,即使在很遥远的历史,也会对现在的兴趣产生影响,上下文偏好可以理解为用户的短期兴趣偏好,雀如也就是用户在近期浏览的物品表征了用户现在的短期意图。说白了就是对用户进行长短期兴趣建模。

本来不想说这三个问题的,无奈部分论文说的太抽象了,或许是越抽象越容易中稿?

说实话这篇论文在解释时间跟上下文关系的时候说的太晦涩难懂了,笔者看的也是很头疼,比如下面这段话:

首先,我们看第一个问题,我的理解就是用self-attention进行序列掘唯建模,第二个就是确定时间因素和上下文因素的影响,第三个就是综合考虑时间和上下文的影响。

还是直接看模型吧,扯一堆什么因果关系看得头大:

用户空间 U ,大小为U;物品空间 V ,大小为V。

用户的历史行为序列为{ },其中 ={( , ), ( , ) , ... },其中 用户u的交互时间, 代表交互的物品。

模型的输入为包括窗口大小为L的用户历史记录:{ ( ) i: 0 -> L},当前需要推荐的时间戳 ,输入序列的embedding X表示:

同时将输入序列的时间信息使用时间戳差来表示:

模型整体上分为三个部分:content-based attention,temporal kernels和contextualized mixture

三层模型可以表示为:

其中, 根据content X来计算每个输入的权重,输出权重序列α ∈ ; 将时间信息 T 通过K temporal kernels计算每个输入的temporal权重β ∈ ; 从 X 中提取context信息,并结合前两个阶段获得的α 和β 来计算得到最终的contextualized temporal权重γ ∈ 。

最终被推荐的物品的表示为:

其中,F-out是一个feed-forward层。

这里用到的是self-attention机制,具体的细节不在赘述,只需要知道结果输出就行:

其中  表示最后一个物品的输入embedding,其实就是用最后一个物品的embedding作为key,self-attention最后一层的状态 作为query来计算 的。

基于观察:用户随意浏览的物品对短期的影响会急剧下降,但是在长期来说仍有着重要的作用。用户仔细浏览过的物品对用户短期的兴趣有着重要的作用。

所以,文章提出了很多temporal kernels来建模这种时间变化,不同的kernel函数 : → 如下所示:

(1)   =  ,假设一个用户操作的影响会随着时间指数下降,但是永远不会消失。

(2)  ,假设一个用户操作的影响会随着时间而减弱,最终可以忽略不计。
(3)  -alT + b,假设一个用户操作的影响会随着时间线性下降,之后的softmax操作会将某个时间段内的影响置为0。

(4)  假设一个用户操作的影响不受时间影响。

根据K个kernal函数{ },我们可以将 T 转为K个temporal权重集合:

作为下一阶段的输入。

这一阶段的目标是基于提取到的context信息融合前两个阶段获得的content和temporal信息。

使用Bidirectional RNN结构来获得context信息。从输入序列embedding表示X中,我们可以计算得到循环隐藏层的状态:

其中,⊕是拼接操作,C_a​ttr是可选择的context特征(可以是特定推荐系统中每个行为的属性,表示行为发生时的上下文),本文中只使用了Bi-RNN的输出作为context特征。

行为i的context特征需要映射为一个长度为K的权重向量,每一个元素 都是这个行为经过 后的结果,使用feed forwaed层Fγ将它们映射到概率空间 ,然后经过softmax操作得到概率分布:

最后将context和temporal信息进行融合:

其中, ,

其中,r是每一个item的分数,对于给定的用户,通过softmax层对item分数进行归一化,该层会在item表上产生概率分布,也就是进行多分类的意思。

其中Ns是根据频率进行负采样的负样本。

⑶ 注意力机制加在什么位置

注意力机制可以加在编码层和解码层之间,甚至可以加在Auto-Encoder里面。

此外,深度残差收缩网络是一种特殊的注意力机制算法,实现了注意力机制下的软阈值化;把注意力肆纯机制嵌入并中到了残差模块里面。

视觉注意力机制:

视觉注意力机制是人类视觉所特有的大脑信号处理机制。人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域,也就是一般所说的注意裂蔽咐力焦点,而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无用信息。

这是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段,是人类在长期进化中形成的一种生存机制,人类视觉注意力机制极大地提高了视觉信息处理的效率与准确性。

⑷ 深度学习人脸表情识别不灵敏

您好,深度学习人脸表情识别不灵敏的问题,可能是由于以下原因造成的:

1. 数据集不够全面:深度学习模型需要在大量、多样化的数据集上进行训练,如果数据集不包含足够多种类的表情,识别准确率就会下降。

2. 参数调整不当:深度学习模型中有很多的参数需要调整,比如卷积核大小、stride等等。如果这些参数的值设置不当,可能导致模型性能下降。

3. 模型过于简单:深度学习模型的复杂程度也会影响其准确率。如消枝果模型过于简单,可能无法捕捉到人脸表情的微妙变化。

解决这个问题的方法可以从以下几个方面入手:

1. 扩充数据集:获取更丰富的戚桥灶人脸表情数据集,提高模型的泛化能力。

2. 更改网络架构:选择合适的神经网络结构,对其中的参数进行调整,提高识别效果。

3. 引入注意力机制:通过引入注意力机制,引导模型把注意力集中在关键区域,提高识别的准确率。

希望以上内容对您高扮有所帮助。

⑸ 注意力机制

本文大部分的内容来自于 深度学习中的注意力机制

意力机制借鉴了人类注意力的说法,比如我们在阅读过程中,会把注意集中在重要的信息上。在训练过程中,输入的权重也都是不同的,注意力机制就是学习到这些权重。最开始attention机制在CV领域被提出来,但后面广泛应用在NLP领域。

需要注意的是,注意力机制是一种通用的思想和技术,不依赖于任何模型,换句话说,注意力机制可以用于任何模型。只是我们介绍注意力机制的时候更多会用encoder-decoder框架做介绍。

Encoder-Decoder 框架可以看作是一种深度学习领域的研究模式,应用场景异常广泛。下图是文本处理领域里Encoder-Decoder 框架最抽象的一种表示。

在NLP领域,可以把Encoder-Decoder框架看作是:将一个句子(篇章)转换成另一个句子(篇章)。最直观的例子就是机器翻译,将一种语言的表达翻译成另一种语言。对孙磨孙于句子对<source,target>,将给定输入句子
source,通过Encoder-Decoder框架生成目标句子target。其中,source和target都是一组单词序列:

Encoder是对source进行编码,转换成中间语义 :

对于解码器Decoder,其任务是根据中间语义C和当前已经生成的历史信息来生成下一时刻要生成的单词:

我们从最常见的Soft Attention模型开始介绍attention的基本思路。

在上一节介绍的Encoder-Decoder框架是没有体现出“注意力模型”的,为什么这么说呢?我们可以看下target的生成过程:

其中, 是Decoder的非线性变换函数。从上面式子中可以看出,在生成目标句子的单词时,不论生成哪个单词,它们使用的输入句子source的语义编码 都是一样的,没有任何区别。而语义编码 又是通过对source经过Encoder编码产生的,因此对于target中的任何一个单词,source中任意单词对某个目标单词 来说影响力都是相同的,这就是为什么说图1中的模型没有体现注意力的原因。

下面从一个例子入手,具体说明下注意力机制是怎么做的。

比游庆如机器翻译任务,输入source是英文句子:Tom chase Jerry;输出target想得到中文:汤姆 追逐 杰瑞。在翻译“Jerry”这个单词的时候,在普通Encoder-Decoder模型中,source里的每个单词对“杰瑞”的贡献是相同的,很明显这样不太合理,因为“Jerry”对于翻译成“杰瑞”更重要。如果引入Attention模型,在生成“杰瑞”的时候,应该体现出英文单词对于翻译当前中文单词不同的影响程度,比如给出类似下面一个概率分布值:

每个英文单词的概率代表了翻译当前单词“杰瑞”时注意力分配模型分配给不同英文单词的注意力大小。同理,对于target中任意一个单词都应该有对应的source中的单词的注意力分配概率,可以把所有的注意力概率看作 ,其中 表示source长度, 表示target长度。而且,由于注意力模型的加入,原来在生成target单词时候的中间语义 就不再是固定的,而是会根据注意力概率变化的 ,加入了注意力模型的Encoder-Decoder框架就变成了如图2所示。

根据图则链2,生成target的过程就变成了下面形式:

因为每个 可能对应着不同的注意力分配概率分布,比如对于上面的英汉翻译来说,其对应的信息可能如下:

其中, 表示Encoder对输入英文单词的某种变换函数,比如如果Encoder是用RNN模型的话,这个 函数的结果往往是某个时刻输入 后隐层节点的状态值;g代表Encoder根据单词的中间表示合成整个句子中间语义表示的变换函数,一般的做法中,g函数就是对构成元素加权求和,即:

其中, 代表输入句子Source的长度, 代表在Target输出第 个单词时Source输入句子第 个单词的注意力分配系数,而 则是Source输入句子中第 个单词的语义编码。假设下标 就是上面例子所说的“汤姆”生成如下图:

那另一个问题来了:注意力概率分布是怎么得到的呢?为了便于说明,我们假设图1的Encoder-Decoder框架中,Encoder和Decoder都采用RNN模型,那么图1变成下图4:

那么注意力分配概率分布值的通用计算过程如图5:

上面就是经典的soft Attention模型的基本思想,区别只是函数 会有所不同。

从我的角度看,其实Attention机制可以看作,Target中每个单词是对Source每个单词的加权求和,而权重是Source中每个单词对Target中每个单词的重要程度。因此,Attention的本质思想会表示成下图6:

将Source中的构成元素看作是一系列的<Key, Value>数据对,给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,即权重系数;然后对Value进行加权求和,并得到最终的Attention数值。将本质思想表示成公式如下:

其中, 表示Source的长度。

深度学习中的注意力机制 中提到:

因此,Attention机制的具体计算过程实际上分成了3个阶段,如图7:

第一阶段可以引入不同的函数和计算机制,根据Query和某个 ,计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量cosine相似性或者引入额外的神经网络来求值,如下:

第二阶段引入类似SoftMax的计算方式,对第一阶段的得分进行数值转换,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过SoftMax的内在机制更加突出重要元素的权重。即一般采用的公式如下:

第三阶段的计算结果 即为 对应的权重系数,然后进行加权求和即可得到Attention数值:

通过如上三个阶段的计算,就可以求出针对Query的Attention数值。

上面介绍的是soft Attention,hard Attention的区别在于soft Attention中 是概率分布,而hard Attention取值为0/1。Hard Attention在图像上有使用,具体可见 引入attention机制 。

这里的global attention其实就是soft Attention,global attention需要考虑encoder中所有的 ;而local Attention直观上理解是只考虑局部的 。

Self-attention是Google在transformer模型中提出的,上面介绍的都是一般情况下Attention发生在Target元素Query和Source中所有元素之间。而Self Attention,指的是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力机制。当然,具体的计算过程仍然是一样的,只是计算对象发生了变化而已。

上面内容也有说到,一般情况下Attention本质上是Target和Source之间的一种单词对齐机制。那么如果是Self Attention机制,到底学的是哪些规律或者抽取了哪些特征呢?或者说引入Self Attention有什么增益或者好处呢?仍然以机器翻译为例来说明,如图8和图9:

具体做法是点乘 和 ,然后除以 ,并经过Softmax,以此得到 的权重。也就是说Attention计算过程如下式,其中 是scaled factor:

注意力的计算一般有两种:加性注意力(additive attention)、乘法(点积)注意力(multiplicative attention)。(这里可以和第3部分计算相似度对应)

加性注意力是最经典的注意力机制,它使用了有一个隐藏层的前馈网络(全连接)来计算注意力; 乘法注意力就是Transformer用的方式。这两种注意力在复杂度上是相似的,但是乘法注意力在实践中要更快速、具有高效的存储,因为它可以使用矩阵操作更高效地实现。

Transformer原文:

Multi-Head Attention是用不同的 得到不同的Attention,最后将这些Attention拼接起来作为输出。公式如下:

其中, ;在Transformer模型中, 。

Scaled Dot-Proct Attention和Multi-Attention如下图所示: