深度学习量化交易---0.2.基于长短时记忆网络预测股票价格1
在这一节中,我们将先向大家介绍长短时记忆网络(LSTM),然后详细讲解怎样使用长短时记忆网络(LSTM)来预测股票价格,为了避免人为因素干拢,我们还以上证综指为例来进行说明。长短时记忆网络(LSTM)股票交易数据是一种典型的时序信号,需要处理较长的时间序列,有时为了准确的进行股票价格预测,可能会需要看几周甚至几个月的历史数据,如果采用普通的多层感知器模型的话,那么要求输入层维度就非常大,整个网..
在这一节中,我们将先向大家介绍长短时记忆网络(LSTM),然后详细讲解怎样使用长短时记忆网络(LSTM)来预测股票价格,为了避免人为因素干拢,我们还以上证综指为例来进行说明。
长短时记忆网络(LSTM)
股票交易数据是一种典型的时序信号,需要处理较长的时间序列,有时为了准确的进行股票价格预测,可能会需要看几周甚至几个月的历史数据,如果采用普通的多层感知器模型的话,那么要求输入层维度就非常大,整个网络的参数就要求非常多,就非常难以训练,并且容易出现过拟合(Over Fitting)。采用长短时记忆网络(LSTM),每次仅需要输入一个时间点的数据,输入层维度低,同时网络参数少,虽然比较难以训练,但是一旦网络训练成功,就不容易出现过拟合(OverFitting)。
要理解长短时记忆网络,我们先来看普通的神经网络,如下所示:
如上图所示,输入信号从输入层经过中间的隐藏层,到达输出层,中间没有回路。
而递归神经网络(RNN)则与此不同,隐藏层除了向输出层输出外,还将自己的输出重新作为输入传输给自己,如下图所示:
如上图所示,隐藏层的输出信号,会重新作为输入信号输入给自己。为了能更好的表示这种网络,我们通常采用展开的形式,如下所示:
在t=1t=1t=1时刻,隐藏层的状态为h0h_0h0,加上t=1t=1t=1时刻的输入x1x_1x1,一起作为隐藏层在t=1t=1t=1时刻的输入,计算出隐藏层的输出值h1h_1h1,其一方面输出给上一层网络(如输出层),另一方面也会作为在t=2t=2t=2时刻的输入,与在t=2t=2t=2时刻输入信号x2x_2x2一起,作为隐藏层输入,这时又会产生在t=2t=2t=2时刻隐藏层的输出,依此类推下去,这就是普通的递归神经网络。
我们假设输入层到隐藏层的连接权值为WiW^iWi,而隐藏层到隐藏层的连接权值为WhW^hWh,在ttt时刻,递归神经网络可以表示为:
ht=fh(Wh⋅ht−1+Wi⋅xt)yt=fo(Wo⋅ht) h_t=f_h(W^h \cdot h_{t-1} + W^i \cdot x_t) \\ y_t=f_o(W^o \cdot h_t) ht=fh(Wh⋅ht−1+Wi⋅xt)yt=fo(Wo⋅ht)
在普通递归神经网络的基础上,可以形成深层递归网络和双向递归网络,原现与普通递归神经网络类似,这里就不再具体介绍了。
但是普通递归神经网络在具体使用过程中,由于只能具有短时记忆,并用会出现梯度爆炸等问题,所以在实际应用中,人们一般很少直接使用递归神经网络(RNN),而一般都使用长短时记忆网络(LSTM)或GRU,我们在量化投资中,采用长短时记忆网络。
长短时记忆网络(LSTM)
长短时记忆网络(LSTM)网络结构图如下所示:
网络由变化很慢的c和变化很快的h组成,在t=1t=1t=1时刻,隐藏层状态为c0c_0c0和h0h_0h0,与t=1t=1t=1时刻输入信号x1x_1x1一起,输入到隐藏层,隐藏层产生输出c1c_1c1和h1h_1h1。在t=2t=2t=2时刻,隐藏层状态为c1c_1c1和h1h_1h1,与t=2t=2t=2时刻输入信号一起,输入到隐藏层,产生输出为c2c_2c2和h2h_2h2,如此循环往复下去。
长短时记忆网络的逻辑图如下所示:
这是在原始Paper中画出的逻辑结构,为了更好的理解长短时记忆网络,我们通常采用一种不同的方式来表示:
长短时记忆网络(LSTM)中间层如上图所示,下面我们分步来看长短时记忆网络(LSTM)的原理:
1.由遗忘门决定丢弃信息
假设在ttt时刻隐藏层状态为ht−1\boldsymbol{h}_{t-1}ht−1,输入信号为xt\boldsymbol{x}_txt,遗忘门的连接权值为WfW_fWf,[ht−1,xt][\boldsymbol{h}_{t-1},\boldsymbol{x}_t][ht−1,xt]表示将向量ht−1\boldsymbol{h}_{t-1}ht−1和xt\boldsymbol{x}_txt连接在一起,形成一个新的向量,遗忘门的输出为一个0~1之间的数字,代表需要忘记多少以前的记忆,如下所示:
ft=σ(Wf⋅[ht−1,xt]+bf) \boldsymbol{f}_t=\sigma (W^f \cdot [\boldsymbol{h}_{t-1}, \boldsymbol{x}_t]+\boldsymbol{b}_f) ft=σ(Wf⋅[ht−1,xt]+bf)
2.输入门决定输入信号
it=σ(Wi⋅[ht−1,xt]+bi)c~t=tanh(Wc⋅[ht,xt]+bc) \boldsymbol{i}_t=\sigma(W_i \cdot [\boldsymbol{h}_{t-1}, \boldsymbol{x}_t] + \boldsymbol{b}_i) \\ \tilde{\boldsymbol{c}}_t=\tanh{(W_c \cdot [\boldsymbol{h}_t, \boldsymbol{x}_t] + \boldsymbol{b}_c)} it=σ(Wi⋅[ht−1,xt]+bi)c~t=tanh(Wc⋅[ht,xt]+bc)
3.更新长期记忆细胞状态
ct=ft⊗ct−1+it⊗c~t \boldsymbol{c}_t=\boldsymbol{f}_t \otimes \boldsymbol{c}_{t-1}+\boldsymbol{i}_t \otimes \boldsymbol{\tilde{c}}_t ct=ft⊗ct−1+it⊗c~t
4.通过输出门产生输出信号
ot=σ(Wo⋅[ht−1,xt]+bo)ht=ot⋅tanh(ct) \boldsymbol{o}_t=\sigma(W_o \cdot [\boldsymbol{h}_{t-1}, \boldsymbol{x}_t] + \boldsymbol{b}_o) \\ \boldsymbol{h}_t=\boldsymbol{o}_t \cdot \tanh{(\boldsymbol{c}_t)} ot=σ(Wo⋅[ht−1,xt]+bo)ht=ot⋅tanh(ct)
通过上述步聚,就产生了ttt时刻的状态,会传到下一个时刻,一直运行下去。
股票LSTM
上面我们详细讲解了长短时记忆网络的结构和算法,下面我们将用长短时记忆网络(LSTM)来处理股票数据。我们要实现的任务就是根据前一天某支股票的开盘价、最高价、最低价、收盘价预测第二天的价格,用预测价格与第二天实际价格的最小平方和作为代价函数。
更多推荐


所有评论(0)