我们为什么需要循环神经网络(RNN)?
序列是相互依赖的数据流,即前面的输入和后面的输入是有关系的。比如时间序列数据、信息性的字符串等。比如股市数据这样的时间序列数据,单个数据表示当前价格,但是全天的数据会有不一样的变化,促使我们作出买进或卖出的决定。
RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络。利用它内部的记忆来处理任意时序的输入序列,它不仅考虑前一时刻的输入,而且赋予了网络对前面的内容的一种'记忆'功能。 即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。
普通的神经网络(ANN)只能单独处理一个个的输入,前一个输入和后一个输入是完全没有任何关联。ANN 接受输入,然后基于训练好的模型输出。如果你运行了 100 个不同的输入,它们中的任何一个输出都不会受之前输出的影响。所以你需要有一些基于之前输出的偏向。这就是需要循环神经网络(RNN)的地方,RNN 对之前发生在数据序列中的事是有一定记忆的。这有助于系统获取上下游的数据。理论上讲,RNN 有记忆能力,这意味着它们有回顾能力,通过回顾可以了解所有之前的输入。
图1. RNN的正向传播结构
工业生产中有很多任务需要神经网络能够更好的处理序列信息,例如股市的横盘数据,如果更早之前是一路下跌之后横盘,则表示有很大概率反弹,如果是一路上涨之后横盘,则有很大可能下跌。同样的横盘数据会有不同的预测结果。在时间序列模型里,我们不但要参考上个时刻的值,还要参考上上个时刻乃至更早的值来预测结果。 所以为了解决一些这样类似的问题,能够更好的处理序列的信息,RNN 就诞生了。RNN 无疑是深度学习的主要内容之一,它允许神经网络处理序列数据。 它们可以用于将序列编码至不同层级的理解(抽象层次不同的知识表示)、标注序列,甚至从头开始生成新序列。 RNN 在机器翻译、语音识别、视频处理以及金融领域已经有了很多应用。
氢气管网压力预测
现实情况里,对于管网压力的预测,当我们想预测一段时间之后的管网压力时,仅仅了解此时此刻的管网各个接口的流量是不够的,此刻以及之前几个时刻的压力信息对于压力预测也有很大的影响,不同的装置对于特定点位的压力影响所呈现出的时间差也不同,比如产氢量如果处于上升趋势之中而耗氢流量是稳定的,那么很显然压力上升的概率就会远大于压力下降的概率。所以我们需要处理由这些流量信息连接起来的整个序列。可能存在的造成管网压力波动的原因:
- 制氢原料组成的波动;
- 装置的加工负荷波动造成新氢消耗的波动;
- 制氢厂的操作负荷改动操作存在滞后性。
由于管网有存储气体的能力,所以管网需要在某些调整操作进行一段时间之后才会逐渐显示出变化,不同的氢气源头和耗氢装置由于物理位置上的区别对于管网压力的滞后性和影响力上彼此之间有所区别,导致想单纯的借助实时检测的数据进行压力检测是一件很难的事情。我们假定制氢厂原料组成变化带来的影响最终也会表现到氢气产量上,这样三个问题在管网上的体现都可以单纯的表现为产量和消耗量之间的关系,所以模型的输入和输出为:
输入:
输出:
在处理这个问题是我们采用的是一种特殊的RNN,长短期记忆网络(Long-Short-Term-Memory,LSTM),一种的性能更好的循环神经网络。能够学习并区分各种特征的长期和短期的特性。所以对于氢气管网压力数据集,各个特征在时间上有先后之分,所以采用LSTM网络进行训练更为合适。
LSTM介绍
图2. 循环神经网络
LSTM对于RNN最主要的改进之处,就是把神经网络层中对信息的处理变得更加复杂、精细了,解决了RNN中的梯度消失问题。LSTM采用的具体方式是引入逻辑门的限制,通过这些门来控制LSTM的信息传输量。其中,f代表遗忘门(forget gate),i代表输入门(input gate),o代表输出门(output gate)。上层在传输的过程中,只与这些门限的值进行数值变换,而不用跟整个网络参数W进行矩阵相乘,这样就避免了RNN回传梯度时可能发生的梯度爆炸或梯度消失的问题。
图3. LSTM的内部结构
在数据模型中,采用2两LSTM,每层64个隐藏节点方式,损失函数采用均方损失函数。在训练过程中,针对不同时间点进行预测。
压力的模型预测
首先对数据进行建模之前,需要进行数据处理和特征工程:
- 对数据进行筛选,剔除异常样本;
- 统一时间戳及数据类型,包括数值型/类别型/日期型/文本型特征的数据类型处理;
- 对于缺失值进行删除或采用某些方法进行填充;
- 根据相关经验指导下采用相关性校验以删除不重要的数据特征;
- 对数据进行滤波处理,去除干扰;
- 对数据进行归一化。
将以一分钟为间隔,一星期的管网压力波动数据输入模型进行训练之后,预测结果如下:
图4. 时间延迟5分钟时的预测结果
图5. 时间延迟15分钟时的预测结果
图6. 时间延迟25分钟时的预测结果
图7. 时间延迟50分钟时的预测结果
图8. 时间延迟100分钟时的预测结果
表1. 不同时间延迟下的数据集均方误差,单位MPa
Delay为输入模型的最新数据与所预测时间点的时间差,可以发现随着时间延迟的提高预测效果会逐渐下降,因为网络不知道这段延迟内会发生什么,在延迟时间内进行的任何操作都会影响最终的结果,所以延迟是逐渐提高的。
当不同的时长的模型合作进行预测时,我们就可以得到实时动态的的压力预测模型,它可以对即时发生的动作进行反馈。
图9. 动态模型的预测效果示意图