深入理解注意力机制(上)-起源

news2024/11/14 3:29:41

一、介绍

        近几年自然语言处理有很大的进展,从 2018 年 Google 推出的 BERT,到后来的 GPT、ChatGPT 等,这些模型当时能取得这样的成果,除了庞大的数据量及损害资源外,最重要的是的就是背后的Transformer模型,以及其使用的Attention Mechanism。

        今天这篇文章将分为两个部分,上一篇介绍序列到序列模型遇到的困难,为何要引入 Attentino 以及机制;下一篇则作用在 Transformer 背后的 Scaled Dot-Product Attention 以及实际的使用示例。

二、机器翻译

        在开始之前,我们先介绍一个自然语言处理的领域:机器翻译。

        翻译是一种典型的序列到序列(Sequence to Sequence)问题,意思就是:

  1. 输入是一个长度可以改变的序列(例如一个中文句子。“今天天气很晴朗”)
  2. 输出是一个长度可以改变的序列(例如一个英文句子。“今天阳光明媚”)

        假设今天 Transformer 还没有被发明,电脑会如何处理这类问题呢?

                直觉上会想到的作法大概就像上面这张图一样,分为两个步骤:

  1. 把输入序列(中文句子)一个字一个字读完
    在上面的表格中,每个 x 对应的就是一个字,而电脑会去读第一个字,读完后存起来,再读下一个字(先读「今」,再读「天」……),之后把所有资讯存在中间的上下文向量。
  2. 计算输出序列(中文句子)
    输出时,模型会根据上下文向量存储的信息,一个字一个字的输出(“it”, “'s”, “sunny”, ……)。

实践上确实可以用这样的模型制作机器翻译,但是上面的例句很短,如果今天我希望机器处理长一点的输入(例如这篇文章),那么会遇到下面的问题:

  1. 上下文向量维度太小,把比较前面的字给忘了
  2. 读完前面才能读后面,速度很慢

针对这一个问题,下面的模型提出了解方

通过联合学习对齐和翻译进行神经机器翻译

        这篇论文试图解决上面提出的第一点问题,概念其实很简单,既然 Context Vector 不可能存下整个输入句的信息,那我就在每次输出字的时候都看一遍整个句子就好了

        注意的做法就是在输出每个字的时候分别给输入的字每个一个权重,再让输入的句子做加权平均。

        在下面的模型中,输入的每个字会被先转成隐藏状态(下面的h,可以想成词嵌入),然后模型根据目前翻译到的字和每个字各自的隐藏状态来计算Attention分数。

        计算分数的函式会由模型自己学会。

        举例:假设现在模型已经输出“It's sunny”,准备要输出下一个字

        但是在输出前,需要先确定哪些中文字对下一个输出来说比较重要,所以它用某个函数 α 来计算每个字该有的分数,α("sunny", 今) = 0.8, α (“晴”,天) = 0.6 ……

        按理来说,下一个字是“今天”,所以输入中和「今天」两个字有关的部分会比较高分。

        因此,在输出“今天”之前,每个中文字可能会有下面的分数。

  • 「今」:0.8
  • 「天」:0.6
  • 「气」:0.05
  • 「很」:0.01
  • ……

        接下来把「今」的隐藏状态乘上 0.8、把「天」的隐藏状态乘上 0.6 ……,接着把所有的隐藏状态加起来,用它来计算下一个输出的英文字应该是什么。

        这个模型其实就是Attention的雏型,Attention的概念就是:

  1. 赋予输入每个字一个权重
  2. 将输入的字做加权计算

        之后讲话注意的时候经常会提到三个东西,Query、Key 和 Value,虽然本文没有明确提到这三个词,但是从上面的模型架构已经可以看出一些端倪:

  • 查询:翻译到的前一个字(“sunny”)
  • Key、Value:每个字的隐藏状态
  • 注意分数:α函式算出的分数

        你可以用下面的句子来理解注意,对于现在的查询(正在翻译的英文字)来说,哪个键(中文字)最重要。

        而在这个模型中,Value 和 Key 本质上是一样的东西。

三、结论

        这篇文章详细介绍了Attention机制的起源,虽然现在在做自然语言处理时使用的大多不是这个模型,但是通过前面的介绍可以理解为什么需要推出这个机制,以及Attention的核心概念是什么。

下一篇文章将介绍现在大家使用缩放点积注意力的逻辑以及使用示例。欢乐哭泣

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1228477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子学会C/C++编程等级考试2022年03月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…

莹莹API管理系统源码附带两套模板

这是一个API后台管理系统的源码,可以自定义添加接口,并自带两个模板。 环境要求 PHP版本要求高于5.6且低于8.0,已测试通过的版本为7.4。 需要安装PHPSG11加密扩展。 已测试:宝塔/主机亲测成功搭建! 安装说明 &am…

算法——动态规划(新)

什么是动态规划? 动态规划算法的基本思想-求解步骤-基本要素和一些经典的动态规划问题【干货】-CSDN博客 一、三步问题 面试题 08.01. 三步问题 - 力扣(LeetCode) 思路 我们要知道,走楼梯,前三个阶梯步数已经知道&…

基于深度学习的恶意软件检测

恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…

原理Redis-动态字符串SDS

动态字符串SDS Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题: 获取字符串长度的需要通过运算非二进制安全…

【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 4

1、下列哪个选项填到填到下图空缺处最合适 A、 B、 C、 D、 答案:D 2、按照如下图的规律摆放正方形,第 5 堆正方形的个数是 A、13 B、14 C、15 D、16 答案:D 3、从右面观察下面的立体图形,看到的是 A、 B、 C、 D、 答…

Jmeter做接口测试

1.Jmeter的安装以及环境变量的配置 Jmeter是基于java语法开发的接口测试以及性能测试的工具。 jdk:17 (最新的Jeknins,只能支持到17) jmeter:5.6 官网:http://jmeter.apache.org/download_jmeter.cgi 认识JMeter的目录&#xff1…

原理Redis-IntSet

IntSet IntSet是Redis中set集合的一种实现方式,基于整数数组来实现,并且具备长度可变、有序等特征。 结构如下: typedef struct intset {uint32_t encoding; /* 编码方式,支持存放16位、32位、64位整数*/uint32_t length; /* 元素…

基于Python+OpenCV+Tensorflow图像迁移的艺术图片生成系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统![请添加图片描述](https://img-blog.csdnimg.cn/dbda87069fc14c24b71c1eb4224dff05.png)四. 总结 一项目简介 基于PythonOpenCVTensorfl…

边缘计算是如何为元宇宙提供动力的?

构建元宇宙虚拟世界并不简单,也并不便宜,但是还是有许多大型公司正在转移大量资源来开发他们的元宇宙业务,当然大部分企业注意力都围绕着 VR 耳机、AR 眼镜、触觉手套和其他沉浸式虚拟现实体验所需的可穿戴硬件。虽然这种沉浸式的体验是最终结…

2023.11.17 关于 Spring Boot 日志文件

目录 日志文件作用 常见的日志框架说明 门面模式 日志的使用 日志的级别 六种级别 日志级别的设置 日志的持久化 使用 Lombok 输出日志 实现原理 普通打印和日志的区别 日志文件作用 记录 错误日志 和 警告日志(发现和定位问题)记录 用户登录…

web自动化测试的智能革命:AI如何推动软件质量保证的未来

首先这个标题不是我取的,是我喂了关键字让AI给取的,果然非常的标题党,让人印象深刻,另外题图也是AI自动生成的。 先简单回顾一下web自动化测试的一些发展阶段 QTP时代 很多年前QTP横空出世的时候,没有人会怀疑这种工…

【项目管理】中途接手的项目应对实用指南

导读:作为项目经理中途接手项目往往不可避免,为了保证项目成功需要项目经理额外考虑更多的因素和处理相关问题,也往往带来很大的挑战性。本文提供可应对借鉴的思路,在一定程度上可以作为最佳实践。 目录 1、首先、了解项目项目背…

python趣味编程-5分钟实现一个俄罗斯方块游戏(含源码、步骤讲解)

Python俄罗斯方块游戏是一款基于GUI的标题匹配益智游戏,非常容易理解和使用。说到游戏玩法,一切都和真实的一样。 用户必须管理俄罗斯方块的随机序列。在这个Python 俄罗斯方块游戏项目中,我将教您如何使用 Python 制作俄罗斯方块游戏。 Python 代码中的俄罗斯方块游戏:项目…

Redux-状态管理组件

一、简介 react中的状态只属于某个组件。而Redux是一个全局管理js状态的架构,让组件通信更加容易。 之前是状态在所有组件间传递,而redux通过store来实现这个功能。 Redux特性: 1.Single source Of truth,通过store唯一维护状态…

nn.KLDivLoss,nn.CrossEntropyLoss,nn.MSELoss,Focal_Loss

KL loss:https://blog.csdn.net/qq_50001789/article/details/128974654 https://pytorch.org/docs/stable/nn.html 1. nn.L1Loss 1.1 公式 L1Loss: 计算预测 x和 目标y之间的平均绝对值误差MAE, 即L1损失: l o s s 1 n ∑ i 1 , . . . n ∣ x i…

SpringCloud 微服务全栈体系(十四)

第十一章 分布式搜索引擎 elasticsearch 四、RestAPI ES 官方提供了各种不同语言的客户端,用来操作 ES。这些客户端的本质就是组装 DSL 语句,通过 http 请求发送给 ES。官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/…

Amazon EC2的出现,是时代的选择了它,还是它选择了时代

目录 Amazon EC2简介 友商云服务器对比(Amazon VS Tencent) 友商云服务器对比(Amazon VS Alibaba) Amazon 云服务器的绝对优势 Amazon EC2功能 Amazon EC2 Linux 实例入门 启动实例 连接到的实例 清除的实例 终止的实例…

Android 10.0 系统修改usb连接电脑mtp和PTP的显示名称

1.前言 在10.0的产品定制化开发中,在usb模块otg连接电脑,调整为mtp文件传输模式的时候,这时可以在电脑看到手机的内部存储 显示在电脑的盘符中,会有一个mtp名称做盘符,所以为了统一这个名称,就需要修改这个名称,接下来分析下处理的 方法来解决这个问题 2.系统修改usb连…

源码分析Mybatis拦截器(Interceptor)拦截saveBatch()获取不到实体id的原因

1.背景 由于业务需求想在Mybatis拦截器层面获取insert后实体id去做相关业务。但是发现执行saveBatch()方法时,获取参数实体的时候,拿不到自增id。但是save()方法可以。 save方法之所以可以是因为: MybatisPlus的BaseMapper执行insert方法后…