1807 2

[交易策略] 【机器学习】传统机器学习到深度学习,向脑科学进发 [推广有奖]

  • 0关注
  • 4粉丝

本科生

83%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
3 点
热心指数
3 点
信用等级
3 点
经验
1228 点
帖子
47
精华
0
在线时间
107 小时
注册时间
2017-7-13
最后登录
2019-5-22

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

原文来自:MindGo量化社区-【机器学习】传统机器学习到深度学习,向脑科学进发

【导语】神经网络的诞生和兴起经历了数次的大起大落,发展到今天,随着GPU等新型计算资源的兴起,计算能力已经不再成为瓶颈,因而在2010年以后,以深度学习为代表的神经网络机器学习算法大热。神经网络因其在非线性问题的建模上具有独特的优势而闻名。深度学习在计算机视觉、自然语言处理等领域表现优异。本篇文章属于科普性文章,主要想让读者对深度学习有一个基本的认识。在本文中尽量避开数学公式,让读者有一个直观的认识。

0.起源

  提到神经网络的起源,其实这四个字已经说明了神经网络大概的来源是什么了。很显然,神经网络模型受到脑科学的启发和影响,模仿了人类神经系统的组织结构(尽管到目前为止人类对自己头颅之上的这块重约1400克的组织的结构和功能都还没有那么深入的了解)。但是学过高中生物的人都知道,神经系统大体上是由一个个神经细胞(神经元)组成的网状结构,神经细胞之间两两通过神经递质等化学物质传递信号,控制每个神经元的兴奋or抑制。也正是通过这样看上去简单明了的机制,人类的大脑能够完成各种复杂的学习行为。识别不同的人,产生不同的情感,学习不同的语言……更加不可思的是,仅仅是通过这一简单的模仿,神经网络理论上就能够建模任何复杂的问题,果真也能够在计算机视觉、自然语言翻译、语音识别等领域做到和人工一样的效果。

  神经网络实际上在十九世纪四十年代就已经被提出了,然而当时收到计算能力的限制,以及训练算法的研究不够透彻,因此在当时神经网络的可用性是不高的,可能还不如使用支持向量机等一些简单易解释的模型。而近几年,随着计算能力的大幅度提升以及GPU高性能计算卡的出现和应用,加在神经网络上的计算瓶颈已经几乎没有了。再加上卷积神经网络(CNN)等在图像识别等一系列过去难以取得理想结果的人工智能应用领域获得了出色的成果,所以神经网络以“深度学习”之名再度崛起!深度学习之所以称为深度学习,尤指具有很多层的神经网络,很容易可以想象,在一个人面对越复杂任务的时候(比如高数学习、驾车等),大脑的活跃的神经元一定也是随之增加的。而深度学习就专门为了解决人脸识别、语言翻译等高级高智能化的任务而存在。我们这里必须感谢Intel、NVIDIA等计算硬件厂商在计算能力上的推动作用。

timg.jpg

1.神经网络

  对于神经网络的入门,推荐大牛Andrew Ng.在Coursera上的《机器学习》的课程以及Stanford ufldl的神经网络入门介绍。下图中的左侧代表的是单个神经元的结构,单个神经元接受来自其他神经元的信号,经过简单的计算和变换,形成相应的输出信号传递给下一个神经元,这里的计算和变换过程称作“激活函数”,这跟神经元的生物特性是类似的,神经元只有在某些特定的信号下才会变为兴奋状态,这里的激活函数往往使用Sigmoid函数或者是tanh函数。右图则是由多个神经元组成的一个简单的神经网络,最左侧的称为输入层,最右侧的为输出层(在图中输出层只有一个神经元),中间的称为隐藏层(没法直接控制),类似于大脑中复杂的结构。

  显然,随着神经元的增加,我们所能建模的能力也在同步提高,当然了代价就是所带来的计算复杂度增加,需要调校的参数数目也同步增加。理解了这样的基础神经网络结构,对于之后理解其他更加复杂和层数更多的神经网络也就基本没有障碍了。个人认为,类似于CNN和RNN这样的神经网络,主要还是以在网络结构和连接方式上的改变。当然了,模型复杂度的提高很容易带来过拟合的问题,尤其是涉及到在A股市场上运用时,市场所能提供的数据量可能并不算多,这个时候更加容易造成策略的过拟合问题。

300px-SingleNeuron.png

400px-Network331.png

2.训练方法

  上述神经网络的训练通常使用的是误差逆传播算法(error Back Propagation, BP),这里我们直接给出来自ufldl的损失函数表达式。可以看到,损失函数一部分表示了模型输出与实际值之间的平方代价,另一部分则是防止过拟合的正则化项。获得损失函数之后,剩下的步骤主要是针对其利用梯度下降法,拟合样本,通过不断地迭代,减少网络在样本上的平均误差。迭代过程大体上就是首先通过前向传播,根据样本的输入“通过”当前参数的神经网络,得到当前样本的预测输出,随后根据样本真实值和预测值之间的残差,反向传播调整所有权值。

  对于可能遭遇的过拟合问题,常使用“early stopping”和“正则化”两种方法来避免,正则化在上面的训练过程中已经提到了,只要改变我们的目标函数的形式即可,而early stopping则是通过将数据分为训练集和验证集,使用验证集来验证估计误差,当发现训练集上的误差不断降低,而验证集上的误差不断开始增大时,就终止训练过程。

3.我该用什么库?

  如果放在5年前,我会建议你使用python中的pybrain库,它是一个能够自定义神经网络层数和每一层结点数的库,想当年还使用过这个库尝试预测股价,然而没有任何调参经验的自己,直接使用了开盘价、收盘价、最高价和最低价来进行建模训练,没有其他的任何措施,拟合的模型有多不靠谱可想而知~但是时间已经进入了2017年,google公司开源了TensorFlow这个强大的机器学习库,还犹豫什么呢?TensorFlow相对于其他的机器学习库来说,相对难上手一些,这两天粗粗体验了一下,发现TensorFlow使用图的形式来描述计算的过程,使用Tensor(张量)来表示数据,确实与其他的库很不一样。具体可以参看TensorFlow中文社区。TensorFlow上代码一经写成,就可以运行在包括CPU、GPU,甚至手机上!对于想要迅速实现想法的同学来说,也可以直接使用sklearn库中的neural network来实现,不过要注意的是sklearn 0.17及以下版本中是没有神经网络的,使用前必须升级到0.18以上版本才行。

4.能做什么?

  关于可以用神经网络做什么的问题,其实并没有什么局限,想得到的完全都可以脑洞大开。最近甚至在知乎上看到有人介绍到利用GAN(生成式对抗网络)来生成以假乱真的动漫头像,不禁感叹实在是太智能了。CNN(卷积神经网络)最常见的应用就是计算机视觉(CV),CNN通过多个层次的特征提取,不同深度的层可以学习到不同的特征,比如一些层学习到的是比较“大”的特征(猫的眼睛,狗的尾巴),而有一些层则负责学习较“细”的特征(形状、边缘)。比如下面这几张分别代表了网络中浅层与深层所抽取出来的特征。可以看到层次越浅所抽取出来的特征愈发的简单、通用,而越深的层特征更加复杂。(图片来自《Visualizing and Understanding Convolutional Networks》)


  关于CNN的应用,可以按照教程以MNIST数据集作为入门尝试。MNIST是机器学习中的一个经典问题,目标是手写数字的识别。

mnist_digits.png

5.神经网络初尝试

训练:

  ①抽取每一天的特征向量,每一天的特征采用与之前的系列一致的特征(MFI,ATR,MACD等共6个特征)

  ②生成每一天对应的“标签”,标签定义为:未来N天内涨跌幅大于0,则为1;涨跌幅小于0,则为0

  ③设置网络结构,比如可以构建一个拥有2个隐藏层,分别具有10、5个节点的神经网络

  ④将准备好的特征向量和对应的“标签”输入给神经网络进行训练

回测:

  在回测的每一天,根据过去若干天的数据计算当天的特征向量,并输入给已经训练好的神经网络,获取神经网络的预测标签,若预测标签为1,则代表模型预测未来N天的涨跌幅大于0,可以买入;反之,则代表未来N天的涨跌幅小于0,卖出或空仓。

使用工具:

  sklearn.neural_network.MLPClassifier

回测.JPG
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


沙发
tutouliumang 发表于 2017-8-21 10:20:24 |只看作者 |坛友微信交流群
好棒呀!!!

使用道具

tutouliumang 发表于 2017-8-21 10:20
好棒呀!!!
感谢围观

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-11 01:23