当前位置: 首页 > news >正文

GMAN解读(论文+代码)

一、注意力机制

        注意力机制与传统的卷积神经网络不同的是,前者擅长捕获全局依赖和长程关系,权重会动态调整。而后者对于所有特征都使用同一个卷积核。关于更多注意力机制内容,详见:

注意力机制、自注意力机制、多头注意力机制、通道注意力机制、空间注意力机制超详细讲解-CSDN博客

        而本论文基于空间注意力机制,提出了空间和时间注意力机制,以建模动态的时空相关性。 

二、GMAN 模型

 

1. 时空嵌入(Sptio-Tempoal Embedding,STE)

        STE 的作用是将图结构和时间信息融入多注意力机制中。

        空间嵌入采用Node2Vec方法将N个顶点编码为保留图结构信息的向量,然后将其输入两层全连接神经网络中以进行联合训练。从而可以得到一个 RD 的向量。

        时间嵌入而是将每个时间步编码为向量。首先将将一天划分为 T 个时间步,并对每个时间步的“周几”和“时间段”进行独热编码。然后通过两层全连接网络将时间特征也转换为一个 RD 的向量。

        最后,对于顶点 vi 和时间步 tj ,STE定义为

2.  时空注意力模块(ST-Attention Block)

2.1 空间注意力(Spatial Attention)

        在传统图卷积GCN中,隐藏状态通过以下方式计算:

        其中,A代表图的邻接矩阵,W代表权重。但在实际场景中,不同邻居对目标节点的重要性可能不同。因此,在注意力机制中,通过一个注意力分数 α 表示顶点 v 对顶点 vi 的重要性。那么加入注意力机制后的隐藏状态计算方式如下:

        注意力分数 α 的计算方式如下所示:

                    

        式中,|| 表示拼接,<  ,> 表示左右两个元素点乘。e 也就是上一步的时空嵌入(STE)。 其代码如下所示:

X = tf.concat((X, STE), axis = -1)query = FC(X, units = D, activations = tf.nn.relu, bn = bn, bn_decay = bn_decay, is_training = is_training)
key = FC(X, units = D, activations = tf.nn.relu, bn = bn, bn_decay = bn_decay, is_training = is_training)# 多头分解(K代表有几个头)
query = tf.concat(tf.split(query, K, axis = -1), axis = 0)
key = tf.concat(tf.split(key, K, axis = -1), axis = 0)# 计算注意力分数
attention = tf.matmul(query, key, transpose_b = True)
attention /= (d ** 0.5)
attention = tf.nn.softmax(attention, axis = -1)
2.2 时间注意力(Temporal Attention) 

        时间注意力和空间注意力的实现方法类似。只有一点不同,空间注意力在空间维度(N)中捕捉节点间的依赖。而时间注意力在时间维度(num_step)中捕捉时间步间的依赖。

        作者在这一块的代码部分加入了可选的掩码(mask)。它与因果卷积的作用相同,都是为了解决时间序列建模中的因果性问题,防止未来信息泄露。不同点如下所示:

2.3 门控融合(Gated Fusion)

        在某些情况下,交通状况可能主要受空间因素影响(如附近道路拥堵)。在另一些情况下,时间因素可能更为关键(如高峰期的规律性变化)。为了平衡空间和时间注意力的贡献,使得模型可以在不同时空条件下动态调整两者的重要性,作者在这里使用了门控机制。Hs 代表空间注意力机制,Ht 代表时间注意力机制。

        z 是一个门控权重,z 越接近 1,模型越依赖空间注意力输出。反之越接近 0 ,模型越依赖时间注意力输出。其中 z 通过以下公式计算:

        其算法代码如下, 

XS = FC(HS, units = D, activations = None,bn = bn, bn_decay = bn_decay,is_training = is_training, use_bias = False)
XT = FC(HT, units = D, activations = None,bn = bn, bn_decay = bn_decay,is_training = is_training, use_bias = True)
z = tf.nn.sigmoid(tf.add(XS, XT))
H = tf.add(tf.multiply(z, HS), tf.multiply(1 - z, HT))

3. 编码器-解码器结构

        编码器会接收历史交通数据(比如过去 1 小时的交通流量),将这些时间序列的信息“浓缩”为一个隐藏表示,这个表示概括了所有历史时间步的信息。解码器接收编码器生成的隐藏表示,结合目标预测的要求(比如未来 1 小时的交通流量),逐步生成未来时间步的预测值。

4. 转换注意力(Transform Attention) 

        在长时间交通预测中,我们不仅需要知道历史的交通状况,还要明白历史的哪些时刻对未来的影响更重要。而转换注意力的作用就是把历史信息直接“映射”到未来,建立一种历史时间步和未来时间步之间的直接联系。比如,要想预测明天早上的交通状况,就要先知道今天早上的交通状况和昨天晚上的交通状况。如果昨天晚上有交通事故,那么一定会影响今天早上的交通状况。最后就可以建立映射关系:

        昨天晚上——>今天早上,那么今天晚上——>明天早上。

        转换注意力会计算每个历史时间步和每个未来时间步之间的“相关性分数”。这个分数告诉我们某个历史时刻对未来有多重要。然后根据计算出的相关性分数,为未来时间步选择最重要的历史时间步,提取它们的特征信息。最后把这些选出来的历史特征送到解码器,直接生成未来的预测值。

        在代码上,transformAttention 和 temporalAttention、spatialAttention 的写法类似,只不过传入的参数有所不同。具体来说,也就是 Query、Key、Value 不同。transformAttention 使用历史时间步(STE_P)和预测时间步(STE_Q) 构建 Query-Key 机制,实现时间序列的转换。

 

相关文章:

GMAN解读(论文+代码)

一、注意力机制 注意力机制与传统的卷积神经网络不同的是&#xff0c;前者擅长捕获全局依赖和长程关系&#xff0c;权重会动态调整。而后者对于所有特征都使用同一个卷积核。关于更多注意力机制内容&#xff0c;详见&#xff1a; 注意力机制、自注意力机制、多头注意力机制、通…...

速盾:ddos防御手段哪种比较好?高防cdn怎么样?

DDoS&#xff08;分布式拒绝服务&#xff09;攻击是一种威胁网络安全的常见攻击手段。为了保护网站和服务器免受DDoS攻击的影响&#xff0c;许多安全专家和公司开发了各种防御手段。在这篇文章中&#xff0c;我们将重点讨论一种常见的DDoS防御手段——高防CDN&#xff08;内容分…...

Spring:AOP切入点表达式

对于AOP中切入点表达式&#xff0c;我们总共会学习三个内容&#xff0c;分别是语法格式、通配符和书写技巧。 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法切入点表达式:要进行增强的方法的描述方式 对于切入点的描述&#xff0c;我们其实是有两中方式的&a…...

《文件操作》

一 . 文本文件和二进制文件 根据数据的组织形式&#xff0c;数据文件被分为了二进制文件和文本文件 数据在内存中是以二进制的形式存储&#xff0c;如果不加转换的输出到外存的文件中&#xff0c;就是二进制文件。 如果要求在外存上以ASCII 码的形式存储&#xff0c;则需要再存…...

python特殊字符序列

字符 描述 \A 只匹配字符串的开始 \b 匹配一个单词边界 \B 匹配一个单词的非边界 \d 匹配任意十进制数字字符&#xff0c;等价于r&#xff3b;0-9] \D 匹配任意非十进制数字字符&#xff0c;等价于r[^0-9]’ \s 匹配任意空格字符&#xff08;空格符、tab制表符、换…...

卷积神经网络(CNN)中的批量归一化层(Batch Normalization Layer)

批量归一化层&#xff08;BatchNorm层&#xff09;&#xff0c;或简称为批量归一化&#xff08;Batch Normalization&#xff09;&#xff0c;是深度学习中常用的一种技术&#xff0c;旨在加速神经网络的训练并提高收敛速度。 一、基本思想 为了让数据在训练过程中保持同一分布…...

LLaMA-Mesh: Unifying 3D Mesh Generation with Language Models 论文解读

目录 一、概述 二、相关工作 1、LLMs到多模态 2、3D对象生成 3、自回归的Mesh生成 三、LLaMA-Mesh 1、3D表示 2、预训练模型 3、有监督的微调数据集 4、数据集演示 四、实验 1、生成的多样性 2、不同模型text-to-Mesh的比较 3、通用语境的评估 一、概述 该论文首…...

【ESP32CAM+Android+C#上位机】ESP32-CAM在STA或AP模式下基于UDP与手机APP或C#上位机进行视频流/图像传输

前言: 本项目实现ESP32-CAM在STA或AP模式下基于UDP与手机APP或C#上位机进行视频流/图像传输。本项目包含有ESP32源码(arduino)、Android手机APP源码以及C#上位机源码,本文对其工程项目的配置使用进行讲解。实战开发,亲测无误。 AP模式,就是ESP32发出一个WIFI/热点提供给电…...

ESP-KeyBoard:基于 ESP32-S3 的三模客制化机械键盘

概述 在这个充满挑战与机遇的数字化时代&#xff0c;键盘已经成为我们日常学习、工作、娱乐生活必不可少的设备。而在众多键盘中&#xff0c;机械键盘&#xff0c;以其独特的触感、清脆的敲击音和经久耐用的特性&#xff0c;已经成为众多游戏玩家和电子工程师的首选。本文将为…...

28.UE5游戏框架,事件分发器,蓝图接口

3-3 虚幻游戏框架拆解&#xff0c;游戏规则基础_哔哩哔哩_bilibili 目录 1.游戏架构 2.事件分发器 2.1UI控件中的事件分发器 2.2Actor蓝图中的事件分发器 2.2.1动态决定Actor的分发事件 2.2.2父类中定义事件分发器&#xff0c;子类实现事件分发器 2.3组件蓝图中实现事件…...

Puppeteer 和 Cheerio 在 Node.js 中的应用

Puppeteer 和 Cheerio 在 Node.js 中的应用 引言 在现代 Web 开发中&#xff0c;自动化测试、数据抓取和页面分析是常见的需求。Node.js 提供了丰富的工具和库来满足这些需求。本文将介绍两个在 Node.js 中常用的库&#xff1a;Puppeteer 和 Cheerio&#xff0c;它们分别用于…...

Unity2D 关于N方向俯视角 中 角色移动朝向的问题

通常对俯视角2d游戏的角色移动我们使用简单2d混合树的方式,但是其不移动时的朝向该如何定义&#xff1f; 十分简单&#xff1a;移动和不移动之间形成逻辑自锁 详细说明思路就是再创建一个简单2d混合树 定义其N方向的idle 并用lastDirc二维向量保存玩家输入&#xff0c;当玩家输…...

pytorch 和tensorflow loss.item()` 只能用于只有一个元素的张量. 防止显存爆炸

loss.item() 是 PyTorch 中的一个方法&#xff0c;它用于从一个只包含单个元素的张量&#xff08;tensor&#xff09;中提取出该元素的值&#xff0c;并将其转换为一个 Python 标量&#xff08;即 int 或 float 类型&#xff09;。这个方法在训练神经网络时经常用到&#xff0c…...

链表刷题|判断回文结构

题目来自于牛客网&#xff0c;本文章仅记录学习过程的做题理解&#xff0c;便于梳理思路和复习 我做题喜欢先把时间复杂度和空间复杂度放一边&#xff0c;先得有大概的解决方案&#xff0c;最后如果时间或者空间超了再去优化即可。 思路一&#xff1a;要判断是否为回文结构则…...

海盗王集成网关和商城服务端功能golang版

之前用golang把海盗王的商城服务端和网关服务端都重写了一次。 后来在同时开启网关和商城服务时&#xff0c;发现窗口数量有点多&#xff0c;有时要找到商城窗口比较麻烦。 既然2个都是用golang govcl写的&#xff0c;是不是可以集成到一起&#xff0c;方便使用呢&#xff1f;…...

SCI 中科院分区中位于4区,JCR分区位于Q2 是什么水平?

环境&#xff1a; ACM Transactions on Interactive Intelligent Systems 《Acm Transactions On Interactive Intelligent Systems》(《交互式智能系统上的 Acm 事务》)是一本由ASSOC COMPUTING MACHINERY (ACM)出版的Computer Interaction-Computer Science-Human学术刊物&…...

微知-Mellanox网卡的另外一种升级方式mlxup?(mlxup -d xxx -i xxx.bin)

背景 一般升级Mellanox网卡使用flint&#xff0c;还有另外一种叫做mlxup。 NVIDIA 提供了两种固件工具来更新和查询适配器固件&#xff1a; MLXUP - 固件更新和查询实用程序。该实用程序允许扫描服务器计算机以查找可用的 NVIDIA 适配器&#xff0c;并指示每个适配器是否需要…...

《Shader入门精要》透明效果

代码以及实例图可以看github &#xff1a;zaizai77/Shader-Learn: 实现一些书里讲到的shader 在实时渲染中要实现透明效果&#xff0c;通常会在渲染模型时控制它的透明通道&#xff08;Alpha Channel&#xff09;​。当开启透明混合后&#xff0c;当一个物体被渲染到屏幕上时&…...

Linux之SELinux与防火墙

一、SELinux的说明 开发背景与目的&#xff1a; SELinux由美国国家安全局&#xff08;NSA&#xff09;开发&#xff0c;旨在避免资源的误用。传统的Linux基于自主访问控制&#xff08;DAC&#xff09;&#xff0c;通过判断进程所有者/用户组与文件权限来控制访问&#xff0c;对…...

深度学习使用LSTM实现时间序列预测

大家好&#xff0c;LSTM是一种特殊的循环神经网络&#xff08;RNN&#xff09;架构&#xff0c;它被设计用来解决传统RNN在处理长序列数据时的梯度消失和梯度爆炸问题&#xff0c;特别是在时间序列预测、自然语言处理和语音识别等领域中表现出色。LSTM的核心在于其独特的门控机…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

Vue 3 + WebSocket 实战:公司通知实时推送功能详解

&#x1f4e2; Vue 3 WebSocket 实战&#xff1a;公司通知实时推送功能详解 &#x1f4cc; 收藏 点赞 关注&#xff0c;项目中要用到推送功能时就不怕找不到了&#xff01; 实时通知是企业系统中常见的功能&#xff0c;比如&#xff1a;管理员发布通知后&#xff0c;所有用户…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”&#xff1a;输入模块&#xff08;GPIO、温度、V_REFINT&#xff09;1.4.2 信号 “调度站”&#xff1a;多路开关1.4.3 信号 “加工厂”&#xff1a;ADC 转换器&#xff08;规则组 注入…...