Python 股指期货高频数据机器学习预测( 三 )


模型探索 基于LSTM的RNN模型
这个模型是我所实现最优的模型 , 采取这个模型的主要原因是基于LSTM的RNN模型具有很好的处理时间序列的能力 。
递归神经网络(RNN)
循环神经网络( , RNN)是一类具有短期记忆能力的神经网络 。在循环神经网络中 , 神经元不但可以接受其它神经元的信息 , 也可以接受自身的信息 , 形成具有环路的网络结构 。和前馈神经网络相比 , 循环神经网络更加符合生物神经网络的结构 。循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上 。循环神经网络的参数学习可以通过随时间反向传播算法 [, 1990] 来学习 。随时间反向传播算法即按照时间的逆序将错误信息一步步地往前传递 。当输入序列比较长时 , 会存在梯度爆炸和消失问题[ et al., 1994,and , 1997,al., 2001] , 也称为长期依赖问题 。为了解决这个问题 , 人们对循环神经网络进行了很多的改进 , 其中最有效的改进方式引入门控机制 。
长短期记忆(LSTM)网络
长短期记忆(long short-term  , LSTM)网络 [Gers et al., 2000,and , 1997]是循环神经网络的一个变体 , 可以有效地解 决简单循环神经网络的梯度爆炸或消失问题 。在公式(6.48)的基础上 , LSTM网络主要改进在以下两个方面:新的内部状态 LSTM网络引入一个新的内部状态( state)ct专门进行线性的循环信息传递 , 同时(非线性)输出信息给隐藏层的外部状态ht 。
在每个时刻t , LSTM网络的内部状态ct记录了到当前时刻为止的历史信息 。
循环神经网络中的隐状态h存储了历史信息 , 可以看作是一种记忆() 。在简单循环网络中 , 隐状态每个时刻都会被重写 , 因此可以看作是一种短期记忆(short-term ) 。在神经网络中 , 长期记忆(long-term )可以看作是网络参数 , 隐含了从训练数据中学到的经验 , 并更新周期要远远慢于短期记忆 。而在LSTM网络中 , 记忆单元c可以在某个时刻捕捉到某个关键信息 , 并有能力将此关键信息保存一定的时间间隔 。记忆单元c中保存信息的生命周期要长于短期记忆h , 但又远远短于长期记忆 , 因此称为长的短期记忆(long short-term )
模型实现
利用Keras框架 , 实现基于LSTM的RNN模型 。具体结构为两层LSTM网络和两层Dense层网络 。试图利用LSTM网络提取时间序列中的特征信息 , 并利用Dense层将提取出的特征信息进行回归 。
model = Sequential()model.add(LSTM(units=256, input_shape=(None, nFeature), dropout=0.5, return_sequences=True))model.add(LSTM(units=256, dropout=0.5, return_sequences=False))model.add(Dense(64, activation='relu'))model.add(Dropout(0.5))model.add(Dense(1, kernel_initializer="uniform", activation='linear'))model.compile(loss='mse', optimizer='Adam')
在这个较大的模型中 , 为了防止过拟合训练集和验证集 , 我采取了以下的措施:
在全连接(Dense)层和LSTM层中 , 加入 。在训练中 , 掉近似50%的参数 , 可以将网络模型减小至一半 。在实验发现 , 减小至该网络一半的网络更不容易出现过拟合的情况(下文中会详细说明) 。
提前结束训练(Early-) 。在两个相同的网络中 , 改变MN(即)的值 , 得到如下的测试集RMSE~ 。由此可见 , Early-是非常有必要的 。