无处不在的Attention

2023-11-10

概述

之前的博客中,笔者都曾提到attention机制。这种考虑全局,关注重点的机制在深度学习中很常见,尤其是self-attention将自然语言处理带到一个新高度。attention增加了深度学习的可解释性,并且应用广泛,在自然语言处理,计算机视觉,推荐系统中到处可见。它克服了循环神经网络解决过长序列时的问题,并且也可以像卷积神经网络那样能够并行计算。本文就列举几个比较经典的attention模型,简述其原理。本文一些内容参考领英团队发表的文章《An Attentive Survey of Attention Models》。

Attention家族

经典attention模型

在这里插入图片描述
最开始,attention是在机器翻译中被提出。在Seq2Seq模型中,当我们输入一个序列Xi时,经过一个RNN(或者其变体)进行编码,将编码的结果再通过一个RNN(或者其变体)进行解码(如图a)。这样的Seq2Seq模型会有两个弊端:1.不管输入是多长的序列,始终将其压缩成一个固定长度的向量传入解码器,这一定会丢失一些信息;2.输出的每个token并不能关联到输入中与之相对应的token。而注意力机制就是通过允许解码器访问整个编码的输入序列的隐层,在输入端引入一个权重,解码时优先考虑位置信息,解码输出相对应的token(如图b)。下面我们详细解释一下
首先,利用一个函数来整合编码器隐藏状态h与上一时刻解码器隐藏状态s。
在这里插入图片描述这里我们用a来代替函数操作,这种函数可以自行确定,但是输入不变。如这样的操作,用两个矩阵参与变换:
在这里插入图片描述
当然这种直接相乘的方式并不是唯一的,其他研究中也提到了另外的操作。笔者在一篇文章中也找到了文章作者对这类经典操作的总结。
在这里插入图片描述
接着,进行归一化操作,得到权重矩阵值:
在这里插入图片描述
接下来,将权重与输入状态的隐藏值相乘,得到上下文向量ci,如:
在这里插入图片描述最后,解码器的隐藏状态就可以加入上下文向量,考虑了整个输入序列及其对应位置关注部分的的信息。
在这里插入图片描述最终的输出:
在这里插入图片描述
这就是最经典的attention。

局部attention

上面的模型中attention的计算方式是考虑了输入的所有元素的隐层状态。后来又有学者提出如下图这样的结构,并没有考虑输入token序列所有的隐层状态,而是只考虑当前编码位置周边的隐层状态。这种局部attention减少了自己算资源,并且也能够保留相关信息。
在这里插入图片描述
如上图,与全局attention不同的是,在进行权重计算时,使用一个窗口对编码器隐层进行滑动,这个窗口长度为2D+1,即考虑了当前token和它前后D长度的tokens。这里的有一个对其位置Pt,

在这里插入图片描述sigmoid是一个概率中,公式中的S是输入序列的长度(图中有点不一样,叫Tx,请读者注意一下)。这样这个滑动的位置也会随着输入序列长度的不同而变化。此外还要注意一下,注意力矩阵的权重相比之前的全局attention还增加了一个高斯分布乘在后面:
在这里插入图片描述这也是加入了信息,使得离当前token较远的分配少一些权重,较近的分配近一些的权重。上面就是局部attention原理。

指针生成网络

指针生成网络让从源文本中生成单词变得更加容易,甚至可以复制原文本中非正式单词。这就使得模型能够处理那些从未出现过的单词,允许使用更小规模的词汇集。如下图,该模型相比于传统模型提出了Pgen,利用这个概率值,将输出分布矩阵与输入序列的权重矩阵进行关联,从而得到最终生成的注意力分布情况。
在这里插入图片描述

记忆网络

记忆网络最早应用于问答系统中。
在这里插入图片描述
如上图,将原始文本嵌入之后,一部分与Question的嵌入进行计算,得到输入后的权重。这个权重再与原始文本结合得到一个中间层的输出,这个输出再次与Question结合得到问题的回答。

self-attention

self-attention因为Transformer模型而大放异彩,提出Transformer模型的那篇文章《Attention is all you need》的文章题目也是透露出self-attention的强大。不需要循环神经网络,也是能够解决循环神经网络处理的问题,而且性能更优。在后面的博文中,我会详解这篇文章。这里呢,我们先大概感受一下self-attention。下图是Transformer结构。左边部分是编码器(BERT结构),右边部分是解码器(GPT, PGT-2结构)。当然这个是最小单元,真实结构中是多种这样的单元的组合。

在这里插入图片描述
在transformer结构中,self-attention结构尤其关键。将一句话输入后,进过embedding即进入多头注意力机构。嵌入后输入是个三维张量数据。将最后一维(词嵌入这个维度)拆成三份矩阵,并进行矩阵操作:
在这里插入图片描述
拆成Q, K ,V三个矩阵,对这三个矩阵进行操作。这就是注意力矩阵的基本思想。这里暂不展开,后续在其他博文中详细介绍。
在这里插入图片描述

co-attention模型

共同注意力模型就是对多个输入序列进行操作,并共同学习它们的注意力权重,以捕获这些输入之间的交互作用。

在这里插入图片描述
上面这张图来源于2016年使用co-attention的例子。在进行视觉问答时,不仅对图像进行了attention操作,也对问句进行相关操作,二者结合得到答案。

多层attention叠加

在文本中,也有多个attention叠加操作的情况。从单词到句子,从句子到文档,这样抽象程度不断增加。这样使得文档分类更有可解释性。
在这里插入图片描述

可解释性

上面提到了可解释性,这里列举本文博客开头提到的综述文章中的例子。
在这里插入图片描述
第一个是机器翻译,可见对应两种语言的两个词之间关系比较大。第二个图是推荐系统,可见user1和user2对不同风格的图片的注意力也是不同的。第三个是视觉问答。对生成句子中的people来说,图片中的较亮部分与之对应。通过这样的可视化研究,我们完全可以看到attention矩阵很好地解释了这类模型。

总结

attention机制不仅无处不在,而且很有必要无处不在。在机器翻译,问答系统,计算机视觉中不可或缺,虽然变体较多,但是核心思想仍在,目前仍然在告诉发展中。如果想对attention有更深的认识,建议去精度相关论文,笔者在这里抛砖引玉,希望能够对读者有所帮助。

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

无处不在的Attention 的相关文章

随机推荐

  • mysql [42000][1071] Specified key was too long; max key length is 767 bytes

    今天在MySQL中建立表的时候 报了一个错误 说是key太长了 超戳了767个字节 但是建表语句并有超过指定的长度啊 CREATE TABLE XXL JOB QRTZ JOB DETAILS SCHED NAME VARCHAR 120
  • (二)Ubuntu系统Pytorch环境配置

    1 前言 2 安装miniconda 3 安装Pytorch 4 安装CUDA和cuDNN 5 验证 环境配置系列 一 Ubuntu安装详细教程 从镜像制作到NVIDIA驱动安装全流程 超详细的图文教程 二 Ubuntu系统Pytorch环
  • 图解算法使用python吴灿铭 pdf_图解算法

    像小说一样有趣的算法入门书 算法是解决问题的一步步流程 也是计算机科学领域的核心主题 如今程序员 常用的算法已经经过了前人的探索 检验及证明 如果你想搞明白这些算法 又不想被困在繁琐的证明中 本书正是你的不二选择 这本图示丰富 引人入胜的实
  • 【数据结构】零基础树状数组笔记

    参考和引用 树状数组学习笔记 树状数组 数据结构详解与模板 可能是最详细的了 树状数组 简单介绍 树状数组小结 AcWing 241 楼兰图腾 的题解 树状数组求逆序对模板 转 树状数组逆序对 树状数组的作用 树状数组 也叫做二叉索引树 或
  • CMake 入门与进阶

    目录 cmake简介 cmake的下载 cmake 的使用方法 示例一 单个源文件 cmake生成的中间文件以及可执行文件都放在build目录下 示例二 多个源文件 示例三 生成库文件 动态库和静态库 修改库文件名字 最低版本要求 示例四
  • Set接口介绍

    文章目录 前言 一 Set接口 1 Set接口特点 2 Set的实现类 Set接口提供的方法API 二 HashSet 1 HashSet的特点 2 HashSet的属性 3 HashSet的构造函数 4 HashSet方法 三 Linke
  • java中的循环

    java中的循环有四种 循环由四部分组成 1 初始部分 循环判断的变量 2 循环条件 布尔表达式 3 循环操作 循环执行的代码 4 迭代部分 更新循环变量 1 while循环 while的特点 首次判断不满足 则一次都不会执行 先判断 再执
  • 渗透测试之指纹识别(CMS、CDN、WAF)

    目录 什么是指纹识别 1 cms指纹识别 2 cdn指纹识别 3 WAF指纹识别 什么是指纹识别 通过关键特征 识别出目标的CMS系统 服务器 开发语言 操作系统 CDN WAF的类别 版本等等 其中主要识别以下的信息 1 CMS信息 比如
  • C3PO数据库连接池

    一 数据库连接池原理 连接池基本的思想是在系统初始化的时候 将数据库连接作为对象存储在内存中 当用户需要访问数据库时 并非建立一个新的连接 而是从连接池中取出一个已建立的空闲连接对象 使用完毕后 用户也并非将连接关闭 而是将连接放回连接池中
  • Adversarial Visual Robustness by Causal Intervention

    Motivation 机器能够利用人看不见的pattern对目标进行分类 当测试时pattern不变 那么这些pattern是有益的 被称为predictive features 而当他们在攻击中被篡改时 他们就是混淆因子 本文希望通过因果
  • 【C++】《C++标准程序库》小结第九章-算法

    1 普通算法在
  • 软件测试从月薪8k到年薪30W+,一个女测工的辛苦历程

    我花了6年的时间 由月薪8k的手工测试成长到年薪30w 的测试开发 回顾我从手工测试到测试开发的成长路径 基本上是伴随着 3次能力飞跃 实现的 第一次 能力飞跃 从不满足现状开始 第一家入职的时候是一家小公司 工资给了8K多点 刚开始入行的
  • shopify店铺 怎么样 shopify建站 我的使用经验

    公司从19年底开始使用shopify建站 进行品牌宣传和商城交易的相关业务 我个人作为开发也从开发shopify的工作中学习到了很多东西 这个框架非常灵活 官方也提供了很多接口 优点 主题编辑器 可以实时预览编辑 开发灵活 可扩展性强 插件
  • SoapUI经常遇到的问题记录--持续刷新

    1 怎么SoapUI的Request URL不支持大写怎么办 问题 在SoapUI的Request URL中 每次输入的URL中含有的大写字母会自动转换为小写字母 导致请求不了对应的地址该怎么办 解决方法 具体的解决办法是在HTTP Tes
  • java代码中设置mysql时区_关于Java中的mysql时区问题详解

    前言 话说工作十多年 mysql 还真没用几年 起初是外企银行 无法直接接触到 DB 后来一直从事架构方面 也多是解决问题为主 这次搭建海外机房 围绕时区大家做了一番讨论 不说最终的结果是什么 期间有同事认为 DB 返回的是 UTC 时间
  • 对图像中语义信息、高层和底层特征的理解

    前言 在计算机视觉中 大家经常会提起图像的语义信息以及图像的高层特征和底层特征 那么到底什么是图像的语义呢 图像的高层特征和底层特征又包含哪些信息的呢 今天我们就来说一说 1 图像的语义信息 图像的语义分为视觉层 对象层和概念层 视觉层即通
  • springboot属性类自动加载配置文件中的值

    springboot属性类自动加载配置文件中的值 如Person类加载在yml中配置的name age等属性值 可以通过如下步骤获取 类上添加 ConfigurationProperties注解 prefix为yml中配置的属性名称 要想属
  • redhat linux 系统修复,Red Hat 6企业版系统故障修复方法

    rm boot rf dd if dev zero of dev sda bs 446 count 1 rm f etc inittab rm f etc rc d rc sysinit rm f etc rc d rc loacl mv
  • Java中多线程打印abc

    public class PrintABC private int state private int count private static final int MAX COUNT 50 public synchronized void
  • 无处不在的Attention

    概述 之前的博客中 笔者都曾提到attention机制 这种考虑全局 关注重点的机制在深度学习中很常见 尤其是self attention将自然语言处理带到一个新高度 attention增加了深度学习的可解释性 并且应用广泛 在自然语言处理