时序数据处理中DNN和RNN的区别

DNNV vs RNN

在实际处理时序数据的时候思考了这么一个问题(知乎上也有人问):为何要用RNN,不能把时间序列的数据都做为特征值输入全链接神经网络(DNN)吗?网络

我看到知乎上有个回答不错:机器学习

若是固定了就是前四天输入,预测第五天,普通的全链接彻底能够解决这个问题,无非是拟合一个四元的高阶函数罢了。

可是大多数的时序问题,输入是变长的,并且很是长。有时输出也要求是变长一个序列。网络的形状都是固定的,故而普通的全链接没法解决输入输出的变长问题。函数

上面的回答我是承认的,在定长window做为输入下,确实能够用DNN或者其余机器学习模型,只不过收敛速度会慢些。学习

下面咱们回到RNN如何处理时序数据。举例来讲,咱们作故障预测(注意这里是预测),已经知道了故障发生点,如何使用时序数据进行故障预测。设计

RNN方法一(有问题的方法)

首先咱们不可能固定肯定的window做为输入,由于不知道应该取1分钟,仍是3分钟,仍是5分钟。。。所以咱们可能须要先截取一个相对较长的时间,好比5分钟的数据做为输入,也就是说故障发生点的前五分钟数据拿出来进行label,而且分红不一样长度:code

  1. 故障发生点向前推30秒
  2. 故障发生点向前推1分钟
  3. 故障发生点向前推2分钟
  4. 故障发生点向前推3分钟
  5. 故障发生点向前推4分钟
  6. 故障发生点向前推5分钟

至关于不一样长度的时间序列打标为故障,同时取正常数据也是相同数据量的长度数据打标为正常。塞到RNN训练。get

断定的时候,每个instance的时间序列须要截成上述6种序列输入到model进行断定。即从当前时刻,向前推30秒判断;向前推1分钟判断。。。可是若是30秒断定会有故障,那么1分钟也应该断定会有故障,余此类推,这么来看,就没有必要把时间序列截成6段。这就是该方法最大的问题。io

RNN方法二

上述方法问题的根源在于标注不对,即不肯定到底应该是多长的时间序列应该标注为故障。好比有的故障对应了前面30秒,有的故障对应了前面50秒,有的对应了前面80秒等等。最理想的方案是咱们人工标注数据集,好比咱们得到了2千个故障,那么人工标注每一个故障发生前多久的时间序列为故障序列。这样的序列可能每一个长度都不同,假设有两千种长度,而后统一塞到RNN模型作训练。神经网络

断定的时候,须要根据长度种类,从当前时刻拿出对应的长度来断定,那么须要拿出多少种长度呢?须要拿出2000种长度吗?答案是不须要的。这就是RNN的强大之处,只要给定一个instance的历史序列(能够类比一篇文章),那么在任何一个位置,给定一个片断,RNN是可以记住(反应)以前序列信息的。好比abcde->1,那么给定de,RNN输出为1,不须要给定所有序列,由于de已经带了abc的信息。可是若是有另外一条序列,xyzde->0,那么给定de,RNN有50%几率给10,由于de能够表示为abcde,也能够是xyzde。所以,输入仍是越多越好。model

那么上面的故障预测问题到底怎么设计比较合适呢?这就和咱们的目标相关。目标是给定当前时刻,向前推一段时间的序列(也能够是几段序列),即当前时刻,给定n个window,断定接下来m个时间后/内(或者给定时间段)会发生故障。

按照上面的目标,咱们能够先定义预测window,即接下来多久会发生故障,好比1分钟之内。那么标注数据须要是在故障发生点1分钟前的序列。若是训练数据是多条变长的序列,那么在作inference的时候会变得很困难,由于不知道要取多久的序列好。所以最好咱们作成定长的序列,包括训练和推断。例如,咱们的目标是预测1分钟以内会发生故障,经过人工观察到2千条序列,在故障以前的异常序列有10分钟到3分钟不等。那么咱们要尝试不一样的序列窗口,例如尝试3分钟,4分钟,5分钟,一直到15分钟,看哪一个效果好用哪一个。

具体过程以下:好比尝试5分钟的序列,对于故障1:

  1. 定位故障起始时间为12:00:00
  2. 由于预测1分钟以内发生故障,所以11:59:00为序列结束时间向前推5分钟(11:54:00)的序列标注为1,该序列称之为序列0
  3. 若是以秒为单位,那么取剩下的59秒造成59个序列,标注为1:

序列1:[11:55:01, 11:59:01]->1
序列2:[11:55:02, 11:59:02]->1
序列3:[11:55:03, 11:59:03]->1
序列4:[11:55:04, 11:59:04]->1
序列5:[11:55:05, 11:59:05]->1
序列6:[11:55:06, 11:59:06]->1
序列7:[11:55:07, 11:59:07]->1
序列8:[11:55:08, 11:59:08]->1
序列9:[11:55:09, 11:59:09]->1
......
序列59:[11:55:59, 11:59:59]->1

对于故障2,故障3也作相似的标注,至关于一个故障有60比data,2000个故障有12万笔data,进行训练获得model。

inference时的时间窗口也是取5分钟,即当前时刻要预测接下来(1分钟以内)是否会发生异常,须要从当前时刻向前取5分钟的序列,输入到model获得结果。

上面的过程是尝试序列窗口为5分钟的,咱们要尝试多种序列窗口,而且必定要覆盖夸异常区间的。好比人工标注了2000个故障,发现1000个故障前的异常数据序列有3分钟,另一千个故障前面的异常序列有5分钟,那么序列窗口必定要尝试6分钟,7分钟等,即跨5分钟的序列。

相关文章
相关标签/搜索