- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Opencv249源码分析NeuralNetworks
Opencv2.4.9源码分析——Neural Networks
一、原理
神经网络(Neural Networks)是一种模仿生物神经系统的机器学习算法。该算法的提出最早可追述至上个世纪四十年代,这几乎与电子计算机的历史同步。但它的发展并非一帆风顺,也经历了初创阶段—黄金阶段—停滞阶段—复兴阶段,直到目前的高速发展阶段。年初由Google公司开发的神经网络围棋——AlphaGo击败世界围棋冠军李世石,使神经网络技术更是受到世人的注目,因为它的意义要远大于1997年IBM的超级计算机——深蓝击败国际象棋大师卡斯帕罗夫。
与生物神经系统相似,人工神经网络也是由若干个神经元构成。如图1所示,x1、x2、…xn为该神经元的输入,y为该神经元的输出。显然,不同的输入对神经元的作用是不同的,因此用权值w1、w2、…wn来表示这种影响程度的不同。神经元内部包括两个部分,第一个部分是对输入的加权求和,第二个部分是对求和的结果进行“激活”,得到输出。加权求和的公式为:
对于MLP,我们可以用Backprop(backward propagation oferrors,误差的反向传播,简称BP)算法实现它的建模,该算法具有结构简单、易于实现等特点。
Backprop算法是一种监督的机器学习算法,输入层的神经元数量一般为样本的特征属性的数量,输出层的神经元的数量一般为样本的所有的可能目标值的数量,如果是分类问题,则为样本的分类数量,因此,与其他机器学习算法不同,在MLP中,样本对应的响应值应该是一个相量,相量的维数与输出层的神经元的数量一致。而隐含层的层数以及各层神经元的数量则根据实际情况进行选取。Backprop算法的核心思想是:通过前向通路(箭头的方向)得到误差,再把该误差反向传播实现权值w的修正。
MLP的误差可以用平方误差函数来进行表示。设某个样本x对应的目标值为t,样本x有n个特征属性,即x={x1, x2,…,xn},目标值t有J种可能的值,即t={t1, t2,…,tJ},因此该MLP的输入层(即第一层)一共有n个神经元,输出层(即第L层,设MLP一共有L层)一共有J个神经元。设样本x经过前向通路得到的最终输出为y={y1L,y2L,…,yJL },输出y的下标表示y所在层的神经元索引,上标表示y所在的层,则该样本的平方误差为:
之所以式10中的平方误差函数要除以2,是为了便于后面的求导运算,因为它并不影响误差的变化趋势。
显然,MLP算法的目标就是使E最小。由图1可知,式10中的yjL是由上一层(即第L-1层)所有神经元的输出经加权激活后得到,而第L-1层神经元的输出又由第L-2层的所有神经元的输出经加权激活后得到,因此可以说误差E是全体权值w的函数,通过改变权值w,就可达到使误差E最小的目的。
Backprop算法是一种迭代的方法,也就是我们不必通过一次改变权值w来达到使E最小的目的,我们只需渐进的减小E即可。w和E的关系可以形象的比作山坡,山的高度是误差,平面的维度空间是权值,山坡越陡(误差大),平面维度空间的变化(权值的变化)就越大,权值的变化与误差有关,而当权值改变时,误差就要重新计算。这样两者相互作用,即不断迭代,直到误差小于某个值(即收敛)为止。该方法就是我们常用的梯度下降法。
误差E对权值w的导数为w的变化率,即:
由式36就得到了基于wkhl的误差导数,再把该结果带入式11或式12中就得到了该权值的变化率,最后由式13就得到了更新后的权值。在反向传播的过程中,所有权值都经过了上述计算后,就得了更新后的所有权值。用新得到的权值计算下一个样本,以此类推,直至所有样本都经过MLP计算为止,此时就完成了所有样本的一次迭代过程。在每次迭代完成后,我们可以比较两次迭代的误差大小,如果两个误差之差满足我们的设计要求,则可以终止迭代,否则继续下次迭代。该方法也称作在线方法,因为样本是一个一个的进入MLP,每完成一个样本的计算就更新一次权值。为了增加鲁棒性,在每次迭代之前,可以把全体样本打乱顺序,这样每次迭代的过程中提取样本的顺序就会不相同。除了在线方法,还有一种方法称为批量方法,即把所有样本的误差累加在一起,用该累加误差计算误差的导数,进而得到权值的变化率。
在完成上述计算的过程之前,首先要解决的问题就是初始化权值,即第一次权值如何选择。一般的做法是随机选择很小的值作为初始权值,但这样做收敛较慢。比较好的方法是采用Nguyen-Widrow算法初始化权值。它的基本思想是每个神经元都有属于自己的一个区间范围,通过初始化权值就可以限制它的区间位置,当改变权值时,该神经元也只是在自己的区间范围内变化,因此该方法可以大大提高收敛速度。
Nguyen-Widrow算法初
文档评论(0)