散户新敌人的奥秘--神经网络


雪球转发:22回复:37喜欢:64
导语:想过一个问题没有?人们看到一个猫的图片时,立马就能知道这是一只猫,看到一个狗的图片,立马就能知道这是一只狗。时间非常快而且很少出错,为什么能够达到这么好的效果呢?因为大脑本质上是一个非常高效的处理器。而这个处理器其实是由巨量神经元细胞组成的神经网络。
人们早早(20世纪40年代)就开了脑洞,为什么不尝试通过“模拟神经元细胞网络的行为”这种手段解决实际问题呢?随着机算能力的提高(20世纪80年代以后),神经网络算法慢慢形成了热点。
很多常见的问题都可以用神经网络轻松处理好。例如提供手写的字的图片,神经网络算法就可以完成内容的识别;提供股票历史交易日的信息,神经网络可以判断股票明天是涨是跌,甚至可以告诉你最可能的收盘价是多少(准不准另说,反正人脑也未必准)。到时人工智能将会是广大散户的新敌人。

作者:yongpeng.r
编辑:宏观经济算命师
全部源代码可在原文查看:https://www.joinquant.com/post/1738?f=xq


1. 神经网络算法的基础-神经元细胞和神经元细胞网络

大脑中的神经元细胞
为了大家更好的理解神经网络的工作过程,我先把神经元细胞简单的介绍一下:
JoinQuant聚宽
上图就是一个标准的神经元细胞结构。神经元通过树突(左上角的那些树状结构)来接收信息,这些信息可以是别的神经元传递过来的信息,也可以是直接物理刺激(例如声音造成的对于细胞的刺激)。通过对这些信息的综合处理,神经元细胞体将处理结果通过轴突(下方的那条长长的传送结构)传递给别的神经元。
大脑的神经细胞只有两种状态:兴奋和不兴奋(即抑制)。神经细胞通过某种方法(人类还没研究透),把所有从树突上进来的信号进行相加,如果信号总和超过某个阀值,就会激发神经细胞进入兴奋(fire)状态。此时神经细胞就会发出一个电信号,并且通过轴突发送给其他神经细胞。如果信号总和没有达到阀值,神经细胞就不会兴奋起来。

神经元细胞网络
JoinQuant聚宽
单个神经细胞处理不了任何复杂的问题,必须形成神经网络才行。
神经元细胞网络中、细胞间的联系错综复杂。神经网络综合每个细胞的成果,最终完成了非常复杂的任务。人类目前还没有完全弄清楚神经网络的运作,但并不妨碍开脑洞,自己设计一套模型 :)。

2. 神经网络算法-神经元和神经网络


神经元-抄袭神经元细胞行为的人工神经元
人工神经元被用来模拟神经元细胞的行为,其结构如下:
JoinQuant聚宽
左边的箭头模拟神经元的输入信号,右边的箭头模拟神经元的输出信号。神经元主要做了两部分的工作:首先对于输入信号进行综合,其次通过综合后的信号进行处理,得到输出信号。信号的综合,常用的方法是对输入信号加权求和。信号的处理,常用的方法是通过sigmoid函数处理。
Sigmoid函数的表达式为JoinQuant聚宽,图像是:
JoinQuant聚宽
可以看出,sigmoid函数的处理结果和真实神经元的处理结果比较类似(sigmoid函数值集中于1和0,对应于神经元细胞的兴奋和不兴奋状态),而且sigmoid函数可以根据函数值很容易的得到导数值。
这样,一个人工神经元就搭建起来了。

神经网络-神经元细胞网络简化版
人工神经网络其实是真实神经网络的简化。一个典型的人工神经网络如下图所示:
JoinQuant聚宽
神经网络由三层组成,输入层,隐含层,输出层。需要注意的是,输入层和输出层都只有一层结构,隐含层可以是一层,也可以包含多层结构(本图中只有一层)。图中x1和x2是输入数据,y1是输出数据。黄色的圈表示对于神经元的恒定刺激,a1和a2是隐含层输入信号的信号综合结果,z1和z2是隐含层的信号处理结果,s1是输出层输入信号的信号综合结果。

这么说有点抽象,我们实际推演一下:上面这个神经网络可以用来计算异或。异或是一种运算:如果输入的a、b两个值不相同,则异或结果为1。如果输入的a、b两个值相同,异或结果为0。那用神经网络如何做到异或呢? 
当输入的x1=1,x2=1的时候:
JoinQuant聚宽
同理,当x1=1,x2=0的时候,y1=1;
当x1=0,x2=1的时候,y1=1;
当x1=0,x2=0的时候,y1=0。
本文主要目的是让大家对于神经网络有一个直观的认知。关于神经网络的非线性分类能力、神经网络的训练等过程等比较复杂。请大家继续关注量化课堂,我们会在将来推出相关内容。

3. 神经网络的具体使用-pybrain包
在python环境中,我们可以通过pybrain包来帮助我们构建神经网络,训练神经网络并且利用神经网络来对新的数据进行分类。下面是一个小例子帮助我们了解如何使用pybrain包。(一个小提示:在python2环境下使用pybrain包比较好)
特征是通过收盘价数据计算的SMA,WMA,MOM指标,训练样本的特征是从2007-1-4到2016-6-2中截止前一天的SMA,WMA,MOM指标,训练样本的分类类别是2007-1-4日到2016-6-2中每一天的涨跌情况,涨了就是True,跌了就是False,测试样本为2016-6-3日的三个指标以及涨跌情况。程序的结尾输出的是测试样本中的判断误差,由于只有一个测试样本,如果神经网络的判断结果和真实涨跌情况相同,输出0%;如果神经网络的判断结果和真实涨跌情况不相同,输出是100%。

代码可在原文查看:https://www.joinquant.com/post/1738?f=xq

本文由JoinQuant量化课堂推出,版权归JoinQuant所有,商业转载请联系我们获得授权,非商业转载请注明出处。

@stock_android @黑鸢 @Janu68 @洛基丶 @qs_cn @faruto @CallMeLucky @释老毛 @漩涡鸣人NARUTO @量化钢铁侠 @那年帝流浆 @达芬奇橙 @张栋_机器学习 @第七子 @william_hsu @今日话题 @非典型伪价值投机 @价值趋势技术派 @重力加速度 

人工智能与神经网络在投资领域的前景,有何高见,对本文有何感想,欢迎各位与我们交流 。

精彩评论

CallMeLucky 2016-07-13 11:22

一方面,A股历史太短,训练数据不够。另一方面,个人之前做过统计,现有很多指标从统计学角度看与股价涨跌都是不相关的,换言之用NNs这类算法搞出来的策略,过拟合概率很大,所以个人觉得至少目前来说这种“人工智能炒股”不足为惧。BTW,如果有资金用这类算法指导交易,那他们的行为就太好预测或者被操纵了,所以个人认为基于历史交易数据写的以NNS为核心的算法甚至没有任何实用价值。

宏观经济算命师 2016-07-13 11:28

人脑也有这种情况啊,http://wuxi.house.qq.com/a/20120807/000011.htm  哈哈哈,你看看第一张的房子像不像脸

全部评论

JoinQuant聚宽 2016-09-01 14:36

好吧,我们量化课堂还有很多内容,欢迎交流 https://www.joinquant.com/study

黑鸢 2016-09-01 14:19

前段时间拜读了一篇文章,链接丢失了~

JoinQuant聚宽 2016-09-01 13:40

可有连接?此外,这只是一个入门级介绍。

黑鸢 2016-09-01 13:38

美国已经有较为成熟的运用了

仙人冻 2016-07-16 09:53

整太复杂没用的。。

宏观经济算命师 2016-07-14 14:24

我们正在搭的框架就是你这个 哈哈哈 基于特征进行变异

价值趋势技术派 2016-07-14 10:28

遗传算法可以在很多场合用到,虽然老套,却也是一个很用用的东西。
说实在的,我明年计划写的框架主要就是基于遗传算法的。
争取写一个能存活在金融交易市场的遗传基因出来

宏观经济算命师 2016-07-14 10:24

哈哈哈,我们准备搭一个遗传算法的

南京中山东路 2016-07-14 10:11

不错

价值趋势技术派 2016-07-14 09:36

神经网络的好处是,网络上真的能搞到一大把现成的的框架来用。
然后还能搞出点很牛叉的硬件让其他人感觉你牛叉。

而且不断训练,规模越大耗时间越长,就能越晚判断出自己的模型是否是垃圾。
就能有更多时间沾沾自喜。
===============
吐槽完毕,说正经的。
想要短期获得一个高历史业绩的模型,用神经网络训练是最佳途径。
不过目前没看见哪家把神经网络或者说机器学习用得好的。
毕竟这里面水比搞几条均线深多了。

1 2 3 4