精华帖子

基于DNN深度学习网络的选股策略

由bq20kttn创建,最终由bq20kttn 被浏览 22 用户

一、深度学习

深度学习是机器学习的一个重要分支,其本质是通过层级化的神经网络结构自动学习数据的多层级表征,从而挖掘数据背后的复杂规律。与传统机器学习依赖人工特征工程不同,深度学习实现了端到端的特征学习,能够从原始数据中自主提取从低级到高级的抽象特征,这一特性使其在金融、图像、自然语言处理等复杂数据场景中展现出显著优势。

二、深度神经网络(DNN)的基本原理

深度神经网络是一种模拟人脑神经网络结构和功能的计算模型。其基本单元是神经元,每个神经元接收来自其他神经元的输入,通过调整权重来改变输入对神经元的影响。神经网络通过多层的非线性隐藏层,可以实现对复杂函数的逼近,达到万能近似的效果。

在DNN中,数据从输入层开始,经过隐藏层的逐层计算,最终到达输出层。每一层神经元的输出都作为下一层神经元的输入,通过激活函数实现非线性变换。DNN的训练过程依赖于反向传播算法和梯度下降算法,通过计算输出层与真实标签之间的误差,并将误差反向传播到每一层神经元,更新神经元的权重和偏置项,以最小化预测误差。


1.权重和偏置

层与层之间是全连接的,也就是说,第i层的任意一个神经元一定与第i+1层的任意一个神经元相连,存在一个线性关系:

w是线性关系系数,即权重。b是偏倚参数。

model = DNN(98) # 指定输入维度为 98,此时模型会初始化各全连接层的权重和偏置参数,等待训练优化

2.激活函数:\nReLU的主要作用是引入非线性,使神经网络能够学习复杂的特征和关系。如果没有激活函数,网络的层与层之间仅是线性变换的堆叠,最终等效于一个线性模型,无法解决复杂任务。ReLU通过将负值置零,正值保持不变,赋予网络非线性能力,从而能够逼近任意复杂函数。

self.relu = nn.ReLU()

3.正则化技术:

L1和L2正则化用于防止过拟合,通过对权重施加惩罚项来约束模型复杂度。

Dropout是另一种常用的正则化手段,它随机“丢弃”一部分神经元的输出,有助于提高模型泛化能力。

self.dropout = nn.Dropout(0.1) # 随机屏蔽 10% 的神经元输出,防止模型对训练数据的过拟合

4.损失函数与优化目标:

深度神经网络通常使用交叉熵损失(对于分类任务)或均方误差损失(对于回归任务)等作为损失函数,衡量模型预测与实际标签之间的差距。

优化目标是通过调整网络权重和偏置参数来最小化损失函数。

criterion = nn.MSELoss()

5.反向传播算法

反向传播是训练DNN的核心算法,它基于链式法则计算网络中每个参数对于总损失函数的梯度。

通过前向传播计算预测输出后,反向传播从输出层开始逐层往回计算梯度,并更新所有权重和偏置,使得损失函数朝着更低的方向移动。

6.优化器的选择与使用:

神经网络迭代优化的原理是按批进行反向传导进而得到梯度的估计值,而后在学习率的控制下指导模型参数的迭代,以期达到最低的损失函数。

更先进的优化算法如Adam、RMSProp、Adagrad等考虑了梯度的历史信息,对梯度进行了适应性调整,以实现更快的收敛速度和更好的性能。

本文优化器设置为Adam,主要原因在学习率自适应: 学习率过低会使得收敛速度低下,需增加epoch数量,并且难以跳出局部最优;而学习率过大会使得模型无法收敛,或者持续性地跳出最优解。Adam优化器拥有自适应调整学习率的能力,因此本报告无需在学习率上做太多调整。 而自适应优化器会随着学习的进展,让学习率将慢慢衰减,使得模型能缓和地得落在最优点上。

optimizer = optim.Adam(model.parameters(), lr=0.001)

lr=0.001:学习率,控制参数更新的步长,决定模型收敛的速度和效果。

三、策略步骤

1.因子构建

本文基于开盘价、最高价、最低价、收盘价、换手率、当日收益率、成交量这7个基础数据,使用相关系数、标准差、时序最大、时序最小、时序求和、加权平均等统计聚合方法构建了98个因子。直接从量价行情基础数据中构建是为了更好地学习对股票价格变动趋势的预测。

2.模型设定

DNN模型相邻两层之间所有神经元都有权重链接,由输入层,隐藏层和dropout层构成。 本文选择将神经网络的深度设置为3,包含一个输入层和三个隐藏层。 其中输入层的输入大小设置为98,也就是本文因子的数量。 隐藏层1的神经元数量设置为256。 隐藏层2的神经元数量设置为128。 隐藏层3(输出层)的神经元数量设置为1,以匹配预测标注:收益率。

需要特别注意的是:

  • 本文在设置神经元数量时尽量设置为2^n,以加快运算速度。
  • 本文将整个神经网络架构为一个上大下小的梯形,是因为更深的隐藏层需要去过滤出市场更深度的特征信息。但这并非DNN的强制要求或规范,有时候每层形状相同甚至会产出更低的损失。
  • 本文选择设置神经网络的隐藏层层数为3,主要是因为过多的神经网络层数会导致训练速度缓慢,容易产生梯度爆炸或者梯度消失的问题,而过少的层数会导致市场特征无法被有效识别,信息容量不足等问题。本文将样本参数比大致设置在50:1能保证市场的特征信息至少能被有效过滤组合两次,进而识别市场趋势,也能稳定训练过程,不至于出现过拟合或训练缓慢。

3.数据抽取与处理

本文选择的训练集时间是2022年1月1日至2024年12月31日,测试集是2025年1月1日至2025年12月22日,进行了基础条件筛选,特征标准化、标注去极值等数据预处理。选择的标注是:未来5日收益率。

4.持仓周期与持股数

每隔5日调仓,等权重持仓20只。

5.回测结果:\n


优化方向:\n1、探索更多特征,例如技术指标因子、财务因子、舆情因子、高频日内因子等

2、开发更多深度学习模型,包括(CNN卷积神经网络)、TabNet(表格数据的深度学习网络结构)、RNN、LSTM、Transformer、BERT、GAN、GNN等

3、研究更多策略类型,包括指数增强、SmartBeta策略

4、加入个股过滤、组合优化等逻辑。\n

策略源码:\n





\

标签

深度学习DNN选股策略
{link}