深度解析注意力模型(attention model)

article/2025/10/29 12:08:31

  • 前言
  • attention的内部结构是什么?

前言

这里学习的注意力模型是我在研究image caption过程中的出来的经验总结,其实这个注意力模型理解起来并不难,但是国内的博文写的都很不详细或说很不明确,我在看了 attention-mechanism后才完全明白。得以进行后续工作。

这里的注意力模型是论文 Show,Attend and Tell:Neural Image Caption Generation with Visual Attention里设计的,但是注意力模型在大体上来讲都是相通的。

先给大家介绍一下我需要注意力模型的背景。


这里写图片描述

I是图片信息矩阵也就是[224,224,3],通过前面的cnn也就是所谓的sequence-sequence模型中的encoder,我用的是vgg19,得到a,这里的a其实是[14*14,512]=[196,512],很形象吧,代表的是图片被分成了这么多个区域,后面就看我们单词注意在哪个区域了,大家可以先这么泛泛理解。通过了本文要讲的Attention之后得到z。这个z是一个区域概率,也就是当前的单词在哪个图像区域的概率最大。然后z组合单词的embedding去训练。

好了,先这么大概理解一下这张图就好。下面我们来详细解剖attention,附有代码~

attention的内部结构是什么?



这里写图片描述

这里的c其实一个隐含输入,计算方式如下

首先我们这么个函数:

def _get_initial_lstm(self, features):with tf.variable_scope('initial_lstm'):features_mean = tf.reduce_mean(features, 1)w_h = tf.get_variable('w_h', [self.D, self.H], initializer=self.weight_initializer)b_h = tf.get_variable('b_h', [self.H], initializer=self.const_initializer)h = tf.nn.tanh(tf.matmul(features_mean, w_h) + b_h)w_c = tf.get_variable('w_c', [self.D, self.H], initializer=self.weight_initializer)b_c = tf.get_variable('b_c', [self.H], initializer=self.const_initializer)c = tf.nn.tanh(tf.matmul(features_mean, w_c) + b_c)return c, h

上面的c你可以暂时不用管,是lstm中的memory state,输入feature就是通过cnn跑出来的a,我们暂时考虑batch=1,就认为这个a是一张图片生成的。所以a的维度是[1,196,512],y向量代表的就是feature。

下面我们打开这个黑盒子来看看里面到底是在做什么处理。


Attention模块

上图中可以看到

mi=tanh(Wcmc+Wymyi) m i = t a n h ( W c m c + W y m y i )

这里的tanh不能替换成ReLU函数,一旦替换成ReLU函数,因为有很多负值就会消失,会很影响后面的结果,会造成最后Inference句子时,不管你输入什么图片矩阵的到的句子都是一样的。不能随便用激活函数!!!ReLU是能解决梯度消散问题,但是在这里我们需要负值信息,所以只能用tanh

c和y在输入到tanh之前要做个全连接,代码如下。

        w = tf.get_variable('w', [self.H, self.D], initializer=self.weight_initializer)b = tf.get_variable('b', [self.D], initializer=self.const_initializer)w_att = tf.get_variable('w_att', [self.D, 1], initializer=self.weight_initializer)h_att = tf.nn.relu(features_proj + tf.expand_dims(tf.matmul(h, w), 1) + b)    # (N, L, D)

这里的features_proj是feature已经做了全连接后的矩阵。并且在上面计算h_att中你可以看到一个矩阵的传播机制,也就是relu函数里的加法。features_proj和后面的那个维度是不一样的。

def _project_features(self, features):with tf.variable_scope('project_features'):w = tf.get_variable('w', [self.D, self.D], initializer=self.weight_initializer)features_flat = tf.reshape(features, [-1, self.D])features_proj = tf.matmul(features_flat, w)  features_proj = tf.reshape(features_proj, [-1, self.L, self.D])return features_proj

然后要做softmax了,这里有个点,因为上面得到的m的维度是[1,196,512],1是代表batch数量。经过softmax后想要得到的是维度为[1,196]的矩阵也就是每个区域的注意力权值。所以

out_att = tf.reshape(tf.matmul(tf.reshape(h_att, [-1, self.D]), w_att), [-1, self.L])   # (N, L)
alpha = tf.nn.softmax(out_att) 

最后计算s就是一个相乘。

context = tf.reduce_sum(features * tf.expand_dims(alpha, 2), 1, name='context')   #(N, D)

这里也是有个传播的机制,features维度[1,196,512],后面那个维度[1,196,1]。

最后给个完整的注意力模型代码。

def _attention_layer(self, features, features_proj, h, reuse=False):with tf.variable_scope('attention_layer', reuse=reuse):w = tf.get_variable('w', [self.H, self.D], initializer=self.weight_initializer)b = tf.get_variable('b', [self.D], initializer=self.const_initializer)w_att = tf.get_variable('w_att', [self.D, 1], initializer=self.weight_initializer)h_att = tf.nn.relu(features_proj + tf.expand_dims(tf.matmul(h, w), 1) + b)    # (N, L, D)out_att = tf.reshape(tf.matmul(tf.reshape(h_att, [-1, self.D]), w_att), [-1, self.L])   # (N, L)alpha = tf.nn.softmax(out_att)  context = tf.reduce_sum(features * tf.expand_dims(alpha, 2), 1, name='context')   #(N, D)return context, alpha    

如果大家想研究整个完整的show-attend-tell模型,可以去看看github链接


http://chatgpt.dhexx.cn/article/8ZschD0A.shtml

相关文章

图解自注意力机制

写在最前边 这个文章是《图解GPT-2 | The Illustrated GPT-2 (Visualizing Transformer Language Models)》的一部分,因为篇幅太长我就单独拿出来了。 当然如果你只想了解自注意力机制可以只看本文的前半部分。 后半部分主要是讲Masked Self-attention在GPT-2中的应…

NeurIPS 2021 | Twins:重新思考高效的视觉注意力模型设计

Twins 是美团和阿德莱德大学合作提出的视觉注意力模型,相关论文已被 NeurIPS 2021 会议接收。本文主要讲述 Twins 解决的难点、设计和实现思路,以及在美团场景的探索落地,希望能对从事视觉算法研发的同学有所帮助和启发。 导读 Twins [1] 是美…

深度理解机器学习20-注意力机制模型

人类的注意力机制(Attention Mechanism)是从直觉中得到,它是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段。深度学习中的注意力机制借鉴了人类的注意力思维方式,被广泛的应用在自然语言处理(Natur…

人工智能之注意力模型

朋友们,如需转载请标明出处:人工智能AI技术的博客_CSDN博客-python系列教程,人工智能,程序人生领域博主 注意力模型 通过对教程中前面一些文章的学习,我们知道可以用上面的神经网络来实现机器翻译。假设要将一段法语句子翻译成英文句子。那么…

注意力之双线性模型注意力

本文主要针对两篇论文:双线性注意力网络模型和深度模块化注意力进行总结,加上自己对其的理解。若有不足,还望指出。 论文地址: 双线性注意力网络 深度模块化注意力 项目地址: 双线性注意力网络 深度模块化注意力 0. 写…

注意力模型CBAM

论文:CBAM: Convolutional Block Attention Module Convolutional Block Attention Module (CBAM) 表示卷积模块的注意力机制模块。是一种结合了空间(spatial)和通道(channel)的注意力机制模块。相比于senet只关注通道…

注意力模块

目前主流的注意力机制可以分为以下三种:通道注意力、空间注意力以及自注意力(Self-attention) 通道域旨在显示的建模出不同通道之间的相关性,通过网络学习的方式来自动获取到每个特征通道的重要程度,最后再为每个通道…

注意力机制学习

注意力机制学习 学习于博客https://blog.csdn.net/weixin_44791964/article/details/121371986 1.Channel Attention 1.1 SeNet 对于输入进来的特征层,关注其每一个通道的权重,让网络关注它最需要关注的通道。【channel不变,h,w变】 代表…

一般注意力模型

文章目录 一般注意力模型注意力输入注意力输出 一般注意力模型 描述一般注意力模型,首先要描述可以使用注意力的模型的一般特征。我们将这种模型称为任务模型,如图: 这个模型接受一个输入,执行指定的任务,然后产生所…

深度学习中的注意力机制模型及代码实现(SE Attention、CBAM Attention)

目录 常用的注意力机制模型 SE Attention CBAM Attention CBAM Attention 模型结构​ CBAM Attention 代码实现(Pytorch版): 注意力机制加到网络的哪里合适 常用的注意力机制模型 常用的注意力机制多为SE Attention和CBAM Attention。它…

深度学习笔记——Attention Model(注意力模型)学习总结

深度学习里的Attention model其实模拟的是人脑的注意力模型,举个例子来说,当我们观赏一幅画时,虽然我们可以看到整幅画的全貌,但是在我们深入仔细地观察时,其实眼睛聚焦的就只有很小的一块,这个时候人的大脑…

什么是注意力机制?

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

transformer 模型(self-attention自注意力)

transformer模型在《Attention is all you need》论文中提出 这篇论文主要亮点在于:1)不同于以往主流机器翻译使用基于RNN的seq2seq模型框架,该论文用attention机制代替了RNN搭建了整个模型框架。2)提出了多头注意力(…

深度学习中的注意力机制模型ECANet

目录 ECANet简介 ECA Module ECANet 性能对比 ECANet简介 Efficient Channel Attention Module 简称 ECA,2020年 Qilong Wang等人提出的一种 高效通道注意力(ECA)模块 ; 提出了一种 不降维的局部跨通道交互策略 ,有效避免了降维对于通道…

注意力模型直观理解(Attention Model Intuition)

来源:Coursera吴恩达深度学习课程 本周的课程我们都在使用这个编码解码的构架(a Encoder-Decoder architecture)来完成机器翻译。当你使用RNN读一个句子,于是另一个会输出一个句子。注意力模型(the Attention Model&a…

深度学习中的注意力机制

作者 | 张俊林 责编 | 何永灿 最近两年,注意力模型(Attention Model)被广泛使用在自然语言处理、图像识别及语音识别等各种不同类型的深度学习任务中,是深度学习技术中最值得关注与深入了解的核心技术之一。 本文以机器翻译为例&…

注意力模型---Attention Model

注意力模型---Attention Model 1、Soft Attention Mode1.1 什么是Soft Attention Mode1.1 公式介绍 2、四种注意力中的打分函数2.1 加性注意力(additive attention)2.2 点积注意力(multiplicative attention)与双线性注意力(MLB)2…

【机器学习】关于注意力模型(Attention-model)的理解和应用

注意力模型是近年来在序列处理领域新提出的机器学习方法,在语言翻译等领域取得了不错的效果。要想了解注意力模型,那么必须对现在的机器学习各领域有一定的了解,而且要了解encoder-decoder基本思想。 首先可以大致的概括下目前的机器学习尤其…

一文读懂计算机视觉中的注意力机制原理及其模型发展

作者&编辑 | 言有三 来源 | AI有道(ID:yanyousan_ai) 导读:Attention机制在近几年来在图像,自然语言处理等领域中都取得了重要的突破,被证明有益于提高模型的性能。Attention机制本身也是符合人脑和人眼的感知机制…

注意力模型(Attention Model)理解和实现

1. 直观感受和理解注意力模型 在我们视野中的物体只有少部分被我们关注到,在某一时刻我们眼睛的焦点只聚焦在某些物体上面,而不是视野中的全部物体,这是我们大脑的一个重要功能,能够使得我们有效过滤掉眼睛所获取的大量无用的视觉…