使用 LSTM 实现长期预测

pytorch LSTM:https://pytorch.org/docs/stable/generated/torch.nn.LSTM.html

最近看 google 的论文 autopilot,讲的是怎么通过一个app的历史的资源使用数据,来预测这个app到底需要多少资源,才能满足其服务的正常运行

论文讲了2种方法,就是:

  1. 一种是传统的,对历史数据加权
  2. 一种是基于增强学习的,这个有点复杂,没太看懂

不过我有个疑问,像资源使用这种时序的数据,用 lstm 这种循环神经网络不是最简单吗?为什么要用增强学习这么复杂的东西(状态空间复杂,状态的迁移也复杂,并且需要更大的计算量)

所以我打算试试用 lstm 来实现长期的资源预测

我的数据样本:

20220510000000,38.388889
20220510003000,33.722222
20220510010000,31.538889
...
20220510053000,31.183333
20220510060000,32.983333
20220510063000,36.694444

第一列是明文的时间,第二列是app的cpu使用

1. 思路

使用 lstm 有几个关键的地方:

  1. 定义好网络的输入输出,简单来说就是你希望神经网络帮你学习什么样的特征映射。
  2. 怎么实现长期预测

由于典型的 rnn 神经网络,是输入一串历史数据,输出下一个时刻的预测值。这是经典用法,可能也有一些方法,可以直接输出多个历史预测值的,不过我没研究过,这里不讨论

我的方法也比较简单,就是用预测出来的值作为神经网络的数据,继续滚动预测下一个值,通过这种方法,实现“长期”的预测

2. 网络(输入、输出)建模

首先要定义清楚网络的输入,输出是什么

由于经典的 rnn 只有一个输出,就是我们下一步要预测的值,所以这个没什么好讨论的

但是输入是可以多个的,你可以用当前最近的2个数据来预测下一个数据,也可以用当前10个数据预测下一个数据,也可以是N个。但是据我的实测观察来看,使用2个数据预测下一个数据效果好像更好一些

2个数据预测1个

0