|
|
1
dedObed
6 年前
关于您当前方法的说明
使用MSE进行训练相当于在模型给定的具有固定方差和均值的高斯分布下优化数据的可能性。因此,您已经在培训自动编码器,尽管您没有这样制定它。
关于你所做的事情
-
你没有给LSTM一个机会
由于您只提供过去24小时的数据,LSTM不可能了解每周模式。
它最多可以了解到该值应该与24小时前的值相似(虽然这不太可能,请参见下一点),然后使用Fri-Sat和Sun-Mon数据将其打破。从LSTM的角度来看,你的假期“异常”与你在训练期间提供的周末数据几乎相同。
因此,您首先需要在学习期间提供更长的上下文(我假设您在测试期间打开了隐藏状态)。
-
即使你给它一个机会,它也不会在乎
假设您的数据确实遵循一种简单的模式——在工作时间内和仅在工作时间内具有高值,再加上一些较小规模的变化——LSTM不需要对大多数数据点有任何长期的了解。投入我所有的人类想象力,我只能想象LSTM在工作时间开始时会从长期依赖中受益,所以只需96个样本中的一个或两个。
因此,即使点处的损失值希望通过>7*96时间步为了了解您的每周模式,还有7*95个其他损失条款可能会防止LSTM偏离当前的局部最优值。
因此
可能有帮助
在工作时间开始时对样品进行更多称重,以便相应的损失能够实际影响远古时期的表现。
-
你的解决方案是件好事
很难在一个模型中对多个尺度的序列进行建模。即使是你,作为一个人,也需要“缩小”来判断更长的趋势——这就是为什么所有华尔街人都有月/周/日/时/。。。观察其股价的图表。这种多尺度建模对于RNN来说尤其困难,因为它需要始终以相同的权重处理所有信息。
如果您真的想在模型上了解所有内容,那么使用某种时间卷积的深度前馈架构可能会更成功,例如。
TDNNs
,则,
Residual Memory Networks
(免责声明:我是作者之一。),或者是最近的一种架构来统治他们,
WaveNet
。由于它们跳过了较长时间上下文的连接,并在不同级别应用了不同的转换,因此它们有更好的机会发现和利用这种意外的长期依赖关系。
GitHub上有Keras中WaveNet的实现,例如:。
1
或
2
.我没有和他们一起玩(实际上我很久以前就离开了Keras),但特别是第二个似乎很容易,因为
AtrousConvolution1D
。
如果你想留在RNNs,
Clockwork RNN
可能是适合您需要的模型。
关于您可能需要考虑的问题
-
那么有两种数据分布吗?
这个有点哲学。
你目前的方法表明,你坚信有两种不同的设置:工作时间和休息时间。您甚至可以根据它更改部分模型(高斯)。
因此,可能您的数据实际上来自两个分布
因此,您应该培训两个模型
并酌情在它们之间切换?
考虑到你告诉我们的,我实际上会选择这个(理论上有一个健全的系统)。你不能指望你的LSTM知道12月25日会有低值。或者有一个最后期限,而这个周末只包括工作时间。
-
或者异常有两种定义?
还有一个哲学观点。也许您个人会考虑两种不同类型的异常:
奇怪的时间轨迹,意想不到的峰值,振荡,任何在你的领域中不寻常的东西。你的LSTM应该已经处理好了。
然后,有不同的异常概念:特定时间间隔内的特定界限值。也许从时间到价值的简单线性回归/小MLP在这里就可以了?
-
让NN完成所有工作
目前,您可以通过两个步骤有效地建模数量分布:首先,LSTM提供平均值。其次,提供方差。
相反,你可以让你的神经网络(加上另外2个仿射变换)通过产生其均值和方差,直接为你提供一个完整的高斯分布;很像变分自动编码器(
https://arxiv.org/pdf/1312.6114.pdf
,附录C.2)。然后,您需要在NN分布下直接优化后续样本的可能性,而不仅仅是样本和NN输出之间的MSE。
这将允许您的模型告诉您何时对以下值非常严格,何时“任何”样本都可以。
请注意,您可以进一步采用这种方法,并让您的NN生成“任何”合适的分布。E、 g.如果您的数据存在于一个有限的域中/可以合理地转换为一个有限的域,那么您可以尝试通过在输出上设置Softmax来在该空间上生成分类分布,就像WaveNet一样(
https://arxiv.org/pdf/1609.03499.pdf
,第2.2节)。
|