2024/2/4周报

文章目录

  • 摘要
  • Abstract
  • 文献阅读
    • 题目
    • 引言
    • 创新点
    • 方法
      • 利用长短期记忆网络学习时空演化特征
      • 构建用于气象辅助信息编码的堆叠自编码器
      • 使用多任务学习发现全市通用模式
    • 模型
    • 实验
      • 数据集
      • 评估准则
      • 实验结果
  • 深度学习
    • Self-attention
      • self-Attention由来
      • self-attention原理
      • self attention代码
  • 总结

摘要

基于LSTM-Autoencoder模型的多任务空气质量预测
本文提出了一种长短期记忆(LSTM)自编码器多任务学习模型,用于预测城市多个地点的PM2.5时间序列。该模型能够隐式地、自动地挖掘不同站点污染物之间的内在关联性。该模型充分利用了监测站的气象信息,有利于提高模型的性能。

Abstract

文献阅读

题目

Multitask Air-Quality Prediction Based on LSTM-Autoencoder Model

引言

本文提出了一种长短期记忆(LSTM)自编码器多任务学习模型,用于预测城市多个地点的PM2.5时间序列。具体而言,多层LSTM网络可以模拟城市空气污染颗粒物的时空特征,利用堆叠式自动编码器对城市气象系统的关键演变模式进行编码,可为PM2. 5时间序列预测提供重要的辅助信息。此外,多任务学习能够自动发现多个关键污染时间序列之间的动态关系,解决了传统数据驱动方法建模过程中多站点信息利用不足的问题。

创新点

现有的数据驱动方法往往忽略了城市多个站点之间的动态关系,导致预测精度不理想。
文章贡献如下:
1)考虑到空气污染物的复杂时空动态,通过多层LSTM网络的时空学习,探索城市多个位置颗粒物的时空特征。
2)气象因素对PM2.5的演变影响很大。提出了对气象时间序列关键演变模式的编码方法,为PM2. 5时间序列预测提供了重要的辅助信息。
3)PM2.5时间序列的模式在多个地点之间具有很强的相关性,本文利用多任务学习自动探索重点污染监测站之间的模式,并通过深度学习模型隐式地描述各个站点之间的关系。
4)对北京市多站PM2. 5时间序列和气象观测信息的建模仿真表明,由于考虑了多站间的关系,该方法取得了令人满意的性能。

方法

利用长短期记忆网络学习时空演化特征

LSTM网络图:
在这里插入图片描述

构建用于气象辅助信息编码的堆叠自编码器

1)定义了一个特征学习函数h = fθ (X),其中fθ(·)称为编码器函数。然后,解码函数X = gθ (h)学习重构原始信号。特征向量h是原始输入的压缩表示。
2)目标是构建气象信息的向量表示,并将其用于PM2.5时间序列的建模。气象自编码器的目标函数可表示为:
在这里插入图片描述

其中:XMeteo,i为第i个监测点位置的气象信息,R(θ)是自编码器权值的约束项。

使用多任务学习发现全市通用模式

1)在硬参数共享中,学习神经网络基础层的公共特征子空间。在基础层中参数是完全相同的,可以防止过拟合问题,有更好的泛化效果。
2)在软参数共享中,任务的模型参数可以是不同的、受规则约束的特征子空间。
3)多任务学习的架构图:
在这里插入图片描述

4)多任务学习的目标函数:
在这里插入图片描述

其中:X为多任务输入,Yi为各自的多任务学习目标,θi是第i个任务对应的学习参数,N是任务数。

模型

作者提出的模型的架构如下图所示:
在这里插入图片描述

多层LSTM网络对PM2.5时空序列特征进行学习,层叠式自编码器可以逐层压缩有用信息,提高性能。

在更高层次的特征学习上,使用两层密集网络学习PM2.5综合演化信息和气象辅助。基于深度特征,利用多个亚密集层对全市范围内多个地点的PM2.5时间序列进行建模,并输出预测值。整个模型的目标函数为:
在这里插入图片描述

其中:yi,j为PM2.5时间序列实值,N为空气质量监测站的个数,n是时间序列的个数。XPM2.5为所有空气质量监测站的记录值,XMeteo是辅助气象信息的输入,θ为所提模型的所有参数。

实验

数据集

北京的空气质量数据包括几种主要空气污染物的浓度:PM2.5(μg/m3)、PM10(μg/m3)、NO2(μg/m3)、CO(mg/m3)、O3(mg/m3)和SO2(μg/m3)。北京有18个监测站。名称、纬度和经度如下表所示。监测站包括市区、郊区和交通污染监测区。
在这里插入图片描述

时间序列从2017年1月30日下午4点到2018年1月31日下午3点每小时采样一次,共8784个样本。

利用气象信息作为辅助信息,包括温度、压力、湿度、风向、风速和天气情况。共有13个气象站,位置如下所示:
在这里插入图片描述

评估准则

优化方法是最常用的ADAM优化器,使用三个评价指标来比较所提出模型的性能:均方根误差(RMSE)、平均绝对误差(MAE)和对称平均绝对百分比误差(SMAPE)。

实验结果

在北京市多个气象监测站的预报结果如下,选取了几个有代表性的气象监测站的预报结果。这些地点包括农村地区、城市中心、工业区和路边。
在这里插入图片描述

从图中可以看出,多个地点的PM2.5时间序列趋势是一致的,但地点之间在细节上的差异很明显。

该方法对PM2.5时间序列的一步前预测结果和三步前预测结果如下表:
在这里插入图片描述

从表中可以看出,提出的方法在各个指标(RMSE、MAE、SMAPE)上都有更好的表现,每个指标的预测误差都比对比方法好10%左右。

LSTM-Autoencoder模型和传统LSTM模型的预测结果对比如下:
在这里插入图片描述

LSTM-Autoencoder模型在12月21日的预测结果优于传统的LSTM模型。预测曲线增长快,能有效地预测空气质量。相比之下,传统LSTM无法跟踪PM2.5时间序列的趋势。两者之间预测结果相差很大.

深度学习

Self-attention

self-Attention由来

Google在2017年发表了著名的论文《Attention Is All You Need》提出了目前在NLP以及CV领域使用非常广泛的transformer模型,而self-attention是transformer的主要组成部分。

在transformer之前,NLP领域常见的处理序列数据的方法主要是RNN/LSTM等:

A:由于RNN/LSTM在计算时需考虑前序信息,所以不能并行,导致训练时间较长
在这里插入图片描述

B:当序列长度过长时,由于模型深度增加,序列开始部分对末端部分影响几乎会消失,虽然记忆网络/attention机制的加入可以降低一部分影响,但长距依赖问题仍然存在。
在这里插入图片描述

Self-attention可以很好的处理上面两个问题,首先,self-attention通过位置编码保证序列关系,计算上不依赖序列关系,所以可以实现完全的并行,其次,在计算相关性时候,任何一个点都会与整个序列中的所有输入做相关性计算,避免了长距依赖的问题。

self-attention原理

从输入和输出的不同形式来看,经典的NLP任务可以分为下面三种情况:
A:输出和输出长度一致,典型任务:词性识别
在这里插入图片描述

B:输入和输出长度不一致,输出长度不变并且输出为单一元素,典型任务,文本分类,情绪识别
在这里插入图片描述

C:输入和输出长度不一致,并且输出输出长度不定,为多个长度不固定的元素,典型任务:翻译,文本摘要等
在这里插入图片描述

从上面的任务形式可以看出,无论是那种任务,我们既想让模型知道不同输入向量之间的关系以及单个输入向量与和整体输入之间的关系,同时也想让模型了解不同的输入对输出的贡献是怎么样的,Self-attention可以完成上面两个部分的任务,下面我们看是如何做到的:

A:不同输入之间相关性计算
度量两个向量的相关性的方法有很多,点乘是常用的方法之一。在self-attention中就是用这种方法来做不同输入向量之间的相关性计算,每个单词通过与Wq做乘法后,作为当前单词的表征,为查询向量Query,每个单词通过与Wk做乘法后,当作被查询向量Key,最后每个输入向量的Query与其他输入向量的Key做点乘,来表征两个不同向量的相关性。

B:信息提取
将每个输入与Wv相乘,生成V,将当前输入的alpha与每个输入的V相乘,在相加就得到了完成了输入的有用信息抽取,这里输出的b1的数值是和最大的alpha*v的值是接近的,也就是突出了贡献比较大的输入。依此类推,可以同时计算b1…到bn,这样整体上一个self attention的大部分计算就完成了,b1,b2….到bn都是可以并行计算的。
在这里插入图片描述

C:Multi-head attention
在实际使用过程中,一个attention很难关注到所有信息,所以基本上都是使用Multi-head attention,也就是说每个输入向量有多个Q,多个K,多个V,每一个组内的q只和自己组内的k,v做计算,如下图中画红色框的元素所示:
在这里插入图片描述

D:输入-位置编码
Self attention本身是不涉及到位置信息的,但是在输入层已经将位置信息加入进来了,这块有比较重要,所以单独放在这里了。对于大部分任务位置信息是很重要的信息,比如词性标注中,动词和名词的关系,所以我们会在输入中加入特殊形式的位置编码,我理解位置编码只要保证唯一性和相对关系就是可以的,至于不同位置编码的效果还是以实验效果为准。
在这里插入图片描述

self attention代码

论文中关于attention的公示描述:
在这里插入图片描述

可以将公式和下面的图联系在一起:
在这里插入图片描述
在这里插入图片描述

上图是Attention公式的实现步骤,从图中可以看出 ,一个attention模块,需要学习的参数只有Wq,Wk,Wv这三个投影矩阵。

首先我们看init函数,self.num_attention_heads是multi-head中head的个数,self.attention_head_size每个attention的头维度,self.all_head_size和config.hidden_size是一样的值,Q,K,V的计算主要是矩阵相乘。

class BertSelfAttention(nn.Module):def __init__(self, config):super(BertSelfAttention, self).__init__()   # 768 12if config.hidden_size % config.num_attention_heads != 0:raise ValueError("The hidden size (%d) is not a multiple of the number of attention ""heads (%d)" % (config.hidden_size, config.num_attention_heads))self.num_attention_heads = config.num_attention_headsself.attention_head_size = int(config.hidden_size / caonfig.num_attention_heads)self.all_head_size = self.num_attention_heads * self.attention_head_size#计算Q,K,V self.query = nn.Linear(config.hidden_size, self.all_head_size)self.key = nn.Linear(config.hidden_size, self.all_head_size)self.value = nn.Linear(config.hidden_size, self.all_head_size)self.dropout = nn.Dropout(config.attention_probs_dropout_prob)

transpose_for_scores的计算主要是将矩阵的维度做转换[bs ,seqlen , all_head_size ]转换成[bs, num_ head ,seqlength,attention_head_size ],为了后续multi-head 做attention计算。

 def transpose_for_scores(self, x):new_x_shape = x.size()[:-1] + (self.num_attention_heads, self.attention_head_size)x = x.view(*new_x_shape)return x.permute(0, 2, 1, 3)

forward是代码的主要流程部分:

# input matrix是[bs, seqlength, hidden_size]def forward(self, hidden_states, attention_mask):mixed_query_layer = self.query(hidden_states)mixed_key_layer = self.key(hidden_states)mixed_value_layer = self.value(hidden_states)# 计算Q,K,V之后大小不变query_layer = self.transpose_for_scores(mixed_query_layer)key_layer = self.transpose_for_scores(mixed_key_layer)value_layer = self.transpose_for_scores(mixed_value_layer)#query_layer,key_layer,value_layer,大小变为  [bs, num_ head  , seqlength, attention_head_size]# Take the dot product between "query" and "key" to get the raw attention scores.# alpha矩阵 的计算以及单位化 Q*transpose(K)attention_scores = torch.matmul(query_layer, key_layer.transpose(-1, -2))attention_scores = attention_scores / math.sqrt(self.attention_head_size)# Apply the attention mask is (precomputed for all layers in BertModel forward() function)# 每一条输入,padding部分不做计算,所以要进行mask,# attention_mask在transformer中有不同的作用,详细信息见参考文件attention_scores = attention_scores + attention_mask# Normalize the attention scores to probabilities.# alpha矩阵归一化attention_probs = nn.Softmax(dim=-1)(attention_scores)# This is actually dropping out entire tokens to attend to, which might# seem a bit unusual, but is taken from the original Transformer paper.attention_probs = self.dropout(attention_probs)# 计算softmax(alpha) * V# 将矩阵维度变换到之前,属于与输出维度保持不变context_layer = torch.matmul(attention_probs, value_layer)context_layer = context_layer.permute(0, 2, 1, 3).contiguous()new_context_layer_shape = context_layer.size()[:-2] + (self.all_head_size,)context_layer = context_layer.view(*new_context_layer_shape)return context_layer

从整体上看,self-attention的输入输出维度一致,输入之前不仅加入了位置编码,还需要将不同作用的部分需要的mask(例如padding等,防止模型作弊)加入进来。

总结

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

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

相关文章

解锁影视制作新境界:DaVinci Resolve Studio 18引领行业变革

随着科技的不断发展,影视制作行业也在日新月异地变革。在这一进程中,DaVinci Resolve Studio 18以其卓越的性能和无限的创新力,成为了行业的领跑者。 DaVinci Resolve Studio 18是一款集剪辑、调色、音频处理和特效合成于一身的专业级影视制…

康姿百德床垫价格合理功效好,用科技力量守护您的睡眠健康

现代生活中,优质睡眠的观念已深入人心。人们渐渐认识到,一个舒适的床垫不仅仅是睡眠的工具,更是健康的守护者。很多朋友在选购床垫一掷千金,却找不到一款合适的床垫。康姿百德床垫是专为提升睡眠质量研发的床垫,成为了…

保姆级教程:从0到1搭建web自动化测试环境

之前都是在linux上安装,第一次在windows上配置环境,加上距离上次配置环境有点久了,竟也花了点时间。特此记录下保姆级教程,给初学者一个有效的参考! 一. 环境搭建 工具清单 工具工具名版本Java开发工具包JDK1.8浏览…

Linux 命令 —— top

Linux 命令 —— top 相对于 ps 是选取一个时间点的进程状态,top 则可以持续检测进程运行的状态。使用方式如下: 用法: top [-d secs] | [-p pid] 选项与参数: -d secs:整个进程界面更新 secs 秒。默认是 5 5 5 秒。…

C++之平衡二叉搜索树查找

个人主页:[PingdiGuo_guo] 收录专栏:[C干货专栏] 大家好,我是PingdiGuo,今天我们来学习平衡二叉搜索树查找。 目录 1.什么是二叉树 2.什么是二叉搜索树 3.什么是平衡二叉搜索树查找 4.如何使用平衡二叉搜索树查找 5.平衡二叉…

一个好看的底部导航栏效果

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>底部导航栏</title> </head> <style&…

Rust学习之Features

Rust学习之Features 一 什么是 Features二 默认 feature三 简单的features应用示例四 可选(optional)的依赖五 依赖的特性5.1 在依赖表中指定5.2 在features表中指定 六 命令行中特性控制七 特性统一路径八 其它8.1 相互排斥特性8.2 观察启用特性8.3 [Feature resolver version…

从源码角度透视QTcpServer:解构QTcpServer的底层原理与技术细节

深入了解QTcpServer的底层原理和技术细节 一、背景二、QTcpServer的基本原理2.1、TCP协议简介2.2、QTcpServer的概念 三、QTcpServer源码解析3.1、QTcpServer的构造函数3.2、调用listen函数启动tcpserver3.3、QSocketNotifier的实现 总结 一、背景 QTcpServer是Qt网络模块中的…

docker 容器指定主机网段

docker 容器指定主机网段。 直接连接到物理网络&#xff1a;使用macvlan技术可以让Docker容器直接连接到物理网络&#xff0c;而不需要通过NAT或端口映射的方式来访问它们。可以提高网络性能和稳定性&#xff0c;同时也可以使容器更加透明和易于管理。 1、首先需要查询网卡的…

vuex store,mutations,getters,actions

文章目录 1.vuex概述2.构建vuex【多组件数据共享】环境Son1.vueSon2.vueApp.vue 3.创建一个空仓库4.如何提供&访问vuex的数据①核心概念 - state状态1.通过store直接访问2.通过辅助函数简化代码 ②核心概念 - mutations&#xff08;粗略&#xff09; 5.核心概念 - mutation…

Leetcode29-最大频率元素计数(3005)

1、题目 给你一个由 正整数 组成的数组 nums 。 返回数组 nums 中所有具有 最大 频率的元素的 总频率 。 元素的 频率 是指该元素在数组中出现的次数。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,2,3,1,4] 输出&#xff1a;4 解释&#xff1a;元素 1 和 2 的频率为 …

python3基础学习一

打印print()函数 R 主要的原因是为防止转义&#xff0c;保证r后面的内容全文输出f “主要作用就是格式化字符串&#xff0c;加上f以后&#xff0c;{“变量/表达式”},花括号里的变量和表达式就可以使用了” def ptSubstr():msg "hello,world!"print(msg[0:-1]);prin…

在Django Admin添加快捷方式django-admin-shortcuts

在Django管理主页上添加简单漂亮的快捷方式。 1.安装 pip install django-admin-shortcuts 2在settings.py注册django-admin-shortcuts INSTALLED_APPS [admin_shortcuts,django.contrib.admin,....... ] 3.添加ADMIN_SHORTCUTS设置 ADMIN_SHORTCUTS [ { ti…

k8s二进制及负载均衡集群部署详解

目录 常见部署方式 二进制部署流程 环境准备 操作系统初始化配置 关闭防火墙 配置SELinux 关闭SWAP 根据规划设置主机名 在master添加hosts&#xff0c;便于主机名解析 调整内核参数 配置时间同步 部署docker引擎 在所有node节点部署docker引擎 部署etcd集群 签发…

合约短线高胜率策略-扭转乾坤指标使用说明

扭转乾坤指标使用说明 行情判断 双绿线 多趋势双红线 空趋势大绿线 小红线 多震荡大红线 小绿线 空震荡 进场条件 趋势行情进场 多趋势 多信号 底金叉 做多空趋势 空信号 顶死叉 做空 震荡行情进场 多震荡 多信号 底金叉 做多多震荡 空信号 顶死叉 做空空…

idea docker 镜像生成太慢太大问题

文章目录 前言一、更小的jdk基础镜像二、服务瘦包&#xff08;thin jar&#xff09;2.1 maven2.2 修改dockerfile2.3 container run options 三、 基础jdk镜像入手&#xff1f;总结 前言 idea docker 内网应用实践遗留问题 idea docker插件 build 服务镜像太慢服务镜像太大 …

【Java程序设计】【C00223】基于Springboot+vue的图书购物商城(论文)

基于Springbootvue的图书购物商城&#xff08;论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springbootvue的前后端分离的图书商城购物系统 本系统分为用户以及管理员2个角色。 用户&#xff1a;用户登录后、可以查看新上架的书籍和新闻等…

npm ERR! reason: certificate has expired(淘宝镜像过期)

npm ERR! request to https://registry.npm.taobao.org/yauzl/-/yauzl-2.4.1.tgz failed, reason: certificate has expired 今天在执行npm install命令时&#xff0c;报错百度了下是淘宝证书过期原因 解决方法一 执行下面两个命令再进行npm install即可 npm cache clean --…

【深度学习】从0完整讲透深度学习第2篇:TensorFlow介绍和基本操作(代码文档已分享)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论深度学习相关知识。可以让大家熟练掌握机器学习基础,如分类、回归&#xff08;含代码&#xff09;&#xff0c;熟练掌握numpy,pandas,sklearn等框架使用。在算法上&#xff0c;掌握神经网络的数学原理&#xff0c;手动实…

02链表:19、删除链表的倒数第N个节点

19、删除链表的倒数第N个节点 文章目录 19、删除链表的倒数第N个节点方法一&#xff1a;快慢指针 思路&#xff1a;使用虚拟头节点快慢指针&#xff0c;fast指针先走n1&#xff0c;直到为null&#xff0c;slow节点刚好在删除元素前一个位置&#xff0c;方便操作 重点&#xff1…