RNN 模型
Recurrent Neural Network (回流神经网络,有的译做递归神经网络)
时间序列模型最常用最强大的的工具就是递归神经网络(recurrent neural network, RNN)。相比与普通神经网络的各计算结果之间相互独立的特点,RNN的每一次隐含层的计算结果都与当前输入以及上一次的隐含层结果相关。通过这种方法,RNN的计算结果便具备了记忆之前几次结果的特点。
简单来说,RNN可以通过t个历史记录预测t+1。看下图可能更容易理解它的原理
右侧为计算时便于理解记忆而产开的结构。简单说,x为输入层,o为输出层,s为隐含层,而t指第几次的计算;V,W,U为权重,其中计算第t次的隐含层状态时为St = f(U*Xt + W*St-1),实现当前输入结果与之前的计算挂钩的目的。
RNN的局限:
由于RNN模型如果需要实现长期记忆的话需要将当前的隐含态的计算与前n次的计算挂钩,即St = f(U*Xt + W1*St-1 + W2*St-2 + ... + Wn*St-n),那样的话计算量会呈指数式增长,导致模型训练的时间大幅增加,因此RNN模型一般不直接用来进行长期记忆计算。另外,传统RNN处理不了长期依赖问题,这是个致命伤。
其他关于RNN评价的概括总结:
现实中的RNN因为层次较深,比较难优化,单纯的BPTT(back-propagation through time)容易出现问题。
对于时间序列的模型中,在非线性模型这一块, 应该就是RNN, 它是表达能力很强的一个模型. 但是RNN的training比较困难, 同时RNN的参数选择(layer, activation function, hidden neuron, learning rate)都难以优化.
对于纯粹时间序列预测,目前最理想的方法应该就是RNN及其变体了。标准的RNN要达到好的效果会比较难训练,目前它的带记忆的变体,比如LSTM(long-short term memory)和GRU(gated recurrent unit)都非常热门。进一步的,这些模型还可以和其它神经网络模型组合,比如在LSTM下面堆叠若干层的CNN等等,这样基本上就是目前深度学习(deep learning)中常见的处理时间序列最好的模型了。当然这也要配置和训练得当才能得到好的效果(包括数据预处理、恰当的参数等)。
LSTM 模型
LSTM(Long Short-Term Memory)模型是一种RNN的变型
简单来说,这个模型相对于RNN的改进就是:既要提取有用的记忆信息,又要去除没用的记忆信息。通过下图容易理解
演示了阀门是如何工作的:通过阀门控制使序列第1的输入的变量影响到了序列第4,6的的变量计算结果。
黑色实心圆代表对该节点的计算结果输出到下一层或下一次计算;空心圆则表示该节点的计算结果没有输入到网络或者没有从上一次收到信号。