【宽客学院】LSTM模型构建

新手专区
标签: #<Tag:0x00007fb3ee12dca8>

(小Q) #1

本文将介绍LSTM模型的原理与构建其选股模型的流程

LSTM简介

循环神经网络(RNN)

传统的神经网络是基于所有时刻的输入和输出间相互独立的假设来生成已学习数据的静态模型,并根据新接受的数据进行运算。但在很多情景中,如语音识别中预测当前的单词的含义,需要知道之前的输出结合上文语境做出判断,循环神经网络(Recurrent Neural Networks,简称 RNN)可以用于解决这类问题。
循环神经网络也被称为递归神经网络是受到人类对于近期事件会有所保留的背景而启发,循环神经网络会随着数据的输入生成动态模型
理论上,RNN可以支持无限长的时间序列,然而实际情况却没这么简单。RNN模型很容易发散,从而得不出最优解。

长短期记忆模型(LSTM)

长短期记忆模型(long-short term memory)是一种特殊的RNN模型,是为了解决RNN模型梯度弥散的问题而提出的;在传统的RNN中,训练算法使用的是BPTT,当时间比较长时,需要回传的残差会指数下降,导致网络权重更新缓慢,无法体现出RNN的长期记忆的效果,因此需要一个存储单元来存储记忆,因此LSTM模型被提出。

LSTM的流程


LSTM 的整体结构和 RNN 一样,区别在于隐含层的具体实现,LSTM 在其中加入了一个
记录当前状态的单元,这个单元的值由上一个时刻的状态和当前的输入共同决定,以此
来记录之前历史时刻的信息。
具体展开,分以下四个步骤:

  1. 过去信息的记录:由当前的输入和前一个时刻的输出,决定当前的记忆单元需要保存过去多少信息:$f_t=\sigma(W_f·[h_{t-1},x_t]+b_f)$
    激活函数 往往为 sigmoid 函数,将 映射到 0 和 1 之间的数,1 表示过去的信息全部记录,0 表示过去的信息全部舍弃。
  2. 当前信息的记录:由当前的输入和前一个时刻的输出,决定在状态单元中储存哪些新的信息,包含两个部分,一是当前的记忆单元需要保存当前多少信息,二是当前信息的表示:
    $i_t=\sigma(W_i·[h_{t-1},x_t]+b_i) $
    $ \hat{C_T}=tanh(W_c·[h_{t-1},x_t]+b_c)$
    激活函数 往往为 sigmoid 函数,将 映射到 0 和 1 之间的数,1 表示当前的信息全部记录,0 表示当前的信息全部舍弃。 为当前信息的表示,作为当前状态的候选,通过激活函数 tanh 映射得到。
  3. 当前状态:由当前的信息和过去的信息,得到当前状态:
    $ C_t=f_t*C_{t-1}+i_t *\hat{C_T} $
    这一步通过两个权重和,来决定之前信息和当前信息各保留多少,若较大则之后的模型会用到更多更远时间的信息,若较大,则之后的模型会用到更多更近时间的信息,以此避免了普通 RNN 网络结构中对较远时间点信息的遗忘。
  4. 输出结果:由上一时刻的输出、当前时刻的输入和当前状态,得到当前输出:
    $o_t = \sigma(W_o·[h_{t-1},x_t]+b_o)$
    $h_t = o_t*tanh(C_t) $

构建可视化模型

策略附在文末,有几点需要说明:

https://i.bigquant.com/user/lpl22/lab/share/LSTM%E6%9E%84%E5%BB%BA%E9%80%89%E8%82%A1%E7%AD%96%E7%95%A5-Copy1.ipynb


[量化学堂-机器学习]基于LSTM的股票价格预测模型
(youke) #2

一年就一笔交易啊???


(lpl22) #3

考虑到计算速度的问题,这里只选了一支股票作了预测。在m24模块可以调整


如果需要对多个股票预测,建议用机器学习的模型。