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 提供了一个简单的在线演示,可以用于测试模型。 访问…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
