ST-SSL:基于自监督学习的交通流预测模型
文章信息
文章题为“Spatio-Temporal Self-Supervised Learning for Traffic Flow Prediction”,是一篇发表于The Thirty-Seventh AAAI Conference on Artificial Intelligence (AAAI-23)的一篇论文。该论文主要针对交通流预测任务,结合自监督学习,衡量数据的时空异质性。
摘要
在智能交通系统中,准确预测不同时间段的城市交通流量是至关重要的。现有的方法存在两个关键的局限性:1、大多数模型集中预测所有区域的交通流量,而没有考虑空间异质性,即不同区域的交通流量分布可能存在偏差;2、现有模型无法捕捉时变交通模式引起的时间异质性,大多数现有模型通常是在所有时间段内与共享参数化空间进行时间相关性建模。为解决上述问题,文章提出了一种新的时空自监督学习(ST-SSL)的预测框架,该框架通过辅助的自监督学习范式,增强了交通模式表征,以反映时空异质性。具体而言,该模型构建在一个集成模块上,具有时间卷积和空间卷积。为实现自适应时空自监督学习,ST-SSL在属性层面和结构层面对交通流量图数据进行自适应增强。在增强的流量图的基础上,文章构建了两个基于自监督学习的辅助任务,通过时空异构感知增强对主要流量预测任务进行补充。文章的主要贡献如下:
该文章是第一个提出一种新的自监督学习框架来模拟交通流预测的时空异质性。所提出的预测框架可能会对其他实际的时空应用(例如空气质量预测)有所帮助。
文章提出了一种基于图结构时空图的自适应异构感知数据增强方案,以减弱噪声扰动对预测的影响。
文章引入两个自监督学习任务来补充主要的交通预测任务,通过增强模型识别能力和对交通时空异质性的认识。
基本概念
空间区域:文章将网络划分为N=I*J的网格,表示区域。
交通流量图(TFG):交通流量图定义为,其中V表示节点集合,为边集合,
为邻接矩阵,
表示历史T个时间步交通网络内各个区域的流入量和流出量序列。
问题定义:给定若干历史时间步的交通流量图,文章所研究问题的目标是学习一个能够准确估计未来一个时间步内的所有区域的交通量的预测的函数。
模型框架
文章所提出的模型框架如下图中的图(a)所示。主要包括时空编码器(ST Encoder)、自适应图增广模块(Adaptive Graph Augmentation)。
时空编码器(ST Encoder):文章主要利用卷积神经网络构建时空编码器,将时间卷积分量与图卷积传播网络相结合,作为时空关系表示的主干。具体而言,时间特征提取层由基于门控机制的一维因果卷积构成,时间编码器沿时间维度进行卷积,如下式所示。
其中,表示第t个时间步交通网络的嵌入矩阵,
表示其中的第n行,即与区域
相关,D表示嵌入维度。进一步,空间特征提取层如下式所示。
文章的时空编码器采用“三明治”块结构构建,即以TC→SC→TC的顺序对数据进行处理。随着时空编码器的处理,时间维度最终变为0,从而得到最终的预测结果。
自适应图增广模块(Adaptive Graph Augmentation on TFG):文章设计了两阶段的图增广方法,即流量级数据增广和图拓扑级结构增广。首先,文章给出了不同区域异质性的衡量方法。具体而言,对于区域,其嵌入序列的计算方式如下。
其中,指权重不同时间步嵌入序列的聚合表示,
是可学习参数。该权重反映不同时间步与总流量规律的关系。基于上式,文章通过比对两个不同区域对应总流量规律的差异,从而反映不同区域的异质性。具体如下式所示,该值越大,则两个区域之间的相关性越强,因此异质性越小。
基于上式,文章提出流量级数据增广和图拓扑级结构增广。具体而言,流量级数据增广旨在基于概率掩盖第个时间步中相关性较弱的流量,其中服从二项分布,其处理结果为
。图拓扑级结构增广旨在对网络内所有区域进行分析,包括两个步骤:1、若两个区域的流量规律不是高度相关,即异质性较大,基于概率掩盖这两个区域之间的连接,服从二项分布
;2、若两个区域之间的流量规律异质性较小,则会依照服从二项分布
的概率添加一条边。基于上述两阶段数据增广,得到新的TFG,如下所示。
基于自监督学习的空间异质性建模:给定经过增广的TFG,文章的目标是使区域嵌入在辅助自监督信号的情况下有效地保持空间异质性。为实现该目标,文章在区域级别上设计了一个基于软聚类的自监督学习任务,将区域映射到对应于不同城市区域功能的多个潜在表示空间。具体而言,文章生成K个聚类嵌入。聚类过程如下式所示。
其中,为D维向量,表示区域的区域嵌入。基于上式,区域的聚类指派如下。
为生成自监督学习的特征,所设计的辅助任务旨在预测用于原始区域嵌入生成的区域指派。对于区域,对应的自监督学习的损失计算方法如下所示。
对于所有区域而言,其损失计算如下。
上述聚类方法存在两方面问题:首先,生成的聚类指派矩阵是由聚沉成绩所产生的,每个区域的聚类指派求和可能不为1;其次,可能存在每个区域都有相同的分配。为解决上述我呢提,文章提出区域聚类的分布正则化。具体而言,文章采用最大熵原理,即,定义可行解所构成的集合如下。
对于每一个可行的聚类指派,可以将嵌入矩阵映射为聚类矩阵
。因此搜索可以通过最大化嵌入矩阵和聚类的相似度获得最优解,如下式所示。
其中,tr()表示矩阵的迹,表示熵函数,计算公式如下。
基于自监督学习的时间异质性建模:文章进一步设计了一个自监督学习任务,通过强制时间步长特定的流量模式表示之间的差异,将时间异质性注入到时间感知区域嵌入中。具体而言,文章首先融合原始的TFG和增广后的TFG。
进一步,将不同区域的特征聚合,从而获得第t个时间步网络级表示,计算方式如下。
为增强不同时间步表示的辨别能力,文章将网络级表示和区域级表示作为嵌入对,其中若区域级表示和网络级表示为同一个时间步则为正值,反之,则为负值。最后,基于上述定义,时间异质性建模的损失函数为交叉熵损失函数,定义如下。
综上所述,模型的整体损失函数定义如下:
实验
文章在几个真实数据集上进行一系列实验,以评估ST-SSL的性能。数据集包括纽约Bike数据集和Taxi数据集,以及北京出租车数据集。这些实验旨在回答以下研究问题:
问题1:与各种基线相比,ST-SSL的整体流量预测性能如何?
问题2:设计的不同子模块对模型性能的贡献是什么?
问题3:对于异构空间区域和不同时间段,ST-SSL的性能如何
问题4:增广图和学习表征如何使模型受益?
问题1:在不同数据集上的实验结果如下图所示。可以看到ST-SSL的预测误差最低。
进一步,文章对所提出模型在不同区域的预测误差进行可视化,并比对了不同基线模型的预测误差,如下图所示。
问题2:为验证所提出模型不同子模块的影响,文章构建了四组模型的变体进行消融实验。具体而言,ST-SSL-sa表示该模型用随机边缘去除和增加的方式取代了图拓扑上的异构引导结构增广;ST-SSL-ta表示该模型使用随机交通量掩膜替换原有的基于异质性引导的流量增广;ST-SSL-sh表示该模型不使用空间异质建模模块;ST-SSL-th表示该模型不使用时间异质性建模模块。实验结果如下。
问题3:为探究ST-SSL的鲁棒性,文章在北京出租车数据集上对具有异构数据分布的空间区域和具有不同模式的时间段进行了流量预测。对于空间异质性而言,文章利用历史交通数据的统计量,例如均值、中位数、标准差,将不同区域进行聚类。下图分别展示了不同区域的划分结果以及预测结果。
对于时间异质性而言,文章将工作日分为四个时段,将节假日分为2各时段。下图分别展示了划分方法和预测结果。
问题4:文章通过定性分析的方法进行分析,在北京出租车数据集上进行实验。结果如下图所示。文章所提出的方法自适应地去除了具有异构交通模式的相邻区域之间的连接。同时,在城市潜在功能相似的遥远区域之间建立联系。通过这种方式,ST-SSL不仅可以消除低相互关联交通模式的区域连接,还可以捕获全球城市背景下的长期区域依赖关系
此外,为了进一步探究ST-SSL中的嵌入是如何提升预测精度的,文章对比了AGCRN和ST-SSL的预测结果,通过T-SNE方法进行可视化,如下图所示。
结论
文章提出一种新的时空自监督学习(ST-SSL)框架以解决交通预测问题。具体而言,文章整合了时间和空间卷积来编码时空交通模式。进一步,文章设计两个主要模块:1、一个由自适应图增强和基于聚类的生成任务组成的空间自监督学习范式;2、一个依赖于时间感知的对比任务的时间自监督学习范式,以空间和时间异质性感知的自监督信号补充主要的交通流量预测任务。在4个交通流数据集上的综合实验证明了ST-SSL算法的鲁棒性。
相关文章:

ST-SSL:基于自监督学习的交通流预测模型
文章信息 文章题为“Spatio-Temporal Self-Supervised Learning for Traffic Flow Prediction”,是一篇发表于The Thirty-Seventh AAAI Conference on Artificial Intelligence (AAAI-23)的一篇论文。该论文主要针对交通流预测任务,结合自监督学习&#…...
如何处理C++中的字符串编码和国际化?
在C中处理字符串编码和国际化的常用方式如下: 字符串编码: 使用UTF-8编码:UTF-8是一种可变字节长度的编码方式,广泛用于表示 Unicode 字符。C中的字符串类型std::string默认使用的是UTF-8编码。可以通过使用宽字符类型std::wstrin…...

DH48WK 温控器参数设置
北京东昊力伟科技有限责任公司 温控仪、温度控制器 产品特点: 可外接温度传感器Pt100、Cu50、K、E、J、N、T、R、S、B兼容输入;PID控制输出、位式控制输出、继电器报警输出;控温能满足设定温度值的0.2℃;既可用于加热控制、也可…...

【文档智能】多模态预训练模型及相关数据集汇总
前言 大模型时代,在现实场景中或者企业私域数据中,大多数数据都以文档的形式存在,如何更好的解析获取文档数据显得尤为重要。文档智能也从以前的目标检测(版面分析)阶段转向多模态预训练阶段,本文将介绍目…...

超全整理,性能测试——数据库索引问题定位+分析(详细)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、数据库服务器添…...

44springboot摄影跟拍预定管理系统
大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…...
Flink之窗口触发机制及自定义Trigger的使用
1 窗口触发机制 窗口计算的触发机制都是由Trigger类决定的,Flink中为各类内置的WindowsAssigner都设计了对应的默认Trigger. 层次结构如下: Trigger ProcessingTimeoutTriggerEventTimeTriggerCountTriggerDeltaTriggerNeverTrigger in GlobalWindowsContinuousEventTimeTrigge…...

蓝牙资讯|2024年智能家居新趋势,蓝牙助力智能家居发展
2024年将迎来变革,智能家居趋势不仅会影响我们的生活空间,还会提高我们的生活质量,让我们有更多时间享受属于自己的时光。 2024年智能家居新趋势 趋势一:多功能科技 2024年预示着多功能技术的趋势,创新将成为焦点。混…...
机器学习 | Python实现GA-XGBoost遗传算法优化极限梯度提升树特征分类模型调参
机器学习 | Python实现GA-XGBoost遗传算法优化极限梯度提升树特征分类 目录 机器学习 | Python实现GA-XGBoost遗传算法优化极限梯度提升树特征分类基本介绍模型描述程序设计参考资料基本介绍 XGBoost的核心算法思想基本就是: 不断地添加树,不断地进行特征分裂来生长一棵树,每…...

手部关键点检测3:Pytorch实现手部关键点检测(手部姿势估计)含训练代码和数据集
手部关键点检测3:Pytorch实现手部关键点检测(手部姿势估计)含训练代码和数据集 目录 手部关键点检测3:Pytorch实现手部关键点检测(手部姿势估计)含训练代码和数据集 1. 前言 2.手部关键点检测(手部姿势估计)方法 (1)Top-Down(自上而下)方法 (2)Bot…...

服务日志性能调优,由log引出的巨坑
只有被线上服务问题毒打过的人才明白日志有多重要! 谁赞成,谁反对?如果你深有同感,那恭喜你是个社会人了:) 日志对程序的重要性不言而喻,轻巧、简单、无需费脑,程序代码中随处可见…...

【VR】【Unity】如何调整Quest2的隐藏系统时间日期
【背景】 网络虽然OK,但是Oculus Quest要连上商店还必须调整好系统时间,不过在Quest系统中,时间对用户是不可见的,本篇介绍调整的方法。 【方法】 打开SideQuest,没有的话先去下载一个。打开后先登录,如…...
C++之设计模式
C23种设计模式 https://blog.csdn.net/qq_40309341/article/details/120318957 设计模式可以同时使用多个。在软件开发中,通常会根据需求和问题的复杂性,结合多种设计模式来构建应用程序,以提高代码的可维护性、可扩展性和重用性。不同的设计…...
Django ORM查询
文章目录 1 增 -- 向表内插入一条数据2 删 -- 删除表内数据(物理删除)3 改 -- update操作更新某条数据4 查 -- 基本的表查询(包括多表、跨表、子查询、联表查询)4.1 基本查询4.2 双下划线查询条件4.3 逻辑查询:or、and…...
如何在CentOS 7中卸载Python 2.7,并安装3.X
Python是一种常用的编程语言,但是如果您不需要在服务器上使用Python 2.7,那么本文将详细介绍如何在CentOS 7上卸载Python 2.7。 一、检查Python版本 在卸载Python 2.7之前,必须检查系统上的Python版本。 在终端中执行以下命令:…...

10.17七段数码管单个多个(部分)
单个数码管的实现 第一种方式 一端并接称为位码;一端分别接收电平信号以控制灯的亮灭,称为段码 8421BCD码转七段数码管段码是将BCD码表示的十进制数转换成七段LED数码管的7个驱动段码, 段码就是LED灯的信号 a为1表示没用到a,a为…...

linux静态库与动态库
库是一种可执行的二进制文件,是编译好的代码。使用库可以提高开发效率。在Linux 下有静态库和动态库。 静态库在程序编译的时候会被链接到目标代码里面。所以程序在运行的时候不再需要静态库了。因此编译出来的体积就比较大。以 lib 开头,以.a 结尾。…...
LeetCode 面试题 10.03. 搜索旋转数组
文章目录 一、题目二、C# 题解 一、题目 搜索旋转数组。给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详。请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的。若有多个相同元素ÿ…...

SpringCloudSleuth异步线程支持和传递
场景 在使用Sleuth做链路跟踪时,默认情况下异步线程会断链,需要进行代码调整支持。 调整内容 方式一 使用Async实现异步线程 开启异步线程池 EnableAsync SpringBootApplication public class LizzApplication {public static void main(String[] a…...

如何使用 Disco 将黑白照片彩色化
Disco 是一个基于视觉语言模型(LLM)的图像彩色化工具。它使用 LLM 来生成彩色图像,这些图像与原始黑白图像相似。 本文将介绍如何使用 Disco 将黑白照片彩色化。 使用 Disco 提供了一个简单的在线演示,可以用于测试模型。 访问…...

ChatGPT AIGC 制作大屏可视化分析案例
第一部分提示词prompt: 商品 价格 p1 13 p2 41 p3 42 p4 53 p5 19 p6 28 p7 92 p8 62 城市 销量 北京 69 上海 13 南京 18 武汉 66 成都 70 你现在是一名非常专业的数据分析师,请结合上述数据完成下列几件事情 1:第一部分数…...

2023年9款好用的在线流程图软件推荐!
随着互联网技术和基础设施的发展,人们能用上比过去更加稳定的网络,因此在使用各类工具软件时,越来越倾向于选择在线工具,或是推出了网页版的应用。 就流程图软件而言,过去想要绘制流程图,我们得在电脑上安…...
剑指Offer || 044.在每个树行中找最大值
题目 给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。 示例1: 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9] 解释:1/ \3 2/ \ \ 5 3 9 示例2: 输入: root [1,2,3] 输出: [1,3] 解释:1/ \2 3示例3ÿ…...
ESP32网络开发实例-UDP数据发送与接收
UDP数据发送与接收 文章目录 UDP数据发送与接收1、UDP简单介绍2、软件准备3、硬件准备4、代码实现本文将详细介绍在Arduino开发环境中,如何实现ESP32通过UDP协议进行数据发送与接收。 1、UDP简单介绍 用户数据报协议 (UDP) 是一种跨互联网使用的通信协议,用于对时间敏感的传…...

液压自动化成套设备比例阀放大器
液压电气成套设备的比例阀放大器是一种电子控制设备,用于控制液压动力系统中的液压比例阀1。 比例阀放大器通常采用电子信号进行控制,以控制比例阀的开度和流量,以实现液压系统的可靠控制。比例阀放大器主要由以下组成部分: 驱动…...

专业144,总分440+,上岸西北工业大学827西工大信号与系统考研经验分享
我的初试备考从4月末,持续到初试前,这中间没有中断。 总的时间分配上,是数学>专业课>英语>政治,虽然大家可支配时间和基础千差万别,但是这么分配是没错的。 数学 时间安排:3月-7月:…...
JQuery - template.js 完美解决动态展示轮播图,轮播图不显示问题
介绍 在JQuery中,使用template.js把轮播图的图片渲染到页面后,发现无法显示。 解决方案 首先,打开控制台发现,图片dom是生成了的,排除dom的缺失其次,换了一个插件Swiper,发现效果一样,排除插件的沦丧把动态数据换成假数据,...
CC2540和CC2541的区别简单解析
CC2541理论上是CC2540的精简版,去除了USB接口,增加了1个HW1C接口。 CC2540集成了2.4GHz射频收发器,是一款完全兼容8051内核的无线射频单片机,它与蓝牙低功耗协议栈共同构成高性价比、低功耗的片上系统(SOC)…...
Java8 新特性之Stream(八)-- Stream的collect()与Collectors的联合运用
目录 1. collect()的 收集 作用 2. collect()的 统计 作用 3. collect()的 分组 作用 4. collect()的 拼接 作用...

SpringBoot基础详解
目录 SpringBoot自动配置 基于条件的自动配置 调整自动配置的顺序 纷杂的SpringBoot Starter 手写简单spring-boot-starter示例 SpringBoot自动配置 用一句话说自动配置:EnableAutoConfiguration借助SpringFactoriesLoader将标准了Configuration的JavaConfig类…...