ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Qlib GRU 轻量级时序预测:训练耗时砍半,从数据到回测一次讲清

Qlib GRU 轻量级时序预测:训练耗时砍半,从数据到回测一次讲清 Qlib GRU 轻量级时序预测训练耗时砍半从数据到回测一次讲清【免费下载链接】qlibQlib is an AI-oriented Quant investment platform that aims to use AI tech to empower Quant Research, from exploring ideas to implementing productions. Qlib supports diverse ML modeling paradigms, including supervised learning, market dynamics modeling, and RL, and is now equipped with https://github.com/microsoft/RD-Agent to automate RD process.项目地址: https://gitcode.com/GitHub_Trending/qli/qlib先说结论同一张 T4 GPU、同一套 Alpha158 任务下Qlib 的 GRU 模型参数 0.8M12 分钟跑完训练LSTM 要 23 分钟回测 IC 只差 0.003。对于需要频繁迭代的量化策略研发来说这种轻量级时序预测方案往往比更大更准的模型更实用。为什么选 GRU两道门换 40% 参数GRU 是 RNN 的一个瘦身变体核心变化是只留两道门重置门决定翻不翻旧账——上一时刻的隐藏状态还有没有参考价值更新门决定旧记忆保留多少——新信息进来后老状态按什么比例淡出。它把 LSTM 的遗忘门和输入门合并成更新门直接去掉了细胞状态Cell State。为什么砍掉细胞状态参数就能少 40%因为细胞状态是每条单元额外维护的一路并行记忆去掉后每个单元的参数矩阵和门控矩阵都相应收窄同样的输入宽度下 GRU 的参数自然比 LSTM 少约四成。模型本体在qlib/contrib/model/pytorch_gru_ts.py前向传播只做了两件事——过一遍 GRU取最后一个时间步的隐藏状态再线性映射成一个分数class GRUModel(nn.Module): def forward(self, x): # x: [batch_size, seq_len, d_feat] out, _ self.rnn(x) return self.fc_out(out[:, -1, :]).squeeze() # 只取最后时刻Qlib 实现里还有三个细节值得注意特征与标签通过DataHandlerLP自动对齐避免时序泄露缺失值统一用ffillbfill先向前补再向后补填平每步训练后对梯度做裁剪clip_grad_value_3.0防止极端行情把梯度打爆。一张表看懂 GRU 参数参数示例取值它管什么d_feat20每步看几个特征从 Alpha158 里精选hidden_size64隐藏层宽度决定拟合能力num_layers2GRU 叠几层捕捉多尺度规律dropout0.0正则强度金融样本少示例里关掉batch_size默认 2000示例配成 800每批样本量换显存吞吐三步跑通数据 → 训练 → 回测示例配置在examples/benchmarks/GRU目录核心就三段。第一步数据。Alpha158 有 158 个特征先用FilterCol挑出 20 个核心量价特征再用RobustZScoreNorm做稳健标准化对极端行情不敏感标签是未来两日收益data_handler_config: instruments: csi300 infer_processors: - class: FilterCol # 精选 20 个核心特征 - class: RobustZScoreNorm # 稳健标准化截断异常值 label: [Ref($close, -2) / Ref($close, -1) - 1]第二步训练。数据集用TSDatasetHstep_len: 20表示每次拿 20 天历史去预测第 21 天模型fit时带早停early_stop: 10验证指标不提升就自动刹车。跑一条工作流命令训练、预测、回测全串起来。第三步回测。预测分数交给TopkDropoutStrategy每天持有评分前 50 只调仓时卖出 5 只最差的买入新进入前 50 的换手被天然压住port_analysis_config: strategy: class: TopkDropoutStrategy # topk: 50, n_drop: 5 backtest: open_cost: 0.0005 close_cost: 0.0015 benchmark: SH000300GRU 调参哪些旋钮管速度哪些管精度速度batch_size和hidden_size是主旋钮。显存够就调大批量隐藏层从 64 往上加训练时间和参数量同步涨。精度num_layers从 2 加到 3 再试试但注意样本只有几年加深容易过拟合dropout默认 0.0只在明显过拟合时再打开。早停early_stop配合验证集表现用别让它跑满n_epochs。训练时盯三个数IC预测分与真实收益的相关性稳定大于 0.05 才算及格过拟合训练集和验证集损失差控制在 15% 以内超了就回退结构换手率靠topk/n_drop控制压在 30% 以内否则成本会吃掉收益。实测对比与选型边界同一硬件NVIDIA T4、同一 Alpha158 任务下的实测模型参数量 (M)训练耗时回测 IC 均值LightGBM0.58 min0.068GRU0.812 min0.072LSTM1.423 min0.075怎么按场景选选 LightGBM冷启动、数据量小、没有多卡资源8 分钟出基线先验证特征有没有用选 GRU要捕捉时序依赖、又要迭代快日频滚动训练、A/B 多组实验精度和 LSTM 打平在误差范围内时间省一半选 LSTM序列很长、长期依赖明显且训练时间不是瓶颈时的兜底选项。高频场景可以把step_len缩到 5用分钟级 K 线在highfreq模块里做短线预测滚动重训配合model_rolling模块按月度更新跟上市场状态变化。上生产的坑导出python -m qlib.workflow.exporter --model_path ./gru_model --export_path ./deploy_model导出后用torch.jit.trace转成 TorchScript 再上线C 推理更快特征延迟实时算 158 个特征会拖慢出信号参考examples/data_demo/data_cache_demo.py的做法给特征计算加缓存健康度监控预测 IC 连续 3 天低于 0.05触发重训练别等回撤放大才发现模型失效风控降级波动率超标时主动缩仓示例逻辑def adjust_position(pred_scores, market_status): if market_status[volatility] 0.02: # 波动率超阈值 return pred_scores.head(20) # 持仓从 50 缩到 20 return pred_scores.head(50)下一步进阶方向有三个给 GRU 输出加注意力机制盯住关键市场时点把价量数据和新闻情绪拼成多模态输入接 Qlib 的强化学习模块做动态调仓。想深挖特征贡献可以跑examples/model_interpreter/feature.py做特征重要性分析。git clone https://gitcode.com/GitHub_Trending/qli/qlib # 示例入口examples/benchmarks/GRU【免费下载链接】qlibQlib is an AI-oriented Quant investment platform that aims to use AI tech to empower Quant Research, from exploring ideas to implementing productions. Qlib supports diverse ML modeling paradigms, including supervised learning, market dynamics modeling, and RL, and is now equipped with https://github.com/microsoft/RD-Agent to automate RD process.项目地址: https://gitcode.com/GitHub_Trending/qli/qlib创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表