2023.4.23 自注意力机制

news2024/9/21 4:40:04

一般都是单向量输入,但是如果多向量输入应该如何处理呢?引出自注意力机制

多向量输入可能会有多种输出,如果输入n个向量,输出n个向量表明这是sequence labeling,比如对于一个英文句子,每一个单词都判断是什么词性

输入n个向量,输出1个向量,这是常见的classification问题,也就是分类问题,比如通过语音识别出是哪个人

输入n个向量,不知道会输出多少个向量,这是seq2seq问题,sequence to sequence,比如语音识别,对声音片段分解然后识别什么意思,还有翻译,输入n个中文,不一定会输出n个英文单词

用第一个n输入n输出举例,比如现在有一个英文句子 I saw a saw,我看见了一个锯子,应该分别输出名词、动词、冠词和名词,但是对于同一个单词saw一个输出了动词,第二个却输出名词,这会让人工智能非常疑惑,为什么同一个输入会输出不同的结果,其实是因为没有结合上下文,由此我们可以提出联系上下文,也就是用一个window,假设我们设window的大小为3,判断每一个单词,我们都需要判断它的上一个自身和下一个,这样可以起到一定的作用,但是window具体要开多大又引出了一个问题

我们输入的句子不可能永远都是只有4个单词,输入的句子长短不一,对于短句子,这个window的大小可能合适,但是对于比较长的句子,那么这么窄的window显然效果不会很好,如果我们先从输入中找到长度最长的句子,然后根据它设定window的长度,但是这样也会出现一个问题,那就是window如果设置太大会出现效率比较低的情况,有没有更好的方法能解决这种问题呢?引出正题自注意力机制

还是上述的句子,我们可以让输入的向量经过一个self-attention层输出,这个self-attention对于每一个输入的向量首先得出自身与其他向量的关联性α,又称attention score,具体是怎么得到的呢,我们采用一种dot-product的方式,首先让当前的向量乘一个矩阵,将另外一个矩阵也乘一个矩阵,这两个得出的结果再点积获得α,这种方法也被用于transformer这种模型,下图中的W即为矩阵
在这里插入图片描述

通常自身和自身也要计算出关联性

然后再用一个矩阵乘上每一个向量得出v,最后将v和关联性α相乘再相加得出当前这个向量的输出值,这样处理的话,跟当前向量关系比较大的关联性α权重也大,也就贡献比较多

在这里插入图片描述

对于每一个向量a1、a2等,我们都需要计算出它相对应的q1、k1和v1,如果我们把a1、a2、a3和a4连起来变成一个矩阵I,然后用矩阵W乘上这个矩阵I就可以得到一个Q的矩阵,这个矩阵其实就是q1、q2、q3和q4连起来,同理我们也同样用矩阵I乘上变成k的矩阵Wk,就可以变成矩阵K,矩阵V同理,如下图

在这里插入图片描述

然后考虑如何计算出关联性α矩阵,对于a1要计算所有向量跟他的关联性,其实就是用q1乘上所有向量的k值,我们把k列起来再乘q得出的结果就是关于a1的关联性的一列值,同理在q1的后面带上q2、q3和q4则依次可以得到a2、a3和a4他们的关联性矩阵,最后再用softmax这个方法进行normalization,softmax也可以用其他方法,比如RELU

在这里插入图片描述

最后对于每一个向量a的输出b,也就是用各自的v乘上每一个这两个向量的关联性α再相加,其实就是下图的矩阵乘法

在这里插入图片描述

回顾整个self-attention自注意力机制,其实就是一直做矩阵乘法,我们整个过程需要学习的只有三个W矩阵,这三个矩阵是输入I相乘得到Q、K和V的矩阵

在这里插入图片描述

多头自注意力机制 multi-head self-attention

如果两个向量不止有一种关系,这时我们就需要用multi-head self-attention,也就是多头自注意力机制,也就是对于Q、K、V这三个矩阵我们可以再乘上一个矩阵变成多部分矩阵,比如如果有两个heads,那么我们可以把Q这个矩阵乘上一个矩阵变成q1、q2,W和V同理
在这里插入图片描述

其他的操作和上面是一致的,我们只需要对每一部分的Q、K、V做矩阵运算,最后会得出多个结果b,将这多个结果排列起来然后再乘上一个矩阵变成一个结果即可
在这里插入图片描述

positional encoding 位置编码

我们可以给每一个ai加上一个ei表明这个更可能是哪个位置,ei是人为设置的,也可以从数据中学习获得

truncated self-attention

设想语音识别的一种情况,对于声音的每20ms我们都作为一段向量,那么1s会有50个向量,而这50个向量将会有一个50x50的关联性矩阵,计算起来将非常的繁琐,如果语音的时间更长,那么将会有更加庞大的矩阵非常难以计算,因为这需要我们有一个非常大的一个memory和比较长的时间

如何解决上述问题呢,答案就是不要看一整段那么长,我们只取跟当前向量相邻的几个向量计算即可,当然这个范围是人为设置的

softmax函数

通常日常生活中我们求最大值都是求得hardmax,也就是固定的,也就是非黑即白,但是在人工智能领域这种方式是不合情理的,比如对于文本分类来说,一篇文章或多或少包含着各种主题信息,我们更期望得到文章对于每个可能的文本类别的概率值(置信度),可以简单理解成属于对应类别的可信度。所以此时用到了soft的概念,Softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。

softmax函数的定义如下,也就是对于每一个输入我们都用e的多少次方除以总和的值代表
在这里插入图片描述
优点:使用指数形式的Softmax函数能够将差距大的数值距离拉的更大
缺点:值非常大的时侯可能数值溢出

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

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

相关文章

c++11 标准模板(STL)(std::priority_queue)(二)

适配一个容器以提供优先级队列 std::priority_queue 定义于头文件 <queue> template< class T, class Container std::vector<T>, class Compare std::less<typename Container::value_type> > class priority_queue; priority_queu…

Windows下编译UHD

1.安装Visual Studio 2019,下载地址https://download.csdn.net/download/qq_36314864/87719209 2.安装cmake,下载地址https://download.csdn.net/download/qq_36314864/87719747 安装完成后记得C:\Program Files\cmake-3.22.1-windows-x86_64\bin添加到环境变量里面,或者安…

数据结构修炼:链表习题讲解!!!

题一&#xff1a;移除链表元素 我们可以看出这道题是让我们删除特定数据&#xff0c;我们可以用双指针来解这道题&#xff1a; 如果首元素为val&#xff0c;那么cur和head一起后移&#xff1a; 如果没有碰到val&#xff0c;那么就会cur后移&#xff0c;并且提前将cur传给perv&a…

如何避免美国ASP主机服务器崩溃和故障?

在当今数字化时代&#xff0c;网站是一个公司展示其业务的主要方式之一。因此&#xff0c;公司的在线业务应该始终保持高可用性和可靠性。ASP主机服务器是一种用于托管网站的服务器&#xff0c;其特点是可靠性高。但是&#xff0c;即使是最可靠的服务器也会遭受故障或崩溃。在本…

漏刻有时数据可视化大屏引导页设计(php原生开发、主背景图片更换、标题设置)

文章目录 1.引入外部js库2.HTML排版3.项目配置文件4.菜单图标自动匹配5.php与html混排6.CSS样式表7.添加/编辑信息8.生成配置文件 在制作数据可视化大屏时&#xff0c;尤其是在触摸屏演示时&#xff0c;需要开发和设计对应的数据大屏引导页。基于常见场景&#xff0c;单独开发数…

Unity API详解——Object类

Object类是Unity中所有对象的基类&#xff0c;例如GameObject、Component、Material、Shader、Texture、Mesh、Font等都是Object的子类。本博客介绍Object类的一些实例方法和静态方法。 一、Object类实例方法 在Object类中&#xff0c;涉及的实例方法主要有GetInstanceID方法…

Java基础学习(10)

Java基础学习 一、JDK8时间类1.1 Zoneld时区1.2 Instant时间戳1.3 ZonedDateTime1.4 DateTimeFormatter1.5 日历类时间表示1.6 工具类1.7 包装类JDK5提出的新特性Integer成员方法 二、集合进阶2.1 集合的体系结构2.1.1 Collection 2.2collection的遍历方式2.2.1 迭代器遍历2.2.…

RecycleView与TabLayout联动展示更多功能列表页面的实现

一.前言 对于更多功能页面&#xff0c;使用RecycleView与TabLayout联动方式实现是比较常见的&#xff0c;先上效果图&#xff08;请大佬们忽略gif的水印&#xff09; 单独使用TabLayout和RecycleView都是比较容易的&#xff0c;这里就不做举例了&#xff1b;gif中的列表实际上…

权限控制导入到项目中

在项目中应用 进行认证和授权需要前面课程中提到的权限模型涉及的7张表支撑&#xff0c;因为用户信息、权限信息、菜单信息、角色信息、关联信息等都保存在这7张表中&#xff0c;也就是这些表中的数据是进行认证和授权的依据。所以在真正进行认证和授权之前需要对这些数据进行…

( “树” 之 BST) 501. 二叉搜索树中的众数 ——【Leetcode每日一题】

二叉查找树&#xff08;BST&#xff09;&#xff1a;根节点大于等于左子树所有节点&#xff0c;小于等于右子树所有节点。 二叉查找树中序遍历有序。 ❓501. 二叉搜索树中的众数 难度&#xff1a;简单 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root…

Leetcode每日一题——“合并两个有序数组”

各位CSDN的uu们你们好呀&#xff0c;又到小雅兰的愉快题解时候啦&#xff0c;今天&#xff0c;我们的题目内容是合并两个有序数组&#xff0c;下面&#xff0c;让我们进入合并两个有序数组的世界吧 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,3,0,0,0], m 3, nums2 [2,…

C++内联/构造函数详解

内联函数 宏&#xff1a; 宏的优缺点&#xff1f; 优点&#xff1a; 1.增强代码的复用性。 2.提高性能。 缺点&#xff1a; 1.展开后会使得代码长度变长&#xff0c;使可执行程序变大 2.不方便调试宏。&#xff08;因为预编译阶段进行了替换&#xff09; 3.导致代码可读性差…

Python 查看数据常用函数

Python 查看数据常用函数&#xff08;以 iris 数据集为例&#xff09; 1、查看前后几行数据&#xff1a;head 和 tail2、查看数据基本信息&#xff1a;info3、查看数据统计信息&#xff1a;describe 查看数据可以用很多函数&#xff0c;这里就挑选几个最常用的进行简单展示&…

SpringBoot自动配置原理、手写一个xxx-spring-boot-starter

SpringBoot的自动配置是&#xff1a;当项目中使用了一个第三方依赖&#xff0c;如何将第三方依赖中的Bean加载到Spring的IOC容器中&#xff0c;我们就可以做到无需额外的配置&#xff0c;直接使用第三方jar中的Bean。 SpringBoot的理念是“约定大于配置”&#xff0c;只要按照S…

【下载器篇】IDM下载记录分析(简)

【下载器篇】IDM下载记录分析&#xff08;简&#xff09; IDM下载记录分析-未完待续—【蘇小沐】 文章目录 【下载器篇】IDM下载记录分析&#xff08;简&#xff09;1.实验环境 &#xff08;一&#xff09;IDM下载记录分析-未完待续临时文件夹下载痕迹 总结 1.实验环境 系统版…

【内网渗透】春秋云镜Intitle WP

前言 第一次正式接触内网渗透的东西&#xff0c;写的很新手&#xff0c;也适合新手观看&#xff0c;有问题可以私信或评论&#xff0c;接下来会持续更新 信息收集 拿到地址先nmap扫端口 没什么发现&#xff0c;直接访问80端口&#xff0c;看到图标知道是thinkphp 第一台Th…

leetcode刷题(8)二叉树(2)

各位朋友们&#xff0c;大家好&#xff01;今天我为大家分享的是关于二叉树leetcode刷题的第二篇&#xff0c;我们一起来看看吧。 文章目录 1.对称二叉树题目要求示例做题思路代码实现 2.二叉树的最大深度题目要求示例做题思路代码实现 3.翻转二叉树题目要求示例做题思路代码实…

WebSocket入门

WebSocket 1.1websoket介绍 websocket是一种网络通信协议&#xff0c;RFC6455定义了它的通信标准 websocket是Html5开始提供的一种在单个TCP连接上进行全双工通讯的协议 Http协议是一种无状态、无连接、单向的应用层协议&#xff0c;它采用了请求/响应模型&#xff0c;通信…

Tomcat多实例部署实验

引言 本文主要内容是tomcat的多实例配置实验。 一、实验准备 Tomcat多实例是指在一台设备上运行多个Tomcat服务&#xff0c;这些Tomcat相互独立&#xff0c;互不影响。多实例与虚拟主机不同&#xff0c;虚拟主机的本质是在一个服务下有多个相对独立的目录&#xff0c;但是多实…

OFA(One-For-All)阿里达摩院实现架构、模态、任务的三个统一之Image Captioning

OFA(One-For-All) 通用多模态预训练模型&#xff0c;使用简单的序列到序列的学习框架统一模态&#xff08;跨模态、视觉、语言等模态&#xff09;和任务&#xff08;如图片生成、视觉定位、图片描述、图片分类、文本生成等&#xff09; 架构统一&#xff1a;使用统一的transfo…