深度学习——自注意力机制和位置编码(笔记)

news2025/2/27 9:20:05

1.自注意力:

①在深度学习中,经常使用卷积神经网络或者循环神经网络对序列进行编码

②对于key,value和query,自注意力有一套自己的选法,因为key,value和query的值来自同一组输入。因此被称为自注意力或内部注意力

2.自注意力介绍

 

①给定序列是一个长为n的序列,每个xi是一个长为d的向量。

自注意力xi同时作为key,value,query。来对序列抽取特征

③给定一个序列,对序列的每个元素进行输出。每个查询都会关注所有的(键-值对)并生成一个注意力输出。

④自注意力机制xi是key,value,query都来自本身

3.自注意力和CNN,RNN相比

①CNN,RNN,自注意力都可以用来处理序列。

②CNN处理一个序列:给定一个序列,将其看作是一个一维的输入(处理图片时,图片有高和宽,每个像素有channel数,也就是特征数)。经过一个1d卷积,只有宽没有高之后,每个元素的特征看作是channel数,处理文本序列。

③k:窗口大小,看到的是长度k.

n:长度

d:dimension,每个x的维度

④并行度:GPU并行单元,并行度高,计算速度快。

⑤最长路径:对于最长的序列,前面时刻的信息通过神经元传递到后面时刻。

⑥卷积神经网络和自注意力都有并行计算的优势,而且自注意力的最长路径最短。但是自注意力的复杂度是序列长度n的2次方,计算起来慢。

4.位置编码

①和CNN/RNN不同,自注意力并没有记录位置信息。

ⅠCNN中也有记录位置信息的,从输出反推到输入的所在窗口的位置,窗口大小就是位置信息

ⅡRNN本身是序列相关的,通过逐个的重复处理词元。

Ⅲ自注意力来说,输入的位置打乱,输出位置会变化,但是每个输出的内容不变。

Ⅳ纯自注意力信息做模型,没有位置信息出现问题,通过加入位置编码来获得位置信息。

 

Ⅰ位置编码不是把位置信息加入模型,一旦位置信息加入模型,出现问题。CNN需要看成一个长序列,RNN降低模型的并行度

ⅡP中的每个元素根据对应的X中元素的位置不同而不同

③P的元素计算如下:

对于P的每一列,奇数列是一个cos函数,偶数列是一个sin函数,不同的列的周期不一样。

5.位置编码矩阵

①X是横坐标表示P矩阵的行数

②不同颜色代表不同的列

③在X轴任意一点表示P矩阵x行j列的元素值

④四条曲线6:sin函数。曲线7:cos函数,曲线8:sin函数。曲线9:cos函数

⑤P矩阵同一行,每个列元素是不同的。对于输入序列(X+P自编码输入)来讲。每个dimension的值是不同的。同样的对于一个输入序列,不同的样本加的值也是不同的

⑥P实际上是对每一个样本(row),每一个维度(dimension)添加一点不一样的值,使得模型能够分辨细微差别,作为位置信息。

⑦改进:之前位置信息放进模型或者将位置信息与数据分开然后拼接。位置编码是直接将位置信息加入到了数据,这样做的好处是不改进模型和数据大小,缺点是需要模型对于P元素的细微信息进行辨认,取决于模型能否有效的使用P中的位置信息。

6.位置矩阵编码可以认为和计算机的二进制相似

①首先,位置编码是实数,是在1和-1之间进行实数变化,所以能编码的范围更广。可以在任意多的维度上进行编码

②位置编码sin和cos周期函数,具有周期性。

①上图是一个热度图,X表示特征,Y表示样本

②每一行的位置信息进行编码,将第i个样本用一个长为d的向量编码。

③核心思想:对序列的第i个样本,给定长为d的独一无二的位置信息。然后加入到数据中作为自编码输入。使得模型能够看到数据的位置信息。

7.相对位置信息

 为什么要使用sin函数和cos函数?

编码是一个相对位置信息,位置位于i + σ处的位置编码可以线性投影位置i处的位置编码来表示。与i无关,和相对σ有关。

 ①投影矩阵和序列中的位置i是无关的,但是和 j 是相关的(和 dimension 的信息是相关的),意味着在一个序列中,假设一个词出现在另外一个词两个或者三个位置的时候,不管这对词出现在序列中的什么位置,对于位置信息来讲,都是可以通过一个同样的线性变换查找出来的

②相对来讲,这样编码的好处在于模型能够更加关注相对的位置信息,而不是关注一个词出现在一个句子中的绝对位置

【总结】

1、自注意力池化层将 xi 当作 key,value,query 来对序列抽取特征

2、完全并行、最长序列为1、但对长序列计算复杂度高

①可以完全并行,和CNN是一样的,所以计算效率比较高

②最长序列为1,对于任何一个输出都能够看到整个序列信息,所以这也是为什么当处理的文本比较大、序列比较长的时候,通常会用注意力和自注意力

③但是问题是对长序列的计算复杂度比较高,这也是一大痛点

3、位置编码在输入中加入位置信息,使得自注意力能够记忆位置信息

①类似于计算机的数字编码,对每个样本,给定一个长为 d 的编码

②编码使用的是 sin 函数或者是 cos 函数,使得它对于序列中两个固定距离的位置编码,不管它们处于序列中的哪个位置,他们的编码信息都能够通过一个线性变换进行转换。

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

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

相关文章

CDGA|数据治理为什么绕不开数据权责问题?如何确定数据权责?

许多企业在经历过信息化建设之后,自然而然地将数据管理的重任交付给了IT部门,而当企业数据质量产生问题时,高层管理者也往往将其归结为IT部门的责任。然而,企业IT部门真的能够管理好这些数据,使其发挥最大效能吗&#…

在 Kubernetes 上运行《我的世界》

最近给小朋友装上了叨叨许久的 Minecraft(我的世界),为了体验安装的是开源启动器 HMCL。其实这游戏我也关注比较久了,不过感觉太耗时间。但被小朋友拉上一起玩,便研究了下自建服务器。GitHub 发现已经有人做好了 Minec…

操作系统(四):磁盘调度算法,先来先服务,最短寻道时间优先,电梯算法

文章目录一、磁盘结构二、先来先服务三、最短寻道时间优先四、电梯算法 SCAN一、磁盘结构 盘面(Platter):一个磁盘有多个盘面; 磁道(Track):盘面上的圆形带状区域,一个盘面可以有多…

大数据处理学习笔记1.2 Scala变量与数据类型

文章目录零、本讲学习目标一、变量声明(一)简单说明(二)利用val声明变量1、声明方式2、案例演示(三)利用var声明变量1、声明方式2、案例演示(四)换行输入语句(续行&#…

生产故障|Kafka ISR频繁伸缩引发性能急剧下降

生产故障|Kafka ISR频繁伸缩引发性能急剧下降-阿里云开发者社区 本文是笔者双十一系列第二弹,源于一个双十一期间一个让笔者猝不及防的生产故障,本文将详细剖析Kafka的副本机制,以及ISR频繁变更(扩张与伸缩)为什么会导致集群不可…

深入浅出C++ ——queue类深度剖析

文章目录一、queue的简介二、queue类常用接口三、STL中queue类的模拟实现一、queue的简介 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。队列作为容器适配器实现,容器适配…

【RNN详解】SimpleRNN,LSTM,bi-LSTM的原理及Tensorflow实现

目录1.摘要2.SimpleRNN2.1.原理介绍2.2.代码实现3.LSTM3.1.原理介绍3.2.代码实现4.LSTM改进—bi_LSTM5.总结感觉不错的话,记得点赞收藏啊。1.摘要 RNN是一种特殊的神经网络结构,它是根据“人的认知是基于过往的经验和记忆”这一观点提出的,它…

node.js+vue图书销售租赁书店运营管理系统mysql vscode

图书销售租赁书店运营管理系 前端技术:nodejsvueelementui,视图层其实质就是vue页面,通过编写vue页面从而展示在浏览器中,编写完成的vue页面要能够和控制器类进行交互,从而使得用户在点击网页进行操作时本图书馆租赁管理系统主要分…

面向新手的git实战教程

嗨!我是团子,大家好久不见呀~ 记得之前在网上学习git相关知识时,看到的文章大部分都是讲解git的基本命令有哪些,用处是什么,但是自己真正上手使用git时,仍然无从下手。 所以今天就想从初始化一个git仓库开始…

Quartz 快速入门案例,看这一篇就够了

前言 Quartz 是基于 Java 实现的任务调度框架,对任务的创建、修改、删除、触发以及监控这些操作直接提供了 api,这意味着开发人员拥有最大的操作权,也带来了更高的灵活性。 什么是任务调度? 任务调度指在将来某个特定的时间、固…

rabbitmq topic模式设置#通配符情况下 消费者队列未接收消息问题排查解决

目录说明说明 生产者配置 Exchange:topic_exchange_shcool Routing key:topic.shcool.# 消费者代码配置 Exchange:topic_exchange_shcool Routing key:topic.shcool.user PostConstructpublic void twoRabbitInit() {//声明交换…

基于微信小程序云开发实现考研题库小程序项目(完整版)

今天手把手的带大家实现一款答题类的题库小程序,如果着急的话,可以直接去看文末源码.下载与项目部署。考研题库小程序云开发实战,完整版提供给大家学习。题库小程序,基于云开发的微信答题小程序,软件架构是微信原生小程…

YOLOv8进行改进并训练自定义的数据集

一.训练数据集准备 YOLOv8的训练数据格式与YOLOv5的训练数据格式一致,这一部分可以进行沿用。之前博文有发布VOC标注格式转YOLO标注格式的脚本,有需要可以查看。 二.项目克隆 YOLOv8项目文件可以直接去github上下载zip文件然后解压,也可以直…

Telerik UI for WPF 2023 R1

Telerik UI for WPF 2023 R1 之 WPF 的 Telerik 用户界面,WPF 控件库开发人员信任,快速构建美观、高性能的 WPF 业务应用程序。现在支持 .NET 6 和 7.0。 概述部分背景图像 主要特征 现代专业主题图标,现代专业主题 通过各种受 Office、Wind…

【机器学习】P0 基础与相关名词

机器学习基础与相关名词什么是机器学习监督学习与非监督学习Classification And RegressionClusteringModel and Function什么是机器学习 机器学习是计算机发展到一定阶段的必然产物。相比于19世纪一个房间大小的计算机,当前的计算机更便携,性能更强&am…

开源项目-旅游信息管理系统

哈喽,大家好,今天给大家带来一个开源系统-旅游信息管理系统 前台 地址:http://ip/index 账号:user 密码:123456 后台 地址:http://ip/login 账号:root 密码:123456 功能模块:旅游路线、旅游景点、旅游酒店、旅游车票、旅游保险、旅游策略、订单管理、留言管理、数据…

一篇解决Linux 中的负载高低和 CPU 开销并不完全对应

负载是查看 Linux 服务器运行状态时很常用的一个性能指标。在观察线上服务器运行状况的时候,我们也是经常把负载找出来看一看。在线上请求压力过大的时候,经常是也伴随着负载的飙高。 但是负载的原理你真的理解了吗?我来列举几个问题&#x…

c/c++开发,无可避免的模板编程实践(篇二)

一、开发者需要对模板参数负责 1.1 为您模板参数提供匹配的操作 在进行模板设计时,函数模板或类模板一般只做模板参数(typename T)无关的操作为主,但是也不见得就不会关联模板参数自身的操作,尤其是在一些自定义的数据…

JVM基础学习

JVM分为两个子系统,两个组件一个子系统是Class loader类装载系统,另一个子系统是Execution Engine执行引擎一个组件是Runtime data area 运行时数据区,Native Interface 本地接口Class loader:根据给定的全限定类名来装载class文件到运行时数…

借助docker, 使用verdaccio搭建npm私服

为何要搭建npm私服 搭建npm私服好处多多,网上随便一篇教程搜出来都罗列了诸多好处,譬如: 公司内部开发环境与外网隔离,内部开发的一些库高度隐私不便外传,内网搭建npm服务保证私密性同属内网,可以确保使用npm下载依赖…