【自然语言处理三-自注意self attention】

自然语言处理三-自注意力 self attention

  • 自注意力是什么?
    • 自注意力模型出现的原因是什么?
      • 词性标注
        • 问题
        • 解决方法1-扩展window,引用上下文
        • 解决方法2-运用seq2seq架构
        • 新问题来了:参数量增加、无法并行的顽疾
  • 自注意力self attention模型的工作流程
    • atttention的实现
      • 如何找到向量之间的相关性
        • Dot-product
        • Additive
        • 相关性(attention分数)的具体计算方法
    • 计算完attention层后的结果,作为FC的输入
    • atttention 到底是如何解决sequence长度以及并行等问题的呢?

自注意力是什么?

在了解自注意力之前,需要先了解注意力,这部分在上篇文章[【自然语言处理-二-attention注意力 是什么】介绍过了。

如果用一句简单的话来概括,就是指在输出的时候,需要关注的输入的哪一部分,以及需要关注的比重大概是多少,比如翻译hello,world这句话,翻译你的时候,对于输入的hello更关注一些。

这种注意力的模型在人工智能界被抽象成了下面这个样子:
在这里插入图片描述
模型中就有三个重要的向量,Query Keys和Values,简称Q K V,Q和K用于产生注意力的分数,而Value 与注意力分数矩阵做处理,产生输出。

按照上面这个抽象模型,我们在[【自然语言处理-二-attention注意力 是什么】,Q和K和V又分别是那些个呢?
1.Q和K分别是编码器中的输入乘上了相应的参数矩阵获取。
2.V是解码器的输入乘上了响应的矩阵参数。

需要注意的一点是,上面所列2点,获取注意力分数的操作可能不一定是矩阵的乘法操作。
可以发现,这里的Q K V的来源(生成Q K V矩阵的来源)是不同的,特殊一点的情况是,当 Q K V 来源于同一个输入的时候,我们就叫自注意力模型。

自注意力模型出现的原因是什么?

它的出现一定是解决了注意力模型或者其他模型无法解决的问题。那么就要来说说,之前的模型在处理具体问题的时候,有哪些难以克服的问题呢?

下面用一个实际的下游任务“词性标注”来举例

词性标注

比如有一句话I saw a saw。对这句话进行词性标注。如果我们的模型的网咯结构是全连接层,来处理这个问题
在这里插入图片描述
ps:其中的FC是fully connected的简写

问题

这时候会有一个问题,那就是saw这个词在这个句子里是两个词性不同的词,但是对于这个模型来说,同样的输入输出肯定是相同的输出。

解决方法1-扩展window,引用上下文

上面的怎么解决呢?出现这样的原因,是因为没有考虑上下文,于是我们做了改进,输入不再是单独的每个词,是一个包含了上下文的短句
改进后的模型如下:
在这里插入图片描述
这样可以解决现在的问题,但是又带来了另外一个问题,那就是这个上下文的窗口window的大小到底应该是多少?
最直观的想法就是说把整个sequence的长度作为window的大小不就解决了.
但是我们的句子可长可短,这种情况必须要统计训练资料里面最长的sequnce长度,另外全连接层的参数会极度扩张,不仅是运算量增加,还会导致过拟合,测试集上效果不佳。

解决方法2-运用seq2seq架构

这时候又有人说,这不正是上节课所讲的注意力的应用么,我们用seq2seq + rnn来解决这个问题

在这里插入图片描述
seq2seq的模型中,可以记住上下文,在解码器中就可以使用这些记忆,在此基础上再加上注意力不就很完美的解决了上下文的问题了么?

这个模型在上节课最后我们也说过,有它难以解决的问题 如下所述

新问题来了:参数量增加、无法并行的顽疾

运用seq2seq架构虽然可以解决部分记忆力的问题,但是还有很多问题:

  • 1.参数量增多。seq2seq的架构会增加注意力参数矩阵,且随着输入的长度而增加。

    2.无法并行,seq2seq的架构必须得先产生上一个时间步的输入,在计算下一个时间步的输出,也就说是有依赖关系的,无法实现并行计算,在今天的大模型的计算来说,这也算是一个致命的缺陷。

    3.记忆力实际并不全,因为seq2seq架构的记忆力来自于最后一个隐藏层的输出,不能代表所有输入的信息。

基于上面种种问题,就引出了自注意力,那么自注意力的模型究竟是怎么实现的,又是如何解决这些问题的呢?

自注意力self attention模型的工作流程

还是以文章开篇的词性识别为例,self attention的运转是这样的:

  1. self attention会处理整个输入sequence语句的向量,然后每个input vector输出对应的向量。这些向量是考虑了整个sequece的输入(这也是记忆力的由来)。
  2. 将这些考虑了整个sequence的输出向量,作为FC的输入,然后再做后续的处理。
    这个过程如下:
    在这里插入图片描述
    这个过程是不是很简单? 当然self attention和FC是可以嵌套多层的。那么这个self attention具体是怎么实现的呢?

atttention的实现

从上面也可以看出我们要实现的是这样一个目标:
输入一排向量,输出一排向量,且输出的向量要考虑了这一排的输入向量,这可以用下面这个图来表示
在这里插入图片描述
那么我们最重要的探讨就是**怎么从a1…到an,产生b1**呢?
这个问题的实质就是要解决从找到a1…到an的相关性,生成bi

如何找到向量之间的相关性

找到a1与其他的an的这些向量的相关性,这个相关性的分数我们记为 α。这个方法有很多种,下面是最常用的两种 Dot-product和Additive。

Dot-product

在这里插入图片描述
把输入各自乘上一个矩阵Wq和Wk , 然后做dot-product,得到α。

Additive

在这里插入图片描述
与上面类似,但是复杂一些,q和k不是直接做点乘,而是connect后又做tanh,再经过一个矩阵变换,获取α.

由于二者最终效果相差不多,本文以计算更为简单的Dot-product为例,怎么计算注意力分数α

相关性(attention分数)的具体计算方法

根据上述的Dot-product的方式,计算attention score
在这里插入图片描述

注: a1到a4 可能是模型的输入,也可能是隐藏层的输出,下文简化为输入。
首先是获取q k v矩阵:
查询q1:a1乘上矩阵Wq
ki:ai乘上矩阵Wk
vi:ai乘上矩阵Wv
然后执行下述:

  1. q和每一个k 做dot-product,得到注意力分数,实际的应用,在获取注意力的时候,也会获取对其本身ai的注意力(也就是q要和每一个ai生成的k,包括生成q的这个输入am,生成的km

  2. 做softmax(这个其实也可以换成RELU等等操作,不是固定的)上面这个四个步骤就最终如下:
    在这里插入图片描述

  3. b1的计算 。 softmax后的注意力分数 乘上 vi的和

在这里插入图片描述
然后依次计算其他bi,attention层的输出就计算完毕

计算完attention层后的结果,作为FC的输入

上述计算完attention层后,可以嵌套多层attention fc,一直到模型结束

atttention 到底是如何解决sequence长度以及并行等问题的呢?

本篇幅太长了,这部分我们会在下一篇文档《 自然语言处理四-从矩阵操作角度看 自注意self attention》中讲解,下一篇文章,将从矩阵操作的角度看self attention是如何实现的,看完矩阵操作就会明白自注意力如何解决本文档上面的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ list详解以及模拟实现

目录 1.list的使用 1.1list的定义 1.2list的使用 1.3list iterator使用 1.4list capacity 1.5list element access 1.6list增删查改 2.list迭代器失效问题 3.list的模拟实现 1.list的使用 1.1list的定义 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容…

水印相机小程序源码

水印相机前端源码,本程序无需后端,前端直接导入即可,没有添加流量主功能,大家开通后自行添加 源码搜索:源码软件库 注意小程序后台的隐私权限设置,前端需要授权才可使用 真实时间地址拍照记录&#xff0c…

alembic

alembic是sqlalchemy的作者开发的。 用来做OMR模型与数据库的迁移与映射。 第一个,alembic的所有命令都是以alembic开头 第二,alembic的迁移文件也是通过版本进行控制的。首先,通过pip install alembic进行安装。以下将解释alembic的用法 方…

从管易云·奇门到金蝶云星空通过接口配置打通数据

从管易云奇门到金蝶云星空通过接口配置打通数据 对接源平台:管易云奇门 管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌,先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务,涵盖电商业务全流程。 目标系统:金蝶…

ZYNQ:串口-CAN协议转换

前言 目前已经实现zynq的PS-CAN和PL-CAN功能。串口-CAN协议转换是实现以太网-CAN功能的过渡,通过这个流程能够减少后期以太网工程出现问题的频率。阶段性功能目标如下: 实现数据在CAN调试助手和串口调试助手之间的来回转换,从而了解中断机制…

Vue前端对请假模块——请假开始时间和请假结束时间的校验处理

开发背景:Vueelement组件开发 业务需求:用户提交请假申请单,请假申请的业务逻辑处理 实现:用户选择开始时间需要大于本地时间,不得大于请假结束时间,请假时长根据每日工作时间实现累加计算 页面布局 在前…

【Excel PDF 系列】EasyExcel + iText 库

你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,欢迎指教: 企鹅:869192208 文章目录 前言转换前后效果引入 pom 配置代码实现定义 ExcelDataVo 对象主方法EasyExcel 监听器 前言 最近遇到生成 …

SQL进阶(三):Join 小技巧:提升数据的处理速度

复杂数据结构处理:Join 小技巧:提升数据的处理速度 本文是在原本sql闯关的基础上总结得来,加入了自己的理解以及疑问解答(by GPT4) 原活动链接 用到的数据:链接 提取码:l03e 目录 1. 课前小问…

动态规划之第 N 个泰波那契数/三步问题【leetCode】【算法】

动态规划动态规划之第 N 个泰波那契数/三步问题 动态规划LeetCode题目第 N 个泰波那契数求解1求解2(滚动数组) 三步问题求解1求解2(滚动数组) 动态规划 如果问题是由重叠的子问题构成的,那就可以用动态规划&#xff08…

JSON简介以及如何在Python中使用JSON

什么是JSON? JSON是"JavaScript Object Notation"的简称,是一种数据交换格式 JSON格式 假设我们有一个对象,这个对象有两个属性:“name”跟“age”。 在JSON中是这样表达的: { "name":"男孩…

【 C++ 】闭散列哈希表的模拟实现

哈希节点状态 我们都很清楚数组里的每一个值无非三种状态: 如果某下标没有值,则代表空EMPTY。如果有值在代表存在EXIST。如果此位置的值被删掉了,则表示为DELETE。 而这三种状态我们可以借助enum枚举来帮助我们表示数组里每个位置的状态。…

RK3568平台开发系列讲解(基础篇)如何快速学习一套 Linux开发板源码

🚀返回专栏总目录 文章目录 一、基础代码二、驱动代码沉淀、分享、成长,让自己和他人都能有所收获!😄 拿到一份源码和一块评估板,如何快速找到与这块板相关的源码,是很多研发人员都曾遇到过的问题。如果对内核源码结构有大概了解,要完成这些事情也不难,通常可按照基础…

ASLR 和 PIE

前言 ASLR(Address Space Layout Randomization,地址空间随机化)是一种内存攻击缓解技术,是一种操作系统用来抵御缓冲区溢出攻击的内存保护机制。这种技术使得系统上运行的进程的内存地址无法被预测,使得与这些进程有…

高性能 Kafka 及常见面试题

Kafka 是一种分布式的,基于发布/订阅的消息系统,原本开发自 LinkedIn,用作 LinkedIn 的事件流(Event Stream)和运营数据处理管道(Pipeline)的基础。 基础原理详解可见 Kafka 基本架构及原理 基础…

事件循环解析

浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程 每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。 何为线程? 有了进程后&…

Java根据excel模版导出Excel(easyexcel、poi)——含项目测试例子拿来即用

Java根据excel模版导出Excel(easyexcel、poi)——含项目测试例子拿来即用 1. 前言1.1 关于Excel的一般导出2.2 关于easyexcel的根据模版导出 2. 先看效果2.1 模版2.2 效果 3. 代码实现(核心代码)3.1 项目代码结构3.2 静态填充例子…

全域增长方法论:帮助品牌实现科学经营,助力长效生意增长

前两年由于疫情反复、供给需求收缩等条件制约,品牌业务均受到不同程度的影响。以双十一和618电商大促为例,就相比往年颇显“惨淡”,大多品牌营销都无法达到理想预期。 随着市场环境不断开放,2023年营销行业开始从低迷期走上了高速…

RPA中国 x UiPath | 第六届RPA极客挑战赛,3月16日上海开赛!

随着人工智能技术的不断进步以及数字化转型的深入,企业对于高效、精准、自动化的业务流程需求日益迫切。RPA技术作为连接人类工作与机器操作的桥梁,正逐渐从规则驱动发展为智能决策的助手。 由RPA中国联合UiPath共同主办的【第六届RPA极客挑战赛】将于2…

高性能API云原生网关 APISIX安装与配置指南

Apache APISIX是Apache软件基金会下的顶级项目,由API7.ai开发并捐赠。它是一个高性能的云原生API网关,具有动态、实时等特点。 APISIX网关可作为所有业务的流量入口,为用户提供了丰富的功能,包括动态路由、动态上游、动态证书、A…

【LeetCode每日一题】938. 二叉搜索树的范围和

2024-2-26 文章目录 [938. 二叉搜索树的范围和](https://leetcode.cn/problems/range-sum-of-bst/)思路:写法一:在中间累加写法二:在最后累加 938. 二叉搜索树的范围和 思路: 1.在二叉搜索树中:左子树的结点都小于根节…