Attention Model(mechanism) 的 套路

2023-05-16

最近刷了一些attention相关的paper(照着here的列表+自己搜的paper),网上相关的资料也有很多,在此只讲一讲自己对于attention的理解,力求做到简洁明了。

一.attention 的本质

attention其实就是一个加权求和。

attention处理的问题,往往面临的是这样一个场景:

你有 k d维的特征向量 hi(i=1,2,...,k) 。现在你想整合这 k 个特征向量的信息,变成一个向量h(一般也是 d 维)。

solution:
1.一个最简单粗暴的办法就是这k个向量以element-wise取平均,得到新的向量,作为 h ,显然不够合理。

2.较为合理的办法就是,加权平均,即( αi 为权重):

h=ki=1αihi

而attention所做的事情就是如何将 αi 合理的算出来。

二.attention 的设计

如何计算得到 αi ,一般分两个步骤:

step 1: 设计一个打分函数 f ,针对每个hi,计算出一个score si 。而 si 打分的依据,就是 hi 与attention所关注的对象(其实就是一个向量)的相关程度,越相关,所得 si 值越大。

step 2:对所得到的 k 个score si(i=1,2,...,k),通过一个softmax函数,得到最后的权重 αi ,即:

αi=softmax(si)

那么如何设计step 1中的打分函数 f 呢,在论文”Dynamic Attention Deep Model for Article Recommendation by Learning Human Editors’Demonstration”中的Attention Mechanism章节给了较为全面的概括。大体分为三类:

1.Location-based Attention

2.General Attention

3.Concatenation-based Attention

其中General Attention并不常见,(可能笔者读的paper不够多,目前还没有遇到过)因此在这里不做介绍。接下来详细介绍下Location-based Attention和Concatenation-based Attention的设计。

2.1 Location-based Attention

应用场景, 比如 对于一个问题‘Where is the football?’, ‘where’ 和‘football’ 在句子中起着总结性的作用。而这种attention只和句子中每个词自身相关。

Location-based的意思就是,这里的attention没有其他额外所关注的对象,即attention的向量就是hi本身,因而 f 的设计如下:

si=f(hi)=activation(WThi+b)

其种 WRd , bR , siR ,这里的激活函数activation,常见的有三种:1)tahn,2)relu,3)y=x(即没有激活函数)

具体我们来举几个例子,可能具体实现上,有略微区别,不过都大同小异:

Example 1:A Context-aware Attention Network for Interactive Interactive Question Answering_KDD2017

这篇文章涉及多个attention,这里只举相关的几个例子:

这里写图片描述

可以看到, gqj 就是 hi γj 就是权重,不要太在意(3)表达的是什么,但可以看到在(3)中利用加权求和 gqj 即得到 h 再进行下一步操作。

Example 2:Dynamic Attention Deep Model for Article Recommendation by Learning Human Editors’ Demonstration_KDD2017

这里用了两种不同的attention,通过权重 α 来平衡,想表达更多的信息,但都是location-based的。最终得到两个不同的score( λMmt,λTt

这里写图片描述

2.1 Concatenation-based Attention

Concatenation-based意思就是,这里的attention是指要关注其他对象。

我们用 ht 表示attention所关注的对象的特征(具体怎么得到 htRdt ,就不是attention所干的事情,需要其他特征提取的网络来获取 ht ,比如 ht 可以是用cnn提取得到的图片信息,用rnn提取得到的句子信息等等)。

需要注意的是这里的 ht 可以是恒定不变的一个向量(比如整个句子的向量表达),也可以是随着时序不断变化的向量(比如句子中的单词的向量表达,不同时刻,面对的是句子中不同的单词),具体问题,具体设计

f 就是被设计出来衡量hi ht 之间相关性的函数。一般是这么设计的:

si=f(hiht)=vTactivation(W1hi+W2ht+b)

这里 W1Rdd,W2Rddt,bRd,vRd,siR ,一般情况下 dt=d

函数的描述的意思就是,希望通过 W1,W2 的对齐操作,使得 hi ht 的特征能够对应上。然后再通过 v 计算score。

具体我们来举几个例子,可能具体实现上,有略微区别,不过都大同小异:

Example 1:Attentive Collaborative Filtering Multimedia Recommendation with Item- and Component-Level Attention_sigir17

这篇论文讲了多层的attention
其中一层是:

这里写图片描述
这里写图片描述

这里ui就是 hi ,但可以看机,这里加了各种各样的attention( ht ),即 vl,pl,x¯l 。可以说是,想加什么attention,就直接把对应向量往公式里一加,即可。
另一层是:

这里写图片描述
这里写图片描述

与第一层的attention类似,不多讲。

Example 3:Dipole Diagnosis Prediction in Healthcare via Attention-based Bidirectional Recurrent Neural Network_2017KDD

在这篇论文中,将上下文的文本信息作为attention,即公式(7)中的 ci

这里写图片描述
这里写图片描述

Example 4:Enhancing Recurrent Neural Networks with Positional Attention for Question Answering_SIGIR2017

通过题目 Positional Attention也大致可以猜到,作者应该通过其他方式得到了一个position的表达向量 pj ,将其作为attention,具体公式如下:

这里写图片描述
这里写图片描述

Example 5:Learning to Generate Rock Descriptions from Multivariate Well Logs with Hierarchical Attention_2017KDD

和前面类似,不多讲,直接上公式:

这里写图片描述
这里写图片描述
这里写图片描述

Example 6:Reasoning about entailment with neural attention_ICLR2016

也不多讲,直接上公式
这里写图片描述

看到这里相信大家对于attention有了较为直观的感觉,其实套路都差不太多,看各家paper给出的公式也都差不多,具体是结合问题,怎么去设计这个attention向量,怎么去说故事罢了

三.attention 的扩展 (多层attention,常见的是2层)

举个简单的例子,一个文档由 k2 个sentence组成,每个sentence由 k1 (每个句子的 k1 大小不一)个word组成。

第一层:word-level的attention
对于每个sentence有 k1 个word,所对应的就有 k1 个向量 wi ,利用本文第二章所提的方式,得到每个sentence的表达向量,记为 sti
第二层:sentence-level的attention
通过第一层的attention,我们可以得到 k2 sti ,再利用本文第二章所提的方式,得到每个文档的表达向量 di ,当然也可以得到每个 sti 所对应的权重 αi ,然后,得到这些,具体任务具体分析。

这里举几个例子(不具体展开讲公式),比如:

Example 1:A Context-aware Attention Network for Interactive Interactive Question Answering_KDD2017

输入一篇文档和问题,输出回答
第一层attention:
先用location attention+ mlp对问题embedding成一个向量u
用Concatenation-based Attention(前一个句子和当前句子concatenation)+与u的相似度进行计算attention score建模,得到每个句子的embedding
第二层attention
以句子的embedding的粒度,对整个文档进行attention(利用与u的相似度进行计算attention score)

Example 2:Leveraging Contextual Sentence Relations for Extractive Summarization Using a Neural Attention Model_SIGIR2017

输入一篇文档,输出文档的summarize
第一层attention
(Location-based Attention) ,word-level,来生成每个句子的vector

第二层attention
利用第一层句子的vector,将当前句子作为中心,前n个句子和后n个句子组成的2n+1个句子的序列,作为RNN输入,将中心句子作为attention,来embedding上下文,然后通过上下文,对这个中心句子进行打分,作为句子对于整个文本的重要性的依据。

Example 3: Learning to Generate Rock Descriptions from Multivariate Well Logs with Hierarchical Attention_2017KDD

输入矿井的特征,有n个特征,每个特征是一个时间序列,表示不同深度的该特征。
第一层attention(location attention)
因为每一个特征都是一个时间序列,因此可以用rnn+attention对其进行embedding,成一个vector。生成了n个vector

第二层attention
和其他attention不同的是,世界对这n个向量进行(location attention)算score,因此这里的attention和rnn没有什么关系。

Example 4:Attentive Collaborative Filtering Multimedia Recommendation with Item- and Component-Level Attention_sigir17

用了两层attention。
第一层attention
每个item有多种feature,在feature-level的attention上,用user vector去做。然后得到每个item的vector。

第二层attention
结合了好几个feature进行打分,最后得到一个user feature的vector。与最原始的user vector结合起来得到了最后的user vector,然后与item做内积,判断相似性与喜好。

四.总结

目前来看,attention的套路还是很固定的,主要的关键点是如何结合具体问题,设计出你所要关心的attention,即 ht ,然后将 ht 加入到model中去,作为计算score的依据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Attention Model(mechanism) 的 套路 的相关文章

  • MVC 模型对象、域对象和 DTO 之间有什么区别

    MVC 模型对象 域对象和 DTO 之间有什么区别 我的理解是 MVC 模型对象 对要由相应视图显示的数据进行建模 它可能不会直接映射到域对象 即可能包含来自一个或多个域对象的数据 客户端 可能包含业务逻辑 例如 验证 计算属性等 没有持久
  • 为什么我的复选框没有映射到 MVC 模型成员?

    我正在尝试实现什么这个答案表明 https stackoverflow com a 10649724 57428但没有将显示名称存储在我的模型代码中 所以我相信这是一个单独的问题 我有 MVC 视图 和一个模型 public class M
  • 我需要双向创建 automapper createmap 吗?

    这可能是一个愚蠢的问题 n00b 到 AutoMapper 并且时间很短 我想使用 AutoMapper 从 EF4 实体映射到 ViewModel 类 1 如果我打电话 CreateMap
  • Rails 在模型中验证值在数组内

    我有一个表格 我可以在其中传递一个字段命名 type我想要检查它的值是否在允许类型的数组内以便任何人不得发布不允许的类型 数组看起来像 allowed types type1 type2 type3 type4 type5 type6 ty
  • Rails 4 模型子文件夹

    我在 app models request book 文件夹中创建了模型 但 Book Request Status table name 返回表名称 statuses book request statuses 是正确的表名称 如何获得正
  • Django与领域和自身的多对多关系独特

    我尝试使用语言和内容创建帖子 并将其与同一页面的其他版本相关联 但我陷入困境 class Page models Model content models TextField language models CharField max le
  • Rails:尝试渲染为 JSON 时 attr_accessor 不显示

    在我的应用程序中 我有一个如下的模型 class Init lt ActiveRecord Base attr accessor clientAvailability attr accessible returnCode returnMes
  • 如何让两个模型互相引用 Django

    我有以下代码 class Game models Model title models CharField max length 50 summery models CharField max length 500 key models I
  • 如何使用SqlAlchemy通过id查询数据库?

    我需要通过其查询 SQLAlchemy 数据库id类似的东西 User query filter by username peter 但对于身份证 我该怎么做呢 通过 Google 和 SO 搜索没有帮助 查询有一个获取函数 https d
  • 为树视图创建 Qt 模型

    我正在用 Qt 使用 C 编写一个应用程序 我需要在树视图中表示一个对象结构 实现此目的的方法之一是为此创建一个模型 但在阅读有关该主题的 Qt 文档后我仍然很困惑 我的 结构 非常简单 有一个Project持有的物体Task中的对象std
  • 使用 sunspot/solr 搜索多个模型

    我已经能够成功地实现基本的全文搜索 但是当我尝试使用范围 with statements 时 任何涉及多对多关系模型的查询似乎都不适合我 我知道相关行位于数据库中 因为我的 sql 语句确实返回了数据 然而 太阳黑子查询不会返回任何结果 我
  • 在 Ember 中将模型属性插入 Img 元素 URL

    我有一个模型image id财产 我有一个包含图像元素的模型视图 我需要将 id 插入图像元素的src属性来完成图像的 URL 以便我有效地执行此操作 img src 我的第一次尝试使用了 Handlebars 助手 img src 但这也
  • 防止 Django 在并发请求时多次将同一对象保存到数据库

    对于我们的博客平台 我们有一个 文章 模型 其中包含一个 更新的 日期时间字段 class Article models Model updated models DateTimeField null True blank True 当任何
  • zend框架找不到模型类?

    Yall 我有一个简单的问题 这可能是一个简单的配置问题 但是 我定义了一个模型 当我尝试从控制器访问它时 失败 模型位于模型目录中 当我查看快速启动应用程序时 看来这应该可行 这是我的模型 我的控制器停止了 这是控制器代码
  • Model在MVC中的作用是什么?

    我读过一些有关 MVC 的文章 但有一点我不清楚 该模型在实际中的作用是什么 模型是否代表业务对象 或者它只是一个帮助将信息从控制器发送到视图的类 以两个业务类为例 从数据库填充数据 Class Image Property FileNam
  • 如何删除django中级联的一对一相关模型?

    背景 我在 Django 1 8 5 中定义了以下模型 class PublishInfo models Model pass class Book models Model info models OneToOneField Publis
  • 具有模型目录和AUTH_USER_MODEL

    I have myApp models profiles py代替myApp models py 对相关模型进行分组 你怎么设置AUTH USER MODEL在这种情况下 因为 auth 只接受 foo bar 模式 app label m
  • 如何自动为 Swift 类创建初始化程序?

    UPDATE 使用结构而不是类 struct 在很多方面都更好 它有自己的初始化器 这是我的模型课 是否有可能创建init自动方法 每次我都必须将所有变量一一初始化 这会花费很多时间 class Profile var id String
  • 部分视图内的 ValidationSummary 未显示错误

    我有这样的部分观点 简化 model Portal Models LoginModel div class login container k block section class using Html BeginForm actionN
  • Yii2 修改 Model search() 中的 find() 方法

    我试图修改模型搜索中的 find 方法 但它抛出错误 必须设置数据提供程序属性 这是我的搜索模型 public function search params userID Yii app gt user gt identity gt id

随机推荐

  • dependencies和dependencyManagement区别

    文章目录 dependenciesdependencyManagement使用场景 区别 xff1a 总结 xff1a dependencies 父项目中的dependencies xff0c 子项目都会自动引入 xff0c 默认被所有的子
  • 【Git】解决Ctrl+V无法粘贴文本的问题

    解决Ctrl 43 V无法粘贴文本的问题 问题 xff1a 在我们使用Git Bash将项目克隆至本地时 xff0c 经常需要复制网址 xff0c 但此时却出现问题 xff1a Ctrl 43 V无反应 或是如下图只有 V xff1a 解决
  • 操作系统引导(开机过程)

    操作系统安装在C盘中 xff0c 其一步步启动的过程如下 xff1a 操作系统要启动 xff0c 操作系统的数据需要先被放入主存里 如图所示 xff0c 计算机的主存由RAM和ROM组成 xff0c ROM芯片被集成在电脑主板上 xff0c
  • igh ethercat master及简单介绍

    接触ethercat也有一段时间了 xff0c 做些小总结吧 1 xff0c 关于ethercat ethercat是基于工业以太网的一种总线协议 我接触的igh ethercat master for linux是以用ethercat协议
  • Linux下IGH Ethercat Master安装

    引言 简单igh ethercat master安装 1 xff0c 准备工作 xff08 1 xff09 一个Linux系统 xff0c 在虚拟机里面也可以 xff0c 不过如果在虚拟机里面需要一些其他的设置 xff0c 这个最后再说 L
  • 在树莓派/4.x内核下安装IgH EtherCAT master主站

    树莓派安装ethercat主站 环境 xff1a 4 14 91 rt49 v7 下载源码 xff0c 解压 tar xvf ethercat 1 5 2 tar bz2 cd ethercat 1 5 2 configure enable
  • C语言中static修饰函数和变量用法

    static修饰函数 xff0c 局部变量和全局变量的用法 在c语言中static关键字可以修饰函数和变量 修饰变量又可以分为修饰全局变量和局部变量 static作用是限定变量的生命周期 xff0c 限定变量或函数的作用域 写在前面 xff
  • SOEM控制io超简洁程序

    SOEM控制io超简洁程序 我想用SOEM简单控制io模块 xff0c 因为我的io模块每个出入输出旁边都会有一个小灯 xff0c 所以这也算是点灯程序 xff0c 但是我看了例子并不知道怎么修改 xff0c 都说igh麻烦 xff0c 我
  • Deep Learning 最优化方法之Adam

    本文是Deep Learning 之 最优化方法系列文章的Adam方法 主要参考Deep Learning 一书 整个优化系列文章列表 xff1a Deep Learning 之 最优化方法 Deep Learning 最优化方法之SGD
  • SOEM控制伺服电机

    我只完成了pv模式 xff0c 对于csp模式我不知道是哪里出现了问题 xff0c 有知道的可以在下方评论 这个代码我的pv模式可以正常运行和控制电机 xff0c csp模式可以使能电机 xff0c 但是电机不转 span class to
  • c语言常用的打印/输出函数

    c语言中除了最开始接触的printf 函数 xff0c 还经常遇到其他函数 xff0c sprintf printk fprintf 等 1 xff0c printf 这个函数应该是用的最多的 xff0c 或者是最先接触的 xff0c 至少
  • stm32f103介绍

    完整学习一遍stm32开发板开发 xff0c 并打算坚持一直写笔记 这是第一课 xff0c stm32的介绍 1 什么是STM32 从字面意义来看 xff1a ST xff1a 意法半导体 xff0c 是一个公司的名字 M xff1a Mi
  • 数据结构之单链表操作

    数据结构 xff0c 单链表操作 xff0c 本来应该三年前就应该会的 xff0c 奈何上学的时候呼呼睡大觉 xff0c 最近看代码又接触到了 xff0c 花了几天时间自己重新写了一下 链表操作应该是基础的 xff0c 并且需要会的 xff
  • igh etherlab主站介绍

    一 xff0c 简单介绍 目前用的最多的开源ethercat主站是igh和soem xff0c igh主站功能更多 xff0c 结构较为复杂 xff1b soem功能相对没有那么完善 xff0c 实现更为简单一些 使用场景 xff1a 主站
  • U盘变小恢复方法

    在使用中经常由于使用不当 xff0c 导致u盘空间变小 xff0c 比如像我现在的情况 xff0c 我本来u盘是32G的 xff0c 现在显示只有三个多G xff0c 格式化之后还是这样 解决步骤如下 xff0c 不需要下载工具 1 xff
  • VirtualBox 中运行 CentOS 7 鼠标切换

    在 VirtualBox 中运行 CentOS 7 虚拟机时 xff0c 有时鼠标可能会被捕捉 xff0c 导致无法在虚拟机和主机之间切换 以下是如何在 VirtualBox 中实现与 CentOS 7 鼠标切换的步骤 xff1a 首先 x
  • C++11 生产者消费者模型

    C 43 43 11 生产者消费者模型 线程互斥 lock guard 使用lock guard管理互斥锁 在退出作用域后进行析构时就会自动解锁 xff0c 从而保证了互斥量的正确操作 xff0c 避免忘记 unlock 操作而导致线程死锁
  • PS照片处理尺寸参考表

    参考表 一 讲多少寸 xff0c 是指长边的英寸数 xff0c 比如5 x 3 5就是5寸 讲多少R xff0c 指短边的英寸数 xff0c 比如4R是6 X 4寸 xff0c 而3R就是5寸的5 X 3 5寸 R 的意思的 rectang
  • 数据库习题及答案5

    模拟测验1 一 1 2 3 4 5 6 7 8 9 10 A D C c D A C A A C 一 选择题 xff08 在每个小题四个备选答案中选出一个正确答案 xff0c 填在题末的括号中 xff09 xff08 本大题共10小题 xf
  • Attention Model(mechanism) 的 套路

    最近刷了一些attention相关的paper 照着here的列表 43 自己搜的paper xff0c 网上相关的资料也有很多 xff0c 在此只讲一讲自己对于attention的理解 xff0c 力求做到简洁明了 一 attention