什么是神经网络算法入门共识算法?

我们在设计机器学习系统时,特别希望能够建立类似人脑的一种机制。神经网络就是其中一种。但是考虑到实际情况,一般的神经网络(BP网络)不需要设计的那么复杂,不需要包含反馈和递归。
人工智能的一大重要应用,是分类问题。本文通过分类的例子,来介绍神经网络。
1.最简单的线性分类
一个最简单的分类,是在平面上画一条直线,左边为类0,右边为类1,直线表示为\(z=ax+by+c\)
这是一个分类器,输入(x,y),那么,要求的参数有三个:a,b,c。另外注意c的作用,如果没有c,这条直线一定会过原点。
因此,我们可以设计一个简单的神经网络,包含两层,输入层有三个节点,代表x,y,1,三条线分别代表a,b,cg(z)对传入的值x进行判别,并输出结果。
\[z=θ_0+θ_1X_1+θ_2X_2\]
但是,由于z的值可能为[\(-\infty,+\infty\)],为了方便处理,需要将其压缩到一个合理的范围,还需sigmoid函数:
\[a(z)=\frac{1}{1-e^{-z}}\]
这样的激励函数,能够将刚才的区间,压缩到\([0,1]\)。
至于如何训练,会在之后的章节中讲解。
2.多层级神经网络
刚才展示了最简单的二分类,如果有四个分类,那一条线就无法满足要求了。想象两条直线,就会将平面划分为四个区域,一个三角区域相当于两个子平面求交集。
因此直觉告诉我们,如果有多个神经元,那么这样的问题能表现为问题的“逻辑与”操作。将第一节中介绍的神经网络的输出,再做一个判断层,即多层网络。
但是,如何实现逻辑与呢?用下面的图一目了然:
仔细看下,这相当于创建一条线,除非\(x_1\)和\(x_2\)都等于1,否则\(h_\theta(x)&0\)。
进一步地,如果我们能够对区域求并集,那么总可以对不同的子区域求并。而实现并操作和与操作是类似的:
此处就能看到sigmoid函数的作用了,如果没有它对数值的放缩,并和与的操作就无法实现了。
输出还能作为下一级的输入,从而增加了一个隐层,产生了单隐层神经网络,再复杂一些,如果网络层数特别多,则叫做深度学习网络,简称深度学习。
之前针对一个线性不可分的区域,需要将其变换到更高维度的空间去处理。但如果用神经网络,你总可以通过n条直线,将整个区间围起来。只要直线数量够多,总能绘制出任意复杂的区域。每一个子区域都是凸域:
简直不能更酷!下面这张图总结了不同类型的神经网络具备的功能:
数学家证明了,双隐层神经网络能够解决任意复杂的分类问题。但我们的问题到此为止了吗?不见得!
这里还有几个问题:
异或如何实现?异或肯定是不能通过一条直线区分的,因此单层网络无法实现异或,但两层(包含一个隐层)就可以了。
过拟合问题:过多的隐层节点,可能会将训练集里的点全部围进去,这样系统就没有扩展性了。如何防止过拟合?
如何训练:如何计算出合理的神经网络参数?(隐层节点数)
3.如何训练神经网络
如果一个平面,有6个点,分成三类。如何设计呢?
一种最狂暴的方法,是对每一个点都用四条线围起来,之后,再对六个区域两两取并集。形成下面这张超复杂的图:
解释一下为什么要有这么多个节点:
第一层:x,y再加bias,三个
第二层:每个点需要四条线围起来,加上bias,总共4*6+1=25个
第三层:一个节点处于该类的条件是在四条线的中间(交集),因此每四个点汇成一个点,24/4+1=7个
第四层:三分类问题,需要对每两个区域求并集,因此需要6/2+1=4个
但这样的解法,使用了3+25+7+4=39个节点,需要111个参数。这样的系统非常复杂,对未知节点几乎没有任何扩展性。
仔细思考这个问题, 我们能够通过更少的节点和层数,来简化这个问题嘛?只要三条直线就可以!节点数量大大减少。不仅训练效率更高,而且可扩展能力很强。对更复杂的例子,我们又不是神仙,怎么知道设计几个隐层和多少个节点呢?
所谓超参数,就是模型之外的参数,在这个例子中,就是隐层的数量和节点的数量。通常来说,线性分类器(回归)只需要两层即可,对于一般的分类问题,三层足够。
一个三层的神经网络,输入和输出节点的数量已经确定,那如何确定中间层(隐层)的节点数量呢?一般有几个经验:
隐层节点数量一定要小于N-1(N为样本数)
训练样本数应当是连接权(输入到第一隐层的权值数目+第一隐层到第二隐层的权值数目+...第N隐层到输出层的权值数目,不就是边的数量么)的2-10倍(也有讲5-10倍的),另外,最好将样本进行分组,对模型训练多次,也比一次性全部送入训练强很多。
节点数量尽可能少,简单的网络泛化能力往往更强
确定隐层节点的下限和上限,依次遍历,找到收敛速度较快,且性能较高的节点数
如何表示一个神经网络?网络有m层,每层的节点分别为\(node_0,node_1...node_m\),节点最多的层,有m个节点,那么我们可以将其表达为一个矩阵W,规模为\(m*n\),内部有些值是没有定义的。
4.训练算法
如果输入和输出是线性关系(或者是正相关),那么想象我们在调节一个参数时,当输出过大,那就把输入调小一些,反之调大一些,最后当输出和我们想要的非常接近时,训练结束。这个就好比,在平面上,如果一个点被分配到了错误的输出,就应该对直线平移和扭转,减少该直线到这个点的距离,从而实现重新分区。
进一步地,如果向量的多个分量互相独立,那么方法也和上面的类似\(x_1=&y_1,x_2=&y_2\),分别调节\(x_1\)和\(x_2\)的参数,最终让结果接近,训练结束。
而一个感知器结构可表示如下:
反思上面的过程,我们实际上是在衡量误差,根据误差来修改权重。
线性不可分
如果输入和输出的关系比较复杂,如二次函数\(y=x^2\),那当超过x=0的位置之后,反而成了递增了,此时一个线性的判断函数就不起作用了。因此,上面的方法,不能推广到所有的前馈网络中。
怎么办?那就只能使用梯度(LMS)法了。
梯度法,是对于样本集\(X_1,X_2..X_n\),找到一个\(W^*\),使得\(f(W^* \dot X_i) X_i\)与输出\(Y_i\)尽可能接近,其中\(f\)是激励函数。误差表示为:
\[e= \frac{1}{2}\sum_{i=1}^{n}{(Y_i-Y_i^*)}^{2}\]
为了能够调节误差e,使之尽可能小,则需要求其导数,发现其下降的方向:
\[grad_w e= \frac{\partial e}{\partial W} = \sum_{k=1}^{n}\frac{\partial e_k}{\partial W}\]
\[e_k=\frac{1}{2} {(Y_k-Y^-_k)}^2\]
对偏导进行求解:
每次迭代的计算公式为:
其几何意义就是,误差的偏导,等于在\(X_k\)位置上的值,乘以误差,再乘以激励函数的偏导。
所以,每次的权重矩阵\(W\)的修改,应当通过求误差的偏导(梯度)来实现。比之前的直接通过误差来调整,具备更好的适应性。
但是,这样的梯度法,对于实际学习来说,效率还是太慢,我们需要更快的收敛方法。
BP算法就是所谓的反向传播算法,它将误差进行反向传播,从而获取更高的学习效率。这很像烽火台,如果前线战败了,那么消息就通过烽火台传递回指挥部,指挥部去反思问题,最终改变策略。
但这带来一个问题,中间层的误差怎么计算?我们能简单地将权重和残差的乘积,返回给上一层节点(这种想法真暴力,从左到右和从右到左是一样的)。
这相当于三次传播:
-第一步:从前向后传播FP
-第二步:得到值z,误差为y,将误差反向传播,获得每个节点的偏差$\sigma$
-第三步:再次正向传播,通过上一步的$\sigma$,再乘以步长,修改每一个神经元突触的权重。
下面一张图展示了完整的BP算法的过程,我看了不下20遍:
更有趣的是,sigmoid求导之后,特别像高斯(正态)分布,而且sigmoid求导非常容易。
这样的一篇文章真是够长了,原本还想再介绍一个神经网络的Python实现,可是考虑到篇幅的限制,最终作罢。在下一期继续介绍如何实现BP神经网络和RNN(递归神经网络)。
阅读(...) 评论()
$(function(){ $("input[name=article_support]").click(function(){ $("textarea[class=comment_textarea]").val("文章不错,支持一下!"); ; }); $("input[name=article_pass]").click(function(){ $("textarea[class=comment_textarea]").val("飘过~~"); ; }); </script神经网络算法_百度百科
清除历史记录关闭
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
神经网络算法
逻辑性的思维是指根据逻辑规则进行的过程;它先将信息化成概念,并用符号表示,然后,根据符号运算按串行模式进行逻辑推理;这一过程可以写成串行的指令,让计算机执行。然而,直观性的思维是将分布式存储的信息综合起来,结果是忽然间产生的想法或解决问题的办法。这种思维方式的根本之点在于以下两点:1.信息是通过神经元上的兴奋模式分布储在网络上;2.信息处理是通过神经元之间同时相互作用的动态过程来完成的。
神经网络算法神经网络
思维学普遍认为,人类大脑的思维分为抽象(逻辑)思维、形象(直观)思维和灵感(顿悟)思维三种基本方式。
就是模拟人思维的第二种方式。这是一个系统,其特色在于信息的分布式存储和并行协同处理。虽然单个神经元的结构极其简单,功能有限,但大量神经元构成的网络系统所能实现的行为却是极其丰富多彩的。
神经网络的研究内容相当广泛,反映了多学科交叉技术领域的特点。主要的研究工作集中在以下几个方面:
(1)生物原型研究。从生理学、心理学、解剖学、、病理学等生物科学方面研究神经细胞、神经网络、神经系统的生物原型结构及其功能机理。
(2)建立。根据生物原型的研究,建立神经元、神经网络的。其中包括、知识模型、物理化学模型、数学模型等。
(3)与算法研究。在研究的基础上构作具体的,以实现计算机模拟或准备制作硬件,包括算法的研究。这方面的工作也称为技术模型研究。
(4)应用系统。在与算法研究的基础上,利用组成实际的应用系统,例如,完成某种信号处理或的功能、构造专家系统、制成机器人等等。
纵观当代新兴科学技术的发展历史,人类在征服宇宙空间、基本粒子,生命起源等科学技术领域的进程中历经了崎岖不平的道路。我们也会看到,探索人脑功能和神经网络的研究将伴随着重重困难的克服而日新月异。
神经网络算法人工神经网络
人工神经网络(Artificial Neural Networks,ANN)系统是 20 世纪 40 年代后出现的。它是由众多的神经元可调的连接权值连接而成,具有大规模并行处理、分布式信息存储、良好的自组织自学习能力等特点。BP(Back Propagation)算法又称为误差 反向传播算法,是人工神经网络中的一种监督式的学习算法。BP 神经网络算法在理论上可以逼近任意函数,基本的结构由非线性变化单元组成,具有很强的非线性映射能力。而且网络的中间层数、各层的处理单元数及网络的学习系数等参数可根据具体情况设定,灵活性很大,在优化、信号处理与模式识别、智能控制、故障诊断等许 多领域都有着广泛的应用前景。
神经网络算法工作原理
人工神经元的研究起源于脑神经元学说。19世纪末,在生物、生理学领域,Waldeger等人创建了神经元学说。人们认识到复杂的神经系统是由数目繁多的神经元组合而成。大脑皮层包括有100亿个以上的神经元,每立方毫米约有数万个,它们互相联结形成神经网络,通过感觉器官和神经接受来自身体内外的各种信息,传递至内,经过对信息的分析和综合,再通过运动神经发出控制信息,以此来实现机体与内外环境的联系,协调全身的各种机能活动。
神经元也和其他类型的细胞一样,包括有细胞膜、细胞质和。但是神经细胞的形态比较特殊,具有许多突起,因此又分为细胞体、轴突和树突三部分。细胞体内有,突起的作用是传递信息。树突是作为引入输入信号的突起,而轴突是作为输出端的突起,它只有一个。
树突是细胞体的延伸部分,它由细胞体发出后逐渐变细,全长各部位都可与其他神经元的末梢相互联系,形成所谓“突触”。在突触处两神经元并未连通,它只是发生信息传递功能的结合部,联系界面之间间隙约为(15~50)×10米。突触可分为与抑制性两种类型,它相应于神经元之间耦合的极性。每个神经元的突触数目正常,最高可达10个。各神经元之间的连接强度和极性有所不同,并且都可调整、基于这一特性,人脑具有存储信息的功能。利用大量神经元相互联接组成可显示出人的大脑的某些特征。
是由大量的简单基本元件——神经元相互联接而成的自适应非线性。每个神经元的结构和功能比较简单,但大量神经元组合产生的系统行为却非常复杂。
反映了人脑功能的若干基本特性,但并非的逼真描述,只是某种模仿、简化和抽象。
与数字计算机比较,在构成原理和功能特点等方面更加接近人脑,它不是按给定的程序一步一步地执行运算,而是能够自身适应环境、总结规律、完成某种运算、识别或过程控制。
首先要以一定的学习准则进行学习,然后才能工作。现以对于写“A”、“B”两个字母的识别为例进行说明,规定当“A”输入网络时,应该输出“1”,而当输入为“B”时,输出为“0”。
所以的准则应该是:如果网络作出错误的的判决,则通过网络的学习,应使得网络减少下次犯同样错误的可能性。首先,给网络的各连接权值赋予(0,1)内的随机值,将“A”所对应的图象模式输入给网络,网络将输入模式加权求和、与门限比较、再进行非线性运算,得到网络的输出。在此情况下,网络输出为“1”和“0”的各为50%,也就是说是完全随机的。这时如果输出为“1”(结果正确),则使连接权值增大,以便使网络再次遇到“A”模式输入时,仍然能作出正确的判断。
如果输出为“0”(即结果错误),则把网络连接朝着减小综合输入加权值的方向调整,其目的在于使网络下次再遇到“A”模式输入时,减小犯同样错误的可能性。如此操作调整,当给网络轮番输入若干个手写字母“A”、“B”后,经过网络按以上学习方法进行若干次学习后,网络判断的正确率将大大提高。这说明网络对这两个模式的学习已经获得了成功,它已将这两个模式分布地记忆在网络的各个连接权值上。当网络再次遇到其中任何一个模式时,能够作出迅速、准确的判断和识别。一般说来,网络中所含的神经元个数越多,则它能记忆、识别的模式也就越多。
神经网络算法特点
(1)人类大脑有很强的自适应与自组织特性,后天的学习与训练可以开发许多各具特色的活动功能。如盲人的听觉和触觉非常灵敏;聋哑人善于运用手势;训练有素的可以表现出非凡的运动技巧等等。
普通计算机的功能取决于程序中给出的知识和能力。显然,对于智能活动要通过总结编制程序将十分困难。
也具有初步的自适应与自组织能力。在学习或训练过程中改变突触权重值,以适应周围环境的要求。同一网络因学习方式及内容不同可具有不同的功能。是一个具有学习能力的系统,可以发展知识,以致超过设计者原有的知识水平。通常,它的学习训练方式可分为两种,一种是有监督或称有导师的学习,这时利用给定的样本标准进行分类或模仿;另一种是或称无为导师学习,这时,只规定学习方式或某些规则,则具体的学习内容随系统所处环境 (即输入信号情况)而异,系统可以自动发现环境特征和规律性,具有更近似人脑的功能。
指对没有训练过的样本,有很好的预测能力和控制能力。特别是,当存在一些有噪声的样本,网络具备很好的预测能力。
(3)非线性映射能力
当对系统对于设计人员来说,很透彻或者很清楚时,则一般利用,偏微分方程等数学工具建立精确的数学模型,但当对系统很复杂,或者系统未知,系统信息量很少时,建立精确的数学模型很困难时,神经网络的非线性映射能力则表现出优势,因为它不需要对系统进行透彻的了解,但是同时能达到输入与输出的映射关系,这就大大简化设计的难度。
(4)高度并行性
并行性具有一定的争议性。承认具有并行性理由:神经网络是根据人的大脑而抽象出来的数学模型,由于人可以同时做一些事,所以从功能的模拟角度上看,神经网络也应具备很强的并行性。
多少年以来,人们从医学、生物学、生理学、哲学、、、认知学、组织协同学等各个角度企图认识并解答上述问题。在寻找上述问题答案的研究过程中,这些年来逐渐形成了一个新兴的多学科交叉技术领域,称之为“神经网络”。神经网络的研究涉及众多学科领域,这些领域互相结合、相互渗透并相互推动。不同领域的科学家又从各自学科的兴趣与特色出发,提出不同的问题,从不同的角度进行研究。
下面将与通用的计算机工作特点来对比一下:
若从速度的角度出发,人脑神经元之间传递信息的速度要远低于计算机,前者为毫秒量级,而后者的频率往往可达几百兆赫。但是,由于人脑是一个大规模并行与串行组合处理系统,因而,在许多问题上可以作出快速判断、决策和处理,其速度则远高于串行结构的普通计算机。的基本结构模仿人脑,具有并行处理特征,可以大大提高工作速度。
人脑存贮信息的特点为利用突触效能的变化来调整存贮内容,也即信息存贮在神经元之间连接强度的分布上,存贮区与计算机区合为一体。虽然人脑每日有大量神经细胞死亡 (平均每小时约一千个),但不影响大脑的正常思维活动。
普通计算机是具有相互独立的存贮器和运算器,知识存贮与互不相关,只有通过人编出的程序使之沟通,这种沟通不能超越程序编制者的预想。元器件的局部损坏及程序中的微小错误都可能引起严重的失常。
神经网络算法应用及发展
心理学家和认知科学家研究神经网络的目的在于探索人脑加工、储存和搜索信息的机制,弄清人脑功能的机理,建立人类认知过程的微结构理论。
生物学、医学、脑科学专家试图通过神经网络的研究推动脑科学向定量、精确和理论化体系发展,同时也寄希望于临床医学的新突破;信息处理和计算机科学家研究这一问题的目的在于寻求新的途径以解决不能解决或解决起来有极大困难的大量问题,构造更加逼近人脑功能的新一代计算机。
早期的研究工作应追溯至上世纪40年代。下面以时间顺序,以著名的人物或某一方面突出的研究成果为线索,简要介绍的发展历史。
1943年,心理学家W·Mcculloch和数理逻辑学家W·Pitts在分析、总结神经元基本特性的基础上首先提出神经元的数学模型。此模型沿用至今,并且直接影响着这一领域研究的进展。因而,他们两人可称为研究的先驱。
1945年领导的设计小组试制成功存储程序式电子计算机,标志着电子计算机时代的开始。1948年,他在研究工作中比较了人脑结构与存储程序式计算机的根本区别,提出了以简单神经元构成的再生自动机网络结构。但是,由于指令存储式计算机技术的发展非常迅速,迫使他放弃了神经网络研究的新途径,继续投身于指令存储式计算机技术的研究,并在此领域作出了巨大贡献。虽然,的名字是与普通计算机联系在一起的,但他也是研究的先驱之一。
50年代末,F·Rosenblatt设计制作了“感知机”,它是一种多层的神经网络。这项工作首次把的研究从理论探讨付诸工程实践。当时,世界上许多实验室仿效制作感知机,分别应用于文字识别、声音识别、声纳信号识别以及学习记忆问题的研究。然而,这次的研究高潮未能持续很久,许多人陆续放弃了这方面的研究工作,这是因为当时数字计算机的发展处于全盛时期,许多人误以为数字计算机可以解决人工智能、、等方面的一切问题,使感知机的工作得不到重视;其次,当时的电子技术工艺水平比较落后,主要的元件是电子管或晶体管,利用它们制作的神经网络体积庞大,价格昂贵,要制作在规模上与真实的神经网络相似是完全不可能的;另外,在1968年一本名为《感知机》的著作中指出线性感知机功能是有限的,它不能解决如异感这样的基本问题,而且多层网络还不能找到有效的计算方法,这些论点促使大批研究人员对于人工神经网络的前景失去信心。60年代末期,的研究进入了低潮。
另外,在60年代初期,Widrow提出了自适应网络,这是一种连续取值的线性求和阈值网络。后来,在此基础上发展了非线性多层自适应网络。当时,这些工作虽未标出神经网络的名称,而实际上就是一种人工。
随着人们对感知机兴趣的衰退,神经网络的研究沉寂了相当长的时间。80年代初期,模拟与数字混合的制作技术提高到新的水平,完全付诸实用化,此外,数字计算机的发展在若干应用领域遇到困难。这一背景预示,向寻求出路的时机已经成熟。的物理学家Hopfield于1982年和1984年在美国科学院院刊上发表了两篇关于研究的论文,引起了巨大的反响。人们重新认识到神经网络的威力以及付诸应用的现实性。随即,一大批学者和研究人员围绕着 Hopfield提出的方法展开了进一步的工作,形成了80年代中期以来的研究热潮。
1985年,Ackley、Hinton和Sejnowski将应用到神经网络训练中,提出了Boltzmann机,该算法具有逃离极值的优点,但是训练时间需要很长。
1986年,Rumelhart、Hinton和Williams提出了多层前馈神经网络的学习算法,即BP算法。它从证明的角度推导算法的正确性,是学习算法有理论依据。从学习算法角度上看,是一个很大的进步。
1988年,Broomhead和Lowe第一次提出了径向基网络:RBF网络。
总体来说,神经网络经历了从高潮到低谷,再到高潮的阶段,充满曲折的过程。
本词条认证专家为
副理事长兼秘书长
中国通信学会
中国通信学会
原武汉邮电科学研究院
中国联通网络技术研究院
工业和信息化部电信研究院互联网中心
副院长兼总工程师
中国移动设计院
首席架构师业务总工程师
中兴通讯股份有限公司
百度公司发展研究中心
中国通信学会科普中国百科科学词条评审专家委员会
清除历史记录关闭25421 条评论分享收藏感谢收起赞同 195 条评论分享收藏感谢收起神经网络 - 简书
引言机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归、逻辑回归、Softmax回归、神经网络和SVM等等,主要学习资料来自Standford Andrew Ng老师在Coursera的教程以及UFLDL Tutorial,同时也参考了大量网上的相关资料(在后面列出)。本文主要记录我在学习神经网络过程中的心得笔记,共分为三个部分:;;Neural network - Code:神经网络的代码实现。在本文中,我们将神经网络看作是一个分类算法,其输出是样本属于某类别的概率值 P(y==k|x;Θ),暂时不去考虑深度学习中用于特征学习的复杂卷积神经网络。因此,本文将按照一个分类模型的维度去安排文章结构,包括模型结构及数学描述、模型训练等,记录我在学习神经网络过程中的心得和思考。本文是我在学习神经网络模型训练(Learning)时的笔记,主要以Andrew Ng老师在Coursera课程中以及UFLDL Tutorial中的关于神经网络模型训练的资料为主,文章小节安排如下:1)神经网络的背景2)代价函数(cost function)3)优化(Optimization)/模型训练/参数学习4)梯度检查(Gradient Checking)5)随机初始化(Random Initialization)6)Putting It Together7)参考资料8)结语在阅读这部分笔记之前,请先阅读这一篇笔记,以了解神经网络的模型描述,激活函数,前向传播等基础知识。这里重复一遍神经网络的灵感来源,实验证明大脑利用同一个学习算法实现了听觉、视觉等等所有的功能,这也是神经网络算法美好的愿景。我认为一个好的算法,是具备自我学习、成长和进步能力的,可以不断的适应问题和环境变化。同样,一个好的人,一个好的公司,一个好的国家,也应该是具备这样的自我成长性,所谓好的事物是长出来的。记得听过一个讲座,主讲人是国外大学的一位教授,他说:Deeplearning就是入侵其他领域的强有力武器,我们课题组是做图像的,半年前还一点都不懂 Natural language processing,但半年后我们就在该领域的顶级会议发了paper,因为我们只需要关心Raw data和深度网络模型,至于分词等技术我们并没有什么工作。这位教授说的话也许有一定夸张成分,但也说明了神经网络是极具潜力的机器学习模型,可以用一套技术解决多个领域的问题,是不是非常类似于前述的人脑工作机制?并且现在大家也可以看到,深度神经网络目前基本上一统江湖,正在逐项碾压其他机器学习技术。这是好事,也是坏事。神经网络模型的代价函数取决于输出层是什么,也就是说不同的应用场景对应不同的代价函数,那么进一步的求导计算也就会有差异。例如,在Autoencoder网络中,输出层等于输入层,此时采用均方误差(MSE)函数作为代价函数;在分类问题中,如果输出层采用Softmax回归进行分类,则可以直接采用Softmax回归的代价函数作为整个神经网络的代价函数。如果输出层采用Logistic regression进行分类,那么输出层其实就是K个Logistic regression,整个网络的代价函数就是这K个Logistic regression模型代价函数的加和。1)输出层采用Logistic Regression其实只要理解Cost function反映的就是预测值与实际值的误差,那么完全可以根据问题自定义一个Cost function表达式。在Coursera Machine Learning课程中将神经网络看作是输出层采用逻辑回归的分类器,因此其代价函数如下:
对比Logistic regression:
分析可以看出,此时,神经网络里使用的代价函数是逻辑回归里中代价函数的一般化形式(generalization),也就是神经网络中不再是仅有一个逻辑回归输出单元,而是K个(就好像K个逻辑回归模型并行计算,也就是逻辑回归中的多分类问题)。2)输出层采用Softmax Regression
其中,θ 指的是Softmax Regression的参数矩阵。3)Autoencoder(输出层=输入层)自编码神经网络是一种无监督学习算法,学习一个 Hw,b (x) ≈ x 的函数。换句话说,它尝试逼近一个恒等函数,从而使得输出接近于输入。此时,自编码神经网络采用均方误差(MSE)作为代价函数,其代价函数形式如下:
实际上,Autoencoder并不是用于分类,而是用于学习输入数据的压缩表示,可以发现输入数据中隐含着的一些特定结构。具体可以参考:讨论:1)代价函数的均值化问题这里均值化指的是代价函数是否除以样本数,以及代价函数中哪一项应该除以样本数的问题。首先对比Coursera ML课程中神经网络的代价函数公式:
细心的同学可以看到,这里正则化项是除以样本数 m 的,而我给出的代价函数是没有除以样本数的,如下:
对于正则项是否除以样本数这个问题,我作为初学者还没有看到确切深入的讨论,并且看到的大多数资料中是没有均值化的。根据实验,在不同的问题中,正则项是否均值化对优化过程的影响也不一样的,有时候可能没有影响,有时候就会致使梯度无法收敛,这一点大家可以在代码中实验一下。通过引入正则项是否均值化问题,我想讨论的其实是:代价函数是否除以样本数(均值化)?哪一项应该除以样本数?这里我根据学习和实验中粗浅的经验总结如下:其实代价函数是否除以样本数(均值化),是整体均值化?还是部分均值化?这在很多算法模型中都存在这个问题,比如在Sparse Autoencoder中,代价函数由误差项,权重衰减项(正则化项),稀疏惩罚项构成,如下:Cost function = Error term + Sparsity penalty term + Weight decay term那么,在具体实现时,到底应该如何均值化呢?基本原则是这样,如果某个term与整个训练样本集有关,那么就应该均值化(除以样本数),否则就不均值化。例如Sparse Autoencoder的代价函数,误差项是所有训练样本误差的总和,稀疏惩罚项是对所有样本的稀疏性惩罚,因此这两项应该均值化,而权重衰减项是针对参数的,所以不应该均值化。2)什么时候采用逻辑回归作为分类?什么时候采用Softmax回归呢?这里引用UFLDL的讲解:Softmax Regression vs. k Binary Classifiers如果你在开发一个音乐分类的应用,需要对k种类型的音乐进行识别,那么是选择使用 softmax 分类器呢,还是使用 logistic 回归算法建立 k 个独立的二元分类器呢?这一选择取决于你的类别之间是否互斥,例如,如果你有四个类别的音乐,分别为:古典音乐、乡村音乐、摇滚乐和爵士乐,那么你可以假设每个训练样本只会被打上一个标签(即:一首歌只能属于这四种音乐类型的其中一种),此时你应该使用类别数 k = 4 的softmax回归。(如果在你的数据集中,有的歌曲不属于以上四类的其中任何一类,那么你可以添加一个“其他类”,并将类别数 k 设为5。)现在我们来看一个计算视觉领域的例子,你的任务是将图像分到三个不同类别中。(i) 假设这三个类别分别是:室内场景、户外城区场景、户外荒野场景。你会使用sofmax回归还是 3个logistic 回归分类器呢? (ii) 现在假设这三个类别分别是室内场景、黑白图片、包含人物的图片,你又会选择 softmax 回归还是多个 logistic 回归分类器呢?在第一个例子中,三个类别是互斥的,因此更适于选择softmax回归分类器 。而在第二个例子中,建立三个独立的logistic回归分类器更加合适。3)是否惩罚偏置单元对应的参数?当设置偏置单元=1,并在参数矩阵 Θ 中设置第 0 列对应为偏置单元的参数时,就存在一个问题:是否惩罚偏置单元对应的参数?引用Andrew Ng老师对该问题的说明:不应该把这些项加入到正规化项里去,因为我们并不想正规化这些项,但这只是一个合理的规定,即使我们真的把他们加进去了,也就是 i 从0 加到s(l),这个式子(代价函数)依然成立,并且不会有大的差异。这个“不把偏差项正规化”的规定可能只是更常见一些。一般来说是不惩罚偏置项的,因为没什么意义。补充:1)均方误差均方误差(MeanSquaredError,MSE)是衡量“平均误差”的一种较方便的方法,可以评价数据的变化程度。对于等精度测量来说,还有一种更好的表示误差的方法,就是标准误差。标准误差定义为各测量值误差的平方和的平均值的平方根。数理统计中均方误差是指参数估计值与参数真值之差平方的期望值,记为MSE。MSE是衡量“平均误差”的一种较方便的方法,MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。与此相对应的,还有均方根误差RMSE、平均绝对百分误差等等。参考:2)标准误差1,标准误差一般用来判定该组测量数据的可靠性,在数学上它的值等于测量值误差的平方和的平均值的平方根。2,标准误差在正态分布中表现出正态分布曲线的陡峭程度,标准误差越小,曲线越陡峭,反之,曲线越平坦。3,标准误差在实际的计算中使用的是标准误差估算值。4,标准误差不是实际误差。参考:前述已经给出了神经网络的代价函数,下面就可以通过最小化(minimize)该代价函数来求解神经网络模型的最优参数。神经网络的优化依然可以采用梯度下降法(Gradient descent),而梯度下降法需要两方面的计算:1)代价函数2)梯度即,
代价函数的计算公式前面已经给出,
J(Θ) 的梯度如何计算就需要请出大名鼎鼎的反向传播算法(Backpropagation Algorithm)!重点:反向传播(Backpropagation)定义如下网络,输出层采用逻辑回归:
首先,我们引入符号 δ,解释如下:
代表了第 l 层的第 j 个节点的误差。那么,各层各节点的error计算如下:
可以看出,与激励值(activation)计算类似,误差的计算也是层层传递的,δ3的计算依赖于δ4,δ2的计算依赖于δ3。这样一种误差计算方式,就称之为反向传播(backpropagation)。以上面的网络模型为例,反向传播算法从后往前(或者说从右往左)计算,即从输出层开始计算,并反向逐层向前计算每一层的 δ 。反向传播法这个名字源于我们从输出层开始计算 δ 项,然后我们返回到上一层计算第 3 个隐藏层的 δ 项,接着我们再往前一步来计算 δ2。所以说我们是类似于把输出层的误差反向传播给了第3层,然后是再传到第2层,这就是反向传播的意思。通过反向传播计算的这些 δ 项,可以非常快速的计算出所有参数的偏导数项(J(Θ) 关于 所有θ的偏导数项)。让我们将反向传播与前向传播对比一下:
直观地看,这个 δ 项在某种程度上捕捉到了在神经节点上的激励值的误差。反过来理解,一个神经节点的残差也表明了该节点对最终输出值的残差产生了多少影响。因此可以说,反向传播算法就是在逐层计算每个神经节点的激励值误差。备注,上面只是一种直观的解释,那么 δ 项到底是什么?其实 δ 本质上是代价函数 J 对加权和 z 的求导结果。重点:反向传播的直观理解这里引用Coursera ML课程中的描述:
重点:关于 δ(L) 的计算这里重点讨论两个问题:1)为何上面所讲的网络最后一层的 δ 与其他层计算不一致?
其实是一致的,如前面所述,δ 本质上是代价函数 J 对加权和 z 的求导结果。这里 δ(4) 是 J 对 z(4) 的导数,δ(3) 是 J 对 z(3) 的导数,具体推导见后文。2)在阅读资料时,为何最后一层(输出层)的 δ 有各种计算方式?比如,
那么是什么原因导致了上面不同的公式形式呢?其实原因就在于所采用的代价函数和输出层激励函数的形式。不同形式的代价函数和输出层激励函数,会推导出不同的输出层误差计算公式!下面我们可以利用两种形式的代价函数进行偏导数计算,验证上述结论,如下:1)Cost function采用:
输出层激励函数(也可以称为预测函数)采用:
则 δ(L) 推导如下:
2)Cost function采用:
输出层激励函数(也可以称为预测函数)采用:
则 δ(L) 推导如下:
如果,输出层激励函数(也可以称为预测函数)采用:
则 δ(L) 推导如下:
综上可以看出,δ(L) 的形式与代价函数 J 和输出层激励函数 g 的形式直接相关。备注,Andrew Ng老师在课程中为了降低理解难度,并没有讲明上述的推演关系,而是给出一种直观的解释,即:δ(L) = 实际值 - 预测值。作为入门的话,这样理解也未尝不可。至此,完成 δ(L) 计算的推导和讨论,也解答了神经网络最后一层误差计算出现不同公式形式的原因,希望可以为大家提供一定参考。如果对于上述推导感兴趣,请参考:重点:梯度计算(Gradient Computation)在神经网络模型中,代价函数 J(Θ) 关于 参数 θ 的偏导数(partial derivative terms)/梯度计算如下:
向量化描述如下:
关于该计算公式的推导可以参考wiki ML中关于Neural Network: Learning一节()。Andrew Ng老师给出的用于计算梯度的Backpropagation Algorithm如下:Backpropagation Algorithm
写到这里想起来前阵子听讲座,主讲人的两句吐槽:1)入门神经网络只要学会计算梯度就行了,其他什么概念都不需要了解,比SVM简单多了,并且想现在很多Toolbox连梯度都帮你计算了,你还需要做什么?你只需要配置下网络结构就可以了,代码都不用写,越来越没有门槛了。2)算个梯度还搞出个什么反向传播(Backpropagation),说到底不就是链式法则(chain rule)么!现在人真会玩,换个名词就炒冷饭!关于利用反向传播算法计算梯度,可以重点参考:备注,也许有人会有疑问,反向传播到底是用来计算梯度的?还是仅仅用来逐层计算误差的??,为何这里所写的反向传播只计算了误差,而没有计算梯度??确实,在Coursera ML课程中,Andrew Ng老师的讲解一开始告诉你说,Backpropagation是用来反向逐层计算误差的。而后续的讲解,包括很多资料里所描述的BP算法又是是用来计算梯度的。这到底是咋回事呢?如前所述,反向传播仅仅是计算过程的一个直观上的称呼罢了,更重要的是其背后的神经网络求导思想,所以,无论说:反向传播是用来逐层计算(或称传递)误差的;又或者说:反向传播是用来计算梯度的。其实所说所指的都是如何对神经网络的参数进行快速求导这个事情。如果非要较真儿,也许可以这样理解前向传播、反向传播、梯度计算之间的关系:前向传播和反向传播是一种计算过程的直观描述,而梯度是基于前向传播得到的Activation和反向传播得到的Error进行计算的。为了更清晰更方便的记忆激励值、误差、前向传播、反向传播等概念,可以这样:前向传播计算 a,反向传播计算 δ,基于 a 和 δ 计算梯度。重点:梯度下降(Gradient Descent)得到代价函数和梯度,就可以利用梯度下降算法来求解最优参数,描述如下:
补充:1)梯度、偏导数、方向导数方向导数:函数上某一点在某一方向上的导数值,偏导数就是沿着坐标轴的方向导数;偏导数:一个多变量的函数的偏导数,就是它关于其中一个变量的导数而保持其他变量恒定(相对于全导数,在其中所有变量都允许变化),偏导数反映的是函数沿坐标轴正方向的变化率;梯度:梯度即是某一点最大的方向导数,沿梯度方向函数有最大的变化率(正向增加,逆向减少);参考:方向导数和梯度百度百科-梯度反向传播算法作为一个有很多细节的算法在实现的时候比较复杂,可能会遇到很多细小的错误。所以如果把BP算法和梯度下降法或者其他优化算法一起运行时,可能看起来运行正常,并且代价函数可能在每次梯度下降法迭代时都会减小,但是可能最后得到的计算结果误差较高,更要命的是很难判断这个错误结果是哪些小错误导致的。解决该问题的方法是:梯度检查 (Gradient Checking)梯度检查 (Gradient Checking)的思想就是通过数值近似(numerically approximately)的方式计算导数近似值,从而检查导数计算是否正确。虽然数值计算方法速度很慢,但实现起来很容易,并且易于理解,所以它可以用来验证例如BP算法等快速求导算法的正确性。如前所述,机器学习中大部分算法的核心就是代价值计算和梯度计算,因此,在实现神经网络或者其他比较复杂的模型时候,利用Gradient Checking可以检查算法是否正确实现。梯度检查 (Gradient Checking)的核心是导数的数值计算,公式如下:
多参数情况的公式如下:
梯度检查 (Gradient Checking)的实现,
其中,DVec:利用反向传播算法得到的导数,BP是一个比较有效率的计算导数的方法;gradApprox:利用数值近似得到的导数,数值计算法速度很慢;如果两者相等或者近似,最多几位小数的差距,那么就可以确信所实现的BP算法是正确的。当运行一个优化算法(例如梯度下降算法或者其他高级优化算法)时,需要给变量 θ 设置初始值。例如,在梯度下降法中,需要对 θ 进行初始化(通常为全0),然后使用梯度下降的方法不断最小化函数 J,最终代价函数 J 下降到最小。但要注意的是,将 θ 初始化为全 0 向量在逻辑回归时是可行的的,但在训练神经网络时是不可行的,这会使得神经网络无法学习出有价值的信息。以第一层参数矩阵(权重矩阵)为例,假定有K个隐藏单元,那么神经网络的参数矩阵 Θ1 实质上对应着特征的K个映射函数(映射关系),如果参数全为 0,那就意味着所有映射关系都是相同的,即所有的隐藏单元都在计算相同的激励值,那么这样一个具有很多隐藏单元的网络结构就是完全多余的表达,最终该网络只能学到一种特征。这种现象称为:对称权重(Symmetric ways)解决办法其实很简单,即:随机初始化(Random Initialization)描述如下:
所有权重相同的问题称为对称权重(Symmetric ways),随机初始化解决的就是如何打破这种对称性,需要做的就是对 θ 的每个值进行初始化,使其范围在 -? 到 +? 之间。? 的取值:
Θ 的初始化:
上面已经讲解了神经网络训练的各个部分,综合起来就可以得到一个最基础神经网络学习算法的实现过程。训练一个神经网络算法模型,第一件事就是设计网络结构,也就是搭建网络的大体框架(architecture),框架的意思是神经元之间的连接模式,包括,· 网络层数,主要是隐层数量;· 每一层的节点个数,主要是隐藏单元数量;这里引用课程中的一张PPT来作说明:
下面总结网络结构设计的几点基本原则:网络结构的选择规则:神经网络搭建时,可能会从上面PPT中所示的几种结构中选择,一个默认的规则是只使用单个隐藏层,即PPT中最左边的结构,或者如果使用不止一个隐藏层的话,同样也有一个默认规则就是每一个隐藏层通常都应有相同的隐藏单元数。通常来说,PPT中左边这个结构是较为合理的默认结构。输入层与输出层:对于一个用于分类的神经网络,输入层即特征,输出层即类别。Number of input units = dimension of features x(i)Number of output units = number of classes隐藏单元的选择规则:通常情况下隐藏单元越多越好,不过需要注意的是如果有大量隐藏单元,那么计算量一般会比较大。一般来说,每个隐藏层所包含的单元数量还应该和输入 x 的维度相匹配,也要和特征的数目匹配。可能隐藏单元的数目和输入特征的数量相同,或者是它的二倍或者三倍、四倍。一般来说,隐藏单元的数目取为稍大于输入特征数目都是可以接受的。完成上述理解,便可以得到神经网络的训练过程,如下。神经网络的训练过程:
下面附一张Andrew Ng老师在Coursera ML课程中的PPT,来给出神经网络训练过程的直观描述:(由于绘图所限,这里假定代价函数 J(Θ) 只有两个参数值)
说明:神经网络的代价函数J(θ)是一个非凸函数,因此理论上是只能够停留在局部最小值的位置。———————————————————————实际上,梯度下降算法和其他一些高级优化方法理论上都只能使神经网络的代价函数收敛于局部最小值,不过一般来讲这个问题并不是什么要紧的事,因为尽管不能保证这些优化算法一定会得到全局最优值,但通常来讲这些算法在最小化代价函数 J(θ) 的过程中还是表现得很不错的,通常能够得到一个很小的局部最小值,虽然这不一定是全局最优值。UFLDL TutorialCoursera - Machine learning( Andrew Ng)Coursera -ML:Neural Networks: RepresentationCoursera -ML:Neural Networks: Learning以上就是神经网络模型Learning的相关知识点和实现过程,其中重点讨论了神经网络的代价函数模型和参数学习中的Backpropagation算法,这也是我在学习NN时反复理解了好久的问题,希望可以为大家提供一些帮助,也欢迎交流讨论,谢谢!本文的文字、公式和图形都是笔者根据所学所看的资料经过思考后认真整理和撰写编制的,如有朋友转载,希望可以注明出处:[机器学习] Coursera ML笔记 - 神经网络(Learning)
奇迹属于永不放弃之人!!加油!
神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向–深度学习的基础。学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术。本文以一种简单的,循序的方式讲解神经网络。适合对神经网络了解不多的同学。本文对阅读没有一定的前提要求,但...
本文主要对人工神经网络基础进行了描述,主要包括人工神经网络的概念、发展、特点、结构、模型。本文是个科普文,来自网络资料的整理。一、
人工神经网络的概念人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基...
本文主要对人工神经网络基础进行了描述,主要包括人工神经网络的概念、发展、特点、结构、模型。本文是个科普文,来自网络资料的整理。一、
人工神经网络的概念人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基...
转载的他人的文章,适合神经网络刚开始学习的人:http://www.cnblogs.com/subconscious/p/5058741.html 神经网络浅讲:从神经元到深度学习 神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向--深度学习的基础。学习神经网络...
机器学习:机器学习研究的是计算机怎样模拟人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构使之不断改善自身。简单的说,就是计算机从数据中学习规律和模式,以应用在新数据上做预测的任务。 (一)深度学习概念 深度学习指的是训练神经网络,有时候规模很大。 linear...
dfssdfdsfdsfdsfdsfdsfdsf
下一章 第四章:酒不醉人人自醉 还没等她说完,我已经迈出了房门,在正堂四周望了望,果真不见老爹后,才坦然出了府。 今日时辰尚早,不知那人是否会在,不管了,先去吃点东西,喝杯茶再说。 我走上了醉月楼,果然是大酒楼,这么早就已经有很多人了...
做得好的:坚持早睡早起;每周三次跑步;坚持看书,每日陪乔一小时,每日坚持英文启蒙。 下周目标:英文启蒙持续按节奏推进;每周三次跑步;心理所课程1;制定断舍离规划。
一阵潇潇风起 起自昨夜西窗 风拉着弦自顾自的弹奏: 君问归期未有期 这月
那夜 幻化的季节 夏夜禅虫低鸣 细语的桌椅板凳 还信仰着一天被依偎 散发着余热 摇着扶手 望着熄灯后的夜 唏嘘
不语 From:
这世上有很多你无法搞清楚的问题不管女生有多瘦,她都会觉得自己很胖不管女生有多高只要在170以下她都会觉得自己矮 身高150的羡慕160的,155的羡慕165的,160的羡慕168的,165的羡慕170的。这个世界就是这么无情。真是天道好轮回,苍天绕过谁。 对于很多妹纸来说,...}

我要回帖

更多关于 神经网络算法原理 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信