从0开始学习informer

news2024/9/20 22:37:25

目录

  • informer特点
  • informer原理
    • attention计算
      • KL散度
  • backbone网络部分
    • encoder
      • 输入输出部分
      • embadding这里就不讲了 和transfomer一样
      • EncoderStack
    • decoder部分
      • 接下来就是最关键的结构 关于如何将输入经过注意力得到结果
  • 结束,代码会放到下一篇讲 这里是原理

informer特点

1.一次输出你所有想得到的值。什么意思呢?就比如你想用1000个数据预测后面3天的数据,transformer是一天一天的输出,但是informer是一次性给你输出。所以不需要多次预测。
2.再经过我们的稀疏注意力的时候,会进行维度压缩。减少参数量。

informer原理

attention计算

首先啊,我们要清楚qk矩阵想成功的含义,再transformer中有。链接: 不懂的看我的transformer原理。这里不多赘述,我就当你懂了。那么所谓我们序列与多序列之间的关系,打个比方就是我前一天的数据和后五天的数据的关系,得到第一天和后五天序列的关系。那么对于transformer来说,我们需要得到的不仅仅是第一天,还有第二天和其余五天,第三天和其余五天。。。那么就需要6x6的矩阵来记录我们的关系。但是当我们要计算很长的序列比如10000天,那么需要10000x10000的矩阵来存储答案,这样是不是有点大,参数会增加很多?我们可以得到下面的热力图。通过热力图我们可以发现,黑的很多红的很少。什么意思呢?黑色代表不相干,红的代表相干。所以我们这个矩阵大部分单词都不相干,所以这样的效果自然很差。在数据比较多的时候

在这里插入图片描述
该图上面红色线代表某一序列和其他序列的相关性的关系图。右边图的纵坐标代表着一个向量Q和其他向量的k乘积(也就是相关性),横坐标是不同的K,说明波动大代表相关性高,波动低代表相关性低。所以我们发现绿色的波动低,就代表我们的这个序列相关性低,就代表我们序列有没有他都一样。至于为什么波动大相关性高可以查看qk乘积那个公式,很明显可以看出
在这里插入图片描述
ok,那么我们如何解决这个问题?
这里就是我们informer的稀疏注意力probspare attention的核心所在------------部分特征代表整体,也就是我们用active的序列,去掉一些lazy的序列。也就是筛选active的序列。那么我们该怎么做呢?

很简单举个例子 我们Q和K各自是96个。
第1步:利用所有的Q和随机抽取1/4的K进行抽样,然后选出其中最活跃的25个特征序列Q
第2步:在让25个topQ和所有96个K相乘得到我们自注意力得到的结果
那么我们原来用自注意力需要96x96次计算。但是我们采取上述方法我们只需要计算
96x25x2(2是做两次),所以我们的效率是远远胜于我们的transformer

但是相乘以后我们变成的96x25之后我们还是需要和我们的v相乘,还是要将维度转换成原来的96x96,所以我们的informer就会进行expand,由于我们只有96x25,我们其它的部分该怎么办,很简单,把v矩阵(96x64)均值填上即可,因为我们只记录相关的,由于不相关,所以qk关系不是很大,所以用k的均值填上在和v相乘就行。

KL散度

什么是KL散度?即描述两个分布间差异的方法。就是这些红的竖线之间的差相加。
在这里插入图片描述

我们的informer的计算可以简化成如下。 意思就是。我们可以之间用红线最大值减去均值,得到我们的qk计算结果。

在这里插入图片描述
在这里插入图片描述
可能大家听不懂,这么说,一开始是我们要得到96x96的矩阵对吧,然后informer改成了概率相乘,就是随机抽取96里面的25个和其他96做乘积选出我们的top25个q后再用全部的K和Q相乘然后得到我们最后的结果时候,我们再用KL散度简化计算方式用最大的相关性值减去均值得到我们的结果,也就是化简为一个元素和一个元素的计算。
也就是96x96 ->96x25x2->1v1 (打个比方)

backbone网络部分

在这里插入图片描述
1部分的大梯形是用于处理比较长的序列,2部分是小梯形,处理比较短的序列
二者的结构都是一样的,3是用于减小参数(你看是梯形,从下到上宽度在变短,对应参数减小。)

原文翻译如下
在这里插入图片描述

encoder

输入输出部分

一般来说时序输入是[batch,sq_len,feature],informer原文是32x96x7对应着矩阵维度
96就代表着,一次输入96个数据,每个数据有7个特征,一共有32个批次。
那么对应的encoder输出是32x51x512

**为什么是512?**那是因为我们的encoder一般都会经过embading层进行嵌入后得到512维度和transformer一样。

embadding这里就不讲了 和transfomer一样

EncoderStack

其实就是多个encoder组合结合后得到的encoder层,看下图 encoder1和2输入第一输入是96,第二个encoder输入的是一半。并并且第二个encoder扔掉一层自我注意蒸馏层的数量,使这两个encoder的输出维度使对齐的;

在这里插入图片描述
最后得到的[32,51=(26+25),512]是拼接的来的 也就是下面两个拼接
在这里插入图片描述
在这里插入图片描述

可以参照原文图,红色线条代表第一个encoder,绿色代表第二个

在这里插入图片描述

decoder部分

输入: 32 × 51 × 512(encoder)和32 × 72 × 512 (decoder的输入)
输出: 32 × 72 × 512

decoder的输入和transformer一样 有从encoder的输入和decoder的输入
但是decoder 的输入有个特点就是后面的24个seq_len被0盖住,充当mask,这是出于transformer也就是箭头所指的部分。

在这里插入图片描述
我们把中间的放成一维画图表示。
在这里插入图片描述

接下来就是最关键的结构 关于如何将输入经过注意力得到结果

在这里插入图片描述
注意了 在最后一部进行qkv操作的时候也是用dl散值的操作 但是和与encoder中说的不一样,这里的lazy元素的填充值是用每个q时间点的v向量累加得到的值,因为是mask操作保证了不会看到后面的值。利用 ProbAttention 的结果计算得到 输出后经过全连接层一次性得到输出。

也就是encodr梯控kv矩阵,而我们的decoder输入的矩阵提供q,然后最后计算 ProbAttention 的时候不用mean(v)操作了,用的是累加方式,每个q用的当前时间点之前所有的v向量相加的值作为mask,从而不用和transformer一样,一步一步进行计算了

结束,代码会放到下一篇讲 这里是原理

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

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

相关文章

[Vulnhub] Sedna BuilderEngine-CMS+Kernel权限提升

信息收集 IP AddressOpening Ports192.168.8.104TCP:22, 53, 80, 110, 111, 139, 143, 445, 993, 995, 8080, 55679 $ nmap -p- 192.168.8.104 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 …

PTX入门教程与实战

PTX入门教程 官方文档的目录结构 1 PTX指令 官方文档链接 1.1 指令形式 指令的操作数个数从0-4不等,其中d代表的是目的操作数,a,b,c是源操作数 p opcode;p opcode a;p opcode d, a;p opcode d, a, b;p opcode d, a, b, c;2 编程模型 2.…

人工智能算法工程师(中级)课程9-PyTorch神经网络之全连接神经网络实战与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程9-PyTorch神经网络之全连接神经网络实战与代码详解。本文将给大家展示全连接神经网络与代码详解,包括全连接模型的设计、数学原理介绍,并从手写数字识别到猫狗识…

JVM监控及诊断工具-命令行篇-jstat命令介绍

JVM监控及诊断工具-命令行篇01-jstat:查看JVM统计信息 一 基本情况二 基本语法2.1 option参数1. 类装载相关的:2. 垃圾回收相关的-gc:显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息…

基于51单片机的多路报警器Protues仿真设计

一、设计背景 随着社会的发展和技术的进步,安全问题越来越受到重视。各种工业设施、家庭、商业场所以及公共场所的安全保障成为了重点。报警器作为安全防护系统的重要组成部分,在预防和及时应对各种突发事件中发挥着至关重要的作用。传统的报警器通常在功…

【C++】哈希(散列)表

目录 一、哈希表的基本概念1.哈希的概念2.哈希冲突2.1 哈希函数2.2 哈希冲突的解决办法2.2.1 闭散列2.2.2 开散列 二、哈希表的实现1.闭散列的实现1.1 闭散列的结构1.2 闭散列的插入1.3 闭散列的删除1.4 闭散列的查找 2.开散列的实现2.1 key值不能取模的情况2.2 开散列的结构2.…

Redis的安装配置及IDEA中使用

目录 一、安装redis,配置redis.conf 1.安装gcc 2.将redis的压缩包放到指定位置解压 [如下面放在 /opt 目录下] 3.编译安装 4.配置redis.conf文件 5.开机自启 二、解决虚拟机本地可以连接redis但是主机不能连接redis 1.虚拟机网络适配器网络连接设置为桥接模式…

STM32智能空气质量监测系统教程

目录 引言环境准备智能空气质量监测系统基础代码实现:实现智能空气质量监测系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:空气质量监测与优化问题解决方案与优化收尾与总结 1. 引言 智能空…

【练习】分治--归并排序

🎥 个人主页:Dikz12🔥个人专栏:算法(Java)📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 归并排序 代码实现 交易逆序对的总数 题目描述 ​编辑 题解 代码实…

基于Vue和UCharts的前端组件化开发:实现高效、可维护的词云图与进度条组件

基于Vue和UCharts的前端组件化开发:实现高效、可维护的词云图与进度条组件 摘要 随着前端技术的迅速发展和业务场景的日益复杂,传统的整块应用开发方式已无法满足现代开发的需求。组件化开发作为一种有效的解决方案,能够将系统拆分为独立、…

汽车的驱动力,是驱动汽车行驶的力吗?

一、地面对驱动轮的反作用力? 汽车发动机产生的转矩,经传动系传至驱动轮上。此时作用于驱动轮上的转矩Tt产生一个对地面的圆周力F0,地面对驱动轮的反作用力Ft(方向与F0相反)即是驱动汽车的外力,此外力称为汽车的驱动力。 即汽车…

C++中跨平台类的设计方法

目录 1.引言 2.具体实现 2.1.单一继承实现 2.2.桥接方式实现 3.总结 1.引言 进行C代码的跨平台设计,主要目标是确保编写的代码能够在不同的操作系统(如Windows、Linux、macOS等)和硬件架构(如x86、ARM等)上无缝运…

leetcode--二叉树中的最大路径和

leetcode地址:二叉树中的最大路径和 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总…

编译x-Wrt 全过程

参考自;​​​​​​c编译教程 | All about X-Wrt 需要详细了解的小伙伴还请参看原文 ^-^ 概念: x-wrt(基于openwrt深度定制的发行版本) 编译系统: ubuntu22.04 注意: 特别注意的是,整个编译过程,都是用 …

C到C嘎嘎的衔接篇

本篇文章,是帮助大家从C向C嘎嘎的过渡,那么我们直接开始吧 不知道大家是否有这样一个问题,学完C的时候感觉还能听懂,但是听C嘎嘎感觉就有点难度或者说很难听懂,那么本篇文章就是帮助大家从C过渡到C嘎嘎。 C嘎嘎与C的区…

代码随想录算法训练营第三十四天|322. 零钱兑换、279.完全平方数

322. 零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 dp[j]凑足总额为j的方法有dp[j]个。 递推公式:凑足金额为j-coins[i]的方法有d…

linux下安装cutecom串口助手;centos安装cutecom串口助手;rpm安装包安装cutecom串口助手

在支持apt-get的系统下安装 在终端命令行中输入: sudo apt-get install cutecom 安装好后输入 sudo cutecom 就可以了 关于如何使用,可以看这个https://www.cnblogs.com/xingboy/p/14388610.html 如果你的电脑不支持apt-get。 那我们就通过安装包…

【Android】kotlin jdk版本冲突与Kotlin依赖管理插件

1、androidx.activity:activity:1.8.0 依赖版本错误问题 *依赖项“androidx.activity:activity:1.8.0”要求依赖它的库和应用针对版本 34 或更高版本 Android API 进行编译。:app 目前是针对 android-33 编译的。此外…

QTabWidget、QListWidget、QStackedWidget

The QTabWidget class provides a stack of tabbed widgets. More... The QListWidget class provides an item-based list widget. More... QStringList strlist;strlist<<"系统"<<"外观"<<"截图"<<"贴图"…

FPGA设计之跨时钟域(CDC)设计篇(1)----亚稳态到底是什么?

1、什么是亚稳态? 在数字电路中,如果数据传输时不满足触发器FF的建立时间要求Tsu和保持时间要求Th,就可能产生亚稳态(Metastability),此时触发器的输出端(Q端)在有效时钟沿之后比较长的一段时间都会处于不确定的状态(在0和1之间振荡),而不是等于数据输入端(D端)的…