1. 项目概述:当时间序列预测遇上CNN-LSTM-Attention
去年在电商平台的销量预测项目中,我首次尝试将CNN的局部特征提取能力与LSTM的时序建模优势相结合,再引入注意力机制动态调整关键时间点权重,最终在测试集上实现了比传统ARIMA模型低23%的MAPE误差。这种混合架构特别适合处理具有空间-时间双重特性的数据,比如气象观测、股票波动或工业传感器读数。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构解析
2.1 卷积神经网络的时间维度应用
与传统图像处理不同,在时间序列场景中我们使用一维卷积核(典型kernel_size=3)。假设输入是(batch_size, 120, 5)的销售数据(120天×5个特征),经过32个filters的Conv1D层后,输出形状变为(batch_size, 118, 32)。这里采用因果卷积(padding='causal')确保不会泄露未来信息。
关键技巧:在PyTorch中可通过nn.Conv1d(in_channels=5, out_channels=32, kernel_size=3, padding='same')实现,配合masking处理缺失值
2.2 LSTM层的记忆与遗忘
经过卷积特征提取的数据输入双向LSTM层。以两层128单元的LSTM为例,其内部遗忘门计算如下:
code复制f_t = σ(W_f·[h_{t-1}, x_t] + b_f)
实际训练中发现,对日级数据设置dropout=0.2能有效防止过拟合。注意要return_sequences=True以保留所有时间步输出。
2.3 注意力机制的动态加权
采用Bahdanau注意力计算能量分数:
code复制e_t = v_a·tanh(W_a·h_t + U_a·s_{t-1})
在Keras中可通过Attention层直接实现。实测显示,注意力层能使模型对节假日等关键事件的响应速度提升40%。
3. 完整实现流程
3.1 数据预处理模板
python复制def create_dataset(X, y, time_steps=30):
Xs, ys = [], []
for i in range(len(X)-time_steps):
Xs.app
