深度学习之LSTM时序预测入门指南:从原理到实战
一、LSTM核心原理:让机器学会“选择性记忆”
1. 为什么LSTM适合时序预测?
传统神经网络(如全连接层)无法捕捉时间序列的先后依赖,而LSTM作为循环神经网络(RNN)的改进版,通过门控机制解决了梯度消失问题,能有效记忆长期依赖。
- 场景举例:预测明日股价时,LSTM可选择性记住“30天前的大涨”,忽略“昨日的小幅波动”。
2. 三个“门”掌控信息流动
LSTM通过三个“门”实现对信息的筛选与控制:
- 遗忘门(Forget Gate):决定丢弃哪些旧信息(如短期噪声)。
- 输入门(Input Gate):选择接纳哪些新信息(如突破关键均线的信号)。
- 输出门(Output Gate):控制输出用于预测的信息(如收益率的非线性组合)。
二、数据预处理:构建LSTM可识别的“时光窗口”
1. 三维数据结构(核心输入格式)
LSTM要求输入数据为 [样本数, 时间步长, 特征数]
的三维张量:
- 示例:用过去60天数据预测第61天股价,时间步长=60,特征包含收盘价、5日均线、10日均线、波动率(共4个特征),则单个样本形状为
(60, 4)
。 - 意义:时间步长决定模型“记忆力”,需平衡短期波动与长期趋势(如60天适合捕捉中短期模式)。
2. 滚动窗口标准化(避免未来信息泄漏)
- 传统陷阱:全局标准化(用全部数据算均值/标准差)会“偷看”未来数据,导致回测结果虚高。
- 正确方法:用过去N天数据(如60天)动态计算当前标准化值,模拟实时数据流:
z t = x t − μ t − 60 : t σ t − 60 : t z_t = \frac{x_t - \mu_{t-60:t}}{\sigma_{t-60:t}} zt=σt−60:txt−μt−60:t
其中, μ \mu μ 为窗口均值, σ \sigma σ 为窗口标准差,确保每个时间点的预处理仅依赖历史数据。
三、LSTM单元结构详解:从数学公式到代码实现
1. 门控机制的数学表达
LSTM的核心是通过 三个门控单元 控制信息流动,其内部计算过程可用以下公式严格描述:
i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) (输入门) f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) (遗忘门) g t = tanh ( W g ⋅ [ h t − 1 , x t ] + b g ) (候选记忆) o t = σ ( W o ⋅ [ h t − 1 , x t ] + b o ) (输出门) c t = f t ⊙ c t − 1 + i t ⊙ g t (细胞状态更新) h t = o t ⊙ tanh ( c t ) (隐藏状态输出) \begin{aligned} i_t &= \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) \quad \text{(输入门)} \\ f_t &= \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) \quad \text{(遗忘门)} \\ g_t &= \tanh(W_g \cdot [h_{t-1}, x_t] + b_g) \quad \text{(候选记忆)} \\ o_t &= \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) \quad \text{(输出门)} \\ c_t &= f_t \odot c_{t-1} + i_t \odot g_t \quad \text{(细胞状态更新)} \\ h_t &= o_t \odot \tanh(c_t) \quad \text{(隐藏状态输出)} \end{aligned} itftgtotctht=σ(Wi⋅[ht−1,xt]+bi)(输入门)=σ(Wf⋅[ht−1,xt]+bf)(遗忘门)=tanh(Wg⋅