61阅读

神经网络模型-python实现单隐层神经网络基本模型

发布时间:2017-10-13 所属栏目:深度卷积神经网络

一 : python实现单隐层神经网络基本模型

应朋友之请写了一份python实现单隐层BP Ann model的code,好久没写博客,就顺便发上来。这篇代码比较干净利落,比较纯粹的描述了Ann的基本原理,初学机器学习的同学可以参考。

模型中几个比较重要的参数:

1.学习率

学习率是影响模型收敛的重要因素,一般来说要根据具体场景灵活调整,过高的学习率会使得函数快速发散。

2.隐元数量

一般来说,增加隐层中神经元的数量比直接增加隐层更加有效,这也是单隐层神经网络的特点。对于复杂程度不算太高的问题而言,单隐层的效果优于多隐层。

3.随机种子位数

代码中增加了这一参数,来控制初始化连接权与阈值的精度。由于神经网络中初始权重与阈值是随机生成的,那么其随机精度会对结果产生一定的影响。在输入元、隐元的数量较多时,调整随机精度会起到减小误差的作用。

代码中举了一个非常简单的训练示例,笔者自拟了一个规则:

输入两个变量,当变量A = 变量B时,返回类型1,矩阵化为[1,0]。当变量A != 变量B时,返回类型2,矩阵化为[0,1]。

让神经网络去学习这个simple的规则,并给出20条测试数据去验证。最终使用了5000条训练数据,就获得了100%的正确分类能力。

#---Author:伍思磊---#---Mail:wusilei@1006.tv---#---2015/7/27---importrandomimportmath#---神经网络Model---classAnn:#构造函数初始化模型参数def__init__(self,i_num,h_num,o_num):#可调参数self.learn_rate=0.1#学习率self.num_long=2#输出结果位数self.random_long=10#随机种子位数#输入参数self.input_num=i_num#输入层数量self.hidden_num=h_num#隐层数量self.output_num=o_num#输出层数量#模型参数self.input=[]#输入层self.hidden=[]#隐层self.output=[]#输出层self.error=[]#误差self.expectation=[]#期望self.weight_ih=self.__ini_weight(self.input_num,self.hidden_num)#输入层->隐层连接权self.weight_ho=self.__ini_weight(self.hidden_num,self.output_num)#隐层->输出层连接权self.threshold_h=self.__ini_threshold(self.hidden_num)#隐层阈值self.threshold_o=self.__ini_threshold(self.output_num)#输出层阈值#初始连接权生成器def__ini_weight(self,x,y):result=[]long=math.pow(10,self.random_long)foriinrange(0,x,1):res=[]forjinrange(0,y,1):num=round(random.randint(-1*long,long)/long,self.random_long)res.insert(j,num)result.insert(i,res)returnresult#初始阈值生成器def__ini_threshold(self,n):result=[]long=pow(10,self.random_long)foriinrange(0,n,1):num=round(random.randint(-1*long,long)/long,self.random_long)result.insert(i,num)returnresult#激励函数sigmadefexcitation(self,value):sigma=1/(1+(math.exp(-1*value)))returnsigma#输入数据definput_param(self,data,expectation=[]):self.input=[]forvalueindata:self.input.append(value)if(expectation):self.expectation=[]forvalueinexpectation:self.expectation.append(value)#隐层计算defcount_hidden(self):self.hidden=[]forhinrange(0,self.hidden_num,1):Hval=0foriinrange(len(self.input)):Hval+=self.input[i]*self.weight_ih[i][h]Hval=self.excitation(Hval+self.threshold_h[h])self.hidden.insert(h,Hval)#输出层计算defcount_output(self):self.output=[]foroinrange(0,self.output_num,1):Oval=0forhinrange(len(self.hidden)):Oval+=self.hidden[h]*self.weight_ho[h][o]Oval+=self.threshold_o[o]Oval=round(Oval,self.num_long)self.output.insert(o,Oval)#误差计算defcount_error(self):self.error=[]forkeyinrange(len(self.output)):self.error.insert(key,self.expectation[key]-self.output[key])#连接权反馈训练输入层->隐层deftrain_weight_ih(self):foriinrange(len(self.weight_ih)):forhinrange(len(self.weight_ih[i])):tmp=0foroinrange(0,self.output_num,1):tmp+=self.weight_ho[h][o]*self.error[o]self.weight_ih[i][h]=self.weight_ih[i][h]+self.learn_rate*self.hidden[h]*(1-self.hidden[h])*self.input[i]*tmp#连接权反馈训练隐层->输出层deftrain_weight_ho(self):forhinrange(len(self.weight_ho)):foroinrange(len(self.weight_ho[h])):self.weight_ho[h][o]=self.weight_ho[h][o]+self.learn_rate*self.hidden[h]*self.error[o]#阈值反馈训练隐层deftrain_threshold_h(self):forhinrange(len(self.threshold_h)):tmp=0foroinrange(0,self.output_num,1):tmp+=self.weight_ho[h][o]*self.error[o]self.threshold_h[h]=self.threshold_h[h]+self.learn_rate*self.hidden[h]*(1-self.hidden[h])*tmp#阈值反馈训练输出层deftrain_threshold_o(self):foroinrange(len(self.threshold_o)):self.threshold_o[o]=self.threshold_o[o]+self.error[o]#反馈训练deftrain(self):self.train_weight_ih()self.train_weight_ho()self.train_threshold_h()self.train_threshold_o()#归一化函数defnormal_num(self,max,min,data):data=(data-min)/(max-min)returndata#寻找集合的最大值和最小值#---业务部分(示例)---#要训练的规则,输入两个值,如果两值相等返回[1,0],反之返回[0,1]deftestFunc(val):if(val[0]==val[1]):return[1,0]else:return[0,1]#构造神经网络模型ann=Ann(2,3,2)#生成训练数据,随机生成5000组[0,1][1,0][1,1][0,0]随机数组data=[]foriinrange(0,10000,1):x=random.randint(0,1)y=random.randint(0,1)data.append([x,y])#取得训练数据中的最大值和最小值foriinrange(len(data)):forjinrange(len(data[i])):if(i==0andj==0):max=min=data[i][j]elif(data[i][j]>max):max=data[i][j]elif(data[i][j]

二 : 机器学习进化史:从线性模型到神经网络

【深度】机器学习进化史:从线性模型到神经网络_神经网络模型

Reza Zadeh是斯坦福大学工程计算和数学研究所顾问教授,也是Databricks公司技术顾问,他主要专注于机器学习理论和应用,分布式计算,以及离散应用数学。近日,他接受了oreilly网站的采访,尝试谈论了人工智能的各方面。

    神经网络已卷土重来,并且作为一种新方法,在机器学习中发挥着越来越重要的角色

    通过利用已有算法的监督学习解决方案,最伟大成就已经实现

    Spark是一种特别适合分布式机器学习的环境

    说说你在斯坦福的工作吧

    在斯坦福大学,我设计并教授分布式算法和优化,此外我还教授一门离散数学和算法的课程。在离散数学课程里,我是完全从理论角度来教算法的,这意味着我所教授的算法完全不依赖于任何编程语言或框架,我们会直接把许多理论和证明写在白板上。

    但是如果想要更实际些的话,那就得来我的分布式算法课了,我们会在Spark编程环境下工作,而我几乎会花一半时间在Spark上面。在这个平台上,我所教授的,设计分布式算法和机器学习的理论都可以执行,而且非常具体。

    2006年我来到Google负责MapReduce编程模型,实际上之前Hadoop已经广为人知,也非常流行了,但在Google,MapReduce已经十分成熟。当时我只有18岁,也非常看好这个项目。于是,我花了很多时间在MapReduce上构建、思考算法,甚至在离开Google之后的很长一段时间依然持续这么做。后来有了Spark计算框架,它是开源的,大家都可以了解其核心,为其做贡献。我感觉Spark的时代已经到来了,因为对绝大多数分布式计算来说,弹性分布式数据集是非常抽象的。

    机器学习的进化

    从你在Google工作,到现在Spark计算框架上工作,应该有机会看到机器学习的进化吧,因为它们和分布式计算的联系都非常紧密,你会如何描述这种进化呢?

    从上世纪90年代开始,机器学习已经过了一些过渡时期。从1995年到2005年,很多人专注在自然语言,搜索,以及信息检索领域。机器学习工具比如今我们使用的要更加简单,他们包括逻辑回归分析,SVMs(支持向量机),支持向量机内核,网页排名等。利用这些技术,Google获得了巨大成功,比如Google News就非常成功,还有Gmai垃圾邮件分类器,它利用易分布式算法进行排名和文本分类。到了上世纪90年代中期,这些技术已经变得十分成熟了。

    大约在2005年左右,神经网络又开始卷土重来。神经网络其实算是上世纪80年代的技术,一些人甚至认为它起源于上世纪60年代,得益于计算机视觉的技术的最新进展,让(卷积)神经网络的使用显得卓有成效。事实上,神经网络已经开始在其他应用上“大展宏图”,包括自然语言处理和机器翻译等领域。

    但是有一个问题:在所有提及的机器学习分布式模型中,神经网络可能是最具挑战性的。那些早期模型都已经训练成功被分布。我们不需要太过麻烦,就能使用100台机器,并训练一个逻辑回归或支持向量机,但是开发一个分布式神经网络学习设置却难的多。

    那么,猜猜看现在神经网络这块谁做的最成功?到目前为止,唯一的公司就是Google。他们是这一领域里的先驱。现在就像是回到了2005年,当时Google发布了MapReduce,每个人都争相建立同样的基础设施。Google实现了分布神经网络,也得到了更多回报,如今,每个人都希望他们也能像Google一样获得成功,但是好事儿不会发生两次。

    为什么一个支持向量机或逻辑回归比神经网络更容易实现分布?

    首先,评估一个支持向量机要简单得多。当你学习了一个支持向量机模型或逻辑回归模型(或者任何一个线性模型)之后,实际评估就会非常快。比如说你构建一个垃圾邮件分类器,一个新电子邮件过来后,把它归到垃圾邮件还是非垃圾邮件只需要花很短时间就能完成,因为它只是一个点积(线性代数术语)。

    但是当涉及神经网络,你的计算量将会大大增加,即便你已经学习了相关模型,但仍然要搞明白该模型的输出。而且,这还不是最大的问题,通常一个支持向量机应对一百万个参数还游刃有余,但是我所见过一个成功的最小神经网络,涉及的参数就多达600万个,而且这还是最小的。另一个问题是训练算法并没有从最优化理论中获得太多好处。我们所使用的绝大多数线性模型基本上都有数学理论支持,并且可以确定何时完成训练。这种模式可以确保你能发现最好的模型,但是神经网络现有的最优化算法无法支持这样的保证。在你训练了一个神经网络之后,其实无法判断出它是否是最好的模型。一旦这样,你就会不自觉的去想是否还会有更好的模型,因此就会不断训练下去。

    当神经网络变得越来越强大,你会不会看到他们越来越多地被归入到过去曾是线性的工作方法类别之中呢?

    是的,我是这样认为的。事实上,这种状况现在就正在发生。总有一些线性模型问题,仅能靠线性来辨别。为了让非线性参与,你不得不增加或改变一些功能,因此就会涉及到大量工作。举个例子,计算机视觉科学家花了十年时间开发、调试一种名为SIFT的功能,可以支持图像分类和其他使用线性方法的视觉任务。但之后,神经网络出现了,筛选功能变得不再必要,作为训练的一部分,神经网络的解决方法是让这些功能自动化。

    但是我认为,现在说神经网络可以去到所有功能建设技术似乎还为时过早。而且,我也不认为会发生这种情况,线性模型和优秀的人为驱动功能引擎总会有它的一席之地。就像这次参加神经信息处理系统进展大会的研究人员,他们绝大多数已经开始评估自己应用程序的神经网络。大家都在测试他们的应用程序是否能够从神经网络的非线性模式中获益。

    这绝不是说我们之前就没有过非线性模式,实际上,我们有许多非线性模式。但问题是,神经网络碰巧出现,而且异常强大,在一些应用程序上,它更奏效,因此才会值得尝试。这也是很多人正在做的事情。目前为止,在语音识别,计算机视觉,以及机器翻译上神经网络的应用都非常成功。它还可以应用在许多难度更大的任务上,因此未来还是十分令人兴奋的。

    【深度】机器学习进化史:从线性模型到神经网络_神经网络模型

    神经网络的关键是什么?

    相对于传统的线性和非线性方法,为什么神经网络会如此强大?

    当你有一个线性模型,每一个功能要么对你有帮助,要么对你有伤害,这种假设是线性模型中固有的。因此线性模型要么功能异常强大,用类1表示;要么则毫无用处,用类2表示。所有的解决方案,要么导致该功能获得巨大的价值;要么价值变得微不足道。你永远不会有这么一个状态说,在这个区间,该功能就是代表类1;但是在另一个区间,它代表类2。

    线性和非线性方法局限性很大。也就是说,如果你分析图片,举个例子,寻找狗狗的照片,它很可能会进入到一个特定的子集里面,比如只显示有一只狗的照片,或是显示某一像素和其他类型的图片。在线性模式里面,你无法确定复杂的关系集。相比于线性模型,非线性模型可能会显得更强大一些,但是这种模式同样难以训练。我们会再一次进入到所谓最优化理论的问题之中,这也是我们在很长一段时间里认为神经网络还不是足够好的原因之一,因为他们会“过拟合”,通俗的说,就是太过强大。我们无法做预测,也无法确保最优化方案。或许,这可能就是为什么神经网络从当下暂时消失的原因吧。

    在神经网络理论中,机器学习有很多分支和方法,你能总结一些关键方法吗?

    到目前为止,最成功的方法是监督学习方法,它使用了一个比较老的算法,称为反向传播,构建了一个拥有许多不同输出的神经网络。

    让我们看下一个神经网络构建,这个网络已经非常流行了,叫做卷积神经网络。这个理念是机器学习研究人员构建了一个多层架构的模型,每一层都可以用不同的方法处理之前一层的连接。

    在第一层,你有一个窗口,上面会给图像分配权值,它也变成了该层的输入。由于权值“卷积”,该层也被称为卷积层,它会自我重叠。接着后面会有若干个不同类型的层,每层都有不同的属性,绝大多数都是非线性的。

    最后一层会有1万个潜在神经元输入,那些激活的神经输出,每一个都对应了一个特殊的标签,可以用来识别图像。第一类可能是一只猫,第二类可能是一辆车,以此推到所有一万个类,这样一张“图像网”就出来了。如果第一个神经元(一只猫)与1万个神经元中绝大多数都匹配,那么这张图像就能被识别出来,是一张猫的图像。

    这种监督学习方法的缺点是,在训练的时候,你必须要在图像上应用标签,这是一辆车,这是一个动物园等。

    没错,那么无监督学习方法呢?

    无监督学习方法还不是那么受欢迎,它涉及到“自编码器”。这种神经网络不会用来分类图像,但是可以压缩图像。同我刚才提及的方法来读取图[www.61k.com]像,识别一个权值,并在一个卷积层内用像素填满。其他若干层也这样,包括相比于其它层小的多的中间层。这样做的话,相关的神经元会变得很少,基本上,你读取图像时会进入到一个瓶颈,之后从另一边走出来,并尝试重新构建该图像。

    在无监督学习训练下,不需要打标签,因为你所做的就是把图像放入到神经网络的两端,然后训练网络适应图像,特别是训练中间层。一旦你这么做了,那么就拥有了一个知道如何压缩图像的神经网络。无监督学习方法可以给你提供能应用在其他分类器的功能,因此如果你有哪怕一点点标签训练数据,没问题,它一样可以为你提供大量图像。你可以把这些图像看做是无标签训练数据,并使用这些图像构建一个“自编辑器”,然后从这个自编辑器中导出一些功能,这些功能适合使用一些训练数据,以此找到对特殊模型敏感的自动编码神经网络中的神经元。

    【深度】机器学习进化史:从线性模型到神经网络_神经网络模型

    是什么让你投身Spark?你觉得它是领先的技术集合吗?

    之前我就认识Spark的创造者Matei Zaharia,我们都是滑铁卢大学的校友。实际上,我们还是Google的同届实习生,他当时负责开发者生产力工具,与大数据一点儿关系都没有。Matei Zaharia在Google工作期间根本没有接触过MapReduce,那是我专注的领域,但最后由他负责收尾的确让人觉得有趣。

    之后Matei跳槽去了Facebook,在那里他负责Hadoop,并获得了成功。在那段时间里,我不断思考分布式机器学习,但什么计算框架都没有想出来,包括Hadoop在内,而此时Spark计算框架映入了我的眼帘,我感到非常兴奋。

    能跟我们谈谈Spark究竟是什么吗?它是如何运作的,为什么对分布式机器学习来说,Spark非常有用?

    Spark是一种集群计算环境,可以为你提供分布式矢量,这种矢量与我们在独立机器上编程所使用的矢量非常相似。在常规矢量下,有很多事情是做不到的,举个例子,仅通过目录,你无法做到随机访问,但是如果有两个矢量交集就能做到这一点,你可以并集,也可以分类,还可以做很多常规矢量无法做到的事情。

    Spark让机器学习变得简单,其中一个原因是它可以尽可能多的在内存中保存数据的重要部分,而且无需写入磁盘。在一个分布式环境下,获取故障恢复的常规方法是进行磁盘写入,在网络中使用分布式文件系统对一个磁盘复制三次。

    Spark之所以非常适合机器学习,是因为数据进入到内存之后,就可以保存其中。如果它不适合内存,也没关系,有需要时它就会离开磁盘。但关键是,它能够适应内存,对于任何一个需要处理多次数据的进程来说,比如机器学习,都非常棒。几乎每个机器学习算法都需要处理海量数据,而且是十倍,百倍的数据。

    你觉得Spark和MapReduce比较呢?是否有一处可以让它们两者能够处理不同的工作负荷或职责?

    我必须要明确表达一下,在很长一段时间里,Hadoop都是作为一个生态系统在茁壮成长。我不认为Hadoop生态系统的MapReduce组件也会这样。

    如果要回答你的问题的话,我的答案是不,我不认为他们能够处理不同的工作负荷或职责。老实说,我认为如果你启动一项新工作,除非你已经有了需要维护的代码群,否则使用MapReduce一点儿意义都没有。如果现在还用MapReduce的话,似乎显得有点二了,换而言之,如果你能写C++代码,写集合代码是毫无意义的。

    Spark未来会朝何处发展?

    RZ:目前来说,Spark本身是非常稳定的。目前,或许也是未来几年可能会发生的最大变化,或者说最大提升吧,就是Spark的代码库。机器学习代码库,图像处理代码库,SQL代码库,以及流媒体代码库,所有这些都在快速发展,至少在未来两年内,它每一个变化都令人兴奋。Spark所有的功能都是我想要的,而且很高兴看到它执行起来也非常便捷。同时,对于社区驱动的贡献我也感到由衷的高兴,如今在网站上开发者社区对Spark进行支持,这样对长尾用户来说是非常有帮助的。

    随着时间的沟渠,我认为Spark会成为一个真正的分布式引擎,帮助我们大规模构建机器学习算法。

    viaradar

    三 : 神经元网络模型 91

    承 诺 书

    我们仔细阅读了中国大学生数学建模竞赛的竞赛规则.

    我们完全明白,在竞赛开始后参赛队员不能以任何方式(包括电话、电子邮件、网上咨询等)与队外的任何人(包括指导教师)研究、讨论与赛题有关的问题。

    我们知道,抄袭别人的成果是违反竞赛规则的, 如果引用别人的成果或其他公开的资料(包括网上查到的资料),必须按照规定的参考文献的表述方式在正文引用处和参考文献中明确列出。

    我们郑重承诺,严格遵守竞赛规则,以保证竞赛的公正、公平性。如有违反竞赛规则的行为,我们将受到严肃处理。

    我们参赛选择的题号是(从A/B/C/D中选择一项填写):

    我们的参赛报名号为(如果赛区设置报名号的话):

    所属学校(请填写完整的全名):

    参赛队员 (打印并签名) :1. 指导教师或指导教师组负责人 (打印并签名):

    日期: 赛区评阅编号(由赛区组委会评阅前进行编号):

    编 号 专 用 页

    赛区评阅编号(由赛区组委会评阅前进行编号):

    全国统一编号(由赛区组委会送交全国前编号):

    全国评阅编号(由全国组委会评阅前进行编号):

    神经元网络模型的研究

    摘 要

    生物神经网络是由很多神经元相互连接的,神经网络系统是1个极为庞大且错综复杂的系统。虽然每个神经元十分简单,但是,如此大量神经元之间非常复杂的连接却可以演化出丰富多彩的行为方式。同时,如此大量神经元与外部感受器之间的多种多样的连接方式也蕴含了变化莫测的反应方式。本文主要阐述其数学建模和信号处理以及对于不同的权值、阀值,所建立模型可能产生的各种动力学行为。

    由神经元通过突触联结而组成的生物神经网络可以处理信息和产生特定的电特性 ,认知神经网络信息的产生和传递机理。由于神经网络内部复杂的非线性反馈 ,从微观的生理结构进行各种可能的实验十分困难。通过分析神经网络的生理和生化结构 ,将信息学与生物医学相结合 ,利用计算机仿真可以系统地分析神经网络的内部结构和外部属性。

    为此 ,本文设计和实现了生物神经网络的计算机仿真系统 ,该仿真系统涉及生物神经网络的等效电路、数学建模、数据表达、信号处理和并行运算。

    在处理问题(1)中,本文依据神经元之间的信号连接强度取决于突触状态,因此在在最基础的MP 模型中,神经元的每个突触的活动强度用1个固定的实数即权值模拟。神经元网络按照信息的流向可分为前馈和反馈网络,反馈神经网络是拓扑结构中有环路的神经网络。依据题中3个生物神经元组成的完全互联的网络具备属于循环神经网络、从输出到输入要有反馈连接、输入应具有离散型和连续型两种的3个特点通过基础的MP神经元模型了解人工神经元的结构,利用Hopfield网络模型对问题已进行求解。

    在处理问题(2)中,由于Hopfield神经网络中某一神经元与另一直接与其相连的神经元同时处于兴奋状态,导致这两个神经元间的连接强度加强。相关学习法Hebb是根据连接间的激活水平改变权值的,利用 Hebb学习规则修正神经元之间连接强度或加权系数的算法,使获得知识结构适用周围环境的变换,最终利用Matlab软件分别对模型进行求解。

    问题(3)中要求我们考虑权值以及阈值不同对神经元系统所产生的影响。本文运用Matlab软件中的神经网络工具箱以数值模拟演示的方法分析对于不同的权值、阀值,所建立模型可能产生的各种动力学行为。

    关键词:Hopfield网络模型,人工神经网络,Hebb学习规则

    一、问题重述

    神经元是大脑处理信息的基本单元,以细胞体为主体,由许多向周围延伸的不规则树枝状纤维构成的神经细胞,其形状很像一棵枯树的枝干。主要由细胞体、树突、轴突和突触(Synapse,又称神经键)组成,如图1所示:

    图1 生物神经元示意图

    从信息处理的角度来看,我们可以把1个生物神经元分成:树突区、始段和轴突3个区域,每一区域的定义如下:

    树突区:

    这一区域包括中间神经元和运动神经元的树突和胞体上所有覆盖有突触的区域,也包括感觉神经元接受外界刺激的区域,这实际上就是神经元接收输入信息的区域。

    对于中间神经元和运动神经元来说,其输入是来自本身或是其他网络中生物神经元的脉冲式的输出。当突触前末梢有神经冲动传来时,就会向突触间隙释放一定量的递质,而在突触后膜产生随时间作指数衰减的兴奋性后电位或是抑制性突出后电位。这里需要指出的是从突触前末梢传来的神经冲动,再到突触后膜开始产生电位变化,期间有一段时间约为1毫秒的延迟。

    对于感觉神经元来说,其不同之处仅仅在于它的输入不是神经元的脉冲,而是外界的刺激,不妨设为随着时间变化的2倍的正弦函数值。

    始段:

    由于神经元的胞体和树突几乎全部为突触前末梢所覆盖,只有始段裸露在外。而由任一突触的电位所引起的局部电流都要经过每1个始段而在此总和起来。但由于每1个生物神经元的始段与任意1个神经元的突触距离是不同的,所以要考虑在总和之前乘以不同的权值。而在始段的电位类似于感觉神经元的性质,只是此处的输入可以视作为电流在始段处加权后电流的总和。

    轴突:

    轴突是每个神经元的输出端,其输出值只有0和1(就可以用数学上的脉冲函数来表示),也就是上文所说的脉冲式的输出。而当输出值为1时,是因为始段的电位达到了该神经元的阀值,否则输出值为0。

    (1)根据以上的叙述建立1个由3个生物神经元组成的完全互联的网络模型。 (2)写出该网络模型计算机模拟的算法。

    (3)分析对于不同的权值、阀值,所建立模型可能产生的各种动力学行为(既可以用数学理论说明,也可以用数值模拟演示)。

    三、基本假设

    1、假设此系统除了所需信息的输入没有噪声的干扰; 2、假设神经元之间的影响只归结为相对距离的大小; 3、假设每个神经元的排布都是对称的;

    四、名词解释与符号说明

    五、问题分析和基本思路

    1.问题一的分析和思路

    根据题目中所给信息,即把1个生物神经元从信息处理的角度分为树突区、始段和轴突3个区域以及对各个区域的定义,针对问题一要求建立1个由3个生物神经元组成的完全互联的网络模型,我们分析得出所求模型需要具备以下特点:

    1.属于循环神经网络;

    2.从输出到输入要有反馈连接;

    3.输入应具有离散型和连续型两种;

    由以上特点我们找到人工神经网络具有模拟人类神经系统的结构和功能,人工神经

    神经元网络模型 91_神经元模型

    元也是对生物神经元的抽象与模拟,通过基础的MP神经元模型可了解人工神经元的结构,再由人工神经网络的互联结构中的反馈网络最终得到可利用Hopfield网络模型对问题已进行求解。下图是1个MP神经元模型:

    图2

    图中的x1,x2...xn表示某一神经元的n个输入;w1表示第i个输入的连接强度,称为

    连接权值;θ为神经元的阈值;y为神经元的输出。可见,人工神经元是1个具有多输入,单输出的非线性器件。其输入为?wixi,输出为y?f(?)?f(?wixi??)其中,f称

    i?1i?1nn

    为神经元功能函数(或作用函数,激活函数)。

    通过最简单的MP模型,建立由3个神经元组成的人工神经网络,它可以完成本问复杂的分类任务、学习任务。

    2.问题二的分析和思路

    学习规则是神经网络研究的1个重要内容,它的适应性是通过学习实现的。根据环境的变化,对权值进行调整,改善系统的行为。由Hebb提出的Hebb学习规则为神经网络的学习算法奠定了基础。Hebb规则认为学习过程最终发生在神经元之间的突触部位,突触的联系强度随着突触前后神经元的活动而变化有效的学习算法,使得神经网络能够通过连接权值的调整,构造客观世界的内在表示,形成具有特色的信息处理方法,信息存储和处理体现在网络的连接中。

    针对于问题一中我们建立的Hopfield网络模型,而Hopfield网络最常用的是Hebb学习规则:设有n个神经元相互连接,每个神经元的激活状态只能取0或1,分别表示抑制和兴奋,学习过 程中wij调节原则是,若i与j两个神经元同时处于兴奋状态,那么它们之间的连接强度加强即:?wij??xixj,??0

    所以针对于问题二我们利用Hebb规则,运用Matlab工具对问题一中的Hopfield网络模型进行模拟仿真。

    3.问题三的分析和思路

    研究神经网络的非线性动力学性质,主要采用动力学系统理论、非线性规划理论和统计理论,来分析神经网络的演化过程和吸引子的性质,探索神经网络的协同行为和集体计算功能,了解神经信息处理机制。为了探讨神经网络在整体性和模糊性方面处理信息的可能,混沌理论的概念和方法将会发挥作用。混沌是1个相当难以精确定义的数学

    概念。一般而言,“混沌”是指由确定性方程描述的动力学系统中表现出的非确定性行为,或称之为确定的随机性。

    “确定性”是因为它由内在的原因而不是外来的噪声或干扰所产生,而“随机性”是指其不规则的、不能预测的行为,只可能用统计的方法描述。混沌动力学系统的主要特征是其状态对初始条件的灵敏依赖性,混沌反映其内在的随机性。混沌理论是指描述具有混沌行为的非线性动力学系统的基本理论、概念、方法,它把动力学系统的复杂行为理解为其自身与其在同外界进行物质、能量和信息交换过程中内在的有结构的行为,而不是外来的和偶然的行为,混沌状态是1种定态。混沌动力学系统的定态包括:静止、平稳量、周期性、准同 期性和混沌解。

    六、 模型的建立与求解

    1.对问题一的模型的建立与求解

    Hopfield网络是单层对称全反馈网络,根据激活函数选取的不同,可分为离散型和连续性两种,根据对于问题一的分析和思路,我们采用Hopfield网络模型对问题已进行求解。

    由题可知,神经元信息的传递需要对神经元进行刺激,而这就是信息的输入,这部分是由树突完成的,当然对于不同的神经元而言输入信息的种类不同。这可以分为两大类:

    一、如运动神经元的输入是神经元的脉冲;

    二、如感觉神经元的输入是为随着时间变化的2倍的正弦函数值。

    信息输入的形式是以局部电流的形式,但由于每1个生物神经元的始段与任意1个神经元的突触距离是不同的,所以要考虑在总和之前乘以不同的权值。而在始段的电位类似于感觉神经元的性质,只是此处的输入可以视作为电流在始段处加权后电流的总和。

    而决定信息的输出结果则是由各突触在始段的电位大小与此神经元的阈值大小的关系决定。神经元的输出只取1和0这两个值,所以,也称离散Hopfield神经网络。在离散HopfieId网络中,所采用的神经元是二值神经元;故而,所输出的离散值1和0分别表示神经元处于激活和抑制状态。

    首先考虑由3个神经元组成的离散Hopfield神经网络,其结构如图3所示。

    图3

    在图中,第0层仅仅是作为网络的输人,它不是实际神经元,所以无计算功能;而第一层是实际神经元,故而执行对输人信息和权系数乘积求累加和,并由非线性函数f处理后产生输出信息。f是1个简单的阈值函效,如果神经元的输出信息大于阈值θ,那么,神经元的输出就取值为1;小于阈值θ,则神经元的输出就取值为0。

    由于我们要建立的网络模型是完全互联的网络,此模型显然满足Hopfield模型,故我们可以建立Hopfield模型。

    根据Hopfield模型可知信息的传递由输入、联结权、网络输入以及输出构成。 由此建模型如下:

    建hopfield离散模型如图4所示。

    图4

    Hopfield神经网络模型由单层全互联的神经元ei(i?1,2,...,n)组成。神经元没有自

    w?wji连接,即:wii=0;神经元与神经元之间的连接是对称的,即ij

    ?0

    故各神经元之间的权向量:W???w12

    ??w13w120w23w13?w23??。 0??

    xxx对于输入:该模型中神经元实际上是一线性阈值单元。图中1,2,3为该自适应线性

    元在t时刻的外部输入,向量表示为X?(x1,x2,x3)T,则有网络输入Y?XTW,其中:

    yk??wikoin

    i?1i?k。

    当用Hopfield网络作相联存储器时,假设有m个样本向量X1、X2、X3、?、Xm

    要存入Hopfield神经网络中,则W以及第i个神经元与第j个神经元之间相连的权值wij为:

    W?X1TX1?X2TX2?...?XmTXm

    ?mss??xixj,i?jwij??s?1?0,i?j?

    即当Wij在i=j时等于0,则说明1个神经元的输出并不会反馈到它自己的输入;这时,离教的HopfieId网络称为无自反馈网络。

    当Wij在i=j时不等于0,则说明—个神经元的输出会反馈到它自己的输入;这时,离散的Hopfield网络称为有自反馈的网络。

    对于输出:

    则有二值输出如下:

    ?1,y??输出ok(t?1)??(yk??)??k,且X(t?1)??(WX(t)??); 0,y???k

    针对感觉神经元(连续型信息输入)而言:连续Hopfield网络的拓朴结构和离散Hopfield网络的结构相同。这种拓朴结构和生物的神经系统中大量存在的神经反馈回路是相一致的。在连续Hopfield网络中,和离散Hopfield网络一样,其稳定条件也要求Wij=Wji。

    连续Hopfield网络和离散Hopfield网络不同的地方在于其输入不是脉冲函数,而是S函数。取ui(t)?2sin(?t??) 且 g(u)=1/(1+e-u) 。

    Hopfield网络在时间上是连续的.所以,网络中各神经元是处于同步方式工作的。考虑对于1个神经细胞,即神经元j,其内部膜电位状态用uj表示.细胞膜输入电容为

    细胞膜的传递电阻为Rj,输出电压为vj,外部输入电流用Ij表示,则连续HopfieldCj,

    网络可用图5所示的电路表示。

    图5

    同离散型一样其输出:

    ?1,y??ok(t?1)??(yk??)??k

    ?0,yk??,

    但其动力学方程为:

    ui(t)?dui(t)3

    C?wv(t)??Ij?iji?jdtRj i?1??v(t)?g(u(t))j?1,2,3ij?i

    其中:vi(t)为输出电位, ui(t)为输入电位。由此可用一般式表示得:

    3dxi(t)?aixi(t)??Tijgj(xj(t))?ci,t?0,i=1,2,3。 dtj?1

    评价此模型的重要标量的为能量函数,其表示如下:

    nh1hh E????wijoioj??xjoj???joj2i?1j?1j?1j?1

    其中: wijoioj:网络的一致性测度;

    xjoj:神经元的输入和输出的一致性测度;

    ?joj:神经元自身的稳定性的测度。

    对于离散型Hopfield神经网络的计算能量函数定义为:

    h1hh

    E????wijoioj??oioj2i?1j?1j?1

    其中,oi、oj是各个神经元的输出。

    对于连续型Hopfield神经网络的计算能量函数定义为:

    nn1nn1i

    ?1E(t)????wijVi(t)Vj(t)??Vi(t)Ii??f(v)dv?2i?1j?1i?1i?1Ri0 dE?0。 经分析得无论属于哪种模型,均有dt

    故当网络神经元的传递函数是S函数,并且网络权系数矩阵对称;则随时间的变化网络的能量会下降或不变;而且仅当输出电位随时间变化不变时.网络的能量才会不变。换而言之,在上述条件下的网络是能量不变或下降的。

    2.对问题二的模型的建立与求解

    如果神经网络中某一神经元与另一直接与其相连的神经元同时处于兴奋状态,那么这两个神经元间的连接强度应该加强。相关学习法是根据连接间的激活水平改变权值的,相关学习法也称Hebb学习规则,学习规则是修正神经元之间连接强度或加权系数的算法,使获得知识结构适用周围环境的变换。

    (1)无监督Hebb学习规则:

    Hebb学习是1类相关学习,它的基本思想是:如果有两个神经元同时兴奋,则它们之间的连接强度的增强与它们的激励的乘积成正比。用yi表示单元i的激活值(输出),yj 表示单元j的激活值,wij表示单元j到单元i的连接加权系数,则Hebb学习规则可表示如下:

    ?w(k)???yi(k)yj(k) ij V(t)

    神经元网络模型 91_神经元模型

    式中η为学习速率。

    (2)有监督δ学习规则或Widow-Hoff学习规则:

    在Hebb学习规则中引入教师信号,将上式中的yi换成网络期望目标输出di 与实际输出yi之差,即为有监督δ学习规则

    ?w(k)???[di(k)?yi(k)]?yj(k)?????yj(k) ij

    ??di(k)?yi(k)

    上式表明,两神经元之间的连接强度的变化量与教师信号di(k)和网络实际输出yi之差成正比。

    (3)有监督Hebb学习规则

    将无监督Hebb学习规则和有监督学习规则两者结合起来,组成有监督Hebb学习规则,即:

    ?wij(k)???[di(k)?yi(k)]?yi(k)?yj(k)

    这种学习规则使神经元通过关联搜索对未知的外界作出反应,即在教师信号di(k)-yi(k)的指导下,对环境信息进行相关学习和自组织,使相应的输出增强或消弱。

    针对于反馈型神经网络主要采用Hebb学习规则,一般情况下计算的收敛速度很快。反馈网络也有类似于前馈网络的应用,并且在联想记忆和优化计算方面的应用更显特点。对第2个问题,我们觉得主要是由Hopfield网络的动力学特性和稳定收敛性决定的,该系统总能收敛于若干稳定的吸引子,并且收敛速度很快,这些吸引子的个数正好决定了存储容量,并对新的输入起到了联想记忆的功能。

    我们具体编写了1个程序来仿真研究了Hopfield网络的联想记忆功能,仿真程序清单(见附录一)及对相关过程和结果的研究报告如下:

    本程序实现了存储容量为2的联想记忆。首先我们利用newhop函数建立网络并学习取得了权重和阈值,然后输入一些向量进行测试。在程序中分别进行了四次测试。测试一是直接用原始平衡点(及存储点)进行测试,将目标向量作为输入,结果输出为目标向量(两个存储点);测试二是输入1个随机向量,看其最终回到平衡点(及联想到存储点)的轨迹。在这个仿真中,我们设定了仿真步骤为20步,最终发现,经过20步仿真后,对于两个平衡点,当输入的随机点接近哪个平衡点时,它就回到那个平衡点;测试三输入了多个随机点(我们选取了2五个)进行测试,结果发现,它们在20步仿真后都分别回到了两个平衡点,同样是离哪个平衡点近就回到哪个平衡点。测试四中我们取了五个特殊点作为输入,这五个点均分布在两个平衡点的中垂线上,结果它们均回不到平衡点了,而是回到了两个新点。但研究表明,并不是又产生了两个新的平衡点,因为当输入点在中垂线上稍有一点波动时,它们就能回到原平衡点。这也给我们提出了1个值得注意的问题:在测试网络时输入要避免正好处在两平衡点的中垂线上。程序运行结果图示如下:

    仿真程序运行结果图

    程序运行结果一:

    图6

    程序运行结果二:

    图7

    程序运行结果三:

    图8

    程序运行结果四:

    图9

    3.对问题三的模型的建立与求解

    我们通过不同权向量和阈值的实验,建立三维空间网格,分析该系统的稳定性,以及不同的初值对该系统产生的影响。

    % 考虑三个神经元的hopfield网络,每个神经元有1个阀值和1个权重,定义存储在网络中的目标平衡点中为矩阵T的两个三阶矩阵。

    %指定存储在网络中的目标平衡点

    T = [+1 +1;-1 +1; -1 -1];

    axis([-1 1 -1 1 -1 1]);

    set(gca,'box','on');

    axis manual;

    hold on;

    plot3(T(1,:),T(2,:),T(3,:),'r*');

    title('Hopfield神经网络状态空间');

    xlabel('a(1)');

    ylabel('a(2)');

    zlabel('a(3)');

    view([37.5 30]);

    %建立网络,并得到权重和阈值

    net=newhop(T);

    W=net.LW{1,1};

    b=net.b{1,1};

    %使用1个随机点仿真网络,并绘出其到达稳定点的轨迹

    a = {rands(3,1)};

    [y,Pf,Af] = sim(net,{1 10},{},a);

    figure;

    axis([-1 1 -1 1 -1 1]);

    set(gca,'box','on');

    axis manual;

    hold on;

    plot3(T(1,:),T(2,:),T(3,:),'r*');

    record=[cell2mat(a) cell2mat(y)];

    start=cell2mat(a);

    plot3(start(1,1),start(2,1),start(3,1),'bx',record(1,:),record(2,:),record(3,:));

    view([37.5 30]);

    title('Hopfield神经网络状态空间');

    xlabel('a(1)');

    ylabel('a(2)');

    zlabel('a(3)');

    %用多个随机点仿真网络,并绘出相应的轨迹

    figure;

    axis([-1 1 -1 1 -1 1]);

    set(gca,'box','on');

    axis manual;

    hold on;

    view([37.5 30]);

    plot3(T(1,:),T(2,:),T(3,:),'r*');

    color = 'rgbmy';

    for i=1:25

    a = {rands(3,1)};

    [y,Pf,Af] = sim(net,{1 10},{},a);

    record=[cell2mat(a) cell2mat(y)];

    start=cell2mat(a);

    plot3(start(1,1),start(2,1),start(3,1),'kx',record(1,:),record(2,:),record(3,:),color(rem(i,5)+1))

    drawnow

    end

    title('Hopfield神经网络状态空间');

    xlabel('a(1)');

    ylabel('a(2)');

    zlabel('a(3)');

    运行结果如下:

    仿真25次

    神经元网络模型 91_神经元模型

    仿真250次

    七、模型的评价与推广

    1.模型的优点:

    (1)具有自学习功能。例如实现图像识别时,只在先把许多不同的图像样板和对应的应识别的结果输入人工神经网络,网络就会通过自学习功能,慢慢学会识别类似的图像。自学习功能对于预测有特别重要的意义。预期未来的人工神经网络计算机将为人类提供经济预测、市场预测、效益预测,其应用前途是很远大的。

    (2)具有联想存储功能。用人工神经网络的反馈网络即可实现这种联想。

    (3)具有高速寻找优化解的能力。寻找1个复杂问题的优化解,往往需要很大的计算量,利用1个针对某问题而设计的反馈型人工神经网络,发挥计算机的高速运算能力,可能很快找到优化解。

    (4)本文建立的模型与实际紧密联系,从而使模型更贴近实际,通用性强。

    2.模型的缺点:

    (1)本文对于神经网络模型没有过多考虑时滞对其动力学行为的影响;

    (2)本文欠缺充分考虑现实中神经元的分类、具体结构等各个方面,运用人工神经网络模型时将条简化简化。

    3.模型的与推广

    神经网络模型可以应用到许多领域,如:

    自动控制领域:主要有系统建模和辨识,参数整定,极点配置,内模控制,优化设计,预测控制,最优控制,滤波与预测容错控制等。

    处理组合优化问题:成功解决了旅行商问题,另外还有最大匹配问题,装箱问题和作业调度问题。

    模式识别:手写字符,汽车牌照,指纹和声音识别,还可用于目标的自动识别,目标跟踪,机器人传感器图像识别及地震信号的鉴别。

    图像处理:对图像进行边缘监测,图像分割,图像压缩和图像恢复。

    机器人控制:对机器人轨道控制,操作机器人眼手系统,用于机械手的故障诊断及排除,智能自适应移动机器人的导航,视觉系统。

    医疗:在乳房癌细胞分析,移植次数优化,医院费用节流,医院质量改进等方面均有应用。

    参考文献

    [1]焦李成, 神经网络系统理论[M]西安:西安电子科技大学出版社,1990.1-50.

    [2]沈清,胡德文,时春7 神经网络应用技术[I]7 北京:国防科技大学出版社,1993.

    [3]孟祥武.基于遗忘进化规划的Hopfield网学习算法[J].软件学报,1998,9(2).

    [4]Simon Haykin著,叶世伟,史忠植 译,神经网络原理,北京:机械工业出版社,2004.

    [5]田大新,刘衍珩,李宾,吴静.基于Hebb规则的分布神经网络学习算法[J].计算机学 报,2007.8,8(30).

    [6]吕建成,章毅.神经网络的动力学行为研究与发展趋势[J].中国计算机学会通讯,2008,4(3):7O一73.

    附 录

    附录一:

    Hopfield网络运用仿真程序清单

    axis([-1.1 1.1 -1.1 1.1]);

    title('Hopfield神经网络状态空间');

    xlabel('a(1)');

    ylabel('a(2)');

    %用newhop函数建立网络,并得到权重和阈值

    net=newhop(T);

    W=net.LW{1,1}%读取权重

    b=net.b{1,1}%读取阈值

    %测试一>使用原始平衡点T仿真网络

    [Y,Pf,Af]=sim(net,2,[],T);%使用sim函数,并将目标向量T作为输入

    Y

    %测试二>使用1个随机点仿真网络,并绘出其到达稳定点的轨迹

    a={rands(2,1)};%产生1个随机向量

    [y,Pf,Af]=sim(net,{1 20},{},a);%输入a并对网络作20步仿真

    figure;

    plot(T(1,:),T(2,:),'r*');

    axis([-1.1 1.1 -1.1 1.1]);

    title('Hopfield神经网络状态空间');

    xlabel('a(1)');

    ylabel('a(2)');

    record=[cell2mat(a) cell2mat(y)];

    start=cell2mat(a);

    hold on

    plot(start(1,1),start(2,1),'bx',record(1,:),record(2,:));

    %测试三>用多个随机点仿真网络,并绘出相应的轨迹

    figure;

    color='rgbmy';

    axis([-1.1 1.1 -1.1 1.1]);

    title('Hopfield神经网络状态空间');

    xlabel('a(1)');

    ylabel('a(2)');

    hold on

    for i=1:25 %输入2五个随机点仿真网络

    a={rands(2,1)};

    [y,Pf,Af]=sim(net,{1 20},{},a);

    record=[cell2mat(a) cell2mat(y)];

    start=cell2mat(a);

    plot(start(1,1),start(2,1),'kx',record(1,:),record(2,:),color(rem(i,5)+1)); drawnow

    end;

    %仿真结果是:输入点离哪个平衡点近就回到哪个平衡点

    %测试四>给网络指定特殊初始权重进行仿真,得到相应的轨迹

    figure;

    plot(T(1,:),T(2,:),'r*');

    axis([-1.1 1.1 -1.1 1.1]);

    title('Hopfield神经网络状态空间');

    xlabel('a(1)');

    ylabel('a(2)');

    hold on

    plot(0,0,'ko');

    P=[-1.0 -0.5 0.0 0.5 1.0;-1.0 -0.5 0.0 0.5 1.0];

    color='rgbmy';

    for i=1:5

    a={P(:,i)};%依次输入对角线上的五个点

    [y,Pf,Af]=sim(net,{1 50},{},a);

    record=[cell2mat(a) cell2mat(y)];

    start=cell2mat(a);

    plot(start(1,1),start(2,1),'kx',record(1,:),record(2,:),color(rem(i,5)+1)); drawnow

    end %当输入点正好在两平衡点的中垂线上时,结果回不到平衡点,这值得注意

    本文标题:神经网络模型-python实现单隐层神经网络基本模型
    本文地址: http://www.61k.com/1085269.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1