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

news2025/1/24 7:22:11

自然语言处理三-自注意力 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是如何实现的,看完矩阵操作就会明白自注意力如何解决本文档上面的问题。

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

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

相关文章

kali Linux 渗透系统的安装、提权与汉化(初识 Linux 系统)

目录 一、安装 kali 二、汉化 kali 三、kali 提权 1、暂时提权 root 2、永久提权 root 四、Linux 常用命令 一、安装 kali 官方镜像下载地址 https://www.kali.org/get-kali/#kali-virtual-machines 我这里推荐的是下载 vmx 文件,下载后解压,在 …

牛客前端八股文(每日更新)

1.说说HTML语义化? 得分点:语义化标签、利于页面内容结构化、利于无CSS页面可读、利于SEO、利于代码可读 1,标签语义化是指在开发时尽可能使用有语义的标签,比如header,footer,h,p&#xff0c…

uniapp实现单选框

采用uniapp-vue3实现的一款单选框组件,提供丝滑的动画选中效果,支持不同主题配置,适配web、H5、微信小程序(其他平台小程序未测试过,可自行尝试) 可到插件市场下载尝试: https://ext.dcloud.net…

【X806开发板试用】串口数据透传阿里云IOT

上成果 阿里云对接需要用的是PRODUCTKEY,DEVICENAME和DEVICESECRET,开始直接用MQTT的例子硬怼,没成功,后面看了文档,发现阿里云对接的client_id,username和password是通过三要素生成的。 找了一下代码,发…

禁止safari浏览器网页双击缩放功能

普通浏览器 普通浏览器&#xff0c;只需要增加meta标签禁止缩放功能就行了 <meta content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalable0;" name"viewport" /> user-scalableno或0 //禁止双指缩放页面initial-scale1.0…

nginx平滑升级,信号使用,分割日志

信号 kill -l 看信号大全 nginx -h 中可以看到的信号较少 s signal : send signal to a master process: stop, quit, reopen, reload 可以使用man手册来查看详细的信号 如果没安装&#xff0c;去源码包里找到man文件 man 路径/nginx.8 不加路径打不开man帮助 st…

【这个词(Sequence-to-Sequence)在深度学习中怎么解释,有什么作用?】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;深度学习笔记 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; Sequence-to-Sequence&#xff08;Seq2Seq&#xff09; Sequence-to-Sequence&#xff08;Seq2Seq…

继电器测试中需要注意的安全事项有哪些?

继电器广泛应用于电气控制系统中的开关元件&#xff0c;其主要功能是在输入信号的控制下实现输出电路的断开或闭合。在继电器测试过程中&#xff0c;为了确保测试的准确性和安全性&#xff0c;需要遵循一定的安全事项。以下是在进行继电器测试时需要注意的安全事项&#xff1a;…

leetcode:46.全排列

1.什么是排列&#xff1f; 有顺序&#xff01;&#xff01; 2.树形结构&#xff1a; 使用used数组进行标记取过的元素&#xff0c;一个元素一个元素地进行取值&#xff0c;取完之后将used数组进行标记。 3.代码实现&#xff1a;&#xff08;循环从i0开始&#xff0c;而不是…

【Java EE初阶二十五】简单的表白墙(一)

1. 前端部分 1.1 前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wid…

python Matplotlib Tkinter--pack 框架案例

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 pillow 10.1.0 版本一 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的遥感目标检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本文介绍了一种基于深度学习的遥感目标检测系统系统的代码&#xff0c;采用最先进的YOLOv8算法并对比YOLOv7、YOLOv6、YOLOv5等算法的结果&#xff0c;能够准确识别图像、视频、实时视频流以及批量文件中的遥感目标。文章详细解释了YOLOv8算法的原理&#xff0…

路坦利集群虚拟机断网处理方法

路坦利集群虚拟机断网处理方法 问题描述&#xff1a; 在路坦利集群中&#xff0c;虚拟机时不时断网&#xff0c;导致业务中断&#xff0c;临时解决办法为新增网卡配置相同IP&#xff0c;然后禁用旧网卡网络临时恢复。 注&#xff1a; 该配置必须让虚拟化平台上层交换机和宿…

GPT 的基础 - T(Transformer)

我们知道GPT的含义是&#xff1a; Generative - 生成下一个词 Pre-trained - 文本预训练 Transformer - 基于Transformer架构 我们看到Transformer模型是GPT的基础&#xff0c;这篇博客梳理了一下Transformer的知识点。 BERT:通过自监督的方式,在大规模语料上预训练得到的Tran…

[C++核心编程](二):引用

目录 基本语法 引用做函数参数 引用做函数返回值 常量引用 基本语法 给变量取别名&#xff1a;数据类型 &别名 原名&#xff1b; 本质&#xff1a;指针常量&#xff08;指针的指向不可改&#xff0c;指向的值可改&#xff09; int value 10;int &index value; …

【Linux】head命令使用

head命令 head是一个在 Unix 和 Unix-like 操作系统中常用的命令行工具&#xff0c;用于输出文件的前 n 行。默认为 10&#xff0c;即显示 10 行的内容。 语法 head [options] [file(s)] head命令 -Linux手册页 选项及作用 执行令 &#xff1a; head --help 执行命令结果…

如何使用GAP-Burp-Extension扫描潜在的参数和节点

关于GAP-Burp-Extension GAP-Burp-Extension是一款功能强大的Burp扩展&#xff0c;该工具在getAllParams扩展的基础上进行了升级&#xff0c;该工具不仅可以帮助广大研究人员在安全审计过程中扫描潜在的参数&#xff0c;而且还可以搜索潜在的链接并使用这些参数进行测试&#…

git commit 后,本地远端都没有记录,消失不见

今天git commit 之后发现远端没有记录&#xff0c;本地没有最新代码记录 git commit 后&#xff0c;提交记录会消失不见的原因可能是&#xff1a; git只git commit了&#xff0c;没有push到远程分支&#xff0c;切换到其他分支时丢失。而且看不到提交记录&#xff0c;和找不到…

14:00面试,14:06就出来了,问的实在是太变态了

我从一家小公司转投到另一家公司&#xff0c;期待着新的工作环境和机会。然而&#xff0c;新公司的加班文化让我有些始料未及。虽然薪资相对较高&#xff0c;但长时间的工作和缺乏休息使我身心俱疲。 就在我逐渐适应这种高强度的工作节奏时&#xff0c;公司突然宣布了一则令人…

架构设计实践:熟悉架构设计方法论,并动手绘制架构设计图

文章目录 一、架构设计要素1、架构设计目标2、架构设计模式&#xff08;1&#xff09;分而治之&#xff08;2&#xff09;迭代式设计 3、架构设计的输入&#xff08;1&#xff09;概览&#xff08;2&#xff09;功能需求 - WH分析法&#xff08;3&#xff09;质量 - “怎么”分…