DNN结构:CNN、LSTM/RNN中的Attention结构

2023-11-06

前言

       attention作为一种机制,有其认知神经或者生物学原理: 注意力的认知神经机制是什么?

       如何从生物学的角度来定义注意力?

       大多数attention (gating) 技巧都可以直接加入现有的网络架构,通过合理设计初始化和训练步骤也可以利用现有网络的预训练参数。这大大扩展了这些技巧的适用范围。

       参考此文:Recurrent Visual Attention源码解读

      代码地址:戳这里下载训练代码,戳这里下载测试代码。

Mnih, Volodymyr, Nicolas Heess, and Alex Graves. “Recurrent models of visual attention.” Advances in Neural Information Processing Systems. 2014 . https://arxiv.org/abs/1406.6247

这篇文章处理的任务非常简单:MNIST手写数字分类。但使用了聚焦机制(Visual Attention),不是一次看一张大图进行估计,而是分多次观察小部分图像,根据每次查看结果移动观察位置,最后估计结果。使用 Attention 机制之后会增加计算量,但是性能水平能够得到提升。

Yoshua Bengio的高徒,先后供职于LISA和Element Research的Nicolas Leonard用Torch实现了这篇文章的算法。Torch官方cheetsheet的demo中,就包含这篇源码,作者自己的讲解也刊登在Torch的博客中,足见其重要性。

通过这篇源码,我们可以
- 理解聚焦机制中较简单的hard attention
- 了解增强学习的基本流程
- 复习Torch和扩展包dp的相关语法

 

一、Attention机制应用于NLP

Attention机制的基本思想是,打破了传统编码器-解码器结构在编解码时都依赖于内部一个固定长度向量的限制

Attention机制的实现是通过保留LSTM编码器对输入序列的中间输出结果,然后训练一个模型来对这些输入进行选择性的学习并且在模型输出时将输出序列与之进行关联

换一个角度而言,输出序列中的每一项的生成概率取决于在输入序列中选择了哪些项。

“在文本翻译任务上,使用attention机制的模型每生成一个词时都会在输入序列中找出一个与之最相关的词集合。之后模型根据当前的上下文向量 (context vectors) 和所有之前生成出的词来预测下一个目标词。

… 它将输入序列转化为一堆向量的序列并自适应地从中选择一个子集来解码出目标翻译文本。这感觉上像是用于文本翻译的神经网络模型需要“压缩”输入文本中的所有信息为一个固定长度的向量,不论输入文本的长短。”

— Dzmitry Bahdanau, et al., Neural machine translation by jointly learning to align and translate, 2015

虽然模型使用attention机制之后会增加计算量,但是性能水平能够得到提升。另外,使用attention机制便于理解在模型输出过程中输入序列中的信息是如何影响最后生成序列的。这有助于我们更好地理解模型的内部运作机制以及对一些特定的输入-输出进行debug。

“论文提出的方法能够直观地观察到生成序列中的每个词与输入序列中一些词的对齐关系,这可以通过对标注 (annotations) 权重参数可视化来实现…每个图中矩阵的每一行表示与标注相关联的权重。由此我们可以看出在生成目标词时,源句子中的位置信息会被认为更重要。”

— Dzmitry Bahdanau, et al., Neural machine translation by jointly learning to align and translate, 2015

数学解释请查看原文...

 

二、聚焦机制(Visual Attention)      

使用Visual Attention详解..

  • 聚焦机制(Attention):每次只看输入的一小部分,诸次移动观察范围。
  • 循环神经网络(Recurrent NN):在每一次移动和输出之间建立记忆
  • 增强学习(Reinforcement learning):在训练过程中,根据不可导的反馈,从当前位置产生探索性的采样。

NLP系统中,我们可以认为基于注意力机制的系统有三个组件

        1.读取器读取原始数据(例如源语句中的源词)并将转换为分布式表示,其中一个特征向量与每个词的位置相关联;

        2.存储器存取 读取器输出的特征向量列表。这可以理解为包含事实序列的存储器,而之后不必以相同的顺序从中检索,也不必访问全部;

        3.最后一个程序利用存储器的内容 顺序地 执行任务,每个时间 聚焦于 某个(或几个,具有不同权重)存储器元素的内容。

第三组件可以生成翻译语句。《DeepLearning》中文版.p.399.

当用一种语言书写的句子中的词与另一种语言的翻译语句中的相应词对齐时,可以使对应的词嵌入相关联。早期的工作表明,我们可以学习将一种语言中的词嵌入与另一种语言中的词嵌入相关联的翻译矩阵(Kočiský et al., 2014),与传统的基于短语表中频率计数的方法相比,可以产生较低的对齐错误率。甚至有更早的工作(Klementiev et al., 2012) 研究跨语言词向量。这种方法的存在很多扩展。例如,允许在更大数据集上训练的更高效的跨语言对齐(Gouws et al., 2014)。

 

增强学习过程

       一个 recurrent neural network(RNN),按照时间顺序处理输入,一次在一张图像中处理不同的位置,逐渐的将这些部分的信息结合起来,来建立一个该场景或者环境的动态间隔表示。并非马上处理整张图像甚至bbox,在每一个步骤中,模型基于过去的信息和任务的需要选择下一个位置进行处理。这样就可以控制模型的参数和计算量,使之摆脱输入图像的大小的约束。这里和CNN有明显的不同。我们就是要描述这么一个端到端的优化序列,能够直接训练模型,最大化一个性能衡量,依赖于该模型在整个任务上所做的决策。利用反向传播来训练神经网络的成分和策略梯度来解决 the non-differentiabilities due to the control problem。

 

RAM:The Recurrent Attention Model

  本文将 attention problem 看做是目标引导的序列决策过程,能够和视觉环境交互。在每一个时间点,agent 只能根据有带宽限制的感知器来观察全局,即: it never senses the environment in full. 他只能在一个局部区域或者狭窄的频域范围进行信息的提取。The agent 可以自主的控制如何布置感知器的资源,即:选择感知的位置区域。该agent也可以通过执行 actions 来影响环境的真实状态。由于该环境只是部分可观察,所以他需要额外的信息来辅助其进行决定如何行动和如何最有效的布置感知器。每一步,agent 都会收到奖励或者惩罚,agent 的目标就是将奖励最大化。

      

 

三、LSTM的改进

      CNN中的两种Attention机制:Stochastic “Hard” Attention And Deterministic “Soft” Attention

      通过attention机制计算出的 z^t被称为 context vector,是捕捉了特定区域视觉信息的上下文向量。

       首先需要明确,attention要实现的是在解码的不同时刻可以关注不同的图像区域,进而可以生成更合理的词。那么,在attention中就有两个比较关键的量,一个是和时刻 t 相关,对应于解码时刻;另一个是输入序列的区域 ai,对应图像的一个区域。

      实现这种机制的方式就是在时刻 t ,为输入序列的各个区域 i 计算出一个权重 αti。因为需要满足输入序列的各个区域的权重是加和为一的,使用Softmax来实现这一点。至于Softmax需要输入的信息,则如上所讲,需要包含两个方面:一个是被计算的区域 ai ,另一个就是上一时刻 t-1 的信息 ht−1:

式中的 fatt是耦合计算区域 i 和时刻 t 这两个信息的打分函数。文中使用多层感知机,也算是最常用的了,我觉得是因为内积太简单,而双线性的参数太多,索性用最简单粗暴的 MLP 。但是我也看过一些paper里面用好几次attention时用不一样的打分函数。

现在,有了权重,就可以计算 z^t了:z^t=ϕ({ai},{αti} )

这个函数 ϕ就代指文中提出的两种attention机制,对应于将权重施加到图像区域两种不同的策略

 

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

DNN结构:CNN、LSTM/RNN中的Attention结构 的相关文章

随机推荐

  • django下载csv文件笔记

    下载小的csv文件 这里将用一个生成小的CSV文件为例 来把生成CSV文件的技术要点讲到位 我们用Python内置的csv模块来处理csv文件 并且使用HttpResponse来将csv文件返回回去 示例代码如下 1 在templates目
  • LeetCode:189. 轮转数组(Java)

    方法1 跳序 轮转法 带标记 时间复杂度和空间复杂度均为O n 因为有些特殊情况 会陷入循环 比如这个例子 我不知道怎么处理这种情况 所以直接搞个标记数组falgs 来看看这个位置的数字是否被处理过 方法二来改进这个陷入循环的问题 clas
  • Redis使用hmset利用相同key存数据时不完全覆盖问题

    首先说一下这篇博文得目的 昨天在使用redis时用到了hmset hmset简单说下是reids同时将多个键值对设置到哈希表中 按照key唯一得规则 相同key值进行赋值时肯定会对value值进行覆盖 但hmset却有些不同之处 接下来我做
  • TS复习-------TS中的泛型

    目录 概念 初识泛型 泛型类型 泛型类 泛型约束 泛型工具类型 Partial Record ReturnType Pick Exclude 概念 泛型 Generics 是指在定义函数 接口或类的时候 不预先指定具体的类型 而在使用的时候
  • 电商平台商品爬虫+django可视化分析

    1 简介 今天向大家介绍一个帮助往届学生完成的毕业设计项目 电商平台商品爬虫 django可视化分析 计算机毕业生设计 课程设计需要帮助的可以找我 2 设计概要 21世纪是信息化时代 随着信息技术和网络技术的发展 信息化已经渗透到人们日常生
  • GinCMS 使用golang Gin框架xorm开发的小型内容管理系统

    系统介绍 服务器端 使用GoLang 基于Gin框架 MySQL数据库 用到的组件xorm 前端展示 使用基于LayUI的layuicms 用到的第三方组件authtree treeTable GinCMS是我学习golang 使用Gin开
  • hdu 1210 Eddy's 洗牌问题

    题目连接 http acm hdu edu cn showproblem php pid 1210 题目思路很简单 只要保证1在第一个位置的时候就说明牌的顺序达到要求 输出M就可以了 代码 include
  • Unity3d——UI(血条制作)

    血条 Health Bar 制作 具体要求如下 分别使用 IMGUI 和 UGUI 实现 使用 UGUI 血条是游戏对象的一个子元素 任何时候需要面对主摄像机 分析两种实现的优缺点 IMGUI 效果图 血条红色不是很明显 为了显示IMGUI
  • python包安装相关-conda,pip-虚拟环境

    运行python的时候一定要注意当前运行所在环境位置 环境位置不同 包含的依赖包是不同的 然后不注意的话就是出很多莫名其妙的问题 比如一个pycharm里面不能运行的东西 命令行又能运行啥的 PIP使用的一些点 pip安装包的时候加上后缀
  • 7.4.3-elasticsearch索引字段类型参数

    fielddata 大多数字段默认情况下都会建立索引方便查询 但是针对排序 聚合以及脚本访问字段值则需要另外的访问方式 查询操作需要回答 哪些doc包含查询的词 而排序和聚合则需要回答 doc中该字段的值是多少 大多数字段可以通过文档索引在
  • linux grep命令

    1 作用 Linux系统中grep命令是一种强大的文本搜索工具 它能使用正则表达式搜索文本 并把匹 配的行打印出来 grep全称是Global Regular Expression Print 表示全局正则表达式版本 它的使用权限是所有用户
  • maven中mirror镜像和repository仓库配置

    maven仓库和镜像配置 1 名词解释 2 reportsitory仓库配置 3 mirror镜像配置 4 mirror与reporsitory 4 1 mirror与reporsitory的关系 4 2 mirrorOf的作用 1 名词解
  • Deveco studio 鸿蒙app访问网络详细过程(js)

    目录 效果图 安装IDE工具Deveco studio 创建项目 项目配置 编辑 功能开发 效果图 话不多说 上效果 安装IDE工具Deveco studio 下载地址 HUAWEI DevEco Studio和SDK下载和升级 Harmo
  • vue2如何使用element ui快速搭建自己的前端页面

    文章目录 前言 一 element ui是什么 二 使用步骤 1 在项目中引入 element ui 2 全局引入 element ui 组件 3 局部引入 element ui 组件 4 使用组件 前言 element ui 是一款非常好
  • 使用pyecharts绘制系统依赖关系图

    使用pyecharts绘制系统依赖关系图 背景介绍 近期梳理了公司内部系统之间的数据关系 得到了多个excel格式的统计文件 每个文件包含了该系统自身数据清单 依赖的其他系统的数据清单 对其他系统供应的数据清单 各系统之间依赖关系复杂 所以
  • 【Tomcat】Tomcat配置ssl证书

    记一次因各种需求在Linux中配置tomcat的https自签发证书过程 SSL证书简介 1 公开可信认证机构 例如CA 但是申请一般是收费的 一般几百到几千一年 在这里可以给你们介绍一下腾讯云截止到目前还有免费一年的CA证书服务 可以用一
  • 第三方服务器不在响应,服务器是怎样响应请求的?

    小弟最近在改后端项目 但出了个 bug 又解决不了 我觉得是我的后端知识太欠缺了 特来这里请教 流程是这样的 前端有上送信息 接口收到信息后 用收到的部分信息再去第三方接口请求信息 把两部分合起来存储 收到的信息中有一部分是用户ID 绝不重
  • Java: StringBuffer类的运用

    字符串的学习不比其他数据类型的学习 不管是对对象 对象的实体 属性等 的打印 还是在平常所有可以展示出来供我们进行参考的数据内容 共同点就是它们都是 string 字符串 都是一种字符串文本 而且在对一些我们所想表达的数据的提交和获取时 都
  • DBA的一些职责

    1 DBA的一些职责 安装和升级数据库服务器 如Oracle Microsoft SQL server 以及应用程序工具 数据库设计系统存储方案 并制定未来的存储需求计划 一旦开发人员设计了一个应用 就需要DBA来创建数据库存储结构 tab
  • DNN结构:CNN、LSTM/RNN中的Attention结构

    前言 attention作为一种机制 有其认知神经或者生物学原理 注意力的认知神经机制是什么 如何从生物学的角度来定义注意力 大多数attention gating 技巧都可以直接加入现有的网络架构 通过合理设计初始化和训练步骤也可以利用现