138-基于DNN模型的智能选股策略
由bqmokgou创建,最终由qxiao 被浏览 233 用户
新版量化开发IDE(AIStudio):
https://bigquant.com/wiki/doc/aistudio-aiide-NzAjgKapzW
新版模版策略:
https://bigquant.com/wiki/doc/demos-ecdRvuM1TU
新版数据平台:
https://bigquant.com/data/home
https://bigquant.com/wiki/doc/dai-PLSbc1SbZX
新版表达式算子:
https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS
新版因子平台:
https://bigquant.com/wiki/doc/bigalpha-EOVmVtJMS5
导语
这是本系列专题研究的第六篇:基于DNN模型的深度学习智能选股策略。本文简单介绍了和DNN相关的原理,并举了一个实例,具体展示了如何应用以及应用的结果。
DNN原理介绍
神经元
神经网络的每个单元结构如下:
其对应公式如下: 这相当于进行了两步:
\
-
先计算各项输入的加权和:
\
-
然后使用激活函数,将和作为输入计算得到输出结果:
f 即为激活函数.
\
神经网络中常用到的激活函数如下表所示:
上述激活函数的函数图形如下图所示:
\
DNN
DNN是一个包含输入层,输出层和多个隐藏层的神经网络结构,每一层又包含多个1.1中所述的神经元。其基本结构如下图所示:
如上图所示,黄色方块标记的为输入层,最后的y为输出层,中间各种颜色的圆形层为其隐藏层,DNN中的层与层之间是属于完全连接的结构,即任意层的神经元与它相邻层的所有神经元都是相互连接的。(这是DNN与CNN的主要区别,DNN是全连接的而CNN的局部连接的,如果对CNN感兴趣,可以前往平台的另一篇专题研究:【专题研究】基于一维CNN模型的智能选股策略)
\
反向传播
反向传播算法在 【专题研究】基于一维CNN模型的智能选股策略 中也有介绍,一句话简单概括就是: 前向传递输入信号直至输出产生误差,反向传播误差信息更新权重矩阵。
DNN往往含有多个隐藏层,这里我们看一个带隐藏层的神经网络示意图:
其中小女孩代表隐藏层节点,小黄帽代表输出层节点,小女孩左侧接受输入信号,经过隐层节点产生输出结果,小蓝猫代表了误差,指导参数往更优的方向调整。由于小蓝猫可以直接将误差反馈给小黄帽,所以与小黄帽直接相连的左侧参数矩阵可以直接通过误差进行参数优化(实纵线);而与小女孩直接相连的左侧参数矩阵由于不能得到小蓝猫的直接反馈而不能直接被优化(虚棕线)。但由于反向传播算法使得小蓝猫的反馈可以被传递到小女孩那进而产生间接误差,所以与小女孩直接相连的左侧权重矩阵可以通过间接误差得到权重更新,迭代几轮,误差会降低到最小。
反向传播主要由梯度下降+链式求导法则来实现,具体数学公式可以参考:机器学习:一步步教你理解反向传播方法。
实例:DNN模型选股
策略步骤和模型参数
如图所示,DNN模型选股实例中包含下列步骤:
- 数据获取:A股所有股票,2015-06-01到2015-12-31年数据用作训练,2019-03-01到2019-04-20数据用作测试
- 特征提取:选择了7个因子进行计算作为特征
- 建立模型:建立一个简单的两个全连接层两个dropout层的DNN网络
- 训练和测试:分别用训练集数据和测试集数据对模型进行训练和测试
- 模型评价:进行策略回测并根据回测结果对模型进行评价
DNN模型参数如下:
- 输入层:选用了7个因子,窗口大小为1,因此输入层形状为一维,大小为7
- 全连接层:共有3个全连接层。前两个为隐藏层,输出空间维度分别为256和128,这个数字可以根据需要进行改动,数字越大,模型越复杂。根据表1,这里选择relu激活函数。权重使用glorot_uniform初始化方法,偏置向量使用Zeros初始化方法。最后一个全连接层为输出层,因此选择linear激活函数,输出维度为1,其他设置不变。
- dropout层:dropout将在训练过程中每次更新参数时,按一定概率(即rate参数)随机断开输入神经元,用于防止过拟合。这里rate参数设为0.1。
- 训练次数率 :epochs值为10,共训练10轮,以mse作为评估指标
回测结果
模型回测结果如下所示:
从图中可以看到,相比于基准收益,DNN模型有着非常突出的表现。所以,我们认为将DNN深度神经网络应用于资本市场因子选股是很有前景的。在本次的策略中,我们提取了7个因子,构建了两层的DNN模型,因子的选择提取,模型的深度和具体的模型参数都还有很大的调整空间,欢迎大家继续尝试探索。
\
策略案例
https://bigquant.com/codesharev3/6d05278c-9f61-4e97-84b7-fe8123bb5d16
\