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

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

作者:yongpeng.r
编辑:宏观经济算命师
全部源代码可在原文查看:网页链接


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

大脑中的神经元细胞
为了大家更好的理解神经网络的工作过程,我先把神经元细胞简单的介绍一下:

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

神经元细胞网络

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

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


神经元-抄袭神经元细胞行为的人工神经元
人工神经元被用来模拟神经元细胞的行为,其结构如下:

左边的箭头模拟神经元的输入信号,右边的箭头模拟神经元的输出信号。神经元主要做了两部分的工作:首先对于输入信号进行综合,其次通过综合后的信号进行处理,得到输出信号。信号的综合,常用的方法是对输入信号加权求和。信号的处理,常用的方法是通过sigmoid函数处理。
Sigmoid函数的表达式为,图像是:

可以看出,sigmoid函数的处理结果和真实神经元的处理结果比较类似(sigmoid函数值集中于1和0,对应于神经元细胞的兴奋和不兴奋状态),而且sigmoid函数可以根据函数值很容易的得到导数值。
这样,一个人工神经元就搭建起来了。

神经网络-神经元细胞网络简化版
人工神经网络其实是真实神经网络的简化。一个典型的人工神经网络如下图所示:

神经网络由三层组成,输入层,隐含层,输出层。需要注意的是,输入层和输出层都只有一层结构,隐含层可以是一层,也可以包含多层结构(本图中只有一层)。图中x1和x2是输入数据,y1是输出数据。黄色的圈表示对于神经元的恒定刺激,a1和a2是隐含层输入信号的信号综合结果,z1和z2是隐含层的信号处理结果,s1是输出层输入信号的信号综合结果。

这么说有点抽象,我们实际推演一下:上面这个神经网络可以用来计算异或。异或是一种运算:如果输入的a、b两个值不相同,则异或结果为1。如果输入的a、b两个值相同,异或结果为0。那用神经网络如何做到异或呢? 
当输入的x1=1,x2=1的时候:

同理,当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%。

代码可在原文查看:网页链接

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

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

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

精彩讨论

全部讨论

2016-07-13 14:33

2016-07-13 13:27

学习

2016-07-13 12:06

感谢分享

2016-07-13 11:48

转发高大上

2016-07-13 11:28

2016-07-13 11:25

我刚赞助了这篇帖子 10 雪球币,也推荐给你。

2016-07-13 11:22

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

2016-07-13 11:20

不知道对于连续涨停,连续跌停这种股票,神经网络是怎么判断的。我之前读到一篇神经网络用于图像识别的局限性的文章。大意是,对于一个训练好的网络,可以人为生成一副近似噪声,看起来和狗根本毫无关系的图像,但是神经网络却以极高自信判断为狗;同时也可以对一张狗的图片进行一些处理,人眼看起来绝对是狗,但是神经网络却判断这个根本不是狗。并且作者还做实验,就算利用这些伪造图片对神经网络进行强化和矫正,识别效果没有本质提高,仍旧有很大的盲区。不知道这个发现对交易有没有启发。

2016-07-13 11:09

good