首页 / 前沿算法
深度学习
在量化策略开发中的应用
我们把前沿算法当作工具而非信仰:它扩展了可以表达的市场规律,也同时放大了过拟合的风险。这一页说明它在流水线的哪些位置真正起作用,以及我们如何约束它。
01 / 为什么
线性因子的边界在哪里
线性模型的假设
传统多因子模型把收益写成因子暴露的线性组合:估计稳定、可解释、对数据要求低。但它隐含假设——因子之间、因子与收益之间的关系是线性的,且不随市场状态改变。
现实是状态依赖的
同一个动量信号,在趋势市与震荡市的效果可能相反;同一组价值因子,在流动性宽松与紧缩阶段的表现也不同。这种“状态依赖”用固定系数的线性模型很难表达。
深度学习带来的三件事
其一,非线性与交互项可由模型自行学习;其二,表示学习——从原始量价序列直接学出状态向量,减少人工特征设计引入的先验偏差;其三,为端到端优化组合目标留出可能。
但请把它放在正确的位置
深度学习不是“更强的线性回归”。金融数据的信噪比极低、有效样本受历史长度限制、分布随时间漂移——模型容量越大,越容易把噪声当成规律记住。所以我们的立场是:容量必须被约束,任何进入实盘的模型都要先通过可解释性检验与多重健壮性确认。
02 / 应用地图
深度学习在流水线的五个落点
- 数据层用模型做缺失值填补与异常检测,比简单插值更能保留尾部信息;多频级数据(Tick 至月频)在时间轴上的对齐,是后续一切工作的前提。
- 表示层把高维原始序列压缩为低维状态向量。这一步的价值在于减少人工特征的设计偏差——研究员不必预先决定“什么形态重要”,模型自己在训练中学。
- 预测层时序模型看单一标的的历史路径,截面模型看同一时点的横截面关系。输出通常是收益分布的分位数而非单点预测,因为组合优化真正需要的是不确定性。
- 组合层用深度模型估计时变协方差,或把预测层接入可微分优化层,让模型直接对组合目标求导。
- 执行层强化学习在这类“动作空间清晰、反馈快”的问题上相对成熟,用于拆单与择时以降低冲击成本。
03 / 注意力机制
让模型自己决定“看哪些历史”
循环神经网络(RNN / LSTM)按固定顺序把历史压缩进一个隐状态,距离越远的信息衰减越严重。自注意力机制换了一种做法:在每个时点,模型直接对全部历史时点做加权求和,权重由当前状态与历史状态的相关性决定——看谁、看多重,由模型学出来。
多头注意力让不同的“头”可以分别关注不同频率与尺度的模式;位置编码则负责保留时序顺序,否则注意力本身是对顺序不敏感的。
对金融场景而言,有一件事是硬约束:模型在 t 时点只能使用 s ≤ t 的信息。这靠因果掩码(causal mask)强制实现。下面的方格图把这件事拆成两个可调的维度:上方的开关决定是否屏蔽未来,左侧的滑块决定允许回看多少步历史——前者是合规问题,后者是建模选择。把开关切到「全注意力」,上三角会亮起橙色,那 66 格就是未来信息,回测里出现它会让指标系统性失真。
因果掩码 vs 全注意力
ROWS = 预测时点 t · COLS = 输入时点 s
注意力对做投资的人意味着什么
- 可归因:注意力权重天然回答了“模型在看什么”,比黑箱模型更容易做投后复盘
- 可校验:如果某个头总是盯住财报发布日这类可解释事件,我们对它的信任度会更高
- 可对比:注意力分布随时间的变化本身就是一个监控指标——分布突变往往先于表现下滑
照搬 NLP 的做法会水土不服
- 金融序列信噪比极低,大容量 Transformer 极易过拟合
- 常见处理:降低模型容量、限制上下文长度、引入时间卷积与分块(patch)
- 加入门控结构,让模型可以主动选择“不使用注意力”
- 预测目标改为分位数或方向概率,而非单点收益率
首页的多资产注意力矩阵,正是这一机制的示意:不同资产与因子之间的权重,就是模型在做截面判断时的“关注对象”。
04 / 工程纪律
比模型结构更重要的是验证方式
时序切分,而非随机切分
训练、验证、测试必须沿时间轴切分并滚动前移(walk-forward)。随机打乱样本会让模型“见过”未来,得到的回测指标没有意义。
清退与禁运期
当标签本身跨越一段时间窗口时,训练样本的标签可能与验证样本的输入重叠。做法是清退(purge)边界样本,并在验证集前后各留出一段禁运期(embargo)。
标准化必须滚动计算
用全样本的均值与方差做标准化,等于把未来信息注入每一条历史样本。所有滚动统计量只能由该时点之前的数据算出。
给超参搜索设预算
搜索次数越多,“最优”结果越可能只是噪声。我们记录每一次搜索的结果分布,只看模型是否在一个宽参数区间内稳定,而不是看峰值。
多重健壮性确认
针对调仓日、因子计算窗口、资产池变动等随机扰动,核心评估指标不应发生显著变化。稳健的模型不该受超参数的过度扰动,这是有效性的最基本假设。
上线后仍然在验证
监控因子衰减、预测分布漂移、特征缺失率,以及模型输出与实际执行之间的差异;为每一项设定阈值与回滚机制,而不是等结果变差再介入。
05 / 常见误区
回测很好、实盘很差的六个原因
| 误区 | 它如何骗过回测 | 我们的检查项 |
|---|---|---|
| 未来函数 | 特征或标签用到了当时不可得的数据(含延迟披露的财务数据) | 因果掩码 + 数据可得性时间戳 |
| 幸存者偏差 | 只用“今天还在”的标的构建历史样本,退市与违约样本被系统性剔除 | 样本池按历史时点重建 |
| 隐式前视 | 标准化、缺失值填补、样本筛选用到全样本统计量 | 所有统计量滚动计算 |
| 随机切分 | 相邻样本高度相关,验证集信息泄漏进训练集 | 时序切分 + 清退 + 禁运期 |
| 过度搜索 | 在回测指标上反复调参,最终选中一个偶然的好结果 | 参数鲁棒性测试 + 搜索预算 |
| 忽视成本与容量 | 只看毛收益,忽略换手、冲击成本与策略容量上限 | 净额回测 + 容量约束 |
06 / 工程
算力决定可以探索多大的空间
算法与算力双轮驱动
通过并行计算能力,把模型框架、参数与超参数的探索空间成几何级数扩展。很多想法不是不成立,而是没有算力去验证。
特征平台与一致性
一次计算、多处复用。训练与推理使用同一套特征代码,避免 train-serving 不一致——这是线上表现与回测背离的隐藏原因之一。
模型注册与灰度
每个模型记录版本、训练数据区间、评估指标与上线状态。上线走影子模式 → 小仓位 → 全量,任何一步异常即回滚。
07 / 边界
我们知道它做不到什么
深度学习擅长在历史出现过的模式中做插值,不擅长在从未出现过的情形中做外推。制度变化、政策转向、极端流动性事件——这些样本在训练数据里几乎不存在,模型无法从数据中学到应对策略。因此,越复杂的模型,越需要人工风控的兜底:仓位上限、品类敞口上限、以及预先设定的熔断规则,都不交给模型决定。
我们内部有一条硬性要求:每个进入实盘的模型都必须能回答“为什么”。能给出因子贡献、能指出它在看哪些时点、能说清风险暴露逻辑的模型才被允许上线;不能回答的模型,即使回测指标漂亮,也不会进入实盘。
说明
本页为研究方法与工程实践的一般性说明,不涉及任何模型参数、因子明细、信号构成或业绩数据,不构成投资建议,亦不构成对任何基金产品的宣传推介。